自己的域名搭建网站,wordpress 连接微信,东莞企业推广网络营销,无限资源免费观看大全练习1-1 在你自己的系统中运行”hello#xff0c;world“程序。再有意去掉部分内容#xff0c;会看到什么出错信息。练习1-2 做个实验#xff0c;当printf函数的参数字符串中包含\c(其中c是上面的转义字符序列中未曾列出的某一个字符)时#xff0c;观察一下啊情况。warni…练习1-1 在你自己的系统中运行”helloworld“程序。再有意去掉部分内容会看到什么出错信息。练习1-2 做个实验当printf函数的参数字符串中包含\c(其中c是上面的转义字符序列中未曾列出的某一个字符)时观察一下啊情况。warning C4129: “c”: 不可识别的字符转义序列练习1-3 修改温度转换程序使之能在转换表的顶部打印一个标题。#includeint main(){float fahr, celsius;float lower, upper, step;lower 0;upper 300;step 20;fahr lower;printf( Fahr Celsius\n);while (fahrupper){celsius 5 * (fahr - 32) / 9;printf(%3.0f\t%6.1f\n, fahr, celsius);fahr fahr step;}getchar();}练习1-4 编写一个程序打印摄氏温度转换为相应华氏温度的的对照表。#includeint main(){float fahr, celsius;float lower, upper, step;lower 0;upper 300;step 20;celsius lower;printf( Celsius Fahr\n);while (celsiusupper){fahr celsius * 9 / 5 32;printf(%3.0f\t%6.1f\n, celsius, fahr);celsius celsius step;}getchar();}练习1-5 修改温度转换程序要求以逆序(即按照从300度到0度的顺序)打印温度转换表。(尝试用for语句)#includeint main(){float fahr, celsius;float lower, upper, step;lower 0;upper 300;step 20;printf( Fahr Celsius\n);for (fahr lower; fahr upper; fahr fahr step){printf(%3.0f\t%6.1f\n, fahr, 5 * (fahr - 32) / 9);}getchar();}练习1-6 验证表达式getchar()!EOF的值是0还是1。#includeint main(){int c;while (c(getchar()!EOF)){printf(%d isnt EOF\n, c);}printf(%d is EOF, c);getchar();}练习1-7 编写一个打印EOF值的程序。#includeint main(){printf(%d is EOF, EOF);getchar();}练习1-8 编写一个统计空格、制表符、换行符个数的程序。#includeint main(){int c, row_num, blank_num, t_num;row_num blank_num t_num 0;while ((cgetchar())!EOF){switch (c){case \n:row_num;break;case :blank_num;break;case \t:t_num;default:break;}printf(row_num:%d,blank_num:%d,t_num:%d\n, row_num, blank_num, t_num);}}练习1-9 编写一个将输入复制到输出的程序并将其中连续多个空格用一个空格代替。#includeint main(){int a,b;while ((agetchar())!EOF){if (a b ) //如果发现a为空格且排在后面的b也为空格则直接跳过该a{continue;}else{b a;}printf(%c, b);}}练习1-10 编写一个将输入复制到输出的程序并将其中的制表符替换为\t并把回退符替换为\b并把反斜杠替换为\。这样可以将制表符和回退符以可见的方式显现出来。#includeint main(){int c;while ((cgetchar())!EOF){switch (c){case \t:printf(\\t); //putchar()一次只能输出一个字符不好实现效果break;case \b:printf(\\b);break;case \\:printf(\\\\);break;default:break;}}}练习1-11 你准备如何测试单词计数程序如果程序存在某种错误那么什么样的输入最可能发现这类错误该单词计数程序#include#define IN 1 //在单词内#define OUT 0 //在单词外//统计输入行数、单词数与字符数int main(){int c, nl, nw, nc, state;state OUT;nl nw nc 0;while ((cgetchar())!EOF){nc;if (c \n){nl;}if (c || c \n || c \t){state OUT;}else if (state OUT){state IN;nw;}printf(%d %d %d\n, nl, nw, nc);}}答单词计数工作要从没有任何输入的情况下开始。此时该程序的输出结果应该是“0 0 0”即零行、零单词、零字符。接下来测试输入的单字符单词的情况。此时该程序的输入结构应该是“1 1 2”即一行、一个单词、两个字符(一个字符加上一个换行符)。再测试一个由两个字符组成的单词。此时该程序的输入结果为“1 1 3”即一行、一个单词、三个字符(两个字母加上一个换行符)。让后再测试两个单词的情况。首先两个单词出现在同一行此时的输出结果应该是“1 2 4”然后两个单词各占一行此时的输出结果应该是“2 2 4”。那些满足边界条件的输入情况最有助于发现单词计数程序中的错误。这些边界条件包括——没有输入——没有单词(只有换行符)——没有单词(只有空格、制表符、和换行符)——每个单词各占一行的情况(没有空格和制表符)——单词出现于文本行行首的情况——单词出现于一串空格之后的情况练习1-12 编写一个程序以每行一个单词的形式打印其输入。自己的答案#includeint main(){int a, b, state;while ((agetchar())!EOF){ //a不为空时直接赋值给bif (a ! ){b a;putchar(b);}//a位空时分b也为空即连续空格的情况和b不为空格的情况if ((a )(b )){continue;}if ((a ) (b ! )){b a;putchar(\n);}}}标准答案#include#define IN 1 //在单词内#define OUT 0 //在单词外//统计输入行数、单词数与字符数int main(){int c, state;state OUT;while ((cgetchar())!EOF){if (c || c \n || c \t){if (state IN){putchar(\n); //一个单词输入结束state OUT;}}else if (state OUT){state IN;putchar(c); //一个单词输入开始}else{putchar(c); //在输入一个单词时}}}练习1-13 编写一个程序打印输入中单词长度的直方图。水平方向的直方图比较容易绘制垂直方向的直方图则要困难些。#include#define IN 1 //在单词内#define OUT 0 //在单词外int main(){//c为输入的字符state为当前状态wLength为当前单词长度//Maxnum为数量最大的单词单词长度的个数int c,a,b,state,wLength,Maxnum;int wordLength[10]; //设置一个记录对应单词长度的个数的数组for (int i 0; i 10; i) //比如wordLength[1]表示单词长度为1的单词个数{wordLength[i] 0;}state OUT;wLength 0;//记录输入中统计的得出的绘图数据//第一种方法while ((cgetchar())!EOF){if ((c ) || (c \t) || (c \n)){if (state IN){state OUT;wordLength[wLength];wLength 0;}else{continue;}}else if(stateOUT){wLength1;state IN;}else{wLength;}}//第二种统计数据方法/*while ((a getchar()) ! EOF){if ((a ! ) (a ! \n)){wLength;b a;}if (((a ) || (a \n)) (b )){continue;}else if (((a ) || (a \n)) (b ! )){wordLength[wLength];b ;wLength 0;}}*/Maxnum 9;/*这样写图表不漂亮for (int i 0; i 10; i){if (Maxnum wordLength[i 1]){Maxnum wordLength[i 1];}}*/for (int i Maxnum; i 0; i--){printf(%4d, i);for (int j 0; j 10; j){if (wordLength[j] i){printf( * );}else{printf( );}}printf(\n);}printf( );for (int i 0; i 10; i){printf(%3d, i);}getchar();}练习1-14 编写一个程序打印输入各个字符出现频度的直方图。基本思想跟上题类似。分三大块第一块初始化各个数据第二块采集各个数据第三块画出直方图。本题可以利用ascii码来作为数组序号。练习1-15 重新编写1.2中的温度转换程序使用函数实现温度转换计算。#includevoid change(int lower, int upper, int step);int main(){float lower, upper, step;lower 0;upper 300;step 20;change(lower, upper, step);getchar();}void change(int lower,int upper,int step){float fahr,celsius;fahr lower;printf( Fahr Celsius\n);while (fahr upper){celsius 5 * (fahr - 32) / 9;printf(%3.0f\t%6.1f\n, fahr, celsius);fahr fahr step;}}