实验3
任务1
源代码
#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:将输入的成绩进行分类。形参类型是整型,返回值类型是字符型。
问题2:有问题,没有停止符号最后都会输出‘E',且输出字符应该使用单引号而不是双引号。
任务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 14 return 0; 15 } 16 17 18 int sum_digits(int n){ 19 int ans =0; 20 while(n!=0){ 21 ans+=n%10; 22 n/=10; 23 } 24 25 return ans; 26 }
问题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:函数power的作用是计算x的n次方的值。
问题2:函数power是递归函数。
实验4
源代码
#include<stdio.h>
#include<math.h>
int is_prime(int n);
int main()
{
int i,count=0;
printf("100以内的孪生素数:\n");
for(i=1;i<=98;++i)
{
if(is_prime(i)&&is_prime(i+2))
{
printf("%d %d\n",i,i+2);
count+=1;}
}
printf("100以内的孪生素数共有%d个",count);
}
int is_prime(int n)
{
int a;
if(n<=2)
return 0;
for(a=2;a<=sqrt(n);++a)
{
if(n%a==0)
return 0;
}
return 1;
}
任务5
源代码
1 #include<stdio.h> 2 #include<stdlib.h> 3 void hanoi(unsigned int n,char from,char temp,char to); 4 void moveplate(unsigned int n,char from,char to); 5 int count; 6 int main() 7 { 8 unsigned int n; 9 while(scanf("%u",&n)!=EOF){ 10 11 hanoi(n,'A','B','C'); 12 extern int count; 13 printf("一共移动了%d次\n",count); 14 count=0; 15 } 16 system("pause"); 17 return 0; 18 } 19 void hanoi(unsigned int n,char from,char temp,char to) 20 { 21 if(n==1) 22 moveplate(n,from,to); 23 else 24 { 25 hanoi(n-1,from,to,temp); 26 moveplate(n,from,to); 27 hanoi(n-1,temp,from,to); 28 29 } 30 } 31 void moveplate(unsigned int n,char from,char to) 32 { 33 printf("%u:%c-->%c\n",n,from,to); 34 extern int count; 35 count+=1; 36 }
任务6
源代码
迭代:
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 { 18 int i,t=1,q=1,ans; 19 for(i=n;i>=n-m+1;--i){ 20 t*=i; 21 } 22 for(i=m;i>=1;--i) 23 { 24 q*=i; 25 } 26 ans=t/q; 27 return ans; 28 }
递归:
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 int ans=1; 18 if(m==0||m==n){ 19 return 1; 20 } 21 else if(m>n) 22 { 23 return 0; 24 } 25 else 26 { 27 return ans=func(n-1,m)+func(n-1,m-1); 28 } 29 }
任务7
源代码
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 char print_charman(int n); 5 6 int main() { 7 int n; 8 9 printf("Enter n: "); 10 scanf("%d", &n); 11 print_charman(n); // 函数调用 12 13 return 0; 14 } 15 16 char print_charman(int n) 17 { 18 int p,m,t; 19 for(p=n;p>0;--p){ 20 for(t=0;t<n-p;++t) 21 { 22 printf("\t"); 23 } 24 for(m=2*p-1;m>0;--m) 25 { 26 printf(" O \t"); 27 28 } 29 printf("\n"); 30 for(t=0;t<n-p;++t) 31 { 32 printf("\t"); 33 } 34 for(m=2*p-1;m>0;--m) 35 { 36 printf("<H>\t"); 37 38 } 39 printf("\n"); 40 for(t=0;t<n-p;++t) 41 { 42 printf("\t"); 43 } 44 for(m=2*p-1;m>0;--m) 45 { 46 printf("I I\t"); 47 48 } 49 printf("\n"); 50 51 } 52 }