我是靠谱客的博主 震动马里奥,最近开发中收集的这篇文章主要介绍记录——《C Primer Plus (第五版)》第八章编程练习第五题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述


修改程序清单8.4的猜测程序,使其使用更智能的猜测策略。例如,程序最初猜50,让其询问用户该猜测值是大、小还是正式。如果该猜测值小,则令其下一次猜测值为50和100的中值,也就是75,。如果75大,则下一次猜测为75和50的中值,等等。使用这种二分搜索策略,起码如果用户没有欺骗,该程序很快会获得正确答案。解:原题目是猜测1~100中的数字。
# include <stdio.h>
# include <ctype.h>
int mean(int, int);
//输值取中值
void clear(void);
//清除取值以外的字符
bool is_effective(int);
//判断要猜的整数是否有效
int get_in(void);
//取的要猜的整数
int main(void)
{
const int MIN = 1;
//下限
const int MAX = 100;
int in;
char ch;
int low = 1;
int high = 100;
int cnt = 0;
//计数
用于判断是否是第一次判断
printf("Please enter a integer,1 to 100 .n");
printf("You can choice L, h or y.n");
printf("L is low, h is high,y is yes.such as 20<50 is L, 20 is your number.n");
in = get_in();
clear();
printf("50 is yes?n");
while(tolower((ch = getchar())) != 'y')
{
if(ch == 'l' || ch == 'h')
{
if(cnt == 0)
in = 50;
switch(ch)
{
case 'l':
high = in;
in = mean(low, high);printf("%d is your number?n",in);
break;
case 'h':
low = in;
in = mean(low, high);printf("%d is your number?n",in);
break;
}
}
else
{
printf("error!nyou can choice l, h, y.OK!n");
}
cnt++;
}
printf("your number is %dn", in);
return 0;
}
int mean(int low, int high)
{
int in;
in = (high + low) / 2;
clear();
return in;
}
void clear(void)
{
while(getchar() != 'n')
continue;
}
bool is_effective(int in)
{
if(in <= 100 || in >= 1)
return true;
else
return false;
}
int get_in(void)
{
int in;
if(is_effective(in))
{
return in;
}
else
{
printf("Enter a integer :n");
scanf("%d", &in);
return in;
}
}

最后

以上就是震动马里奥为你收集整理的记录——《C Primer Plus (第五版)》第八章编程练习第五题的全部内容,希望文章能够帮你解决记录——《C Primer Plus (第五版)》第八章编程练习第五题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部