明解C语言 中级篇 第四章答案
练习4-1
- /* 珠玑妙算 */
- #include <time.h>
- #include <ctype.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- /*--- 生成4个不同数字的组合并存入数组x ---*/
- void make4digits(int x[])
- {
- int i, j, val;
- for (i = 0; i < 4; i++) {
- do {
- val = rand() % 10; /* 0~9的随机数 */
- for (j = 0; j < i; j++) /* 是否已获得此数值 */
- if (val == x[j])
- break;
- } while (j < i); /* 循环直至获得不重复的数值 */
- x[i] = val;
- }
- }
- /*--- 检查已输入的字符串s的有效性 ---*/
- int check(const char s[])
- {
- int i, j;
- if (strlen(s) != 4) /* 字符串长度不为4 */
- return 1;
- for (i = 0; i < 4; i++) {
- if (!isdigit(s[i]))
- return 2; /* 包含了除数字以外的字符 */
- for (j = 0; j < i; j++)
- if (s[i] == s[j])
- return 3; /* 含有相同数字 */
- }
- return 0; /* 字符串有效 */
- }
- /*--- hit和blow的判断 ---*/
- void judge(const char s[], const int no[], int* hit, int* blow)
- {
- int i, j;
- *hit = *blow = 0;
- for (i = 0; i < 4; i++) {
- for (j = 0; j < 4; j++) {
- if (s[i] == '0' + no[j]) /* 数字一致 */
- if (i == j)
- (*hit)++; /* hit(位置也一致)*/
- else
- (*blow)++; /* blow(位置不一致)*/
- }
- }
- }
- /*--- 显示判断结果 ---*/
- void print_result(int snum, int spos)
- {
- if (spos == 4)
- printf("回答正确!!");
- else if (snum == 0)
- printf(" 这些数字里没有答案数字。\n");
- else {
- printf(" 这些数字里包括%d个答案数字。\n", snum);
- if (spos == 0)
- printf(" 但是数字的位置都不一致。\n");
- else
- printf(" 其中有%d个数字的位置是一致的。\n", spos);
- }
- putchar('\n');
- }
- int main(void)
- {
- int try_no = 0; /* 输入次数 */
- int chk; /* 已输入的字符串的检查结果 */
- int hit; /* 位置和数字都正确的数字个数 */
- int blow; /* 数字正确但位置不正确的数字个数 */
- int no[4]; /* 要猜的数字串 */
- char buff[10]; /* 用于存放读取的数字串的字符串 */
- clock_t start, end; /* 开始时间/结束时间 */
- int cnt;
- srand(time(NULL)); /* 设定随机数种子 */
- puts("■ 来玩珠玑妙算吧。");
- puts("■ 请猜4个数字。");
- puts("■ 其中不包含相同数字。");
- puts("■ 请像4307这样连续输入数字。");
- puts("■ 不能输入空格字符。\n");
- make4digits(no); /* 生成4个数字各不相同的数字串 */
- printf("请输入限定次数:");
- scanf("%d", &cnt);
- start = clock(); /* 开始计算 */
- do {
- do {
- printf("请输入:");
- scanf("%s", buff); /* 读取为字符串 */
- chk = check(buff); /* 检查读取到的字符串 */
- switch (chk) {
- case 1: puts("\a请确保输入4个字符。"); break;
- case 2: puts("\a请不要输入除了数字以外的字符。"); break;
- case 3: puts("\a请不要输入相同的数字。"); break;
- }
- } while (chk != 0);
- try_no++;
- judge(buff, no, &hit, &blow); /* 判断 */
- print_result(hit + blow, hit); /* 显示判断结果 */
- } while (hit < 4&&try_no<cnt);
- end = clock(); /* 计算结束 */
- if(try_no==cnt)
- {
- printf("次数已经耗尽,游戏结束");
- }
- printf("用了%d次。\n用时%.1f秒。\n",
- try_no, (double)(end - start) / CLOCKS_PER_SEC);
- return 0;
- }
练习4-2
- /* 珠玑妙算 */
- #include <time.h>
- #include <ctype.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- /*--- 生成4个不同数字的组合并存入数组x ---*/
- void make4digits(int x[])
- {
- int i, j, val;
- for (i = ; i < ; i++) {
- do {
- val = rand() % ; /* 0~9的随机数 */
- for (j = ; j < i; j++) /* 是否已获得此数值 */
- if (val == x[j])
- break;
- } while (j < i); /* 循环直至获得不重复的数值 */
- x[i] = val;
- }
- }
- /*--- 检查已输入的字符串s的有效性 ---*/
- int check(const char s[])
- {
- int i, j;
- if (strlen(s) != ) /* 字符串长度不为4 */
- return ;
- for (i = ; i < ; i++) {
- if (!isdigit(s[i]))
- return ; /* 包含了除数字以外的字符 */
- for (j = ; j < i; j++)
- if (s[i] == s[j])
- return ; /* 含有相同数字 */
- }
- return ; /* 字符串有效 */
- }
- /*--- hit和blow的判断 ---*/
- void judge(const char s[], const int no[], int* hit, int* blow)
- {
- int i, j;
- *hit = *blow = ;
- for (i = ; i < ; i++) {
- for (j = ; j < ; j++) {
- if (s[i] == '' + no[j]) /* 数字一致 */
- if (i == j)
- (*hit)++; /* hit(位置也一致)*/
- else
- (*blow)++; /* blow(位置不一致)*/
- }
- }
- }
- /*--- 显示判断结果 ---*/
- void print_result(int snum, int spos)
- {
- if (spos == )
- printf("回答正确!!");
- else if (snum == )
- printf(" 这些数字里没有答案数字。\n");
- else {
- printf(" 这些数字里包括%d个答案数字。\n", snum);
- if (spos == )
- printf(" 但是数字的位置都不一致。\n");
- else
- printf(" 其中有%d个数字的位置是一致的。\n", spos);
- }
- putchar('\n');
- }
- int main(void)
- {
- int try_no = ; /* 输入次数 */
- int chk; /* 已输入的字符串的检查结果 */
- int hit; /* 位置和数字都正确的数字个数 */
- int blow; /* 数字正确但位置不正确的数字个数 */
- int no[]; /* 要猜的数字串 */
- char buff[]; /* 用于存放读取的数字串的字符串 */
- int tips;
- int tem, i, j;
- int cnt = ;
- int m;
- int p = ;
- clock_t start, end; /* 开始时间/结束时间 */
- srand(time(NULL)); /* 设定随机数种子 */
- puts("■ 来玩珠玑妙算吧。");
- puts("■ 请猜4个数字。");
- puts("■ 其中不包含相同数字。");
- puts("■ 请像4307这样连续输入数字。");
- puts("■ 不能输入空格字符。\n");
- printf("限定提示次数:");
- scanf("%d", &m);
- make4digits(no); /* 生成4个数字各不相同的数字串 */
- start = clock(); /* 开始计算 */
- do {
- do {
- printf("请输入:");
- scanf("%s", buff); /* 读取为字符串 */
- chk = check(buff); /* 检查读取到的字符串 */
- switch (chk) {
- case : puts("\a请确保输入4个字符。"); break;
- case : puts("\a请不要输入除了数字以外的字符。"); break;
- case : puts("\a请不要输入相同的数字。"); break;
- }
- } while (chk != );
- try_no++;
- judge(buff, no, &hit, &blow); /* 判断 */
- print_result(hit + blow, hit); /* 显示判断结果 */
- if (hit != &&(try_no%==)&&(p!=m)) {
- puts("需要提示吗?需要----1 不需要----0");
- scanf("%d", &tem);
- if (tem == ) {
- printf("请选择提示类型:1.提示hit数字中最前面的字符。2提示blow的数字中最末尾的1个字符");
- scanf("%d", &tips);
- if (tips == )
- {
- for (i = ; i < ; i++) {
- if ((buff[i] - '') == no[i]) {
- printf("hit第一位是%d\n", no[i]);
- p++;
- break;
- }
- }
- }if (tips == ) {
- cnt = ;
- for (i = ; i >= ; i--) {
- for (j = ; j >= ; j--) {
- if ((buff[j] - '') == no[i]) {
- if (i != j) {
- printf("blow的最后一位是%d\n", (buff[j] - ''));
- p++;
- cnt++;
- }
- }
- }
- if (cnt != )
- break;
- }
- }
- }
- }
- } while (hit < );
- end = clock(); /* 计算结束 */
- printf("用了%d次。\n用时%.1f秒。\n",
- try_no, (double)(end - start) / CLOCKS_PER_SEC);
- return ;
- }
练习4-3
- /* 珠玑妙算 */
- #include <time.h>
- #include <ctype.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- /*--- 生成num个不同数字的组合并存入数组x ---*/
- void make4digits(int x[],int num)
- {
- int i, j, val;
- for (i = ; i < num; i++) {
- do {
- val = rand() % ; /* 0~9的随机数 */
- for (j = ; j < i; j++) /* 是否已获得此数值 */
- if (val == x[j])
- break;
- } while (j < i); /* 循环直至获得不重复的数值 */
- x[i] = val;
- }
- }
- /*--- 检查已输入的字符串s的有效性 ---*/
- int check(const char s[],int num)
- {
- int i, j;
- if (strlen(s) != num) /* 字符串长度不为num */
- return ;
- for (i = ; i < num; i++) {
- if (!isdigit(s[i]))
- return ; /* 包含了除数字以外的字符 */
- for (j = ; j < i; j++)
- if (s[i] == s[j])
- return ; /* 含有相同数字 */
- }
- return ; /* 字符串有效 */
- }
- /*--- hit和blow的判断 ---*/
- void judge(const char s[], const int no[], int* hit, int* blow, int num)
- {
- int i, j;
- *hit = *blow = ;
- for (i = ; i <num ; i++) {
- for (j = ; j < num; j++) {
- if (s[i] == '' + no[j]) /* 数字一致 */
- if (i == j)
- (*hit)++; /* hit(位置也一致)*/
- else
- (*blow)++; /* blow(位置不一致)*/
- }
- }
- }
- /*--- 显示判断结果 ---*/
- void print_result(int snum, int spos,int num)
- {
- if (spos == num)
- printf("回答正确!!");
- else if (snum == )
- printf(" 这些数字里没有答案数字。\n");
- else {
- printf(" 这些数字里包括%d个答案数字。\n", snum);
- if (spos == )
- printf(" 但是数字的位置都不一致。\n");
- else
- printf(" 其中有%d个数字的位置是一致的。\n", spos);
- }
- putchar('\n');
- }
- int main(void)
- {
- int try_no = ; /* 输入次数 */
- int chk; /* 已输入的字符串的检查结果 */
- int hit; /* 位置和数字都正确的数字个数 */
- int blow; /* 数字正确但位置不正确的数字个数 */
- static int num;
- int no[]; /* 要猜的数字串 */
- char buff[]; /* 用于存放读取的数字串的字符串 */
- clock_t start, end; /* 开始时间/结束时间 */
- srand(time(NULL)); /* 设定随机数种子 */
- puts("■ 来玩珠玑妙算吧。");
- puts("■ 其中不包含相同数字。");
- puts("■ 请像4307这样连续输入数字。");
- puts("■ 不能输入空格字符。\n");
- printf("请设置珠玑妙算的位数:");
- scanf("%d", &num);
- make4digits(no,num); /* 生成4个数字各不相同的数字串 */
- start = clock(); /* 开始计算 */
- do {
- do {
- printf("请输入:");
- scanf("%s", buff); /* 读取为字符串 */
- chk = check(buff,num); /* 检查读取到的字符串 */
- switch (chk) {
- case : puts("\a请确保输入个字符。"); break;
- case : puts("\a请不要输入除了数字以外的字符。"); break;
- case : puts("\a请不要输入相同的数字。"); break;
- }
- } while (chk != );
- try_no++;
- judge(buff, no, &hit, &blow,num); /* 判断 */
- print_result(hit + blow, hit,num); /* 显示判断结果 */
- } while (hit < num);
- end = clock(); /* 计算结束 */
- printf("用了%d次。\n用时%.1f秒。\n",
- try_no, (double)(end - start) / CLOCKS_PER_SEC);
- return ;
- }
练习4-4
- /* 珠玑妙算 */
- #include <time.h>
- #include <ctype.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- /*--- 生成4个不同数字的组合并存入数组x ---*/
- void make4digits(int x[])
- {
- int i, j, val;
- for (i = ; i < ; i++) {
- val = rand() % ; /* 0~9的随机数 */
- x[i] = val;
- }
- }
- /*--- 检查已输入的字符串s的有效性 ---*/
- int check(const char s[])
- {
- int i, j;
- if (strlen(s) != ) /* 字符串长度不为4 */
- return ;
- for (i = ; i < ; i++) {
- if (!isdigit(s[i]))
- return ; /* 包含了除数字以外的字符 */
- }
- return ; /* 字符串有效 */
- }
- /*--- hit和blow的判断 ---*/
- void judge(const char s[], const int no[], int* hit, int* blow)
- {
- int i, j;
- *hit = *blow = ;
- for (i = ; i < ; i++) {
- for (j = ; j < ; j++) {
- if (s[i] == '' + no[j]) /* 数字一致 */
- if (i == j)
- (*hit)++; /* hit(位置也一致)*/
- else
- (*blow)++; /* blow(位置不一致)*/
- }
- }
- }
- /*--- 显示判断结果 ---*/
- void print_result(int snum, int spos)
- {
- if (spos == )
- printf("回答正确!!");
- else if (snum == )
- printf(" 这些数字里没有答案数字。\n");
- else {
- printf(" 这些数字里包括%d个答案数字。\n", snum);
- if (spos == )
- printf(" 但是数字的位置都不一致。\n");
- else
- printf(" 其中有%d个数字的位置是一致的。\n", spos);
- }
- putchar('\n');
- }
- int main(void)
- {
- int try_no = ; /* 输入次数 */
- int chk; /* 已输入的字符串的检查结果 */
- int hit; /* 位置和数字都正确的数字个数 */
- int blow; /* 数字正确但位置不正确的数字个数 */
- int no[]; /* 要猜的数字串 */
- char buff[]; /* 用于存放读取的数字串的字符串 */
- clock_t start, end; /* 开始时间/结束时间 */
- int i;
- srand(time(NULL)); /* 设定随机数种子 */
- puts("■ 来玩珠玑妙算吧。");
- puts("■ 请猜4个数字。");
- puts("■ 请像4307这样连续输入数字。");
- puts("■ 不能输入空格字符。\n");
- make4digits(no); /* 生成4个数字各不相同的数字串 */
- for (i = ; i < ; i++) {
- printf("%d", no[i]);
- }
- start = clock(); /* 开始计算 */
- do {
- do {
- printf("请输入:");
- scanf("%s", buff); /* 读取为字符串 */
- chk = check(buff); /* 检查读取到的字符串 */
- switch (chk) {
- case : puts("\a请确保输入4个字符。"); break;
- case : puts("\a请不要输入除了数字以外的字符。"); break;
- }
- } while (chk != );
- try_no++;
- judge(buff, no, &hit, &blow); /* 判断 */
- print_result(hit + blow, hit); /* 显示判断结果 */
- } while (hit < );
- end = clock(); /* 计算结束 */
- printf("用了%d次。\n用时%.1f秒。\n",
- try_no, (double)(end - start) / CLOCKS_PER_SEC);
- return ;
- }
练习4-5
想不出来可以直接输入汉字的办法,所以一般来说就将数字赋予不同的数字,然后生成0~7的随机数来猜吧
练习4-7
想不出来
练习4-8
- /* 猜数游戏(其五:显示输入记录)*/
- #include <time.h>
- #include <stdio.h>
- #include <stdlib.h>
- #define MAX_STAGE 10 /* 最多可以输入的次数 */
- void make4digits(int x[])
- {
- int i, j, val;
- for (i = ; i < ; i++) {
- do {
- val = rand() % ; /* 0~9的随机数 */
- for (j = ; j < i; j++) /* 是否已获得此数值 */
- if (val == x[j])
- break;
- } while (j < i); /* 循环直至获得不重复的数值 */
- x[i] = val;
- }
- }
- int main(void)
- {
- int i;
- int stage; /* 已输入的次数 */
- int no; /* 读取的值 */
- int ans[]; /* 目标数字 */
- int num[MAX_STAGE]; /* 读取的值的历史记录 */
- srand(time(NULL)); /* 设定随机数的种子 */
- make4digits(ans);
- int x;
- x = ans[] + ans[] * + ans[] *;
- printf("请猜一个0~999的整数。\n\n");
- printf("%d", x);
- stage = ;
- do {
- printf("还剩%d次机会。是多少呢:", MAX_STAGE - stage);
- scanf("%d", &no);
- num[stage++] = no; /* 把读取的值存入数组 */
- if (no > x)
- printf("\a再小一点。\n");
- else if (no < x)
- printf("\a再大一点。\n");
- } while (no != x && stage < MAX_STAGE);
- if (no != x)
- printf("\a很遗憾,正确答案是%d。\n", x);
- else {
- printf("回答正确。\n");
- printf("您用了%d次猜中了。\n", stage);
- }
- puts("\n--- 输入记录 ---");
- for (i = ; i < stage; i++)
- printf(" %2d : %4d %+4d\n", i + , num[i], num[i] - x);
- return ;
- }
明解C语言 中级篇 第四章答案的更多相关文章
- 明解C语言 入门篇 第四章答案
练习4-1 #include <stdio.h> int main(void) { int no; int x; do{ printf("请输入一个整数:"); sca ...
- 明解C语言 中级篇 第三章答案
练习3-1 /* 猜拳游戏(其四:分割函数/显示成绩)*/ #include <time.h> #include <stdio.h> #include <stdlib.h ...
- 明解C语言 入门篇 第六章答案
练习6-1 /* 求两个整数中的最小值 */ #include <stdio.h> /*--- 返回三个整数中的最小值 ---*/ int min2(int a, int b) { int ...
- 明解C语言 入门篇 第五章答案
练习5-1 /* 依次把1.2.3.4.5 赋值给数组的每个元素并显示(使用for语句) */ #include <stdio.h> int main(void) { int i; ]; ...
- 明解C语言 入门篇 第三章答案
练习3-1 #include <stdio.h> int main() { int x; int y; puts("请输入两个整数."); printf("整 ...
- 明解C语言 入门篇 第十三章答案
练习13-1 /* 打开与关闭文件 */ #include <stdio.h> int main(void) { ]; FILE* fp; printf("请输入你要打开的文件& ...
- 明解C语言 入门篇 第十一章答案
练习11-1 /* 用指针实现的字符串的改写 */ #include <stdio.h> int main(void) { "; printf("p = \" ...
- 明解C语言 入门篇 第七章答案
练习7-1 #include <stdio.h> int main() { int n; printf(,, ); //此行显示结果为 4 3 6 因为1的字节就是为4,而-1的字节也是4 ...
- 明解C语言 中级篇 第二章答案
练习2-1 /* 倒计时后显示程序运行时间 */ #include <time.h> #include <stdio.h> /*--- 等待x毫秒 ---*/ int slee ...
随机推荐
- 06-Django视图
什么是视图? 视图就是应用中views.py文件中的函数,视图函数的第一个参数必须是request(HttpRequest)对象.返回的时候必须返回一个HttpResponse对象或子对象(包含Htt ...
- Generating a new SSH key
Open Git Bash. Paste the text below, substituting in your GitHub email address. $ ssh-keygen -t rsa ...
- C++值类别, move, perfect forward
推荐看链接顺序看,第一个链接很好地讲述了值类别地特性,图形很好理解.第二个链接介绍常见值类别的示例,帮助熟悉.第三个链接是第二个链接的补充,让你理解为什么需要std::move以及perfect fo ...
- CENTOS 7 升级内核版本(附带升级脚本)
写在前面的话 对于系统而言,除非是那种安全性要求非常高的公司或者经常会有第三方安全机构对其漏洞扫描的才容易涉及到系统的内核升级,比如之前呆过一个公司,因为需要做三级等保的原因,就会涉及到系统扫描,这时 ...
- python基础(7):基本数据类型二(list、tuple)、range
1. 列表 1.1 列表的介绍 列表是python的基础数据类型之⼀,其他编程语⾔也有类似的数据类型.比如JS中的数组, java中的数组等等.它是以[ ]括起来,每个元素⽤','隔开⽽且可以存放各种 ...
- vscode 设置代码格式化缩进为2个空格
打开文件——>首选——>设置 输入搜索 tabsize 按照下图设置即可,然后打开 注意:如果不将Detect Indentation 勾选取消 以前用tab创建的忘记依然为4个空格
- 邮Z速递物流,让用户密码在网络中遨游
" 最近分析快递行业的APP上瘾了,求解救." 邮政作为快递行业一个傻大黑的存在,一直很奇怪,我一直在纳闷,邮政和EMS到底是不是一家,在很多网点,它们是一体的存在,但很多东西,又 ...
- 依赖弹出框lhdaiglog的基于WebUploader批量上传图片
初始上传界面 //链接添加弹窗 html代码段↓ var msgcontent = ""; msgcontent += '<ul class="linkAddBox ...
- Python函数使用
Python函数用def指定函数名,可以指定输入参数,可以指定参数的默认值,也可以用return指定返回值.调用时除了默认的位置赋值,也可按关键字赋值. 一.函数不带参数.没有返回值 def hell ...
- Springboot中定时器的简单使用
在定时器的类上添加注解: @Component@EnableAsync@EnableScheduling 一.普通的定时器: 每天15:10执行的定时器 @Scheduled(cron="0 ...