实验3
实验任务1:
1 #include <stdio.h> 2 char score_to_grade(int score); 3 4 int main() { 5 int score; 6 char grade; 7 while(scanf("%d", &score) != EOF) { 8 grade = score_to_grade(score); 9 printf("分数: %d, 等级: %c\n\n", score, grade); 10 } 11 return 0; 12 } 13 char score_to_grade(int score) { 14 char ans; 15 switch(score/10) { 16 case 10: 17 case 9: ans = 'A'; break; 18 case 8: ans = 'B'; break; 19 case 7: ans = 'C'; break; 20 case 6: ans = 'D'; break; 21 default: ans = 'E'; 22 } 23 return ans; 24 }

问题1:输入分数返回等级。形参为整形,返回值为字符型。
问题2:双引号为字符串,应用单引号指字符型;末尾没有break,仍会继续。
实验任务2:
1 #include<stdio.h> 2 3 int sum_digits(int n); 4 5 int main(){ 6 int n; 7 int ans; 8 9 while(printf("Enter n:"),scanf("%d",&n)!=EOF){ 10 ans=sum_digits(n); 11 printf("n=%d,ans=%d\n\n",n,ans); 12 } 13 return 0; 14 } 15 16 int sum_digits(int n) { 17 int ans = 0; 18 while(n != 0) { 19 ans += n % 10; 20 n /= 10; 21 } 22 return ans; 23 }

问题1:输入一个数,计算它的所有位数上的数之和
问题2:可以,原代码为迭代,修改后为递归
实验任务3:
1 #include <stdio.h> 2 3 int power(int x, int n); 4 int main() { 5 int x, n; 6 int ans; 7 while(printf("Enter x and n: "), scanf("%d%d", &x, &n) != EOF) { 8 ans = power(x, n); 9 printf("n = %d, ans = %d\n\n", n, ans); 10 } 11 return 0; 12 } 13 int power(int x, int n) { 14 int t; 15 if(n == 0) 16 return 1; 17 else if(n % 2) 18 return x * power(x, n-1); 19 else { 20 t = power(x, n/2); 21 return t*t; 22 } 23 }

问题1:计算x的n次方
问题2:是
实验任务4:
1 #include<stdio.h> 2 3 int is_prime(int n); 4 5 int main (){ 6 int k,t; 7 int i=0; 8 printf ("100以内的孪生素数:\n"); 9 for(k=2;k<98;++k){ 10 if(is_prime(k)&&is_prime(k+2)){ 11 ++i; 12 printf("%d %d\n",k,k+2); 13 } 14 } 15 printf("100以内的孪生素数共有%d个",i); 16 17 return 0; 18 } 19 20 int is_prime(int n){ 21 int j; 22 for(j=2;j<n;++j){ 23 if(n%j==0){ 24 return 0; 25 break; 26 } 27 if(j==n) 28 return 1; 29 } 30 31 }

实验任务5:
5.1:
迭代
1 #include <stdio.h> 2 int func(int n, int m); // 函数声明 3 4 int main() { 5 int n, m; 6 int ans; 7 8 while(scanf("%d%d", &n, &m) != EOF) { 9 ans = func(n, m); // 函数调用 10 printf("n = %d, m = %d, ans = %d\n\n", n, m, ans); 11 } 12 13 return 0; 14 } 15 16 int func(int n,int m){ 17 if(n<m) 18 return 0; 19 int i,k; 20 int t=1,j=1,y=1; 21 double anw; 22 for(i=1;i<=n;++i) 23 t=t*i; 24 for(i=1;i<=m;++i) 25 j=j*i; 26 k=n-m; 27 for(i=1;i<=k;++i) 28 y=y*i; 29 return anw=t/(j*y); 30 }

5.2:
递归
1 #include <stdio.h> 2 int func(int n, int m); // 函数声明 3 4 int main() { 5 int n, m; 6 int ans; 7 8 while(scanf("%d%d", &n, &m) != EOF) { 9 ans = func(n, m); // 函数调用 10 printf("n = %d, m = %d, ans = %d\n\n", n, m, ans); 11 } 12 13 return 0; 14 } 15 16 int func(int n,int m){ 17 if(n<m) 18 return 0; 19 if(m==1) 20 return n; 21 if(m==0) 22 return 1; 23 24 return func(n-1,m)+func(n-1,m-1); 25 }

实验任务6:
1 #include <stdio.h> 2 3 int gcd(int x,int y,int z); 4 5 int main() { 6 int a, b, c; 7 int ans; 8 9 while(scanf("%d%d%d", &a, &b, &c) != EOF) { 10 ans = gcd(a, b, c); // 函数调用 11 printf("最大公约数: %d\n\n", ans); 12 } 13 14 return 0; 15 } 16 17 int gcd(int x,int y,int z){ 18 int i; 19 if(x<y&&x<z) 20 i=x; 21 if(y<x&&y<z) 22 i=y; 23 if(z<y&&z<x) 24 i=z; 25 for(;i>0;i--) 26 if(!(x%i)&&!(y%i)&&!(z%i)){ 27 return i; 28 break; 29 } 30 }

实验任务7:
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 // 函数声明 5 // 待补足 6 // xxx 7 void print_charman(int x); 8 9 int main() { 10 int n; 11 12 printf("Enter n: "); 13 scanf("%d", &n); 14 print_charman(n); // 函数调用 15 16 return 0; 17 } 18 19 // 函数print_charman定义 20 // 待补足 21 // xxx 22 void print_charman(int x){ 23 int i,j,k; 24 25 for(j=x;j>0;j--){ 26 for(k=0;k<x-j;k++) 27 printf("\t"); 28 for(i=0;i<j*2-1;i++){ 29 printf(" O \t"); 30 } 31 printf("\n"); 32 for(k=0;k<x-j;k++) 33 printf("\t"); 34 for(i=0;i<j*2-1;i++){ 35 printf("<H>\t"); 36 } 37 printf("\n"); 38 for(k=0;k<x-j;k++) 39 printf("\t"); 40 for(i=0;i<j*2-1;i++){ 41 printf("I I\t"); 42 } 43 printf("\n"); 44 } 45 }


浙公网安备 33010602011771号