实验任务1
代码- 1 #include <stdio.h>
- 2
- 3 char score_to_grade(int score); // 函数声明
- 4
- 5 int main() {
- 6 int score;
- 7 char grade;
- 8
- 9 while(scanf("%d", &score) != EOF) {
- 10 grade = score_to_grade(score); // 函数调用
- 11 printf("分数: %d, 等级: %c\n\n", score, grade);
- 12 }
- 13
- 14 return 0;
- 15 }
- 16
- 17 // 函数定义
- 18 char score_to_grade(int score) {
- 19 char ans;
- 20
- 21 switch(score/10) {
- 22 case 10:
- 23 case 9: ans = 'A'; break;
- 24 case 8: ans = 'B'; break;
- 25 case 7: ans = 'C'; break;
- 26 case 6: ans = 'D'; break;
- 27 default: ans = 'E';
- 28 }
- 29
- 30 return ans;
- 31 }
复制代码
运行结果
问题1.函数 score_to_grade 的功能是根据输入的分数转换为对应的等级,形参类型是整型,返回值类型是字符。
问题2. 1.case后面没有了break,会执行后面的所有语句。
2.单个字符需要用' '进行引用
实验任务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
- 21 while(n != 0) {
- 22 ans += n % 10;
- 23 n /= 10;
- 24 }
- 25
- 26 return ans;
- 27 }
复制代码 运行结果
问题1;函数sum_digits的功能是将输入数字n各个位数上面的数字进行代数相加
问题2:可以实现同等的效果,前者是使用迭代的方法,后者是使用递归的思想。
实验任务3
代码:- 1 include <stdio.h>
- 2
- 3 int power(int x, int n); // 函数声明
- 4
- 5 int main() {
- 6 int x, n;
- 7 int ans;
- 8
- 9 while(printf("Enter x and n: "), scanf("%d%d", &x, &n) != EOF) {
- 10 ans = power(x, n); // 函数调用
- 11 printf("n = %d, ans = %d\n\n", n, ans);
- 12 }
- 13
- 14 return 0;
- 15 }
- 16
- 17 // 函数定义
- 18 int power(int x, int n) {
- 19 int t;
- 20
- 21 if(n == 0)
- 22 return 1;
- 23 else if(n % 2)
- 24 return x * power(x, n-1);
- 25 else {
- 26 t = power(x, n/2);
- 27 return t*t;
- 28 }
- 29 }
复制代码 运行结果:
问题1:函数的功能是进行幂指数的运算
问题2:是递归函数
实验任务4
代码- 1 #include <stdio.h>
- 2 #include <math.h>
- 3 int is_prime(int n);
- 4
- 5 int main() {
- 6 printf("100以内的了孪生素数\n");
- 7 int n = 5;
- 8 int sum = 0;
- 9 while (n < 100) {
- 10 if (is_prime(n) == 1 && is_prime(n - 2) == 1) {
- 11 sum++;
- 12 printf("%d %d\n", n - 2, n);
- 13 }
- 14 n += 2;
- 15 }
- 16 printf("100以内的了孪生素数共有%d个", sum);
- 17 return 0;
- 18 }
- 19
- 20 int is_prime(int n) {
- 21 int i = 2;
- 22 while (i <= n / 2) {
- 23 if ((n % i) != 0)i++;
- 24 if ((n % i) == 0)return 0;
- 25 }
- 26 return 1;
- 27 }
复制代码 运行结果
实验感想:更加体会理解了递归函数的使用和流程,用递归表示会让代码很简单,但比较难以理解。此外,递归中全局变量的使用有时也至关重要。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |