C语言程序设计(第三版)谭浩强著 各章习题答疑
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
以八、 /* 以八、十六进制输出 */
} ???? 是对应的带符号短整数。 输出结果是八进制整数 十六进制整数
2
3.9 计算某个表达式的值。 通用程序清单如下: stdio.h” #include ”stdio.h stdio.h void main() { ?????? x; 计算表达式值存入x x=( 表达式 );/* 计算表达式值存入x */ printf(”% printf( %?\n”,x); ,x); } ?????? 表达式对应的数据类型符(需事先判断) ? 表达式为整型,则为d 表达式为实型,则为f 3
第七章习题答疑(二)
折半查找法在排序数组中查找某个数。 上课时已有提示。 7.13 字符串连接(b[]中字符串连接到a[]中字符串后) 设:a[10]=”12 ,b[]=”abc 12”, abc” 12 abc (1)找到a串的’\0’的下标(i=2) ’ (2)j=0; 当型循环(b[j]!=’\0’) ’\ ’ a[i]=b[j],i++,j++ (3)a[i]=’\0’ \ 7.15 字符串复制(b[]中字符串复制到a[]中) 设:a[10]=”12”,b[]=”abc” (1)i=0; 当型循环(b[i]!=’\0’) a[i]=b[i],i++ (2)a[i]=’\0’ 7.9
18
第十章习题答疑(一)
输入3个整数,按照由小到大顺序输出。 int x,y,z,*px=&x,*py=&y,*pz=&x; 用以前的程序,其中的x、y、z换成*px、*py、*pz 10.3 输入10个整数存入一维数组a[10],将其中最小数与第1 个数交换,最大数与最后一个数交换。 要求编3个函数: 10 10 输入10个整数、交换、输出交换后的10个整数。 输入函数: void in(int *p,int n) 输出函数: void out(int *p,int n) 交换函数: void change(int *p,int n) 其中寻找最大最小数的方法: int *q,*max,*min; for (max=min=p,q=p+1;q<p+n;q++) { if(*max<*q) max=q; if(*min>*q) min=q; } 19 交换的方法:*p和*min,*(p+n-1)和*max 10.1
3.12 a=12,计算某表达式后,求变量a的值。 通用程序清单如下: stdio.h” #include ”stdio.h stdio.h void main() { short a=12; 表达式; 表达式; printf(”%d %d\ ,a); printf( %d\n”,a); } 表达式 每次换成新表达式
8.5
编函数对字符串逆序存放。
传过去:字符串;带回来:字符串 函数原型:void f(char a[ ]) 功能提示:将a[ ]中字符串逆序后组成字符串放回a[ ]。 算法提示:调系统函数求字符串长度,用前面介绍的整数逆序存放的算法。 8.6 编函数,连接两个字符串。 传过去:两个数组a[ ]、b[ ];带回来:数组a[ ] 函数原型:void f(char a[ ],char b[ ]) 功能提示:将b[ ]中字符串连接到a[ ]中字符串之后。
16
第八章习题答疑(三)
8.9 编函数求字符串中字母、数字、空格、其它字符个数。
传过去:字符串;带回来:4个统计结果 函数原型:void f(char s[ ],int total[4]) 功能提示:统计s[ ]中字符串的字母、数字、空格、其它字符数存入total[ ] 期中:total[0]存放字母个数, total[1]存放数字个数, total[2]存放空格个数, total[3]存放其它字符个数
验证程序是否正确的方法
手算结果,与程序的运行结果对比。
5
第四章习题答疑
4.6 给出程序清单,要求决定输入数据的格 式,使得各变量获得正确的值。 程序清单中应增加输出语句,输出各变量 的值,检查输入是否正确? 4.7 给出输入语句,要求决定输入数据的格 式,使得各变量获得正确的值。 应设计一个程序,包括变量定义,指定的 输入语句,输出语句。 4.9 温度转换。 注意5/9的结果是0,应写成5.0/9.0。
注:整个算法的结构是一个循环。 6.14 输出图形。上课时已经给了标准程序。
12
第七章习题答疑(一)
7.2 选择排序法。 第8章要讲。参看例8.13。(P181) 7.3 求3×3矩阵对角线元素之和。 次数型循环(k=0、1、2) s+=a[k][k] 7.5 一维数组的逆序存放。 分析:a[6]={1,2,3,4,5,6} a[5]={1,2,3,4,5} 算法:次数型循环(k=0、1、…、个数/2-1) j=n-1、n-2、… 交换a[k]和a[j] 13
第八章习题答疑(二)
8.4 编函数对3×3矩阵转置。
传过去:矩阵;带回来:转置矩阵 放回原处的函数原型:void f(int a[3][3]) 功能提示:将a[3][3]中矩阵转置后放回a[3][3]。 放在新处的函数原型:void f(int a[3][3],b[3][3]) 功能提示:将a[3][3]中矩阵转置后放回b[3][3]。
求水仙花数( 3位正整数= 3个数字的立方和) 【参看例题:100~200中不能被3整除的数】 次数型循环(n=100、101、102、…、999) 求出3位上的数字; 若符合要求则输出; 6.8 求下列分数序列前20项之和。 2/1,3/2,5/3,8/5,13/8,21/13,…。 【参看例题:求π 值】 1 a = ( xn + ) 6.11 用迭代法求a的平方根。迭代公式如下:xn+1 2 xn 【参看例题:求序列】 求序列(x1、x2、x3、x4、…)的前若干项的问题。 其中x1可以任给一个数; 迭代公式就是由前一项求出后一项的公式。 何时中止?Xn与xn+1的差的绝对值<很小的数。 注:序列中的x1、x2、x3、…只能用2个变量来存放。 11 6.6
…
8
第六章习题答疑(一)
6.2 输入一行文字,统计字母数字空格其它字符的个数。 【参看例题:字符加密】 输入一个字符存入ch; 当(ch不是\n)则循环: 分别判断是否字母、数字、空格。其它并统计个数(+1) 再读一个字符存入ch; 输出统计结果。 6.3 求 sn=a+aa+aaa+…+aaa…aaa 【参看例题:求序列之和】 n个a 求多项式前n项之和的问题。 次数型循环(n次) 将当前项加到s中; 利用前一项产生后一项(前一项×10+a)
第九章习题答疑
9.1 定义宏,交换两个参数的值 法一:SWAP(A,B,C) C=A,A=B,B=C 法二:SWAP(A,B) { float c; c=A,A=B,B=c;} 法三:SWAP(A,B) A=A+B,B=A-B,A=A-B 9.2 定义宏,求两个整型参数相除的余数 H(A,B) (A)%(B) 讨论:9.1题中的参数为什么不加圆括号? 9.2题中的参数为什么加圆括号?
14
第八章习题答疑(一)
【总提示】编函数的关键是确定数据传递的方法,以便确定形参、确定函数原型: 传过去(原始的待加工数据)单个: 变量【形参】 相关多个:数组【形参】 带回来(函数加工结果数据)单个: 返回值 多个: 数组【形参】 相关多个:数组【形参】
8.2
编3个函数求二次方程的根(双实根、重实根、复根)。 传过去:系数a、b、c 带回来:根 双实根函数原型: void f1(float a,float b,float c,float x[2]) 提示:x[2]存放求出的双实根。 重实根函数原型: float f2(float a,float b,float c) 提示:返回值是重实根。 复根函数原型: void f3(float a,float b,float c,float x[2]) 15 提示:x[2]存放求出的复根的实部和虚部。
6.5
求 ∑k + ∑k
k =1 k =1
100Biblioteka 5021 +∑ k =1 k
10
将m=1放到外层循环之前 m=m*n;
【参看6.4题】 求 ∑k
100 k =1 50
次数型循环(100次)
2
求 ∑k
k =1
次数型循环(50次) 次数型循环(10次)
10
求 ∑1 k
k =1
100
注意:数据类型。
第六章习题答疑(三)
将n中的4位正整数转换成规定格式的字符串存入数字s17第八章习题答疑三89编函数求字符串中字母数字空格其它字符个数
第二章习题答疑(P36)
2.4 算法设计 (1) A、B两瓶内容互换。 (2) 10个数中求最大数。法一:存10个变量中 法二:存2个变量中 (3) 3个数在a、b、c中,按从大到小顺序输出。 (4) 1+2+3+…+100。 (5) 判某数能否同时被3和5整除。 2.8 算法设计 (1) 判闰年。 1 (2) 求ax2+bx+c=0的两个实根。
8.8
编函数,输入一个4位正整数,求一个字符串:含有这正整数中的 4个数字字符,且数字字符之间加空格。
例如,正整数是1234,则字符串为”1 2 3 4” ” 传过去:整数n;带回来:数组s[ ] 函数原型:void f(int n,char s[ ]) 功能提示:将n中的4位正整数转换成规定格式的字符串存入数字s[ ]
4
1~3章作业中的几个问题
(1)部分学生的算法题目未做。必须补做! (2)部分同学的题目没抄?必须补抄! (3)不写程序的输出结果。说明程序没有调试! (4)凭想象写程序的输出结果。说明程序没有调试! (5)不验证自己的答案是否正确?说明程序没有调试! (6)负整数用八进制、十六进制表示有没有符号? (例:-1 二进制11111111 八进制377 十六进制ff)
第三章习题答疑(P66)
3.3 十进制带符号短整数转换成八、十六进制整数。 通用程序清单如下: stdio.h” #include ”stdio.h stdio.h void main() x=???? ????; { short x=????; printf(”%o %x\ ,x,x); printf( %o %x\n”,x,x);
6
第五章习题答疑(一)
5.3 计算表达式的值。
仿照第三章求表达式值的题目,编写验证程序?
5.4 求三个数(a、b、c)中大者。
a、b比较,大者存入m; m、c比较,大者存入m 。
5.5 求分段函数值。
三分支结构。
7
第五章习题答疑(二)
5.7 给出一个≤5位的正整数。求 (1)几位数? (2)求每位上的数字? (3)按逆序输出每位数字。 提示: (1)5分支结构。If (x<10) … else if (x<100) … (2)x%10是个位上的数字(123%10是3) x/10是去掉个位上的数字(123/10是12) (3)将(2)的结果保存后输出。
9
第六章习题答疑(二)
6.4 求s=∑ n!= 1!+2!+3!+... + 20! 外层20次的循环(n=1、2、…、20) m=1; 内层n次的循环(k=1、2、…、n ) 求n! 将k乘到某变量中:m=m*k 将变量m的值加到s中:s=s+m 二重循环改为一重循环 输出s。 s
n =1 20
第六章习题答疑(四)
6.13 二分法求高次方程根。 提示:用二分法求高次方程f(x)=0在a、b之间一个实根的算法如下: (1)计算m=(a+b)/2; (2)计算f(a)、f(m)的值; (3)若f(m)为0,则m是根;【退出循环】 否则,若f(a)和f(m)同号,则根在m~b之间,令a=m,转(1) 若f(a)和f(m)异号,则根在a~m之间,令b=m,转(1)。 死循环
8.11 编函数用冒泡排序法对输入的10个字符按从小到大顺序排序。
传过去:字符数组s[ ]、字符个数n;带回来:字符数组s[ ]
函数原型:void f(char s[ ]) 功能提示:将s[ ]中的前n个字符按从小到大顺序重新排序。 8.18 编函数求给定年月日是该年的第几天。 传过去:年、月、日 带回来:第几天 函数原型:int f(int year,int month,int day) 功能提示:计算year年month月day日是该年的第几天 注:考虑闰年。 算法提示:用数组a[12]存放1~11月的天数: a[12]={0,31,28,31,30,31,30,31,31,30,31,30} 求month月day日的天数=a[1]+a[2]+…+a[month-1]+day 17 若是闰年且month>2则再加1天。