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

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

时间:2024-10-26 19:59:07浏览次数:1  
标签:return 函数 int 编程 char score 实验 printf ans

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

标签:return,函数,int,编程,char,score,实验,printf,ans
From: https://www.cnblogs.com/wyhzmd/p/18504421

相关文章

  • 实验2 类和对象_基础编程1
    task1:t.h1#pragmaonce23#include<string>45//类T:声明6classT{7//对象属性、方法8public:9T(intx=0,inty=0);//普通构造函数10T(constT&t);//复制构造函数11T(T&&t);//移动构造函数12~T();......
  • C++ (4) 面向对象编程,C++的魔法生物养成记
    面向对象编程:C++的魔法生物养成记在C++的世界里,面向对象编程(OOP)就像是魔法生物的养成游戏。你将扮演一名魔法师,通过编写代码来创造和培养自己的魔法生物。这些生物拥有自己的属性(数据)和能力(函数),它们可以在你的程序世界中自由行动和互动。现在,让我们拿起魔杖(键盘),开始这场魔......
  • 【嵌入式原理设计】实验一:软硬件环境搭建&数字端口应用
    目录一、实验目的 二、实验环境三、实验内容四、实验记录及处理五、实验小结六、成果文件提取链接一、实验目的         配置ESPArduino开发平台,熟悉实验的软硬件工作环境和基本的工作方式二、实验环境        Win10+ESP32实验开发板三、实......
  • 实验3
    task.1#include<stdio.h>charscore_to_grade(intscore);intmain(){intscore;chargrade;while(scanf("%d",&score)!=EOF){grade=score_to_grade(score);printf("分数:%d,等级:%c\n\n",s......
  • Web高级开发实验:EL基本运算符与数据访问
    一、实验目的掌握EL的定义,即ExpressionLanguage,用于提高编程效率。学习和掌握在开发环境中创建Java文件,并在jsp文件中使用EL表达式去调用其中的方法与属性等。二、实验所用方法上机实操三、实验步骤及截图1、创建javaweb项目,在src文件夹下创建myClasses包。在myClasses包......
  • IO及网络编程
    IO分类:分为BIO、NIO(同步非阻塞)、AIO(异步非阻塞)IO多路复用三种函数:select、poll、epoll一切程序皆文件,这样对于我们程序员来说,只需要open、read、write、close接口,即可完成全部操作。文件描述符FD,一个索引,内核中维护了一些数据结构,通过文件描述符能找到对应的文件,文件读写到......
  • np.random.multivariate_normal函数
    np.random.multivariate_normal是NumPy中生成多元正态分布随机样本的函数。它允许我们指定多个维度(变量)的均值和协方差矩阵,从而生成符合这些参数的随机样本。这个函数常用于模拟多维数据,特别是需要考虑变量间相关性的场景,比如机器学习中的数据生成。函数语法np.random.......
  • 实验三
    #include<stdio.h>charscore_to_grade(intscore);intmain(){intscore;chargrade;while(scanf("%d",&score)!=EOF){grade=score_to_grade(score);printf("分数:%d,等级:%c\n\n",score,grade);}return0;}charscore_......
  • 《DNK210使用指南 -CanMV版 V1.0》第三十三章 image元素绘制实验
    第三十三章image元素绘制实验1)实验平台:正点原子DNK210开发板2)章节摘自【正点原子】DNK210使用指南-CanMV版V1.03)购买链接:https://detail.tmall.com/item.htm?&id=7828013987504)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/k210/ATK-DNK210.html5)......
  • 实验三
    #include<stdio.h>charscore_to_grade(intscore);intmain(){intscore;chargrade;while(scanf("%d",&score)!=EOF){grade=score_to_grade(score);printf("分数:%d,等级:%c\n\n",score,grade);......