CPrimerPlus第六版第⼋章编程练习参考答案
1、设计⼀个程序,统计在读到⽂件结尾之前读取的字符数。
#include <stdio.h>
int main(void)
{
char ch = 0;
int n_ch = 0;
while ((ch = getchar()) != EOF)
{
n_ch++;
}
printf("There are %d characters in the file!\n",n_ch); //按回车+ctrl+z+回车⽂件结尾
return 0;
}
2、编写⼀个程序,在遇到EOF之前,把输⼊作为字符流读取。程序要打印每个输⼊的字符及其相应的ASCII⼗进制值。注意,在ASCII序列中,空格字符前⾯的字符都是⾮打印字符,要特殊处理这些字符。如果⾮打印字符是换⾏符或制表符,则分别打印\n或\t。否则,使⽤控制字符表⽰法。例如,ASCII的1是Ctrl+A, 可显⽰为^A。注意,A的ASCII值是CtrI+A的值加上64.其他⾮打印字符也有类似的关系。除每次遇到换⾏符打印新的⼀⾏之外, 每⾏打印10对值。(注意,不同的操作系统其控制字符可能不同。)
int main(void)
{
char ch = 0;
int n_ch = 0;css加载慢
while ((ch = getchar()) != EOF)
{
n_ch++;
if (ch < ' ')
{
if ('t' == ch)
{
printf(" ");
putchar('\\');
putchar('t');
printf(":%d", ch);
}
else if ('\n ' == ch)
{
printf(" ");
putchar('\\');
putchar('n');
putchar(":%d", ch);
}
else
{
printf(" ");
putchar('^');
大一反函数求导的经典例题putchar(ch+64);
printf(":%d", ch);
}
}
else
{
printf(" ");
putchar(ch);
printf(":%d", ch);
}
if (n_ch % 10 == 0)
{
printf("\n");
}
}
return 0;
}
3、编写⼀个程序, 在遇到EOF之前,把输⼊作为字符流读取。该程序要报告输⼊中的⼤写字母和⼩写字母的个数。假设⼤⼩写字母数值是连续的。或者使⽤ctype .h库中合适的分类函数更⽅便。
#include <stdlib.h>
#include <ctype.h>
int main(void)
{
logistic意思char ch = 0;
int n_upper = 0;
int n_lower = 0;
while ((ch = getchar()) !='&')
{
if (islower(ch))
{
n_lower++;
}
else if (isupper(ch))
{
n_upper++;
}
}
正则 不包含某几个字符printf("There are %d upper character and %d lower charecter.\n", n_upper, n_lower);
return 0;
}
4. 编写⼀个程序,在遇到EOF之前,把输⼊作为字符流读取。该程序要报告平均每个单词的字母数, 不要把空⽩统计为单词的字母。实际上,标点符号也不应该统计,但是现在暂时不同考虑这么多(如果你⽐较在意这点,考虑使⽤ctype.h系列中的ispunct ()函数)。
#include <ctype.h> //参考书P195程序清单7.7//参考别⼈
int main(void)
{
char ch = 0;
三角函数表值查表初中char ch_pre = 0;
int n_word = 0;
int n_ch = 0;
int total_ch = 0;
int word_ch = 0;
double word_ch_avg = 0;
while (ch = getchar()) //从第⼀个字母开始
{
if (isalpha(ch))
{
break;
}
}
while (ch != '&')
{
if((' ' == ch || '\n' == ch) && !isspace(ch_pre) && !ispunct(ch_pre))
{
n_word++;
total_ch += word_ch;
word_ch = 0;
}
else if (isspace(ch))
{
ch_pre = ch;
ch = getchar();
continue;
}
if (!ispunct(ch) && !isspace(ch))
{
word_ch++;
}
ch_pre = ch;
ch = getchar();
}putchar函数
if (!isspace(ch_pre))
{
n_word++;
total_ch += word_ch;
}
word_ch_avg = (double)total_ch / n_word;
printf("Total words: %d, Total characters: %d, Characters per word: %.2lf", n_word, total_ch, word_ch_avg);
return 0;
}
5. 修改程序清单8.4的猜数字程序,使⽤更智能的猜测策略。例如,程序最初猜50,询问⽤户是猜⼤了、猜⼩了还是猜对了。如果猜⼩了,那么下⼀次猜测的值应是50和100中值,也就是75。 如果这次猜⼤了,那么下⼀次猜测的值应是50和75的中值,等等。使⽤⼆分查(binary search)策略,如果⽤户没有欺骗程序,那么程序很快就会猜到正确的答案。
#include <stdlib.h>
//笔记:scanf("%c",&ch)与scanf(" %c",&ch)。书P95
int main()
{
float min;
float max;
float guess;
char ch = 0;
char ch_1 = 0;
printf("please input guess interval:\n");
scanf_s("%f %f",&min,&max);
//scanf_s("%d", max);
if(max >= min)
{
printf("i'll guess the number between %.1f and %.1f\n", min,max);
}
guess = (max + min) / 2;
printf("i guest the number is %.1f. is it right(y/n)?\n",guess);
scanf_s(" %c", &ch);
getchar();
while ('y' != ch)
{
printf("ok, the number you chosen is bigger or smaller than i guess?(b/s)\n");
scanf_s(" %c", &ch_1);
//getchar();
// putchar(ch_1);
if ('b' == ch_1)
{
min = guess;
/
/printf("123\n");
guess = (min + max) / 2;
}
else
{
max = guess;
//printf("456\n");
guess = (min + max) / 2;
}
printf("i guess the number is %.1f, is it right(y/n)?\n", guess);
scanf_s(" %c", &ch);
/
/ getchar();
}
printf("yeah, i got it!");
return 0;
}
6、 修改程序清单8.8中的get_ first()函数, 让该函数返回读取的第1个⾮空⽩字符,并在⼀个简单的程序中测试。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论