第三次实验
1. 实验任务1
#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); }
该程序的作用是在0~24行,0~79列的范围中随机输出10个“hi May~”
2. 实验任务2
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! = %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("p = %lld\n", p); p = p * n; return p; }

task2_2.
#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. 实验任务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 result; if(n==0) result=0; else result=2*fun(n-1)+1; return result; }

4. 实验任务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,sum; while (scanf( "%u", & n) != EOF) { sum=pow(2,n)-1; hanoi(n, 'A', 'B', 'C'); printf("\n一共移动了%d次\n\n",sum); } 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. 实验任务5
#include <stdio.h> #include <math.h> int prime(int n); int main() { int i,j; for(i=4;i<=20;i+=2) { for(int j=2; j<=i/2; j++) { if(prime(j) && prime(i-j)) { printf("%d = %d + %d\n",i,j,i-j); break; } } } return 0; } int prime(int n) { if(n==2) return 1; for(int i=2; i<=sqrt(n); i++) { if(n%i==0) return 0; } return 1; }

6. 实验任务6
#include <stdio.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) { int a,b=0; while(s!=0) { a=s%10; if(a%2!=0) { b=10*b; b=b+a; } s=s/10; } while (b!=0) { s=10*s; s=s+b%10; b=b/10; } return s; }


浙公网安备 33010602011771号