首页 > 其他分享 >实验文档3

实验文档3

时间:2024-10-26 14:48:00浏览次数:1  
标签:10 return int char score 实验 ans 文档

关于第三次实践课作业

实验结论

task1.c

 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include<stdio.h>
 3 char score_to_grade(int score);
 4 int main() {
 5     int score;
 6     char grade;
 7 
 8     while (scanf("%d", &score) != EOF)
 9     {
10         grade = score_to_grade(score);
11         printf("分数 : %d , 等级 : %c\n\n", score, grade);
12     } 
13     return 0;
14 }
15 char score_to_grade(int score) {
16     char ans;
17     switch (score / 10) {
18     case 10:
19     case 9:ans = 'A'; break;
20     case 8:ans = 'B'; break;
21     case 7:ans = 'C'; break;
22     case 6:ans = 'D'; break;
23     default:ans = 'E';
24     }
25     return ans;
26 }

question1:函数 score_to_grade 的功能是什么?形参类型、返回值类型是什么?

answer1:函数的功能是将得到的分数通过计算转化为对应的等级;

形参类型是int型数据,返回类型是字符型数据;

question2:如果line21-28以下形式,有问题吗?如果有,指出有哪些问题? 

1 switch(score/10) {
2  case 10:
3  case 9:   ans = "A"; 
4  case 8:   ans = "B";
5  case 7:   ans = "C";
6  case 6:   ans = "D";
7  default:  ans = 'E';
8 }

answer2:有问题;

没有使用break语句会导致ans得到对应grade时

无法离开switch语句,返回ans时其值始终是E

 

 

task2.c

 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include <stdio.h>
 3 int sum_digits(int n);
 4 
 5 int main()
 6 {
 7     int n;
 8     int ans;
 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     return 0;
14 }
15 int sum_digits(int n) {
16     int ans = 0;
17     while (n != 0) {
18         ans += n % 10;
19         n /= 10;
20     }
21     return ans;
22 }

question1:函数 sum_digits 的功能是什么?

answer1:取出n的各个数位,并将它们相加

question2:如果保持 main 代码和函数 sum_digits 声明不变,

把函数 sum_digits 定义成如下 实现方式,能实现同等的效果吗?

如果不能实现同等效果,分析原因。

如果能实现同等效果,说明两种实现方式背后的算法思维区别。 

1 int sum_digits(int n) {
2  if(n < 10)
3      return n;
4  return sum_digits(n/10) + n%10;
5 }

answer2:能实现同等效果

第一种算法思维是迭代,

通过取余取出n的个位后通过整除去掉n的个位

如此往复不断得到n的个位并累加

第二种算法思维是递归,

最简单情形即是n本身就是一个个位数,

即可以直接返回n值;

其他情况下:既通过取余得到n的个位数,

又通过取整去掉n的个位进入函数作进一步计算

 

 

task3.c 

 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include <stdio.h>
 3 int power(int x, int y);
 4 int main() {
 5     int x, n, 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     }
17     else if (n % 2) {
18         return x * power(x, n - 1);
19     }
20     else {
21         t = power(x, n / 2);
22         return t * t;
23     }
24 }

question1:函数 power 的功能是什么?

answer1:计算x的n次幂

question2:函数 power 是递归函数吗?如果是,找出递归模式。写出这个递归模式对应的数学公 式模型

answer2:是,其递归模式是:

 

 

 

task4.c

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

 

 

 task5.c

 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include <stdio.h>
 3 void hanoi(int n, char from, char temp, char to);
 4 void move(int n, char from, char to);
 5 int cnt = 0;
 6 int main() {
 7     int n;
 8     while (scanf("%d", &n) != EOF) {
 9         cnt = 0;
10         hanoi(n, 'A', 'B', 'C');
11         printf("一共移动了%d次\n", cnt);
12     }
13     return 0;
14 }
15 void hanoi(int n, char from, char temp, char to) {
16     if (n == 1) {
17         move(n, from, to);
18     }
19     else {
20         hanoi(n - 1, from, to, temp);
21         move(n, from, to);
22         hanoi(n - 1, temp, from, to);
23     }
24 }
25 void move(int n, char from, char to) {
26     printf("%d : %c --> %c\n", n, from, to);
27     cnt++;
28 }

 

 

task6_1.c

用迭代方式实现计算组合数 func() 

 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include <stdio.h>
 3 int func(int n, int m);
 4 int fac(int n);
 5 int main()
 6 {
 7     int n, m;
 8     int ans;
 9     while (scanf("%d %d", &n, &m) != EOF) {
10         ans = func(n, m);
11         printf("n = %d,m = %d,ans = %d\n\n", n, m, ans);
12     }
13     return 0;
14 }
15 int func(int n, int m) {
16     return fac(n) / (fac(m) * fac(n - m));
17 }
18 int fac(int n) {
19     int i,ans=1;
20     for (i = 1; i <= n; i++) {
21         ans *= i;
22     }
23     return ans;
24 }

task6_2.c

用递归函数实现计算组合数 func() 

 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include <stdio.h>
 3 int func(int n, int m);
 4 
 5 int main()
 6 {
 7     int n, m;
 8     int ans;
 9     while (scanf("%d %d", &n, &m) != EOF) {
10         ans = func(n, m);
11         printf("n = %d,m = %d,ans = %d\n\n", n, m, ans);
12     }
13     return 0;
14 }
15 
16 int func(int n, int m) {
17     if (n == 0 && m!=0) {
18         return 0;
19     }
20     else if (m == 0) {
21         return 1;
22     }
23     else {
24         return func(n - 1, m) + func(n - 1, m - 1);
25     }
26 }

 

 

