实验三
task1
源代码:
#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, November~"; srand(time(0)); // 以当前系统时间作为随机种子 for(i = 1; i <= 10; ++i) { line = rand() % 25; col = rand() % 80; print_text(line, col, text); Sleep(1000); // 暂停1000ms } 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); // 打印(line-1)行空行 print_spaces(col-1); // 打印(col-1)列空格 printf("%s", text); // 在第line行、col列输出text中字符串 }
运行结果:

本程序实现随机在某行打印“hi,November~”字样。
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; printf("1 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变量在函数运行结束后还会保留数值。
task3
源代码:
#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){ long long p=0; int i; for(i = 0; i < n ; i++){ p = ( p + 1 ) * 2 - 1; } return p; }
运行结果:

task4
源代码:
#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){ int i,j; long long p=1; for(i=n-m+1;i<=n;i++) p=p*i; for(j=1;j<=m;j++) p=p/j; return p; }
运行结果:

task5
源代码:
#include <stdio.h> void move(int n, char A, char B, char C); int main() { int n; char A, B, C; while (scanf("%d", &n) != EOF) { int step = 0; move(n, 'A', 'B', 'C'); for (n; n > 0; n--) { step = 2 * step + 1; } printf("\n"); printf("一共移动了%d次\n", step); printf("\n"); } return 0; } void move(int n, char A, char B, char C) { if (n == 1) { printf("%d:%c --> %c\n", n, A, C); } else { move(n - 1, 'A', 'C', 'B'); printf("%d:%c --> %c\n", n, A, C); move(n - 1, 'B', 'A', 'C'); } }
运行结果:

task6
源代码:
#include <stdio.h> #include <math.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){ int a; long long b=0; int c; long long d=0; while(s>0){ a=s%10; if(a%2==0){ printf(""); } else{ b=b*10+a; } s=s/10; } while(b>0){ c=b%10; d=d*10+c; b=b/10; } return d; }
运行结果:

浙公网安备 33010602011771号