实验3 C语言函数应用编程
一,实验目的
二,实验准备
三,实验内容
1,实验任务1
task1.c
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 { 13 int line,col,i; 14 char text[N] = "hi,November"; 15 16 srand(time(0));//以当前系统时间作为随机种子 17 18 for(i=1;i<=1;++i) 19 { 20 line = rand()%25; 21 col = rand()%80; 22 print_text(line,col,text); 23 Sleep(1000);//暂停1000ms 24 } 25 return 0; 26 } 27 28 //打印n个空格 29 void print_spaces(int n) 30 { 31 int i; 32 33 for(i=1;i<=n;++i) 34 printf(" "); 35 } 36 37 //打印n个空格 38 void print_blank_lines(int n) 39 { 40 int i; 41 42 for(i=1;i<=n;++i) 43 printf("\n"); 44 } 45 46 //在第line行第col列打印一段文本 47 void print_text(int line,int col,char text[]) 48 { 49 print_blank_lines(line-1); 50 print_spaces(col-1); 51 printf("%s",text); 52 }
在随机位置生成文本"hi,November"。
2,实验任务2
task2_1.c
1 //利用局部static变量的特性,计算阶乘 2 3 #include<stdio.h> 4 long long fac(int n);//函数声明 5 6 int main() 7 { 8 int i,n; 9 10 printf("Enter n:"); 11 scanf("%d",&n); 12 for(i=1;i<=n;++i) 13 printf("%d!=%lld\n",i,fac(i)); 14 15 return 0; 16 } 17 18 //函数定义 19 long long fac(int n) 20 { 21 static long long p = 1; 22 23 p = p*n; 24 25 return p; 26 }

1 //利用局部static变量的特性,计算阶乘 2 3 #include<stdio.h> 4 long long fac(int n);//函数声明 5 6 int main() 7 { 8 int i,n; 9 10 printf("Enter n:"); 11 scanf("%d",&n); 12 for(i=1;i<=n;++i) 13 printf("%d!=%lld\n",i,fac(i)); 14 15 return 0; 16 } 17 18 //函数定义 19 long long fac(int n) 20 { 21 static long long p = 1; 22 printf("p=%lld\n",p); 23 p = p*n; 24 25 return p; 26 }

task2_2.c
p1=8,p2=17.
1 //练习:局部static变量特性 2 3 #include<stdio.h> 4 int func(int,int); //函数声明 5 6 int main() 7 { 8 int k=4,m=1,p1,p2; 9 10 p1=func(k,m); 11 p2=func(k,m); 12 printf("%d,%d\n",p1,p2); 13 14 return 0; 15 } 16 17 //函数定义 18 int func(int a,int b) 19 { 20 static int m=0,i=2; 21 22 i+=m+1; 23 m=i+a+b; 24 return m; 25 }

static修饰的变量会发生变化。
3,实验任务3
task3.c
1 #include<stdio.h> 2 long long func(int n);//函数声明 3 4 int main() 5 { 6 int n; 7 long long f; 8 9 while(scanf("%d",&n)!=EOF) 10 { 11 f=func(n);//函数调用 12 printf("n=%d,f=%lld\n",n,f); 13 } 14 15 return 0; 16 } 17 long long func(int n) 18 { 19 long long int ans; 20 if(n==0) 21 ans=0; 22 else 23 ans=2*(func(n-1)+1)-1; 24 return ans; 25 }

4,实验任务4
task4.1.c
1 #include<stdio.h> 2 int func(int n,int m); 3 4 int main() 5 { 6 int n, m; 7 8 while(scanf("%d%d", &n, &m) != EOF) 9 printf("n = %d, m = %d, ans = %d\n", n, m, func(n, m)); 10 11 return 0; 12 } 13 14 int func(int n,int m) 15 { 16 int i,s; 17 int a=1,b=1,c=1; 18 for(i=1;i<=n;++i) 19 a*=i; 20 for(i=1;i<=m;++i) 21 b*=i; 22 for(i=1;i<=n-m;++i) 23 c*=i; 24 s=a/(b*c); 25 return s 26 }
![]()
task4.2.c
1 #include<stdio.h> 2 int func(int n,int m); 3 4 int main() 5 { 6 int n,m; 7 8 while(scanf("%d%d", &n, &m) != EOF) 9 printf("n = %d, m = %d, ans = %d\n", n, m, func(n,m)); 10 11 return 0; 12 } 13 14 int func(int n,int m) 15 { 16 int ans; 17 if(n<m) 18 return 0; 19 if(n==0) 20 return 0; 21 if(m==0) 22 return 1; 23 else if(m==1) 24 return n; 25 else 26 ans=func(n-1,m)+func(n-1,m-1); 27 return ans; 28 }

5,实验任务5
task5.c
1 //Hanoi塔求解 2 #include<stdio.h> 3 #include<stdlib.h> 4 void hanoi( unsigned int n,char from,char temp,char to);//from=A,temp=B,to=C 5 void moveplate(unsigned int n,char from,char to);//n,表示第n个盘子 6 static int m=0; 7 8 int main() 9 { 10 unsigned int n; 11 while(scanf("%u",&n) !=EOF) 12 { 13 hanoi(n,'A','B','C'); 14 printf("\n"); 15 printf("一共移动了%d次",m); 16 m=0; 17 } 18 system("pause"); 19 return 0; 20 } 21 void hanoi( unsigned int n,char from,char temp,char to) 22 { 23 static int m=1; 24 if(n == 1) 25 { 26 moveplate(n,from,to);//moveplate 27 m+=1; 28 } 29 else 30 { 31 hanoi(n-1,from,to,temp); 32 moveplate(n,from,to); 33 hanoi(n-1,temp,from,to); 34 m+=1; 35 } 36 } 37 void moveplate(unsigned int n,char from,char to) 38 { 39 printf("%u:%c-->%c\n",n,from,to); 40 ++m; 41 }

6,实验任务6
task6.c
1 int main() 2 { 3 long s, t; 4 printf("Enter a number: "); 5 while (scanf("%ld", &s) != EOF) 6 { 7 t = func(s); // 函数调用 8 printf("new number is: %ld\n\n", t); 9 printf("Enter a number: "); 10 } 11 return 0; 12 } 13 14 long func(long s) 15 { 16 long a,n=0; 17 float i=0; 18 while(s>0) 19 { 20 a=s%10; 21 s=s/10; 22 if(a%2!=0) 23 { 24 n=a*pow(10,i)+n; 25 ++i; 26 } 27 } 28 return n; 29 }

7,实验任务7
task7.c
1 #include<stdio.h> 2 3 int main() 4 { 5 int A,B; 6 int s=1; 7 for(s=1;;++s) 8 { 9 int n=0,m=0; 10 int i=0,j=0; 11 int a[10],b[10]; 12 A=s*s; 13 B=s*s*s; 14 while(A!=0) 15 { 16 a[i]=A%10; 17 A=A/10; 18 ++i; 19 ++n; 20 } 21 while(B!=0) 22 { 23 b[j]=B%10; 24 B=B/10; 25 ++j; 26 ++m; 27 } 28 if(n+m==10) 29 { 30 int count=0; 31 for(i=0;i<n-1;++i) 32 { 33 if(a[i]==a[i+1]) 34 ++count; 35 } 36 for(j=0;j<m-1;++j) 37 { 38 if(b[j]==b[j+1]) 39 ++count; 40 } 41 for(i=0;i<n;++i) 42 { 43 for(j=0;j<m;++j) 44 { 45 if(a[i]==b[j]) 46 ++count; 47 } 48 } 49 if(count==0) 50 { 51 printf("%d",s); 52 return 0; 53 } 54 } 55 ++s; 56 } 57 return 0; 58 }

四,实验结论
见上
五,实验总结


浙公网安备 33010602011771号