C语言程序设计 - 第三版 - 谭浩强主编第6—8章课后习题答案(8)

2019-01-05 12:51

(2)部分同学的题目没抄?必须补抄!

(3)不写程序的输出结果。说明程序没有调试!

(4)凭想象写程序的输出结果。说明程序没有调试! (5)不验证自己的答案是否正确?说明程序没有调试! (6)负整数用八进制、十六进制表示有没有符号?

(例:-1 二进制11111111 八进制377 十六进制ff)

验证程序是否正确的方法

手算结果,与程序的运行结果对比。

1~3章作业中的几个问题

(1)部分学生的算法题目未做。必须补做! (2)部分同学的题目没抄?必须补抄!

(3)不写程序的输出结果。说明程序没有调试!

(4)凭想象写程序的输出结果。说明程序没有调试! (5)不验证自己的答案是否正确?说明程序没有调试! (6)负整数用八进制、十六进制表示有没有符号?

(例:-1 二进制11111111 八进制377 十六进制ff)

验证程序是否正确的方法

手算结果,与程序的运行结果对比。 第四章习题答疑

4.6 给出程序清单,要求决定输入数据的格 式,使得各变量获得正确的值。

程序清单中应增加输出语句,输出各变量的值,检查输入是否正确? 4.7 给出输入语句,要求决定输入数据的格 式,使得各变量获得正确的值。

应设计一个程序,包括变量定义,指定的输入语句,输出语句。 4.9 温度转换。

注意5/9的结果是0,应写成5.0/9.0。 第五章习题答疑(一) 5.3 计算表达式的值。

仿照第三章求表达式值的题目,编写验证程序? 5.4 求三个数(a、b、c)中大者。 a、b比较,大者存入m; m、c比较,大者存入m 。 5.5 求分段函数值。 三分支结构。

5.7 给出一个≤5位的正整数。求 (1)几位数?

(2)求每位上的数字? (3)按逆序输出每位数字。 提示:

(1)5分支结构。If (x<10) ?

else if (x<100) … …

(2)x是个位上的数字(123是3) x/10是去掉个位上的数字(123/10是12) (3)将(2)的结果保存后输出。 第六章习题答疑(一)

6.2 输入一行文字,统计字母数字空格其它字符的个数。 【参看例题:字符加密】 输入一个字符存入ch; 当(ch不是\\n)则循环:

分别判断是否字母、数字、空格。其它并统计个数(+1) 再读一个字符存入ch; 输出统计结果。

6.3 求 sn=a+aa+aaa+?+aaa?aaa 【参看例题:求序列之和】 n个a 求多项式前n项之和的问题。 次数型循环(n次)

将当前项加到s中;

利用前一项产生后一项(前一项×10+a) 6.4 求s=

外层20次的循环(n=1、2、?、20) m=1;

内层n次的循环(k=1、2、?、n ) 求n! 将k乘到某变量中:m=m*k

将变量m的值加到s中:s=s+m 二重循环改为一重循环 输出s。 6.5 求

【参看6.4题】

求 次数型循环(100次) 求 次数型循环(50次) 求 次数型循环(10次) 注意:数据类型。

6.6 求水仙花数( 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,?。 【参看例题:求π 值】

6.11 用迭代法求a的平方根。迭代公式如下: 【参看例题:求序列】

求序列(x1、x2、x3、x4、?)的前若干项的问题。 其中x1可以任给一个数;

迭代公式就是由前一项求出后一项的公式。 何时中止?Xn与xn+1的差的绝对值<很小的数。 注:序列中的x1、x2、x3、?只能用2个变量来存放。 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)。 死循环

注:整个算法的结构是一个循环。

6.14 输出图形。上课时已经给了标准程序。 第七章习题答疑(一) 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]

7.9 折半查找法在排序数组中查找某个数。 上课时已有提示。

7.13 字符串连接(b[]中字符串连接到a[]中字符串后) 设:a[10]=”12”,b[]=”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’

第八章习题答疑(一)

【总提示】编函数的关键是确定数据传递的方法,以便确定形参、确定函数原型: 传过去(原始的待加工数据)单个: 变量【形参】

相关多个:数组【形参】

带回来(函数加工结果数据)单个: 返回值 多个: 数组【形参】 相关多个:数组【形参】 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]) 提示:x[2]存放求出的复根的实部和虚部。 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]。 8.5 编函数对字符串逆序存放。

传过去:字符串;带回来:字符串 函数原型:void f(char a[ ])

功能提示:将a[ ]中字符串逆序后组成字符串放回a[ ]。

算法提示:调系统函数求字符串长度,用前面介绍的整数逆序存放的算法。 8.6 编函数,连接两个字符串。

传过去:两个数组a[ ]、b[ ];带回来:数组a[ ] 函数原型:void f(char a[ ],char b[ ])

功能提示:将b[ ]中字符串连接到a[ ]中字符串之后。

8.8 编函数,输入一个4位正整数,求一个字符串:含有这正整数中的 4个数字字符,且数字字符之间加空格。

例如,正整数是1234,则字符串为”1 2 3 4” 传过去:整数n;带回来:数组s[ ] 函数原型:void f(int n,char s[ ])

功能提示:将n中的4位正整数转换成规定格式的字符串存入数字s[ ] 8.9 编函数求字符串中字母、数字、空格、其它字符个数。 传过去:字符串;带回来:4个统计结果 函数原型:void f(char s[ ],int total[4])

功能提示:统计s[ ]中字符串的字母、数字、空格、其它字符数存入total[ ] 期中:total[0]存放字母个数, total[1]存放数字个数, total[2]存放空格个数, total[3]存放其它字符个数

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 若是闰年且month>2则再加1天。 第九章习题答疑

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题中的参数为什么加圆括号? 第十章习题答疑

10.1 输入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个整数。 输入函数: 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*q) min=q; }

交换的方法:*p和*min,*(p+n-1)和*max

10.6 编一个函数求字符串长度。主函数输入字符串、调用函数求长度,输 出字符串长度。

法一 int my_len(char *p) 法二 int my_len(char *p) { int n=0; { char *q=p;

while (*p!=’\\0’) while (*q!=’\\0’) 举例说明q-p的结果 p++,n++; q++; return(n); return(q-p); } } 10.8 输入一行文字(字符串),输出其中大写字母、小写字母、空格、数 字和其它符号的个数。

void total(float *s,int *n) 注:该函数清单有错,要修改! { *n=*(n+1)=*(n+2)=*(n+3)=*(n+4)=0; while (*p!=’\\0’)

if (*p是大写字母) *n++; else

if (*p是小写字母) *(n+1)++; else

if (*p是空格) *(n+2)++; else

if (*p是数字) *(n+3)++; else

*(n+4)++; }

10.9 写一个函数,将3×3整数矩阵转置。 法一 法二 void f(int *p) void f(int (*p)[3]) { int i,j,x; { int i,j,x;

for (i=0;i<3;i++) for (i=0;i<3;i++)

for (j=i+1;j<3;j++) for (j=i+1;i<3;j++)

交换*(p+i*3+j)与*(p+j*3+i); 交换*(*(p+i)+j)与*(*(p+j)+i); } }

10.14 编函数将一维数组中前n个数逆序存放。 法一 void change(float *a,int n) { int i,j;;

for (i=0,j=n-1;i

法二 void change(float *a,int n) { float *l,*r;

for (l=a,r=a+n-1;l


C语言程序设计 - 第三版 - 谭浩强主编第6—8章课后习题答案(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:CAXA教案(改编) - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: