首页 > 编程语言 >实验三 C语言函数应用编程

实验三 C语言函数应用编程

时间:2024-10-25 15:20:11浏览次数:6  
标签:10 return 函数 int 编程 C语言 char score ans

一、实验目的

 能正确使用C语法规则定义,声明,调用函数

能正确编写递归函数

针对具体问题场景,合理抽象出独立的功能模块,正确定义函数并使用,使得代码更具可读性,可维护性

针对具体问题场景,能正确,合理使用全局变量和局部static变量,解决实际问题

二、实验准备

 1,函数定义,声明,调用的语法规则

2,什么是形参,什么是实参,以及,参数的传递和返回过程

3,什么是递归函数,以及,递归函数的编写规范

4,全局变量,局部static变量的特性

 

三、实验内容

 

1. 实验任务1

代码:

 

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

 

 

运行截图:

 

 

 

问题回答:

 问题一:函数score_to_grade()用来评判成绩的等级,返回等级对应的字符;形参类型是整型,返回值类型是char字符型。

问题二:有问题。当一个成绩被评为一A时,由于并没有break终止循环,导致会继续下去,最后输出结果一直为E

 

 

 

2. 实验任务2

代码:

 

 1 #include<stdio.h>
 2 
 3 int sum_digits(int n);
 4 
 5 int main()
 6 {
 7     int n;
 8     int ans;
 9     
10     while (printf("Enter n: "),scanf("%d",&n)!=EOF)
11     {
12         ans = sum_digits(n);
13         printf("n = %d , ans = %d\n\n",n,ans);
14     
15         
16     }
17     return 0;
18 }
19 
20 int sum_digits(int n)
21 {
22     int ans = 0;
23     while(n !=0)
24     {
25         
26     ans += n% 10;
27     n/=10;
28     }
29     return ans;
30 }

 

运行截图:

 

 

 

问题回答:

 问题一:这个函数的功能实现了返回一个整数的各个位上的数字的加和。如13,1+3=4,故可以实现返回4。

问题二:我测试输入发现是可以实现同行效果的。第一种方法不考虑输入数字的位数,都可以进行计算,如果输入10以内的数字也要来一遍。第二种方法使用了递归的方法,而且更加巧妙。当输入10以内数字,直接输出原数字就达到了位相加的结果。如果大于10,又调用自身把问题简化,一步步得到结果。

 

 

3. 实验任务3

代码:

 1 #include<stdio.h>
 2 
 3 int power ( int x, int y);
 4 
 5 int main()
 6 {
 7     
 8     int x, n;
 9     int ans ;
10     
11     while (printf ( "Enter x and n: "),scanf ("%d%d",&x,&n)!=EOF)
12     {
13         ans= power (x, n );
14         printf("n = %d,ans = %d\n\n",n ,ans);
15         
16     }
17     return 0;
18 }
19 
20 int power(int x, int n)
21 {
22     int t;
23 
24     if(n==0)
25         return 1;
26     else if (n% 2)
27         return x*power(x,n-1);
28     else     
29         {
30             t=power(x,n/2);
31             return t*t;
32         }
33         
34     
35     }

 

 

 

运行截图:

 

 

 

 问题回答:

 问题一:函数的功能是求出给定的整数x的y 次幂的结果。

问题二:函数是递归函数。递归模式:n 为1,函数返回1,n为大于0的偶数时,返回x * power(x, n-1),n为大于0的奇数时,返回power(x, n/2)

数学公式模型:

计算幂运算即计算:x^n

 

 

 

 

4. 实验任务4

代码:

 

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

 

 

运行截图:

 

 

 

 

 

 

 

5. 实验任务5

代码:

 

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

 

 

运行截图:

 

 

 

 

 

 

6. 实验任务6

代码:

 迭代方法:

 1 #include <stdio.h>
 2 int func(int n, int m); 
 3 int factorial(int n);
 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 {
18     
19     return factorial(n)/(factorial(m)*factorial(n-m));
20 }
21 int factorial(int n)
22 {
23     int result =1;
24     
25     if(n==1||n==0)    return 1;
26         
27     
28     for (int i=2;i<=n;i++)
29         {
30             result*=i;
31         }
32     return result; 
33 }

递归方式:

 

 1 #include <stdio.h>
 2 int func(int n, int m); 
 3 
 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(n==m)
