首页 > 其他分享 >实验3

实验3

时间:2023-10-30 16:12:38浏览次数:18  
标签:case jugde int break -- 实验 func

task1

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <time.h>
 4 #include <windows.h>
 5 #define N 80
 6 void print_text(int line, int col, char text[]); // 函数声明
 7 void print_spaces(int n); // 函数声明
 8 void print_blank_lines(int n); // 函数声明
 9 int main() {
10     int line, col, i;
11     char text[N] = "hi, November~";
12     srand(time(0)); // 以当前系统时间作为随机种子
13     for (i = 1; i <= 10; ++i) {
14         line = rand() % 25;
15         col = rand() % 80;
16         print_text(line, col, text);
17         Sleep(1000); // 暂停1000ms
18     }
19     return 0;
20 }
21 // 打印n个空格
22 void print_spaces(int n) {
23     int i;
24     for (i = 1; i <= n; ++i)
25         printf(" ");
26 }
27 // 打印n行空白行
28 void print_blank_lines(int n) {
29     int i;
30     for (i = 1; i <= n; ++i)
31         printf("\n");
32 }
33 // 在第line行第col列打印一段文本
34 void print_text(int line, int col, char text[]) {
35     print_blank_lines(line - 1); // 打印(line-1)行空行
36     print_spaces(col - 1); // 打印(col-1)列空格
37     printf("%s", text); // 在第line行、col列输出text中字符串
38 }

如下图生成(还有4个未显示)

 代码功能:随机在某行某列打印“hi,November”,并在其之后的某行与某列再次打印,重复9次,共打印10个

 

 

 

task2.1

 1 #include <stdio.h>
 2 long long fac(int n); // 函数声明
 3 int main() {
 4     int i, n;
 5     printf("Enter n: ");
 6     scanf("%d", &n);
 7     for (i = 1; i <= n; ++i)
 8         printf("%d! = %lld\n", i, fac(i));
 9     return 0;
10 }
11 // 函数定义
12 long long fac(int n) {
13     static long long p = 1;
14     //printf("p = %lld\n", p);
15     p = p * n;
16     return p;
17 }

 

task2.2

 1 #include <stdio.h>
 2 int func(int, int); // 函数声明
 3 int main() {
 4     int k = 4, m = 1, p1, p2;
 5     p1 = func(k, m); // 函数调用
 6     
 7     p2 = func(k, m); // 函数调用
 8     printf("%d, %d\n", p1, p2);
 9     return 0;
10 }
11 // 函数定义
12 int func(int a, int b) {
13     static int m = 0, i = 2;
14     i += m + 1;
15     m = i + a + b;
16     return m;
17 }

1.首先在p1中,i=2+0+1=3,m=i+a+b=3+1+4=8

2.之后函数外面的m还是1,k还是4,但是函数里面的m是8,i是3

3.p2中,i=i+m+1=3+8+1=12,m=i+a+b=12+1+4=17

总结:局部static变量可在整个代码中循环,但是作用域只局限在局部

 

 

 

task3

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

 

 

 

 task4

1.迭代:

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

2.递归

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

两者结果一样:

 

 

 

task5

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

tip:

三柱汉诺塔移动n个盘的步数是(n-1)盘的步数的2倍多1;

step(n)=2*step(n-1)+1;

 

 

 

 task6

 1 #include <stdio.h>
 2 #include <math.h>
 3 long func(long s); // 函数声明
 4 int main() {
 5     long s, t;
 6     printf("Enter a number: ");
 7     while (scanf("%ld", &s) != EOF) {
 8         t = func(s); // 函数调用
 9         t = func(t);
10         printf("new number is: %ld\n\n", t);
11         printf("Enter a number: ");
12     }
13     return 0;
14 }
15 
16 long func(long s) {
17     int n;
18     long sum = 0;
19     while (s > 0) {
20         n = s % 10;
21         if (n % 2 != 0) {
22             sum = sum * 10 + n;
23         }
24         s /= 10;
25     }
26 
27     return sum;
28 }

 

 

 

