精通C程序设计教程各章习题
第一章习题
1.1 简述冯·诺依曼体系计算机的硬件结构与“存储程序”的工作原理。 1.2 简述高级语言的编程过程。
1.3 编译程序与连接程序的主要功能是什么?
1.4 常见的程序错误有哪些类型?程序员该如何发现并修正这些错误? 1.5 为什么阅读和分析程序很重要?程序员该怎样阅读和分析程序?
1.6 程序员在编程过种中的主要工作是什么?编程工作对程序员有怎样的要求? 1.7 结构化程序设计的核心思想是什么? 1.8 什么是面向过程编程与面向对象编程?
1.9 按照软件工程的方法,软件“生命期”的全过程是怎样的? 1.10 什么是字符文件?字符文件的存储特点是怎样的? 1.11 C语言的主要特点是什么? 1.12 什么是高级语言的数据类型? 1.13 简述算法的主要特点与性能要求。 1.14 简述算法描述的几种常用方法。 1.15 试说明重视算法描述的意义。
1.16 用程序框图和N-S程序流图两种方法描述例1-15的算法。 1.17 名词解释。
(1)指令 (2)程序 (3)软件 (4)程序语言 (5)算法 (6)软件工程 (7)数据结构 (8)时间复杂度
1.18 采用二进制运算,把以下十进制数化为16位补码并写出内存中字节的存储顺序。 (1) ?1 (2) 27482 (3) ?9547 (4) ?32767 (5) ?27482 1.19 用十进制运算完成1.11题。
1.20 把下列十进制数化为IEEE单精度规格化浮点数,写出内存中字节的存储顺序。
(1) ?180.3 (2) 10000 (3) 0.0001 (4) ?247.75 (5) 0
第二章习题
2.1 什么是L-value?
2.2 C语言是怎样表示逻辑意义的?
2.3 C语言的字符常量与字符串常量有何区别?
2.4 什么是计算转换规则?C语言的计算转换规则是怎样的? 2.5 什么是表达式?
2.6 简述C语言数学表达式的书写方法。 2.7 简述C语言源程序的书写规范。
2.8 为什么说C语言程序是函数组成的程序? 2.9 什么是复合语句?为什么要使用复合语句?
2.8 以下符号序列作为用户标识符正确的是 。 (A)_75_ (B)TurboC (C)main (D)if (E)It (F)max_ (G)_000 (H)08H
2.9 以下符号序列中,合法的C常量有 。
(A)'\\X41' (B)099 (C)'\\x0' (D)0X9h (E)'\\\\n' (F)?.25 (G)1e2.0 (H)\(I)'\\8' (J)?1E?1 (K)'\\' (L)09E05
(M)0X0AaA (N)?15.2000e0 (O)abH (P)0110Lu (Q)1e1f (R)?0.1L (S)80h (T)?0xAUL 2.10 写出以下表达式的求值结果。设int a=3,b= ?2,c=4,d=0; (1) a++; (2) a+b
(17)035+0x10/a%b/b (18)10/3+9%3?(?1)/5 (19)10&6|5&&a (20)10&&6|!b| |c
2.11 若有定义double x=2.5, y=4.7; int a=7;
表达式x+a%3?(int)(x+y)%2/4的值是 。 2.12 若有定义int a=2, b=3; double x=3.5, y=2.5;
表达式(float)(a+b)/2+(int)x%(int)y的值是 。
2.13 若有定义int a=3,b=2,c=0;执行下列表达式,写出变量值和表达式值。
(1)c=a???b??; 则a= , b= , c= , 表达式= (2)c=++a?b; 则a= , b= , c= , 表达式= (3)b=??c?(??b); 则a= , b= , c= , 表达式= 2.14 若a=10, b=7,写出下列表达式的值和变量a的值。
(1)a/=a?a; (2)a?=a; (3)a/=2+3; (4)a%=n%=4; (1) a<<=n++/4 (6)a?=??a, a?=b??, a++; 2.15 写出下列数学表达式对应的C表达式。
??y?? (3)1??tan48?30? (1)?y(a?b) (2)sin?22?2?x?y?422(4)
a?a?yaxa?bba?bzpq(r?1)2?x3?eln(1?x) (5) (6)
(r?1)2?12.16 写出以下程序的输出(请上机验证)。 #include
{ int a=157; unsigned long b=0xa8d5b;char c='a'; double x=30.57; printf(\?08X,%o,%+10d\\n\ printf(\?10lx,%+5lu, lX\\n\ printf(\ printf(\ printf(\?.?f,%+0?d\\n\
}
2.17 如果希望a= ?15, b=38.7, c='A', x=1e?6,写出下面程序的正确输入格式(请上机验证)。 #include \void main()
{int a;float b;char c;double x;
scanf(\ printf(\
}
2.18 下列程序的输入输出语句虽然不存在任何语法问题,但无法正确输入/输出某些变量,请指出程序中的问题并改正。 #include \void main()
{ long a;int b;double x;float y; scanf(\
printf(\,y=%Lg\\n\ }
2.19 输入圆的半径r,编程计算并输出圆的周长和面积。
2.20 输入三角形的三边长a, b, c,编程计算并输出三角形的面积。(注意:输入a, b, c时,应保证三角形两边之和大于第三边)三角形面积计算公式如下:
1 p?(a?b?c),s?p(p?a)(p?b)(p?c)
22.21 购房按揭贷款:设贷款本金为a,贷款期数为n(以月为单位),贷款月利率为p,采用等额本息法还款,问每月还款额是多少?编程输入a,n,p,输出每月还款额。
比如,输入a=100000,n=120,p=0.004,表示本金10万元,贷款期限为10年(120个月,月利率为0.4%。(程序假设月利率在贷款期限内恒定不变)。
提示:首先从数学上分析每月固定还款额x与a,n,p的关系式,然后求解,分析方法提示如下:
设第i个月开始时,还有本金ai,则第i个月结束时,剩余本金即第i+1月开始时的本
金ai+1= ai(1+p)?x。i=1,2,3,…,n
显然,有a1=a,an+1=0。
第三章习题
3.1 C语言的三种循环语句是什么?它们各自有什么特点? 3.2 break、continue语句与goto语句有何区别?
3.3若a=3, b=2, c=1, 则执行下列if语句后,依次写出a、b、c的值。
if (a>b) a=b; if (b>c) b=c; else c=b; c=a;
3.4 执行下列程序后,x和y的值分别是多少。
int x,y;
for (y=1,x=1;y<=50;y++) { if (x>=10) break; if(x%2= =1)
{x+=5; continue;} x?=3; }
3.5 写出以下程序的输出结果。 #include
{ int c='A',a=0,k=1;
while((k+=2)<8)
{ putchar(++c);a+=k; }
printf(\return 1; }
3.6 下面程序的循环体共执行了多少次,输出的结果是什么? #include \void main() { int m,n;
m=10;n= ?1; do { m??; n+=5;
if(!(n%3)) printf(\ } while(m>n);
}
3.7 若输入为ABCD?,下面程序的输出是什么? #include
for(n=0;(ch=getchar())!=10;n++) putchar(ch+32); printf(\
}
3.8 若a, n, i, j, k都是int型变量,且n值大于0。执行下面的程序后,变量a的值是多少?(用n表达变量a的值) a=0;
for(i=1;i fo(k=1;k<=j;k++) a++; 3.9 假设变量已有正确定义,以下程序能够正确计算p=n!的有 。 (A) for(p=1,k=0;k??<=n;p?=k); (B) p=1;k=n; while(p?=k,? ?k); (C) p=0;do { k=1;p?=k++; } while(k<=n); (D) p=k=1; do p?=k; while(++k>=n); (E) p=0;for(k=1;k<=n;k++) p?=k; (F) for(p=1,k=0;k 3.10 以下程序的功能是输入10个字符,如果输入的是数字字符0,则输出字符?;如果是数字字符1-9,则原样输出;如果输入的是其它字符则不输出,但要求用变量s累加计算它们的ASCII码平方和。全部字符输入结束后,输出s的值。有同学写了一个程序,编译完全正确,但无法得到所要求的结果,请帮助这位同学改正程序中的问题。 #include { char c,i,s; for(i=1;i<10;i++); { c=getchar(); if('1'<=c<='9') putchar(c); if(c='0') putchar('?'); else s=c?c; printf(\ } } 3.11 编写一个程序,使它能够将用户输入的四个整数按大小次序排列。 3.12 企业放发的奖金根据利润提成。设企业的利润为I,提成标准如下: I<10万元时,提成10%; 10万元<I≤20万元时,低于10万元部分仍按10%提成,高于10万元部分按7.5%提成; 20万元<I≤40万元时,低于20万元部分按前面方法提成,高于20万元部分按5%提成; 40万元<I≤60万元时,低于40万元部分按前面方法提成,高于40万元部分按3%提成; 60万元<I≤100万元时,低于60万部分按前面方法提成,高于60万部分按1.5%提成; 100万元<I时,低于100万元部分按前面方法提成,高于100万元部分按1%提成。 编程输入利润I,计算输出提成金额。 3.13 用switch语句和if语句两种方法描述以下计算要求: 2 t 0≤t<1 2 y = t?1 1≤t<2