首页 > 其他分享 >实验3

实验3

时间:2024-10-23 20:43:05浏览次数:1  
标签:10 return int ans char 实验 printf

任务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函数的功能是把分数转换为A~E的等级,形参类型是整型,返回值类型是字符型。

问题2:有问题,case后面的语句后没有break;,会把ans赋其他值。

 

任务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功能是计算一个数所有位上的数字的和。

问题2:能实现同等效果,原代码是采用迭代的思维,用循环解决问题,更改后的代码采用递归的思维,将求所有位上数字的和转化为求当前数字个位上的数字与该数字除以10后所有位上数字的和。

 

任务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:power的功能是求x的n次方

问题2:power是递归函数。

若n为奇数 xn=x*xn-1

若n为偶数 xn=xn/2*xn/2

n=0时返回1,x1=x

 

任务4

 

源代码

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

 

运行结果

 

任务5

 

源代码

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

 

运行结果

 

任务6

 

迭代

源代码

 1 #include <stdio.h>
 2 int func(int n, int m);   // 函数声明
 3 
 4 int main() {
 5     int n, m;
 6     int ans;
 7 
 8     while(scanf("%d%d", &n, &m) != EOF) {
 9         ans = func(n, m);   // 函数调用
10         printf("n = %d, m = %d, ans = %d\n\n", n, m, ans);
11     }
12         
13     return 0;
14 }
15 
16 int func(int n, int m)
17 {
18     int i = 0, j = 0, up = 1, down = 1;
19     for (i = n; i > n - m; i--)
20     {
21         up *= i;
22     }
23     for (j = m; j > 0; j--)
24     {
25         down *= j;
26     }
27     return (up / down);
28 }

 

运行结果

 

递归

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

 

运行结果

 

任务7

 

源代码

 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 {
18     int i, j;
19     for (i = 0; i < n; i++)
20     {
21         for (j = 0; j < i; j++)
22         {
23             printf("\t");
24         }
25         for (j = 0; j < 2*n - 2*i-1; j++)
26         {
27             printf(" O \t");
28         }
29         printf("\n");
30 
31         for (j = 0; j < i; j++)
32         {
33             printf("\t");
34         }
35         for (j = 0; j < 2*n - 2*i-1; j++)
36         {
37             printf("<H>\t");
38         }
39         printf("\n");
40 
41         for (j = 0; j < i; j++)
42         {
43             printf("\t");
44         }
45         for (j = 0; j < 2*n - 2*i-1; j++)
46         {
47             printf("I I\t");
48         }
49         printf("\n\n");
50     }
51 
52 }

 

运行结果

 

标签:10,return,int,ans,char,实验,printf
From: https://www.cnblogs.com/oliveira/p/18497773

相关文章

  • 实验三
    task1源代码#include<stdio.h>charscore_to_grade(intscore);//函数声明intmain(){intscore;chargrade;while(scanf("%d",&score)!=EOF){grade=score_to_grade(score);//函数调用printf("分数:%d,......
  • 实验二 类和对象_基础编程1
    实验任务一:#pragmaonce#include<string>//类T:声明classT{//对象属性、方法public:T(intx=0,inty=0);//普通构造函数T(constT&t);//复制构造函数T(T&&t);//移动构造函数~T();//析构函数voidadju......
  • 实验2
    task11#pragmaonce23#include<string>45//类T:声明6classT{7//对象属性、方法8public:9T(intx=0,inty=0);//普通构造函数10T(constT&t);//复制构造函数11T(T&&t);//移动构造函数12~T();......
  • # 20222402 2024-2025-1 《网络与系统攻防技术》实验二实验报告
    1.实验内容本周学习内容①Shellcode技术②后门概念:后门就是不经过正常认证流程而访问系统的通道。③后门案例:XcodeGhost等。④后门技术:狭义后门:特指潜伏于操作系统中专门做后门的一个程序,“坏人”可以连接这个程序,远程执行各种指令。管控功能实现技术自启动技术进程隐藏技......
  • 实验2:简单工厂模式
    [实验任务一]:女娲造人使用简单工厂模式模拟女娲(Nvwa)造人(Person),如果传入参数M,则返回一个Man对象,如果传入参数W,则返回一个Woman对象,如果传入参数R,则返回一个Robot对象。请用程序设计实现上述场景。实验要求:1.画出对应的类图;2.提交源代码;3.注意编程规范。类图:  2、代......
  • 实验3
    task1点击查看代码#include<stdio.h>charscore_to_grade(intscore);//函数声明intmain(){intscore;chargrade;while(scanf("%d",&score)!=EOF){grade=score_to_grade(score);//函数调用printf("分数:%......
  • 实验2:简单工厂模式
    [实验任务一]:女娲造人使用简单工厂模式模拟女娲(Nvwa)造人(Person),如果传入参数M,则返回一个Man对象,如果传入参数W,则返回一个Woman对象,如果传入参数R,则返回一个Robot对象。请用程序设计实现上述场景。  1. 类图   2.源代码//抽象产品类:Person接口publicinterfaceP......
  • 20222404 2024-2025-1《网络与系统攻防》 实验二
    1.实验内容(一)本周课程内容了解后门概念,了解后门案例,后门会对系统安全造成的影响。对后门技术进行普及,包括各种进程隐藏技术。了解netcat、meterpreter,veil等常见工具。进一步学习shellcode注入的逻辑和多种情况。(二)问题回答(1)例举你能想到的一个后门进入到你系统中的可能......
  • 实验2 类和对象_基础编程1
    实验任务1代码:t.h:1#pragmaonce23#include<string>45classT{6public:7T(intx=0,inty=0);8T(constT&t);9T(T&&t);10~T();11voidadjust(intratio);12voiddisplay()const;13private......
  • 实验2 类和对象_基础编程1
    task1: t.h:#pragmaonce#include<string>//类T:声明classT{//对象属性、方法public:T(intx=0,inty=0);//普通构造函数T(constT&t);//复制构造函数T(T&&t);//移动构造函数~T();//析构函数void......