task7

  1 #include <stdio.h>
  2 int func(int n, int m);
  3 int main()
  4 {
  5     int n = 1;
  6     int flag = 0;
  7     while (flag == 0) {
  8         int n2 = n * n;
  9         int n3 = n * n * n;
 10         flag = func(n2, n3);
 11         if (flag == 1) {
 12             printf("result=%d\n", n);
 13             printf("它的平方是%d*%d=%d\n", n, n, n2);
 14             printf("它的立方是%d*%d*%d=%d\n", n, n, n, n3);
 15             return 0;
 16         }
 17         else {
 18             n++;
 19             continue;
 20         }
 21     }
 22     return 0;
 23 }
 24 
 25 int func(int n, int m) {
 26     int k = 0;
 27     int s;
 28     int jugde[10];
 29     for (s = 0; s < 10; s++) {
 30         jugde[s] = 1;
 31     }
 32     while (n > 0) {
 33         s = n % 10;
 34         switch (s) {
 35         case 0:
 36             jugde[s]--;
 37             break;
 38         case 1:
 39             jugde[s]--;
 40             break;
 41         case 2:
 42             jugde[s]--;
 43             break;
 44         case 3:
 45             jugde[s]--;
 46             break;
 47         case 4:
 48             jugde[s]--;
 49             break;
 50         case 5:
 51             jugde[s]--;
 52             break;
 53         case 6:
 54             jugde[s]--;
 55             break;
 56         case 7:
 57             jugde[s]--;
 58             break;
 59         case 8:
 60             jugde[s]--;
 61             break;
 62         case 9:
 63             jugde[s]--;
 64             break;
 65         }    
 66         n /= 10;
 67     }
 68     while (m > 0) {
 69         s = m % 10;
 70         switch (s) {
 71         case 0:
 72             jugde[s]--;
 73             break;
 74         case 1:
 75             jugde[s]--;
 76             break;
 77         case 2:
 78             jugde[s]--;
 79             break;
 80         case 3:
 81             jugde[s]--;
 82             break;
 83         case 4:
 84             jugde[s]--;
 85             break;
 86         case 5:
 87             jugde[s]--;
 88             break;
 89         case 6:
 90             jugde[s]--;
 91             break;
 92         case 7:
 93             jugde[s]--;
 94             break;
 95         case 8:
 96             jugde[s]--;
 97             break;
 98         case 9:
 99             jugde[s]--;
100             break;
101         }
102         m /= 10;
103     }
104     for (s = 0; s < 10; s++) {
105         if (jugde[s] != 0) {
106             k = 0;
107             break;
108         }
109         else {
110             k = 1;
111         }
112     }
113     return k;
114 }

 

标签:case,jugde,int,break,--,实验,func
From: https://www.cnblogs.com/VitaminC114514/p/17798113.html

相关文章

  • 基于LiteOS的智慧农业案例实验分享
    最近在指导一位读者朋友做毕业设计,该毕设是关于端云互通的,基于小熊派+LiteOS+华为云。在指导他的过程中我也学到了不少东西,这里通过一个案例实验(智慧农业)给大家分享一些知识。实验框图相关模块简介1、STM32L431RCT62、LiteOSLiteOS是华为开发的轻量级实时操作系统:LiteOS源码GitHub......
  • 设计模式实验五
    8u软件设计                 石家庄铁道大学信息学院 实验5:建造者模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解建造者模式的动机,掌握该模式的结构;2、能够利用建造者模式解决实际问题。 [实验任务一]:计算机组装使用建造者模式,完......
  • 设计模式实验四
    软件设计                 石家庄铁道大学信息学院 实验4:抽象工厂模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解抽象工厂模式的动机,掌握该模式的结构;2、能够利用抽象工厂模式解决实际问题。 [实验任务一]:人与肤色使用抽象工厂模......
  • C++实验心得
    C++类文件写通讯录系统生成项目,创建类文件...调出工作区,manager属性类文件运用string型变量的找不到此数据类型问题,需要在对应.h文件定义上命名空间并引用<string>头文件类文件引用主函数全局变量main.cpp externinta; //导出 ...Class_one.cpp inta; //去ex......
  • 实验1-实验任务6
    #include<stdio.h>#include<math.h>intmain(){ doublex,ans; while(scanf_s("%lf",&x)!=EOF) { ans=pow(x,365); printf("%.2f的365次方:%.2f\n",x,ans); printf("\n"); } return0;}  ......
  • 实验1-实验任务5
    1#include<stdio.h>2intmain()3{4intyear;5year=(float)(static_cast<double>(1000000000/365/24/60)/60)+0.5;6printf("10亿秒约等于%d年\n",year);7return0;8} ......
  • 实验1-实验任务3
    1#include<stdio.h>2intmain()3{4charans1,ans2;//用于保存用户输入的答案5printf("每次课前认真预习、课后及时复习了没?(输入y或Y表示有,输入n或N表示没有):");6ans1=getchar();//从键盘输入一个字符,赋值给ans17getchar();......
  • 第四十章 触摸屏实验
    原文:http://www.openedv.com/thread-345225-1-1.html触摸屏是在显示屏的基础上,在屏幕或屏幕上方分布一层与屏幕大小相近的传感器形成的组合器件。触摸和显示功能由软件控制,可以独立也可以组合实现,用户可以通过侦测传感器的触点再配合相应的软件实现触摸效果。目前最常用的触摸屏......
  • 微机原理与接口技术中断实验
    ;*******************************;;*中断实验IRQ3*;;*******************************;includeio.inc.modelsmall;定义程序的存储模式.stack;定义堆栈段(默认是1KB空间).datamsgbyte'TPCAinterruptNo.3!',0dh,0ah,0c......
  • 数字图像处理实验笔记
    实验一数学形态学图像处理实验内容与要求使用结构元素函数strel分别定义'square'和'disk'形状的结构元素,对下图(a)所示的二值图像进行腐蚀(imerode)和膨胀(imdilate)操作,分析腐蚀和膨胀运算的作用。结合腐蚀和膨胀运算,使用开运算(imopen)和闭运算(imclose),对下图(b)所示的二值图像进行开运......