(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