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

发布时间 2023-10-31 17:02:00作者: mdlmdl

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 }