实验3
task1.c 程序的功能是: 打印十个hi,May~,间隔的行数在0~24之间随机取值,列数在0~79之间随机取值
#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); // 暂停1000ms }return 0; }// 打印n个空格 void printSpaces(int n) {int i; for(i=1; i<=n; ++i) printf(" "); }// 打印n行空白行 void printBlankLines(int n) {int i; for(i=1; i<=n; ++i) printf("\n"); }// 在第line行第col列打印一段文本 void printText(int line, int col, char text[]) {printBlankLines(line-1); // 打印n-1行空行 printSpaces(col - 1);// 打印n-1列空格 printf("%s", text); }// 利用局部static变量的特性,计算阶乘
task2.c(未增加代码)
// 利用局部static变量的特性,计算阶乘 #include <stdio.h> long long fac(int n); // 函数声明 int main() { int i, n; printf("Enter n: "); scanf_s("%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; }
task2.c(增加代码后) static变量p只初始化一次等于一,随后便随着代码p=p*n改变自己的值。
// 利用局部static变量的特性,计算阶乘 #include <stdio.h> long long fac(int n); // 函数声明 int main(){ int i, n; printf("Enter n: "); scanf_s("%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=%11d\n", p); p=p*n; return p; }
task2_2.c 理论运行结果是8和17
// 练习:局部static变量特性 #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; }
task3.c
#include <stdio.h> long long fun(int n); // 函数声明 int main() { int n; long long f; while (scanf_s("%d", &n) != EOF) { f = fun(n); // 函数调用 printf("n = %d, f = %lld\n", n, f); }return 0; }// 函数定义// 待补足。。 long long fun(int n) { long long temp; if (n == 1) temp =1; else temp = 2 * fun(n - 1) + 1; return temp; }
task4.c
#include <stdio.h> int i; void hanoi(unsigned int n, char x, char y, char z); void replace(unsigned int n, char x, char z); int main() { unsigned int n; while (scanf_s("%u", &n) != EOF) { i = 0; hanoi(n, 'A', 'B', 'C'); printf("一共移动了%d次\n", i); } return 0; } void hanoi(unsigned int n, char x, char y, char z) { int temp=0; if (n == 1) replace(n, x, z); else { hanoi(n - 1, x, z, y); replace(n, x, z); hanoi(n - 1, y, x, z); } } void replace(unsigned int n, char x, char z) {i++; printf("第%u个盘子:%c-->%c\n", n, x, z); }
task5.c
#include<stdio.h> #include<stdlib.h> #include<math.h> int is_prime(int n); int main() { int n, p, q, f = 0, s = 0; for (n = 4; n <= 20; n += 2) { for (p = 2; p <= n; p++) { q = n - p; f = is_prime(p); s = is_prime(q); if (f*s==1) { printf("%d=%d+%d\n", n, p, q); break; } } } return 0; } int is_prime(int n) { int i; for (i = 2; i <= sqrt(n); i++) if (n % i == 0) return 0; return 1; }
task6.c
#include <stdio.h> long fun(long s); // 函数声明 int main() { long s, t; printf("Enter a number: "); while (scanf_s("%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 i, j=1, k=0; while (s != 0) { i = s % 10; if (i % 2 != 0) { k += i * j; j *= 10; } s = s / 10; } return k; }