18         return 1;
19     if (n<m)
20         return 0;
21     if (n>=m)
22     {
23     
24        if(n-m==1||(m==1))
25            return n;
26     
27     else  if(m==0||n==m||(m==1&&n==1))
28         return 1;        
29     
30     
31     else
32     return func(n-1,m)+func(n-1,m-1);
33     }
34         
35         return 0;
36         
37         
38 
39     }
40     
41     

 

 

运行截图

 

 

 

 

 

 

7. 实验任务7

代码:

 

 1 #include<stdio.h>
 2 int main(){
 3 
 4     int n;
 5     while(printf("Enter n: \n")&&scanf("%d",&n)!=EOF){
 6         
 7             for(int i=1;i<=n;i++){
 8         for(int j=1;j<=i-1;j++){
 9             printf("\t");
10         }for(int k=1;k<=(2*n-2*i+1);k++){
11             printf(" O\t");
12         }for(int k=1;k<=i-1;k++){
13             printf("\t");    
14         }printf("\n");
15         
16         
17         for(int j=1;j<=i-1;j++){
18             printf("\t");
19         }for(int k=1;k<=(2*n-2*i+1);k++){
20             printf("<H>\t");
21         }for(int k=1;k<=i-1;k++){
22             printf("\t");
23         }printf("\n");
24         
25         
26         for(int j=1;j<=i-1;j++){
27             printf("\t");
28         }for(int k=1;k<=(2*n-2*i+1);k++){
29             printf("I I\t");
30         }for(int k=1;k<=i-1;k++){
31             printf("\t");
32         }printf("\n");
33     }
34     }
35 
36     
37     
38     return 0;
39 }

 

 

运行截图:

 

 

标签:10,return,函数,int,编程,C语言,char,score,ans
From: https://www.cnblogs.com/andongni51/p/18496167

相关文章

  • switch 函数
    #include<stdio.h>intnum(intx){switch(x){case1:printf("Monday");break;case2:printf("Tuesday");break;case3:printf("Wednesday");break;case4:......
  • 数据结构 ——— C语言实现链式队列
    目录队列的概念以及示意图数组队列和链式队列链式队列的结构 实现链式队列的准备工作实现链式队列1.初始化2.打印队列的所有数据3.数据入队列(尾插)4.数据出队列(头删)5.访问队头的数据6.访问队尾的数据7.队列数据总个数8.判断队列是否为空9.释放队列的所......
  • 数据结构 ——— C语言实现数组栈
    目录栈的概念以及示意图链式栈和数组栈链式栈:数组栈:数组栈的结构实现数组栈的准备工作实现数组栈初始化数组栈入栈(尾插)出栈(尾删)访问栈顶数据判断栈是否为空栈数据的总数访问栈的所有数据释放栈Stack.h的所有代码Stack.c的所有代码栈的概念以及示意图栈......
  • 使用 ​​ltrace​​ 进行 Linux 库函数调用跟踪分析
    ltrace是Linux系统中的一个调试工具,主要用于跟踪应用程序调用的库函数。通过ltrace,可以查看应用程序在运行时调用了哪些共享库中的函数及其参数。这对于调试应用程序的行为,分析软件性能瓶颈,或理解某些程序与库的交互细节非常有用。以下是对ltrace的具体功能、用法和示例的详......
  • C++宏和函数的比较
    在上一篇随笔中,我提到宏和函数是很相似的,那么在这篇中我会通过实例来体会宏和函数的异同。实例:分别用函数和带参的宏,从三个数中找出最大的数代码:点击查看代码#include<bits/stdc++.h>usingnamespacestd;#defineCom(a,b,c){printf("%.3f\n",max(a,max(b,c)));}voidcomp......
  • 鸿蒙编程江湖:HarmonyOS 和 ArkTS 基本概念
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。华为鸿蒙(HarmonyOS)是华为自主研发的......
  • 鸿蒙编程江湖:ArkTS中Sendable数据在并发实例间的传递
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。Sendable是ArkTS中用于实现数据在并......
  • 鸿蒙编程江湖:深入理解TaskPool和Worker的并发任务执行
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。鸿蒙系统提供了两种并发能力:TaskPool和......
  • 鸿蒙编程江湖:异步编程的优势及 Promise的应用
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。异步编程是指编写能够同时执行多个任务,......
  • 鸿蒙编程江湖:并发编程基础与鸿蒙中的任务并发
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。并发编程是指在同一时间段内处理多个任......