实验3 C语言函数应用编程
实验一
源代码
1 #include <stdio.h> 2 3 char score_to_grade(int score); // 函数声明 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 // 函数定义 14 char score_to_grade(int score) { 15 char ans; 16 switch(score/10) { 17 case 10: 18 case 9: ans = 'A'; break; 19 case 8: ans = 'B'; break; 20 case 7: ans = 'C'; break; 21 case 6: ans = 'D'; break; 22 default: ans = 'E'; 23 } 24 return ans; 25 } 26

回答问题:
问题一:(1)score to grade函数的功能是将成绩转换成对应的等级,90~100分为等级A,80~89分为等级B,70~79分为等级C,60~69分为等级D,0~59分为等级E。
(2)形参类型:int
(3)返回值类型:char
问题二:修改后的代码缺少break语句,从case10到case6都没有break,程序就会从匹配的case开始,一直执行到default,导致最后ans给到e,不能输出正确的等级。
而且有符号使用错误,是’A‘而不是”A“。
实验二
源代码
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 // 函数定义 13 int sum_digits(int n) { 14 int ans = 0; 15 while(n != 0) { 16 ans += n % 10; 17 n /= 10; 18 } 19 return ans; 20 }

回答问题:
问题一:功能是计算输入数字的各位上的数字之和。
问题二:能实现
两种算法思维区别分析:(1)原题:从低位到高位,循环取余,整除,累加,直到数字变为0.
(2)改后:采用递归的方式,把数字拆分成高位数字和当前各位数字,直到只剩一位数。
实验三
源代码
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 11 return 0; 12 } 13 // 函数定义 14 int power(int x, int n) { 15 int t; 16 if(n == 0) 17 return 1; 18 else if(n % 2) 19 return x * power(x, n-1); 20 else { 21 t = power(x, n/2); 22 return t*t; 23 } 24 } 25

回答问题:
问题一:power的功能是计算幂函数。
问题二:power是递归函数。其模式为:(1)递归出口:n=0,任何数的0次方都是1. (2)当n为奇数时,x^n=x*x^(n-1) (3)当n为偶数时,x^n=(x^2/n)的平方
实验四
源代码
1 #include <stdio.h> 2 3 int main() 4 { 5 int a, b, c; 6 int classify_triangle(int a, int b, int c); 7 while(scanf("%d%d%d", &a, &b, &c)!=EOF){ 8 switch(classify_triangle(a,b,c)){ 9 case 0: 10 printf("不能构成三角形\n"); 11 break; 12 case 1: 13 printf("普通三角形\n"); 14 break; 15 case 2: 16 printf("等边三角形\n"); 17 break; 18 case 3: 19 printf("等腰三角形\n"); 20 break; 21 case 4: 22 printf("直角三角形\n"); 23 break; 24 } 25 } 26 27 return 0; 28 29 } 30 31 int classify_triangle(int a, int b, int c){ 32 33 if(a+b<=c ||a+c<=b ||b+c<=a) 34 return 0; 35 else if(a==b&&b==c) 36 return 2; 37 else if(a==b&&b!=c || c==b&&b!=a || a==c&&c!=b) 38 return 3; 39 else if(a*a+b*b==c*c ||a*a+c*c==b*b ||c*c+b*b==a*a) 40 return 4; 41 else 42 return 1; 43 44 }

实验五
源代码1.c
1 //task5.1.c 2 #include <stdio.h> 3 int func(int n, int m); // 函数声明 4 int main() { 5 int n, m; 6 int ans; 7 while(scanf("%d%d", &n, &m) != EOF) { 8 ans = func(n, m); // 函数调用 9 printf("n = %d, m = %d, ans = %d\n\n", n, m, ans); 10 } 11 12 return 0; 13 } 14 15 //函数定义 16 int func(int n, int m) { 17 if(m<0 || m>n) 18 return 0; 19 if(m==0 || m==n) 20 return 1; 21 if(m>n-m) m=n-m; 22 23 int up=1; 24 int down=1; 25 for(int i=1; i<=m; i++){ 26 up*=(n-m+i); 27 down*=i; 28 } 29 return up/down; 30 } 31

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

实验六
源代码
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 if(a<0) a=-a; 18 if(b<0) b=-b; 19 if(c<0) c=-c; 20 21 int min=a; 22 if(b<min) min=b; 23 if(c<min) min=c; 24 25 for(int i=min; i>=1; i--){ 26 if(a%i==0 && b%i==0 && c%i==00) { 27 return i; 28 } 29 } 30 return 1; 31 }

实验七
源代码
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 void print_charman(int n); 5 6 int main() { 7 int n; 8 printf("input n: "); 9 scanf("%d", &n); 10 print_charman(n); 11 return 0; 12 } 13 14 void print_charman(int n){ 15 int total_group = n; 16 for (int k = 0; k < total_group; k++){ 17 int space = k; 18 int man_cnt = 2 * n - 1 - 2 * k; 19 for (int s = 0; s < space; s++) { 20 printf("\t"); 21 } 22 for (int m = 0; m < man_cnt; m++) { 23 printf(" O\t"); 24 } 25 printf("\n"); 26 for (int s = 0; s < space; s++) { 27 printf("\t"); 28 } 29 for (int m = 0; m < man_cnt; m++) { 30 printf("<H>\t"); 31 } 32 printf("\n"); 33 for (int s = 0; s < space; s++) { 34 printf("\t"); 35 } 36 for (int m = 0; m < man_cnt; m++) { 37 printf("I I\t"); 38 } 39 printf("\n"); 40 } 41 }



浙公网安备 33010602011771号