实验3
实验任务1
#include<stdio.h> #include<stdlib.h> #include<time.h> #include<windows.h> #define N 80 void printfText(int line,int col,char text[]);//函数声明 void printfSpaces(int n);//函数声明 void printfBlankLines(int n); int main() { int line,col,i; char text[N] = "hi,May~"; srand(time(0));//以当前系统时间为随机种子 for(i=1;i<=10;++i) { line = rand()%25; col = rand()%80; printfText(line,col,text); Sleep(1000);//暂停1000ms } return 0; } //打印n个空格 void printfSpaces(int n) { int i; for(i=1;i<=n;++i) printf(" "); } //打印n行空白行 void printfBlankLines(int n) { int i; for(i=1;i<=n;++i) printf("\n"); } //在第line行第col列打印一段文本 void printfText(int line,int col,char text[]) { printfBlankLines(line-1);//打印n-1行空行 printfSpaces(col-1);//打印n-1列空行 printf("%s",text); }
运行结果
程序的功能:以系统时间为种子,在屏幕上随机输出字符串“hi,May~”
行数0~24,列数0~79随机选取
实验任务2
(1)
//利用局部static变量的特性,计算阶乘 #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 != %11d\n",i,fac(i)); return 0; } //函数定义 long long fac(int n) { static long long p=1; //printf("p = %11d\n",p); p = p * n; return p; }
运行结果
//利用局部static变量的特性,计算阶乘 #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 != %11d\n",i,fac(i)); return 0; } //函数定义 long long fac(int n) { static long long p=1; printf("p = %11d\n",p); p = p * n; return p; }
运行结果
(2)
//练习:局部static变量特性 #include<stdio.h> int func(int, int); //函数声明 int main() { int k=4, m=1, p1, p2; p1=func(k, m); //函数调用 p1=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 fun(int n);//函数声明 int main() { int n; long long f; while(scanf("%d",&n) != EOF) { f =fun(n);//函数调用 printf("n=%d,f=%lld\n",n,f); } return 0; } //函数定义 long long fun(int n) { long long i; if(n==0) i=0; else i=2*fun(n-1)+1; return i; }
运行结果
实验任务4
#include<stdio.h> #include<math.h> 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,i; while(scanf("%u",&n) != EOF) { hanoi(n,'A','B','C'); i=pow(2,n)-1; printf("\n一共移动了:%d次\n",i); } return 0; } void hanoi(unsigned int n,char from,char temp,char to) { 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 n,char from,char to) { printf("第%u个盘子:%c-->%c\n",n,from,to); }
运行结果
实验任务5
#include<stdio.h> #include<stdlib.h> #include<math.h> int is_prime(int n); int main() { int n,p,q,flagp,flagq; for(n=4;n<=20;n+=2) { p = 1; do { p++; q=n-p; flagp=is_prime(p); flagq=is_prime(q); } while(flagq*flagp == 0); printf("%d =%d + %d\n", n, p, q); } return 0; } int is_prime(int n) { int k; for(k=2;k<=sqrt(n);k++) if(n%k==0) { return 0; } return 1; }
运行结果
实验任务6
#include<stdio.h> long fun(long s); int main() { long s,t; printf("Enter a number:"); while(scanf("%d",&s) != EOF) { t= fun(s);//函数调用 printf("new number is:%ld\n\n",t); printf("Enter a number:"); } return 0; } //函数定义 long fun(long s) { int a,b,c; b=0; c=1; while(s!=0) { a=s%10; if(a%2==0) { b=b; } if(a%2==1) { b=b+a*c; c=c*10; } s=s/10; } return b; }
运行结果
实验总结:对循环的运用还不熟悉,对static 变量和函数定义还需继续学习与练习。