Before we go:
Hello大家好,好长时间没写程序了,不知道是不是手生了还是题目越来越难了,零分我真是越来越多了。
所以我将这些程序分享给大家
希望大家少走点弯路,也避免我以后忘记这些东西。
1.假设有40个学生被邀请来给餐厅的饮食和服务质量打分,分数划分为1~10这10个等级(1表示最低分,10表示最高分),编程统计并按如下格式输出餐饮服务质量调查结果。
Grade Count Histogram
1 5 *****
2 10 **********
3 7 *******
...
**输入格式要求:"%d" 提示信息:"Input the feedbacks of 40 students:\n" "input error!\n"
**输出格式要求:"Feedback\tCount\tHistogram\n" "%8d\t%5d\t"
程序运行示例如下:
Input the feedbacks of 40 students:
10 9 10 8 7 6 5 10 9 8
8 9 7 6 10 9 8 8 7 7
6 6 8 8 9 9 10 8 7 7
9 8 7 9 7 6 5 9 8 7
Feedback Count Histogram
1 0
2 0
3 0
4 0
5 2 **
6 5 *****
7 9 *********
8 10 **********
9 9 *********
10 5 *****
#include<stdio.h>
main(){
printf("Input the feedbacks of 40 students:\n");
int i,s[40]={0};
int ret;
for(i=0;i<40;i++){
ret =scanf("%d",&s[i]);
if(ret!=1||s[i]<1||s[i]>10)
{
i--;
printf("input error!\n");
}
}
printf("Feedback\tCount\tHistogram\n");
int a[10]={0},j;
for(i=0;i<40;i++){
for(j=0;j<10;j++)
{
if(s[i]==j+1)
a[j]++;
}
}
for(i=0;i<10;i++)
{
printf("%8d\t%5d\t",i+1,a[i]);
for(j=0;j<a[i];j++)
{
printf("*");
}
printf("\n");
}
}
2.如果一个正整数等于其各个数字的立方和,则该数称为阿姆斯特朗数(亦称为自恋性数)。如407=4^3+0^3+7^3就是一个阿姆斯特朗数。试编程求1000内的所有3位数的阿姆斯特朗数。
**输出格式要求:"There are following Armstrong number smaller than 1000:\n" " %d "
程序运行示例如下:
There are following Armstrong number smaller than 1000:
153 370 371 407
\\这道题比较简单,但是要注意不要使用pow函数,否则会有精度误差!
#include<stdio.h>
#include<stdio.h>
main()
{
printf("There are following Armstrong number smaller than 1000:\n");
int i,j,k,f;
int a[10]={0,1,2,3,4,5,6,7,8,9},b[10]={0,1,2,3,4,5,6,7,8,9},c[10]={0,1,2,3,4,5,6,7,8,9};
for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
{
for(k=0;k<10;k++)
{
if(a[i]*100+b[j]*10+c[k]==powl(i,3)+powl(j,3)+powl(k,3)&&a[i]*100+b[j]*10+c[k]>1)
printf(" %d ",a[i]*100+b[j]*10+c[k]);
}
}
}
}
3.输入一个以回车结束的字符串(少于10个字符),它由数字字符组成,将该字符串转换成整数后输出。
**输入提示信息:"Enter a string: "
**输出格式要求:"digit = %d\n"
程序运行示例如下:
Enter a string: 123
digit = 123
#include <stdio.h>
int main(void)
{
int i, n;
char s[10];
/* 输入字符串 */
printf("Enter a string: "); /* 输入提示 */
i = 0;
while ((s[i] = getchar( )) != '\n')
i++;
s[i] = '\0';
/* 将字符串转换为整数 */
n = 0;
for (i = 0; s[i] != '\0'; i++)
if (s[i] <= '9' && s[i] >= '0')
n = n * 10 + (s[i] - '0');
else /* 遇非数字字符结束转换 */
break;
printf("digit = %d\n", n);
return 0;
}
4.走台阶
楼梯有10阶台阶,上楼可以一步上1阶,也可以1步上2阶,编程计算10阶台阶总共有多少走法.
提示:可以递推计算,如1阶台阶总共一种走法,2阶台阶总共2走法,3阶台阶总共3种走法,直到计算出10阶台阶走法.
输入格式:无
输出格式:"Result=%d"
这类题一看就知道是与递归有关的问题,因此我们很容易用递归解决这道题
#include<stdio.h>
int f( int n )
{
if ( n == 1 )
{
return 1;
}
else if ( n == 2 )
{
return 2;
}
else
{
return f(n-1) + f(n-2);
}
}
int main()
{
int num = f( 10 );
printf("Result=%d",num);
return 0;
}
5.选择排序法。
用选择排序法将N(N为5)个数从小到大排序后输出。
**输入格式要求:"%d" 提示信息:"Enter No.%2d:"
**输出格式要求:"%d"
程序运行示例如下:
Enter No. 1:5
Enter No. 2:7
Enter No. 3:3
Enter No. 4:9
Enter No. 5:8
35789
解法1:冒泡排序法
main()
{
int s[N]={0},i,j,a;
for(i=0;i<N;i++)
{
printf("Enter No.%2d:",i+1);
scanf("%d",&s[i]);
}
for(j=0;j<N;j++)
{
for(i=0;i<N;i++)
{
if(s[i]>s[i+1])
{
a=s[i];
s[i]=s[i+1];
s[i+1]=a;
}
}
}
for(i=0;i<N;i++)
{
printf("%d",s[i]);
}
}
几何表示:
解法2:选择排序法
#include<stdio.h>
#define N 5
main()
{
int a[N]= {0},i,j,min,k;
for(i=0; i<N; i++)
{
printf("Enter No.%2d:",i+1);
scanf("%d",&a[i]);
}
for ( i = 0; i <N; i ++ )
{
k = i;
for ( j = i + 1; j < N; j ++)
{
if ( a[ k ] > a[ j ] )
k = j;
}
if(k!=i)
{
min = a[ i ];
a[ i ] = a[ k ];
a[ k ] = min;
}
}
for(i=0; i<N; i++)
{
printf("%d\n",a[i]);
}
}
几何表示:
| 十一月 | ||||||
|---|---|---|---|---|---|---|
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
| 26 | 27 | 28 | 29 | 30 | 31 | 1 |
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 | 1 | 2 | 3 | 4 | 5 | 6 |