c实验3
实验任务1 #include<stdio.h> #include<stdlib.h> #include<time.h> #include<windows.h> #define N 80 void print_text(int line,int col,char text[]); void print_spaces(int n); void print_blank_lines(int n); int main(){ int line,col,i; char text[N]="hi,April~"; srand(time(0)); for(i=1;i<=10;++i){ line=rand()%25; col=rand()%80; print_text(line,col,text); Sleep(1000); } return 0; } //打印n个空格 void print_spaces(int n) { int i; for(i=1;i<=n;++i) printf(" "); } //打印n行空白行 void print_blank_lines(int n) { int i; for(i=1;i<=n;++i) printf("\n"); } //在第line行第col列打印一段文本 void print_text(int line,int col,char text[]) { print_blank_lines(line-1); print_spaces(col-1); printf("%s",text); }
该程序的功能是在第1-24行和第1-79列的范围内开始的任意10个地方各打印一个“
hi,April~”
实验任务2
#include<stdio.h> long long fac(int n); int main() { int i,n; printf("Enter n:"); scanf("%d",&n); for(i=1;i<=n;i++) printf("%d!=%lld\n",i,fac(i)); return 0; } long long fac(int n) { static long long p=1; p=p*n; return p; }
#include<stdio.h> long long fac(int n); int main() { int i,n; printf("Enter n:"); scanf("%d",&n); for(i=1;i<=n;i++) printf("%d!=%lld\n",i,fac(i)); return 0; } long long fac(int n) { static long long p=1; printf("%lld\n",p); p=p*n; return p; }
#include<stdio.h> int func(int,int); int main() { int k=4,m=1,p1,p2; p1=func(k,m); p2=func(k,m); printf("%d,%d\n",p1,p2); return 0; } int func(int a,int b) { static int m=0,i=2; i+=m+1; m=i+a+b; return m; }
实验运行结果和理论分析得到的结果一致。局部static变量只在第一次被赋初值,之后每次执行都会保留上一次的值。
实验任务3 #include<stdio.h> long long func(int n); int main() { int n; long long f; while(scanf("%d",&n)!=EOF) { f=func(n); printf("n=%d,f=%lld\n",n,f); } return 0; } long long func(int n) { if(n==0) return 0; else return(2*func(n-1)+1); }
实验任务4 #include<stdio.h> int func(int n,int m); int main() { int n,m; while(scanf("%d%d",&n,&m)!=EOF) printf("n=%d,m=%d,ans=%d\n",n,m,func(n,m)); return 0; } int func(int n,int m) { if(m<=n) { if(m==0||n==m) return 1; else if(m==1) return n; else return(func(n-1,m)+func(n-1,m-1)); } else return(0); }
实验任务5 #include <stdio.h> #include <math.h> double mypow(int x,int y); int main() { int x, y; double ans; while(scanf("%d%d", &x, &y) != EOF) { ans = mypow(x, y); printf("%d的%d次方: %g\n\n", x,y,ans); } return 0; } double mypow(int x,int y) { int i; double sum=1; if(y>=0) { for(i=1;i<=y;i++) sum*=x; return sum; } else { for(i=1;i<=-y;i++) sum/=x; return sum; } }
#include <stdio.h> #include <math.h> double mypow(int x,int y); int main() { int x, y; double ans; while(scanf("%d%d", &x, &y) != EOF) { ans = pow(x, y); printf("%d的%d次方: %g\n\n", x,y,ans); } return 0; } double mypow(int x,int y) { if(y==0) return 0; else if(y>0) return mypow(x,y-1)*x; else return mypow(x,y+1)/x; }
实验任务6 #include<stdio.h> #include<stdlib.h> int m=0; void hanoi(unsigned int n,char from,char temp,char to); void moveplate(unsigned int n,char from,char to); int main() { unsigned int n; while(scanf("%u",&n)!=EOF) { hanoi(n,'A','B','C'); printf("一共移动了%d次\n",m); m=0; } system("pause"); return 0; } void hanoi(unsigned int n,char from,char temp,char to) { m++; if(n==1) moveplate(n,from,to); else { hanoi(n-1,from,to,temp); moveplate(n,from,to); hanoi(n-1,temp,from,to); } } void moveplate(unsigned int nth,char from,char to) { printf("%u:%c-->%c\n",nth,from,to); }
实验任务7 #include<stdio.h> #include<stdlib.h> #include<math.h> int is_prime(int n); int main() { int i,j; for(i=4;i<=20;i+=2) { for(j=1;j<=i;j++) { if(is_prime(j)&&is_prime(i-j)) { printf("%d=%d+%d\n",i,j,i-j); break; } } } system("pause"); return 0; } int is_prime(int n) { if(n==1) return 0; else { int i,flag=1; for(i=2;i<=sqrt(1.0*n);i++) { if(n%i==0) { flag=0; break; } } return flag; } }
实验任务8 #include<stdio.h> #include<stdlib.h> long func(long s); int main() { long s,t; printf("Enter a number:"); while(scanf("%ld",&s)!=EOF) { t=func(s); printf("new number is:%ld\n\n",t); printf("Enter a number:"); } return 0; } long func(long s) { long m,r=s,sum=0; while(r!=0) { m=r%10; if(m%2) sum=sum*10+m; r/=10; } r=sum,sum=0; while(r!=0) { m=r%10; sum=sum*10+m; r/=10; } return sum; }
通过本次实验,我实际使用了全局变量和静态变量,纠正了还没有熟练掌握的一些问题,比如if后的大括号和对齐问题。实验任务2和3一开始我把ll看成11了,后来发现不对,应该是ll.