实验三
实验任务一:
问题一:score to grade 的功能是将分数转化为1-10的数,并输出每个数对应的A-E的等级
问题二:改写后的问题1:A-E为字符型应该用单引号括起来,问题2: A-D语句后应该加上break语句,使代码找到运行结果后就跳出switch语句,若没有break语句则还会向下继续运行。
1 #include<stdio.h> 2 char score_to_grade(int score); 3 int main(){ 4 int score; 5 char grade; 6 while(scanf("%d",&score)!=EOF){ 7 grade=score_to_grade(score); 8 printf("分数: %d, 等级:%c\n\n", score, grade); 9 } 10 return 0; 11 } 12 char score_to_grade(int score) { 13 char ans; 14 switch(score/10){ 15 case 10: 16 case 9: ans='A';break; 17 case 8: ans='B';break; 18 case 7: ans='C';break; 19 case 6: ans='D';break; 20 default: ans='E'; 21 } 22 return ans; 23 }

实验任务二:
问题一:sum digits 的功能就是将所输入的数n的各位数加起来 例如n=2049 则ans=2+0+4+9=15
问题二:可以 这两种方法一个是迭代 一个是递归
第一种方法是利用while循环语句,将每位数利用余数和整除单独计算出来并相加
而第二个方法则是利用递归方法,将所输入的n整除并取余数,整除后的部分再次进入函数中进行运算,并将每次求得的余数相加得到结果。
1 #include<stdio.h> 2 int sum_digits(int n); 3 int main(){ 4 int n; 5 int ans; 6 while(printf("Enter n: "),scanf("%d",&n)!=EOF){ 7 ans= sum_digits(n); 8 printf("n=%d,ans=%d\n\n",n,ans); 9 } 10 return 0; 11 } 12 int sum_digits(int n){ 13 int ans=0; 14 while(n!=0){ 15 ans+=n%10; 16 n/=10; 17 } 18 return ans; 19 }
实验任务三:
问题一:power的功能是运算x的n次方
问题二:
1 #include<stdio.h> 2 int power(int x,int n); 3 int main(){ 4 int x,n; 5 int ans; 6 while(printf("Enter x and n: "),scanf("%d%d",&x,&n)!=EOF){ 7 ans= power(x,n); 8 printf("n=%d,ans=%d\n\n",n,ans); 9 } 10 return 0; 11 } 12 int power(int x,int n){ 13 int t; 14 if(n==0) 15 return 1; 16 else if(n%2) 17 return x*power(x,n-1); 18 else{ 19 t=power(x,n-2); 20 return t*t; 21 } 22 }

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

实验任务五:
迭代

1 #include <stdio.h> 2 int func(int n, int m); 3 int main() { 4 int n, m; 5 int ans; 6 while(scanf("%d%d", &n, &m) != EOF) { 7 ans = func(n, m); 8 printf("n = %d, m = %d, ans = %d\n\n", n, m, ans); 9 } 10 return 0; 11 } 12 13 int func(int n,int m){ 14 int c; 15 while(1){ 16 if(n<m) 17 return 0; 18 if(m==0) 19 return 1; 20 if(n==m) 21 return 1; 22 if(n>m){ 23 long long fenmu = 1; 24 long long fenzi = 1; 25 for(int i=1;i<=m;++i){ 26 fenmu*=i; 27 fenzi*=(n-m+i); 28 } 29 30 return (int (fenzi/fenmu)); 31 } 32 } 33 } 34
递归
1 #include <stdio.h> 2 int func(int n, int m); 3 int main() { 4 int n, m; 5 int ans; 6 while(scanf("%d%d", &n, &m) != EOF) { 7 ans = func(n, m); 8 printf("n = %d, m = %d, ans = %d\n\n", n, m, ans); 9 } 10 return 0; 11 } 12 13 int func(int n,int m){ 14 if(n<m) 15 return 0; 16 if(m==0) 17 return 1; 18 if(n==m) 19 return 1; 20 if(n>m) 21 return func(n-1,m)+func(n-1,m-1); 22 }

实验任务六:

1 #include <stdio.h> 2 3 int gcd(int a,int b,int c); 4 5 int main() { 6 int a, b, c; 7 int ans; 8 while(scanf("%d%d%d", &a, &b, &c) != EOF) { 9 ans = gcd(a, b, c); 10 printf("最大公约数: %d\n\n", ans); 11 } 12 return 0; 13 } 14 15 16 int gcd(int a,int b,int c){ 17 int i; 18 if(a<b<c||a<c<b) 19 i=a; 20 if(b<a<c||b<c<a) 21 i=b; 22 if(c<a<b||c<b<a) 23 i=c; 24 for(;i>=1;--i){ 25 if(a%i==0&&b%i==0&&c%i==0) 26 return i; 27 } 28 }
实验任务七:
1 #include<stdio.h> 2 void print_charman(int n); 3 int main() { 4 int n; 5 printf("Enter n:"); 6 scanf("%d", &n); 7 print_charman(n); 8 return 0; 9 } 10 void print_charman(int n){ 11 int i, j, k; 12 for (i = 1; i <= n; ++i) { 13 for (j = 0; j < i; j++) 14 printf("\t"); 15 for (k = 2 * n - 2 * i + 1; k >0; k--) { 16 printf(" \t O "); 17 18 }printf("\n"); 19 for (j = 0; j < i; j++) 20 printf("\t"); 21 for (k = 2 * n - 2 * i + 1; k > 0; k--) { 22 printf("\t<H>"); 23 24 } printf("\n"); 25 for (j = 0; j < i; j++) 26 printf("\t"); 27 for (k = 2 * n - 2 * i + 1; k > 0; k--) { 28 printf("\tI I"); 29 30 } 31 printf("\n"); 32 } 33 34 }

浙公网安备 33010602011771号