《C语言入门经典第4版》课后练习参考答案.docx

上传人:s****u 文档编号:12806972 上传时间:2020-05-25 格式:DOCX 页数:114 大小:141.50KB
返回 下载 相关 举报
《C语言入门经典第4版》课后练习参考答案.docx_第1页
第1页 / 共114页
《C语言入门经典第4版》课后练习参考答案.docx_第2页
第2页 / 共114页
《C语言入门经典第4版》课后练习参考答案.docx_第3页
第3页 / 共114页
点击查看更多>>
资源描述
目录第1章 C语言编程4练习1.14练习1.24练习1.35第2章 编程初步5习题2.15习题2.26习题2.37习题2.49第3章 条件判断10习题3.110习题3.212习题3.316习题3.418第4章 循环20习题4.120习题4.221习题4.322习题4.422习题4.524第5章 数组26习题5.126习题5.228习题5.329习题5.430习题5.532第6章 字符串和文本的应用34习题6.134习题6.241习题6.343习题6.444第7章 指针47习题7.147习题7.249习题7.351习题7.452第8章 程序的结构54习题8.154习题8.255习题8.357习题8.460第9章 函数再探65习题9.165习题9.266习题9.369习题9.471第10章 基本输入输出操作72习题10.172习题10.273习题10.375习题10.476第11章 结构化数据78习题11.178习题11.282习题11.386习题11.490习题11.595第12章 处理文件99习题12.199习题12.2100习题12.3103习题12.4105第13章 支持功能110习题13.1110习题13.2111习题13.3112C语言入门经典(第4版)课后练习参考答案第1章 C语言编程练习1.1 编写一个程序,用两个printf()语句分别输出自己的名字和地址。#include int main(void) printf(姓名:小狮子n); printf(地址:月亮之上n); return 0;练习1.2 将上一个练习修改成所有的输出只用一个printf()语句。#include int main(void) printf(姓名:小狮子n地址:月亮之上n); return 0;练习1.3 编写一个程序,输出下列文本,格式如下所示:Its freezing in here, he said coldly.#include int main(void) printf(Its freezing in here, he said coldly.n); return 0;第2章 编程初步习题2.1 编写一个程序,提示用户用英寸输入一个距离,然后将该距离值输出为码、英尺和英寸的形式。#include /* * 1码=3英尺=36英寸 */int main() float len_inch = 0.0f; / 英寸 float len_foot = 0.0f; / 英尺 float len_yard = 0.0f; / 码 / 提示用户用英寸输入一个距离 printf(请用英寸输入一个距离:); scanf(%f, &len_inch); / 计算英尺 len_foot = len_inch / 12; / 计算码 len_yard = len_foot / 3; / 输出计算后的结果 printf(%.2f英寸 = %.2f英尺 = %.2f码n, len_inch, len_foot, len_yard); return 0;习题2.2 编写一个程序,提示用户用英尺和英寸输入一个房间的长和宽,然后计算并输出面积,单位是平方码,精度为小数点后两位数。#include int main() float length_in_foot = 0.0f; / 房间的宽度 单位英尺 float width_in_inch = 0.0f; / 房间的宽度 单位英寸 float area_in_yard = 0.0f; / 房间的面积 单位平方码 / 提示用户输入房间的长度 printf(请输入房间的长度(单位:foot):); scanf(%f, &length_in_foot); / 提示用户输入房间的宽度 printf(请输入房间的宽度(单位:inch):); scanf(%f, &width_in_inch); / 计算房间的面积 1码=3英尺=36英寸 area_in_yard = (length_in_foot / 3) * (width_in_inch / 36); / 输出房间的面积 printf(房间的面积是:%.2f平方码。n, area_in_yard); return 0;习题2.3 一个产品有两个版本:其一是标准版,价格是$3.5,其二是豪华版,价格是$5.5。编写一个程序,使用学到的知识提示用户输入产品的版本和数量,然后根据输入的产品数量,计算并输出价格。#include int main() float price_of_normal = 3.5; / 普通版单价 float price_of_deluxe = 5.5f; / 豪华版单价 int number_of_normal = 0; / 普通版的数量 int number_of_deluxe = 0; / 豪华版的数量 float total_price = 0.0f; / 总价 / 提示用户输入产品的数量 printf(请输入普通版的数量:); scanf(%d, &number_of_normal); printf(请输入豪华版的数量:); scanf(%d, &number_of_deluxe); / 计算总价 total_price = number_of_normal * price_of_normal + number_of_deluxe + price_of_deluxe; / 输出总价 printf(总价为:$%.2fn, total_price); return 0;习题2.4 编写一个程序,提示用户从键盘输入一个星期的薪水(以美元为单位)和工作时数,它们均为浮点数,然后计算并输出每个小时的平均时薪,输出格式如下所示:Your average hourly pay rate is 7 dollars and 54 cents.#include int main() float salary = 0.0f; / 一个星期的薪水(以美元为单位) float hours = 0.0f; / 工作时数 float salary_per_hour = 0.0f; / 每个小时的平均时薪 / 提示用户输入一个星期的薪水 printf(请输入一个星期的薪水(以美元为单位):); scanf(%f, &salary); / 提示用户输入工作时数 printf(请输入工作时数:); scanf(%f, &hours); / 计算每个小时的平均时薪 salary_per_hour = salary / hours; / 输出结果 printf(Your average hourly pay rate is %d dollars and %d cents.n, (int)salary_per_hour, (int)(salary_per_hour * 100) % 100); return 0;第3章 条件判断习题3.1 编写一个程序,首先给用户以下两种选择:(1)将温度从摄氏度转换为华氏度。(2)将温度从华氏度转换为摄氏度。接着,程序提示用户输入温度值,并输出转换后的数值。从摄氏度转换为华氏度,可以乘以 1.8 再加上 32。从华氏度转换为摄氏度,可以先减去 32 后,再乘以 5,除以 9。#include #include int main() float temperature = 0.0f; / 用户输入的温度值 char ch = 0; float result = 0.0f; / 转换后的温度值 / 提示用户都有哪种转换方式 printf(程序提供如下两种转换方式:n); printf( A. 将温度从摄氏度转换为华氏度n B. 将温度从华氏度转换为摄氏度n); / 提示用户输入选择的转换方式 printf(请选择转换方式(A or B):); scanf(%c, &ch); if (tolower(ch) = a) printf(请输入温度值:); scanf(%f, &temperature); result = temperature * 1.8 + 32; printf(%.2f摄氏度 = %.2f华氏度n, temperature, result); else if (tolower(ch) = b) printf(请输入温度值:); scanf(%f, &temperature); result = (temperature - 32) * 5 / 9; printf(%.2f华氏度 = %.2f摄氏度n, temperature, result); else printf(选择错误n); return 0;习题3.2 编写一个程序,提示用户输入3个整数值,分别代表月、日、年。例如用户输入了12、31、2003,程序就以31st December 2003 的格式输出该日期。必须在日期值的后面加上th、nd、st 和 rd。例如1st、2nd、3rd、4th、11th、12th、13th、14th、21st、22nd、23rd、24th。#include int main() int year = 0; int month = 0; int day = 0; / 定义一个代表12个月份的枚举类型,枚举器值从1开始 enum Month January = 1, February, March, April, May, June, July, August, September, October, November, December ; / 提示用户输入月、日、年 printf(请输入月、日、年:); scanf(%d%d%d, &month, &day, &year); / 输出日 if (day 31) printf(输入日期有误 ); else if (day % 10 = 1 & day != 11) printf(%dst , day); else if (day % 10 = 2 & day != 12) printf(%dnd , day); else if (day % 10 = 3 & day != 13) printf(%drd , day); else printf(%dth , day); / 输出月 switch (month) case January: printf(January ); break; case February: printf(February ); break; case March: printf(March ); break; case April: printf(April ); break; case May: printf(May ); break; case June: printf(June ); break; case July: printf(July ); break; case August: printf(August ); break; case September: printf(September ); break; case October: printf(October ); break; case November: printf(November ); break; case December: printf(December ); break; default: printf(输入月份有误 ); break; / 输出年 printf(%dn, year); return 0;习题3.3 编写一个程序,根据从键盘输入的一个数值,计算总价(单价是$5),数值超过30的折扣是10%,数值超过50的折扣是15%。#include int main() float unit_price = 5.0f; / 商品单价 float discount = 0.0f; / 商品折扣 int number = 0; / 商品数量 / 提示用户输入商品数量 printf(请输入商品数量:); scanf(%d, &number); / 计算折扣 if (number = 30) discount = 0.0f; else if (number = 50) discount = 0.1f; else discount = 0.15f; / 输出总价 printf(商品的总价为:%.2fn, number * unit_price * (1 - discount); return 0;习题3.4 修改本章最后的计算器例子,让用户选择输入y或Y,以执行另一个计算,输入n或N就结束程序。(注意:这需要实用goto语句,下一章将介绍一个更好的方法。)#include int main() double number1 = 0.0; double number2 = 0.0; char operation = 0; char choice = 0; begin: printf(Enter the caculationn); scanf(%lf %c %lf, &number1, &operation, &number2); switch (operation) case +: printf(= %lfn, number1 + number2); break; case -: printf(= %lfn, number1 - number2); break; case *: printf(= %lfn, number1 * number2); break; case /: if (number2 = 0) printf(nnaDivision by zero error!n); else printf(= %lfn, number1 / number2); break; case %: if (long)number1 = 0) printf(nnaDivision by zero error!n); else printf(= %ldn, (long)number1 % (long)number2); break; default: printf(nnaIllegal operation!n); break; printf(Do you want to continue? (y or n): ); scanf( %c, &choice); / 注意:%c 前面的空格不能去掉 if (choice = y | choice = Y) goto begin; return 0;第4章 循环习题4.1 编写一个程序,生成一个乘法表,其大小由用户输入来决定。例如,如果表的大小是4,该表就有4行4列。行和列标记为14.表中的每一个单元格都包含行列之积,因此第三行第4列的单元格包含12。#include int main() int num_row = 0; int num_col = 0; printf(请输入行数和列数:); scanf(%d%d, &num_row, &num_col); printf( ); for (int i = 1; i = num_col; i+) printf(%3d , i); printf(n); for (int i = 1; i = num_row; i+) printf(%-4d, i); for (int j = 1; j = num_col; j+) printf(%3d , i * j); printf(n); return 0;习题4.2 编写一个程序,为0127之间的字符码输出可打印的字符。输出每个字符码和它的符号,这两个字符占一行。列要对齐(提示:可以使用在ctype.h中声明的isgraph()函数,确定哪个字符是可以打印的)。#include #include int main() for (int i = 0; i = 127; i+) if (isgraph(i) printf(%d %cn, i, i); return 0;习题4.3 扩展上一题,给每个空白字符输出对应的名称,例如newline,space,tab等。/ 本题略习题4.4 使用嵌套循环输出一个用星号绘制的盒子,与程序4.2类似,但是它的宽和高由用户输入。#include int main() int height = 0; int width = 0; printf(请输入盒子的宽和高:); scanf(%d%d, &width, &height); for (int i = 1; i = height; i+) for (int j = 1; j = width; j+) if (i = 1 | i = height) printf(*); else if (j = 1 | j = width) printf(*); else printf( ); printf(n); return 0;习题4.5 修改程序4.7的猜谜游戏,在玩家猜错数字后,可以用一个选项让玩家继续玩下去,且想玩多久就玩多久。#include #include #include #include int main() int chosen = 0; int guess = 0; int limit = 20; char another_game = Y; srand(time(NULL); chosen = 1 + rand() % limit; printf(nThis is a guessing game. nI have chosen a number between 1 and 20 which you must guess.n); do printf(nEnter a guess: ); scanf(%d, &guess); if (guess = chosen) printf(nYou guessed it!n); return 0; if (guess 20) printf(nI said between 1 and 20.n); else printf(nSorry. %d is wrong.n, guess); printf(nDo you want to play again(y/n)? ); scanf( %c, &another_game); while(toupper(another_game) = Y); return 0;第5章 数组习题5.1 编写一个程序,从键盘上读入5个double类型的值,将它们存储到一个数组中。计算每个值的倒数(值x的倒数是 1.0/x),将结果存储到另一个数组中。输出这些倒数,并计算和输出倒数的总和。#include int main() double original5 = 0.0 ; double result5 = 0.0 ; double sum = 0.0; for (int i = 0; i , i + 1); scanf(%lf, &originali); for (int i = 0; i 5; i+) resulti = 1.0 / originali; for (int i = 0; i 5; i+) printf(result%d = %lfn, i, resulti); sum += resulti; printf(sum = %lfn, sum); return 0;习题5.2 定义一个数组 data,它包含 100 个 double 类型的元素。编写一个循环,将以下的数值序列存储到数组的对应元素中:1/(2*3*4) 1/(4*5*6) 1/(6*7*8) . up to 1/(200*201*202)编写另一个循环,计算:data0 - data1 + data2 - data3 + . - data99将这个结果乘以 4.0,加 3.0,输出最后的结果。#include int main() double data100 = 0.0 ; double sum = 0.0; double result = 0.0; for (int i = 1; i = 100; i+) datai - 1 = 1.0 / (2 * i) * (2 * i + 1)*(2 * i + 2); for (int i = 0; i 100; i+) sum += (i % 2 ? -1 : 1) * datai; result = sum * 4.0 + 3.0; printf(计算结果为:%lfn, result); return 0;习题5.3 编写一个程序,从键盘上读入 5 个值,将它们存储到一个 float 类型的数组 amounts 中。创建两个包含 5 个 long 元素的数组 dollars 和 cents。将 amounts 数组元素的整数部分存储到 dollars 的对应元素中,amounts 数组元素的小数部分存储到 cents 中,只保存两位数字(例如:amounts1 的值是 2.75,则把 2 存储到 dollars1 中,把 75 存储 cents1中)。以货币格式输出这两个 long 类型数组的值(如$2.75)。#include int main() float amounts5 = 0.0f; long dollars5 = 0L; long cents5 = 0L; for (int i = 0; i , i + 1); scanf(%f, &amountsi); for (int i = 0; i 5; i+) dollarsi = (long) amountsi; centsi = (long)(amountsi * 100) % 100; for (int i = 0; i 5; i+) printf($%ld.%ldn, dollarsi, centsi); return 0;习题5.4 定义一个 double 类型的二维数组 data115。用 2.03.0 的值初始化第一列元素(每步增加 0.1)。如果行中的第一个元素值是 x,改行的其它元素值分别是 1/x,x,x 和 x。输出数组中的值,每一行放在一行上,每一列要有标题。#include #include int main() double data115 = 0.0; for (int i = 0; i 11; i+) datai0 = (1 + 0.1 * i); for (int i = 0; i 11; i+) datai1 = 1 / datai0; for (int j = 2; j 5; j+) dataij = pow(datai0, i); printf( ); for (int i = 0; i 5; i+) printf( %02d , i + 1); printf(n); for (int i = 0; i 11; i+) printf( %02d , i + 1); for (int j = 0; j 5; j+) printf( %6.2lf , dataij); printf(n); return 0;习题5.5 编写一个程序,计算任意多个班级的学生的平均分。该程序应读取所有班级里学生的所有成绩,再计算平均值。给每个班级输出每个学生的平均分,以及班级的平均分。#include #define CLASS_NUM 2#define STUDENT_NUM 2#define COURSE_NUM 2int main() int scoreCLASS_NUMSTUDENT_NUMCOURSE_NUM = 0; int average_class = 0; int average_student = 0; for (int i = 0; i CLASS_NUM; i+) for (int j = 0; j STUDENT_NUM; j+) for (int k = 0; k , i, j, k); scanf(%d, &scoreijk); for (int i = 0; i CLASS_NUM; i+) average_class = 0; for (int j = 0; j STUDENT_NUM; j+) average_student = 0; for (int k = 0; k COURSE_NUM; k+) average_class += scoreijk; average_student += scoreijk; printf(Class %02d Student %02d 的平均分是 %.2fn, i, j, average_student * 1.0 / COURSE_NUM); printf(Class %02d 的平均分是 %.2fn, i, average_class * 1.0 / STUDENT_NUM / COURSE_NUM); return 0;第6章 字符串和文本的应用习题6.1 编写一个程序,从键盘上读入一个小于1000的正整数,然后创建并输出一个字符串,说明该整数的值。例如,输入941,程序产生的字符串是“Nine hundred and forty one”。#include void one2nineteen(int n) switch (n) case 1: printf(one); break; case 2: printf(two); break; case 3: printf(three); break; case 4: printf(four); break; case 5: printf(five); break; case 6: printf(six); break; case 7: printf(seven); break; case 8: printf(eight); break; case 9: printf(nine); break; case 10: printf(ten); break; case 11: printf(eleven); break; case 12: printf(twelve); break; case 13: printf(thirteen); break; case 14: printf(fourteen); break; case 15: printf(fifteen); break; case 16: printf(sixteen); break; case 17: printf(seventeen); break; case 18: printf(eighteen); break; case 19: printf(nineteen); break; default: printf(one2nineteen操作失败); break; void fun(int n) switch (n) case 20: printf(twenty); break; case 30: printf(thirty); break; case 40: printf(fourty); break; case 50: printf(fifty); break; case 60: printf(sixty); break; case 70: printf(seventy); break; case 80: printf(eighty); break; case 90: printf(ninety); break; default: printf(fun执行出错); break; void fun2(int n) if (n 20) one2nineteen(n); else if (n 100) if (n % 10 = 0) fun(n); else fun(n - n % 10); printf(-); one2nineteen(n % 10); void int2str(int n) if (n 100) fun2(n); else if (n 1000) if (n % 100 = 0) one2nineteen(n / 100); printf( hundred); else one2nineteen(n / 100); printf( hundred and ); fun2(n % 100); int main() for (int i = 1; i , i); int2str(i); printf(n); return 0;习题6.2 编写一个程序,输入一系列单词,单词之间以逗号分割,然后提取这些单词,并将它们分行输出,删除头尾的空格。例如,如果输入是John , Jack , Jill输出将是:JohnJackJill#include #include #include int main() char sequence100 = 0 ; bool first = true; printf(请输入一系列单词,单词之间以逗号分隔:n); if (fgets(sequence, sizeof(sequence), stdin) = NULL) printf(输入过程出错n); return 1; else for (int i = 0; i 100 & sequencei != 0; i+) if (isalpha(sequencei) first = true; printf(%c, sequencei); else if (first) first = false; printf(n); printf(n); return 0;习题6.3 编写一个程序,从一组至少有5个字符串的数组里,输出任意挑选的一个字符串。#include int main() char arr50 = Hello, Hello World, Hello World, Hello World! ; printf(%sn, arr2); return 0;习题6.4 回文是正读反读均相同的句子,忽略空白和标点符号。例如,“Madam, Im Adam”和“Are we no drawn onward, we few? Drawn onward to new era?”都是回文。编写一个程序,确定从键盘输入的字符串是否是回文。#include #include #include #include int main() char sequence100 = 0 ; unsigned long head = 0; unsigned long last = 0; bool flag = true; printf(请输入一个字符串:n); if (gets(sequence) = NULL) printf(输入过程出错n); return 1; else last = strlen(s
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 考试试卷


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!