实验3 c语言函数应用编程

news/2025/3/15 17:50:01/文章来源:https://www.cnblogs.com/wyhzmd/p/18504421

实验任务1

task1.c

 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 }

 问题一:此函数的功能是输出成绩所在的等第,形参类型是整数,返回值类型是字符

问题二:case条件后没有break,导致每一个case语句都会被执行,不管输入什么都会输出E;ABCD都是字符串不是字符,编译后会报错。

实验任务2

task2.c

#include <stdio.h>int sum_digits(int n);  // 函数声明int main() {int n;int ans;while(printf("Enter n: "), scanf("%d", &n) != EOF) {ans = sum_digits(n);    // 函数调用printf("n = %d, ans = %d\n\n", n, ans);}return 0;
}// 函数定义
int sum_digits(int n) {int ans = 0;while(n != 0) {ans += n % 10;n /= 10;}return ans;
}

问题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:此函数的功能是输出x的n次方。

问题2:是递归函数。

实验任务4

task4.c

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

实验任务5

task5.c

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

 实验任务6

task6.c

#include <stdio.h>
int func(int n, int m);   // 函数声明int main() {int n, m;int ans;while(scanf("%d%d", &n, &m) != EOF) {ans = func(n, m);   // 函数调用printf("n = %d, m = %d, ans = %d\n\n", n, m, ans);}  return 0;
}//递归
int func(int n,int m){if (n<m){return 0;}else if(m==n ||m==0){return 1;}else if(m==1){return n;}else{return func(n-1,m)+func(n-1,m-1);}
}

 迭代

 1 int func(int n,int m){
 2     int i,j;
 3     int sum1=1,sum2=1;
 4     if (n<m) return 0;
 5     for(i=1;i<=m;++i){
 6         sum1*=i;
 7     }
 8     j=n-m+1;
 9     for(j;j<=n;j++){
10         sum2*=j;
11     }
12     return sum2/sum1;
13 }

 实验任务7

task7.c

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 void 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 void print_charman(int n){
17     int i,j,k;
18     for(i=n;i>0;i--){
19         for(k=1;k<=n-i;k++){
20             printf("   \t");
21         }
22             j=2*i-1;
23             for(j;j>0;j--){
24                 printf(" O \t");
25             }
26             printf("\n");
27         
28         for(k=1;k<=n-i;k++){
29             printf("   \t");
30         }
31             j=2*i-1;
32             for(j;j>0;j--){
33                 printf("<H>\t");
34             }
35             printf("\n");
36         for(k=1;k<=n-i;k++){
37             printf("   \t");
38         }
39             j=2*i-1;
40             for(j;j>0;j--){
41                 printf("I I\t");
42             }printf("\n");
43     
44 }}

 

 实验总结

实验7写了比较久,感觉最后写的东西还是太复杂了,但是暂时还没想到更好的,准备一会去看看其他同学写的找找思路。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/822493.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mit6.S081笔记Lab3: page tables 页表

课程地址:https://pdos.csail.mit.edu/6.S081/2020/schedule.html Lab 地址:https://pdos.csail.mit.edu/6.S081/2020/labs/pgtbl.html 我的代码地址:https://github.com/Amroning/MIT6.S081/tree/pgtbl 相关翻译:http://xv6.dgs.zone/labs/requirements/lab3.html 参考博客…

java 为什么有private关键字_2

在讨论编程语言设计时,Java语言中的`private`关键字扮演着至关重要的角色。私有访问修饰符`private`的主要目的是封装、数据隐藏。通过限制对类成员的访问,它确保了对象的内部状态不能被外部代码随意修改,从而保护了对象的完整性和一致性。这种封装机制是面向对象编程(OOP)…

为什么有开源社区版,还有那么多公司使用专业版-谈HPC调度器

开放源码与商用 HPC 工作负载管理器的成本效益比较 商用高性能计算机工作负载管理器 1 简介 高性能计算(HPC High-performance computing)为多个行业的科学发现和创新提供了动力。大型数据集、先进的仿真技术和机器学习的结合,帮助企业产生了没有现代 HPC 基础设施就无法实现…

pta答题判断程序总结blog

一、前言 本次blog是针对发布题目集1~3的的最后一题的总结。三次大作业都是模拟一个小型的在线测试系统,先由大作业1完成基本功能,后面进行迭代,不断增加功能,丰富功能。下面具体分析这三次大作业的关键点和区别。 1、答题程序-1 1)输入:题目数量:首先输入题目数量。题目…

Windows 资源管理器显示PSD、PDF、AI 等矢量格式缩略图

1、SageThumbs SageThumbs 是一个强大的 shell 扩展,允许使用 Pierre-e Gougelet 的 GFL 3.40 库(XnView Classic、XnView MP 的作者)直接在 Windows 资源管理器中预览大量图像格式。 AI、PS、EPS、PDF 支持# 要为 Adobe Illustrator (ai)、Postscript (ps, eps) 和 Ad…

第一次博客作业

一、前言: 第一个题目集: 知识点: 包括类的定义、属性(成员变量)、方法(成员函数)以及构造函数。 封装:通过私有化数据域并提供公共的访问器(getter)和修改器(setter)来保护对象内部状态。 构造函数:无参构造函数和带参数构造函数的使用。 字符串表示:重写toStrin…

第12题——入门级js

题目网址:https://match.yuanrenxue.cn/match/12解题步骤看流量包和其回显数据。只有一个流量包,那就是只要访问该网址就能获取页面数据。看下请求地址的组成。变量m一看就是base64编码,解码看下原字符串。再尝试访问第二页,看看原字符串组成的规律。比较明了了,原字符串就…

高等数学 7.10常系数线性微分方程组解法举例

在研究某些实际问题时,会遇到由几个微分方程联立起来共同确定几个具有同一自变量的函数的情况。这些联立的微分方程称为微分方程组。 如果微分方程组中的每一个微分方程都是常系数线性微分方程,那么,这种微分方程组就叫做常系数线性微分方程组。 对于常系数线性微分方程组,…

2024-10-26:最长公共后缀查询。用go语言,给定两个字符串数组 wordsContainer 和 wordsQuery,要对每个 wordsQuery[i] 找到一个与其有最长公共后缀的字符串

2024-10-26:最长公共后缀查询。用go语言,给定两个字符串数组 wordsContainer 和 wordsQuery,要对每个 wordsQuery[i] 找到一个与其有最长公共后缀的字符串。如果有多个字符串与 wordsQuery[i] 有相同的最长公共后缀,则返回在 wordsContainer 中最早出现的那个。最后,返回一…

PTA第1~3次大作业分析及总结

一、前言 经过数周的努力,第三次大作业也落下了帷幕,这三次大作业从第一次到第三次难度逐渐递增,需求不断地增加,对于初学JAVA的我无疑是一个巨大的考验。 第一次大作业,主要侧重类的简单设计,老师在最后一题给出了类的参考设计,算是对我们java的一个入门考验,既是考验…

使用spi-gpio-custom模块配置SPI总线

使用spi-gpio-custom模块配置SPI总线来源 https://www.xuzhe.tj.cn/index.php/2023/10/26/spi-gpio-customspi/ 参考专栏 https://www.zhihu.com/column/c_16980846677677096961. 引言 SPI(Serial Peripheral Interface)是一种常见的串行通信协议,广泛应用于微控制器与外部设…