实验3 C语言函数应用编程
task1
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<time.h> 4 #include<Windows.h> 5 #define N 80 6 7 void print_text(int line,int col,char text[]); 8 void print_spaces(int n); 9 void print_blank_lines(int n); 10 11 int main(){ 12 int line,col,i; 13 char text[N]="hi,November~"; 14 15 srand(time(0)); 16 17 for(i=1;i<=10;++i) 18 {line=rand()%25; 19 col=rand()%80; 20 print_text(line,col,text); 21 Sleep(1000); 22 } 23 system("pause"); 24 return 0;} 25 void print_spaces(int n){ 26 int i; 27 for(i=1;i<=n;++i) 28 printf(" ");} 29 30 void print_black_lines(int n){ 31 int i; 32 for(i=1;i<=n;++i) 33 printf("\n");} 34 35 void print_text(int line,int col,char text[]){ 36 print_spaces(col-1); 37 print_black_lines(line-1); 38 39 printf("%s",text);}
通过sleep来控制字幕的闪烁,通过时间来随机生成空格数,达到动态效果。
task2
1 #include<stdio.h> 2 #include<stdlib.h> 3 long long fac(int n); 4 5 int main(){ 6 int i,n; 7 printf("Enter n:"); 8 scanf("%d",&n); 9 for(i=1;i<=n;++i) 10 printf("%d!=%lld\n",i,fac(i)); 11 system("pause"); 12 return 0;} 13 14 long long fac(int n){ 15 static long long p=1; 16 17 p=p*n; 18 return p;}
增加一行后运行结果为
1 #include <stdio.h> 2 #include<stdlib.h> 3 int func(int, int); // 函数声明 4 int main() { 5 int k = 4, m = 1, p1, p2; 6 p1 = func(k, m); // 函数调用 7 p2 = func(k, m); // 函数调用 8 printf("%d, %d\n", p1, p2); 9 system("pause"); 10 return 0; 11 } 12 // 函数定义 13 int func(int a, int b) { 14 static int m = 0, i = 2; 15 i += m + 1; 16 m = i + a + b; 17 return m; 18 }
2.1中局部静态变量使p只被初始化一次,每次调用完函数p的值都会改变,达到阶乘效果。
2.2中同理,第二次调用函数时m=8,i=3,值改变。
task3
1 #include <stdio.h> 2 #include<stdlib.h> 3 long long func(int n); // 函数声明 4 int main() { 5 int n; 6 long long f; 7 while (scanf("%d", &n) != EOF) { 8 f = func(n); // 函数调用 9 printf("n = %d, f = %lld\n", n, f); 10 } 11 system("pause"); 12 return 0; 13 } 14 long long func(int n){ 15 long long j; 16 if(n==1) 17 j=1; 18 19 else 20 j=(func(n-1)+1)*2-1; 21 22 return j; 23 }
task4
迭代方式
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 int func(int n,int m){ 10 int ans,i,j,t; 11 int ans1,ans2,ans3; 12 ans1=ans2=ans3=1; 13 if(m>n) 14 ans=0; 15 else if(m==n) 16 ans=1; 17 else if(m==0) 18 ans=1; 19 else 20 {for(i=1;i<=m;i++) 21 22 ans1=ans1*i; 23 for(i=1;i<=n;i++) 24 ans2=ans2*i; 25 26 for(i=1;i<=n-m;i++) 27 ans3=ans3*i; 28 ans=ans2/(ans1*ans3); 29 } 30 return ans;}
递归方式
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 int func(int n,int m){ 10 int ans,i,j,t; 11 int ans1,ans2,ans3; 12 ans1=ans2=ans3=1; 13 if(m>n) 14 ans=0; 15 else if(m==n) 16 ans=1; 17 else if(m==0) 18 ans=1; 19 else 20 ans=func(n-1,m)+func(n-1,m-1); 21 return ans;}
task5
1 #include<stdio.h> 2 void hanoi(unsigned int n,char from,char temp,char to); 3 void moveplate(unsigned int n,char from,char to); 4 int main(){ 5 unsigned int n; 6 while(scanf("%u",&n)!=EOF){
7 int step = 0; 8 9 10 11 hanoi(n,'A','B','C'); 12 for (n; n > 0; n--) { 13 step = 2 * step + 1; 14 15 }printf("一共移动了%d次\n",step); } 16 return 0; 17 } 18 void hanoi(unsigned int n,char from,char temp,char to){ 19 if(n==1) 20 moveplate(n,from,to); 21 else{hanoi(n-1,from,to,temp); 22 moveplate(n,from,to); 23 hanoi(n-1,temp,from,to); 24 } 25 } 26 void moveplate(unsigned int n,char from,char to){ 27 printf("%u:%c-->%c\n",n,from,to); 28 }
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 printf("new number is: %ld\n\n", t);printf("Enter a number: "); 10 } 11 return 0; 12 } 13 14 long func(long s){ 15 int m,i,n; 16 long t=0; 17 long ans=0; 18 19 while(s>0) 20 { 21 m=s%10; 22 if(m%2!=0) 23 t=t*10+m; 24 s=s/10; 25 } 26 while(t>0) 27 { 28 n=t%10; 29 ans=ans*10+n; 30 t=t/10;} 31 return ans; 32 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」