task7.c

 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include<stdio.h>
 3 void print_charman(int n);
 4 void one(int x);
 5 void two(int x);
 6 void three(int x);
 7 int main()
 8 {
 9     int n;
10     printf("Enter n:");
11     scanf("%d", &n);
12     print_charman(n);
13     return 0;
14 }
15 int j, cnt = 0;
16 void print_charman(int n) {
17     int i;
18     for (i = n; i >= 1; i--) {
19         int x = (2 * i)- 1;
20         one(x);
21         two(x);
22         three(x);
23         cnt++;
24     }
25     
26 }
27 
28 void one(int x) {
29     for (j = 1; j <= cnt; j++) {
30         printf("\t");
31     }
32     int i;
33     for (i = 1; i <= x; i++) {
34         printf(" 0\t");
35     }
36     printf("\n");
37 }
38 void two(int x) {
39     for (j = 1; j <= cnt; j++) {
40         printf("\t");
41     }
42     int i;
43     for (i = 1; i <= x; i++) {
44         printf("<H>\t");
45     }
46     printf("\n");
47     
48 }
49 void three(int x) {
50     for (j = 1; j <= cnt; j++) {
51         printf("\t");
52     }
53     int i;
54     for (i = 1; i <= x; i++) {
55         printf("I I\t");
56     }
57     printf("\n");
58 }

 

实验总结

1.尚存的问题 :对于Hanoi塔的理解问题,无法正确理解两个函数

       对于全局变量,局部变量等的理解

       编写递归函数

2.函数作为一种模块化程序的设计手段,

在编写一个“大”程序时可以逐个编写每个“小”程序(即函数)

逐一进行调试纠错,保证每个函数都是正确的,

这样在运用函数时可以保证不因局部函数的问题

而影响整体程序,使调适时更加便捷清晰

标签:10,return,int,char,score,实验,ans,文档
From: https://www.cnblogs.com/Samoyed0721/p/18497665

相关文章

  • 实验5-3 使用函数求Fibonacci数
    本题要求实现求Fabonacci数列项的函数。所谓Fibonacci数列就是满足任一项数字是前两项的和(最开始两项均定义为1)的数列。函数接口定义:intfib(intn);函数fib应返回第n项Fibonacci数。题目保证输入输出在长整型范围内。裁判测试程序样例:#include<stdio.h>intfib(int......
  • 浙大版《C语言程序设计实验与习题指导(第4版)实验6-6 使用函数验证哥德巴赫猜想
    本题要求实现一个判断素数的简单函数,并利用该函数验证哥德巴赫猜想:任何一个不小于6的偶数均可表示为两个奇素数之和。素数就是只能被1和自身整除的正整数。注意:1不是素数,2是素数。函数接口给定如下intprime(intp);voidGoldbach(intn);其中函数prime当用户传入参数p......
  • 实验三
    实验任务1源代码1#include<stdio.h>23charscore_to_grade(intscore);45intmain(){6intscore;7chargrade;89while(scanf("%d",&score)!=EOF){10grade=score_to_grade(score);11printf......
  • 实验2 类和对象_基础编程1
    任务1:t.h#pragmaonce#include<string>//类T:声明classT{//对象属性、方法public:T(intx=0,inty=0);//普通构造函数T(constT&t);//复制构造函数T(T&&t);//移动构造函数~T();//析构函数voidadjus......
  • 基于Vue+NodeJS+express的预约上门维修服务运营与数据分析系统(源码+node+vue+部署文
    收藏关注不迷路!!......
  • 仓储管理系统(源码+文档+部署+讲解)
    仓储管理系统、智能仓储管理平台、库存优化控制系统、仓库自动化管理系统、库存智能调配系统、仓储资源规划系统、智能库存监控系统、仓库作业执行系统、库存管理与分析系统、仓库管理智能平台、库存流转跟踪系统、智能供应链管理平台供应商本文将深入解析“仓储管理系统”的项目,探......
  • mongo3.2.7部署文档
     环境搭建与最优配置3台机器10.111.62.21,10.111.62.22,10.111.62.233个分片。每个分片一主一副一仲裁mongo版本mongodb-linux-x86_64-rhel70-3.2.7.tgz(注意版本,根据不同的linux版本选择不同的安装包)保证安装目录下的磁盘空间足够大服务器有8G以上的剩余内存(对于生产环......
  • 基于SpringBoot+Vue的鲜牛奶订购管理系统设计与实现毕设(文档+源码)
            目录一、项目介绍二、开发环境三、功能介绍四、核心代码五、效果图六、源码获取:        大家好呀,我是一个混迹在java圈的码农。今天要和大家分享的是一款基于SpringBoot+Vue的鲜牛奶订购管理系统,项目源码请点击文章末尾联系我哦~目前有各类成......
  • 文档透明加密系统怎么用?五款透明加密软件汇总!2024热门推荐,实测分享!
    数据泄露事件频发,让无数企业谈之色变。想要自动对存储在计算机上的文档进行加密吗?怎么在不影响日常工作的前提,确保文档在存储和传输过程中的安全?透明加密系统来助力!本文,将详细介绍文档透明加密系统的使用方法,并汇总五款2024年热门的透明加密软件。文档透明加密系统是什么......
  • ELK日志管理系统搭建文档
    ELK日志管理系统搭建文档ELK是ElasticsearchLogstashkibana三个开源软件的组合来进行搭建.jianyi1jianyijianyi1建议架构:节点服务器部署程序备注节点1node-110.10.183.211Elasticsearch、kibana、head主节点节点2node-210.10.183.1......