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 | 1 |