code:blocks的头文件好像包含了getch/putch函数,所以需要加"c下面的练习代码都没有加"conio.h" 或书中的自定义头文件"getputch.h"。
练习7-1
//"寻找幸运数字“的程序中用了scanf函数来处理玩家从键盘输入的信息。使用”getputch.h"库改写程序,以便通过getch函数来处理玩家从键盘输入的信息。
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#define MAX_STAGE 10
#define swap(type, x, y) do { type t = x; x = y; y = t; } while (0)
int main(void)
{
int i, j, stage;
int dgt[9] = {
1, 2, 3, 4, 5, 6, 7, 8, 9};
int a[8];
double jikan;
clock_t start, end;
srand(time(NULL));
printf("请输入缺少的数字。\n");
start = clock();
for (stage = 0; stage < MAX_STAGE; stage++) {
int x = rand() % 9;
int no;
i = j = 0;
while (i < 9) {
if (i != x)
a[j++] = dgt[i];
i++;
}
for (i = 7; i > 0; i--) {
int j = rand() % (i + 1);
if (i != j)
swap(int, a[i], a[j]);
}
for (i = 0; i < 8; i++)
printf("%d ", a[i]);
printf(":");
do {
no = getch(); //注意getch函数读取的是字符型,所以要-'0'才能显示出对应数字
printf("%d ",no-'0');
} while (no != dgt[x]+'0');
printf("\n");
}
end = clock();
jikan = (double)(end - start) / CLOCKS_PER_SEC;
printf("用时%.1f秒。\n", jikan);
if (jikan > 25.0)
printf("反应太慢了。\n");
else if (jikan > 20.0)
printf("反应有点慢呀。\n");
else if (jikan > 17.0)
printf("反应还行吧。\n");
else
printf("反应真快啊。\n");
return 0;
}
练习7-2
//改写程序,把在上一练习中生成的“寻找幸运数字”中用于出题的数字由1~9更改为0~9
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#define MAX_STAGE 10
#define swap(type, x, y) do { type t = x; x = y; y = t; } while (0)
int main(void)
{
int i, j, stage;
int dgt[10] = {
0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; // 数组加数组0同时元素个数增加
int a[9]; //改
double jikan;
clock_t start, end;
srand(time(NULL));
printf("请输入缺少的数字。\n");
start = clock();
for (stage = 0; stage < MAX_STAGE; stage++) {
int x = rand() % 10; //改
int no;
i = j = 0;
while (i < 10) {
//改
if (i != x)
a[j++] = dgt[i];
i++;
}
for (i = 8; i > 0; i--) {
//改
int j = rand() % (i + 1);
if (i != j)
swap(int, a[i], a[j]);
}
for (i = 0; i < 9; i++) //改
printf("%d ", a[i]);
printf(":");
do {
no = getch();
printf("%d ",no-'0');
} while (no != dgt[x]+'0');
printf("\n");
}
end = clock();
jikan = (double)(end - start) / CLOCKS_PER_SEC;
printf("用时%.1f秒。\n", jikan);
if (jikan > 25.0)
printf("反应太慢了。\n");
else if (jikan > 20.0)
printf("反应有点慢呀。\n");
else if (jikan > 17.0)
printf("反应还行吧。\n");
else
printf("反应真快啊。\n");
return 0;
}
练习7-3
//改写程序,把List 7-11的“寻找重复数字”中用于出题的数字由1~9更改成0~9。
#include <ctype.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#define MAX_STAGE 10
#define swap(type, x, y) do { type t = x; x = y; y = t; } while (0)
int main(void)
{
int i, j, x, stage;
int dgt[10] = {
0, 1, 2, 3