实验3
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <windows.h> #define N 80 void printText(int line, int col, char text[]); void printSpaces(int n); void printBlankLines(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; printText(line, col, text); Sleep(1000); } return 0; } void printSpaces(int n) { int i; for(i=1;i<=n;++i) printf( ); } void printBlankLines(int n) { int i; for(i=1;i<=n;++i) printf(\n); } void printText(int line, int col,char text[]) { printBlankLines(line-1); printSpaces(col-1); printf(%s, text); }
功能:在屏幕上随机打印出10个“hi, May~”的弹幕
task2.1:
源代码:
#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; p = p * n; return p;
增加代码后运行截图:
task2_2:
预测结果:8,17
源代码:
#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变量的特性是:函数运行结束后,变量的值保存不变,且与其他函数中的相同字母表示的变量无关,再次运行该函数时,可以继续使用上次的结果继续运行。
task3:
#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 = %11d\n,n,f); } return 0; } long long fun(int n) { int i; long long f; if(n==1) f=1; else f=2*(fun(n-1)+1)-1; return f; }
task4:
#include<stdio.h> void hanoi(unsigned int n,char from,char temp,char to); void moveplate(unsigned int n,char from,char to); int i=0; int main() { unsigned int n; while(scanf(%u,&n) != EOF) { hanoi(n,'A','B','C'); printf(总共移动了%d次盘子,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); } i++; } void moveplate(unsigned int n,char from,char to) { printf(%u:%c-->%c\n,n,from,to); }
task5:
int main() { int n,a; for(n=4;n<=20;n+=2) { for(a=2;a<=n/2;a++) { if(is_prime(a) == 1 && is_prime(n-a) == 1) { printf(%d=%d+%d\n,n,a,n-a); break; } } } return 0; } int is_prime(int a) { if(a==2) return 1; else { int i=0; for(i=2;i<=(sqrt(a*1.0)+1);i++) { if(a%i==0) return 0; } } return 1; }
task 6:
#include <stdio.h> #include <math.h> long fun(long s); int main() { long s,t; printf(Enter a number: ); while(scanf(%ld,&s) != EOF) { t = fun(s); printf(new number is: %ld\n\n,t); printf(Enter a number: ); } return 0; } long fun(long s) { long m=0,n=0,k=0,d=0; int i=0; for(;s>=1;s=(s-n)/10) { n=s%10; if(n%2 == 1) { m=m*10+n; i++; } } while (m!=0) { k=m%10; d=d*10+k; m=m/10; } return d; }