#include<stdio.h> char score_to_grade(int score); int main() {int score;char grade;while(scanf("%d",&score)!=EOF){grade=score_to_grade(score);printf("分数:%d,等级:%c\n\n",score,grade);}return 0; } char score_to_grade(int score){char ans;switch(score/10){case 10:case 9: ans='A';break;case 8: ans='B';break;case 7: ans='C';break;case 6: ans='D';break;default:ans='E';}return ans; }

问题1:将分数转化为等第,形参类型int,返回值类型char
问题2:语法错误:char类型为字符常量,不是字符串;逻辑错误:缺少break,每个等第都会输出。
实验任务2
#include<stdio.h> int sum_digits(int n); int main() {int n;int ans;while(printf("Enter n:"),scanf("%d",&n)!=EOF){ans=sum_digits(n);printf("n=%d,ans=%d\n\n",n,ans);}return 0; } int sum_digits(int n){int ans=0;while(n!=0){ans+=n%10;n/=10;}return ans; }

问题1:计算输入数字的各位数字之和。
问题2:能实现。前者用迭代,这里用递归函数。
实验任务3
#include<stdio.h> int power(int x,int n); int main(){int x,n;int ans;while(printf("Enter x and n: "),scanf("%d%d",&x,&n)!=EOF){ans=power(x,n);printf("n=%d,ans=%d\n\n",n,ans);}return 0; } int power(int x,int n){int t;if(n==0)return 1;else if(n%2)return x*power(x,n-1);else{t=power(x,n/2);return t*t;} }

问题1:计算x的n次方。
问题2:是递归函数。
x 的0次方返回1。
若n为偶数,则返回x 的(n-1)次方。
若n为奇数,则n整除2,计算t,返回t*t,这样指数就变为偶数了。
实验任务4
#include<stdio.h> #include<math.h> int is_prime(int n); int main() {printf("100以内的孪生素数:\n");int cnt=0;for(int x=1;x<=100;x++){if(is_prime(x)&&is_prime(x+2)){printf("%d %d",x,x+2);printf("\n");cnt++;} }printf("100以内孪生素数共有%d个",cnt);return 0; } int is_prime(int n){if(n==2)return 1;if(n==1)return 0;if(n!=2&&n%2==0)return 0;for (int i=3;i<=sqrt(n);i+=2){if(n%i==0)return 0;}return 1; }

实验任务5
#include<stdio.h> int func(int n,int m); int main(){int n,m;int ans;while(scanf("%d%d",&n,&m)!=EOF){ans=func(n,m);printf("n=%d,m=%d,ans=%d\n\n",n,m,ans);}return 0; } int func(int n,int m){int ans;int s1=1,s2=1;for(int x=n-m+1;x<=n;x++)s1=s1*x;for(int y=1;y<=m;y++)s2=s2*y;ans=s1/s2;return ans; }
#include<stdio.h> int func(int n,int m); int main(){int n,m;int ans;while(scanf("%d%d",&n,&m)!=EOF){ans=func(n,m);printf("n=%d,m=%d,ans=%d\n\n",n,m,ans);}return 0; } int func(int n,int m){if(n<m)return 0;if(m==0)return 1;return func(n-1,m)+func(n-1,m-1);return func(n,m); }
5.1迭代

5.2递归

实验任务6
#include<stdio.h> int gcd(int a,int b,int c); int main() {int a,b,c;int ans;while(scanf("%d%d%d",&a,&b,&c)!=EOF){ans=gcd(a,b,c);printf("最大公约数:%d\n\n",ans);}return 0; } int gcd(int a,int b,int c){int ans;int min=a;if(b<min)min=b;if(c<min)min=c;for(int i=min;i>=1;i--){if(a%i==0&&b%i==0&&c%i==0){ans=i;break;} }return ans; }

实验任务7
#include<stdio.h> #include<stdlib.h> void print_charman(int n); int main() {int n;printf("Enter n: ");scanf("%d",&n);print_charman(n);return 0; } void print_charman(int n){for(int i = 0; i < n; i++){ for(int k=0;k<i;k++){printf("\t");}for(int j = 0;j<2*(n-i)-1; j++){ printf(" o \t"); } printf("\n");for(int k=0;k<i;k++){printf("\t");}for(int j = 0;j<2*(n-i)-1; j++){ printf("<H>\t"); } printf("\n"); for(int k=0;k<i;k++){printf("\t");}for(int j = 0;j<2*(n-i)-1; j++){ printf("I I\t");} printf("\n"); }system("pause");return print_charman(n); }

