实验3
任务1
源代码:
试验任务1图片
问题1:根据输入的分数,反馈等级,整数类型,字符类型
问题2:1.在 3 4 5 6行后加break;
2.3 4 5 6行的双引号改为单引号
任务2
源代码
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 }return 0; 10 } 11 int sum_digits(int n){ 12 int ans=0; 13 while(n!=0){ 14 ans+=n%10; 15 n/=10; 16 }return ans; 17 }
图片
问题1:计算数字n各位上数字的和
问题2:能
迭代法:通过循环不断对n取余并保留,再计算n/10得到新的n;直到n为个位数;再将取余的数相加
递归法:若n<10,则直接返回,若n>=10则将n/10返还给函数并加上n取余;
实验任务3
源代码
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 }return 0; 10 } 11 int power(int x,int n){ 12 int t; 13 if(n==0) 14 return 1; 15 else if(n%2) 16 return x*power(x,n-1); 17 else{ 18 t=power(x,n/2); 19 return t*t; 20 } 21 }
图片
问题1:计算x的n次方
问题2:

实验任务4:
源代码
1 #include<stdio.h> 2 #include<math.h> 3 int is_prime(int n); 4 int main(){ 5 int sum=0; 6 printf("100以内的孪生素数:\n"); 7 for(int i=1;i<=98;i++){ 8 9 if(is_prime(i)==1&&is_prime(i+2)==1){ 10 printf("%d %d\n",i,i+2); 11 sum++; 12 } 13 }printf("100以内的孪生素数共有%d个",sum); 14 return 0; 15 } 16 int is_prime(int n){ 17 if(n==1) 18 return 0; 19 if(n==2) 20 return 1; 21 else if(n%2==0) 22 return 0; 23 else{ 24 int a=sqrt(n); 25 for(int m=3;m<=a;m+=2){ 26 if(n%m==0) 27 return 0; 28 } return 1; 29 } 30 }
图片
实验任务5
源代码
1 #include<stdio.h> 2 int func(int n, int m); 3 int main() { 4 int n, m; 5 int ans; 6 while (scanf_s("%d%d", &n, &m) !=EOF) { 7 ans = func(n, m); 8 printf("n=%d,m=%d,ans=%d\n\n", n, m, ans); 9 }return 0; 10 11 } 12 int func(int n, int m) { int a = n - m + 1; 13 int ans; 14 int fenzi = 1; int fenmu = 1 ; 15 while (n >=a) { 16 fenzi = fenzi * n; 17 n--; 18 19 } 20 while (m > 0) { 21 fenmu = fenmu * m; 22 m--; 23 24 } 25 ans = fenzi /fenmu; 26 return ans; 27 28 } 29
源代码
1 #include<stdio.h> 2 int func(int n, int m); 3 int main() { 4 int n, m; 5 int ans; 6 while (scanf_s("%d%d", &n, &m) != EOF) { 7 ans = func(n, m); 8 printf("n=%d,m=%d,ans=%d\n\n", n, m, ans); 9 }return 0; 10 } 11 int func(int n, int m) { 12 if (n < m) 13 return 0; 14 if (m == 0 || n == m) 15 return 1; 16 return func(n - 1, m) + func(n - 1, m - 1); 17 18 } 19 20
图片
实验任务6
源代码
1 #include<stdio.h> 2 int gcd(int a, int b, int c); 3 int main() { 4 int a, b, c; 5 int ans; 6 while (scanf_s("%d%d%d", &a, &b, &c) != EOF) { 7 ans = gcd(a, b, c); 8 printf("最大公约数:%d\n\n", ans); 9 }return 0; 10 } 11 int gcd(int a, int b, int c) { 12 int min; 13 if (c<a&&c<b) 14 min = c; 15 if (b < a && b < c) 16 min = b; 17 if (a < b && a < c) 18 min = a; 19 int ans = min; 20 while (ans >= 1) { 21 if (a % ans == 0 && b % ans == 0 && c % ans == 0) 22 return ans; 23 ans--; 24 } 25 return ans; 26 }
图片
实验任务7
源代码
1 #include<stdio.h> 2 #include<stdlib.h> 3 4 void print_charman(int m); 5 6 int main() { 7 int n; 8 9 printf("Enter n: "); 10 scanf_s("%d", &n); 11 print_charman(n); 12 13 return 0; 14 } 15 void print_charman(int m) { 16 17 for (int i = 0; i < m; i++) { 18 19 int a = 2 * m - 1 - 2 * i; 20 21 22 for (int h = 0; h < a; h++) { 23 24 printf(" O"); 25 printf("\t"); 26 }printf("\n"); 27 for (int n = 0; n < i; n++) 28 printf("\t"); 29 for (int h = 0; h < a; h++) { 30 31 printf("<H>"); 32 printf("\t"); 33 } printf("\n"); 34 for (int n = 0; n <i; n++) 35 printf("\t"); 36 for (int h = 0; h < a; h++) { 37 38 printf("I I"); 39 printf("\t"); 40 }printf("\n"); 41 for (int n = 0; n <= i; n++) 42 printf("\t"); 43 } 44 45 46 }
图片

浙公网安备 33010602011771号