精通C程序设计教程各章习题Word文档格式.docx
《精通C程序设计教程各章习题Word文档格式.docx》由会员分享,可在线阅读,更多相关《精通C程序设计教程各章习题Word文档格式.docx(31页珍藏版)》请在冰豆网上搜索。
![精通C程序设计教程各章习题Word文档格式.docx](https://file1.bdocx.com/fileroot1/2023-2/1/e9e6e60a-5a03-4763-8b42-44b72cf5c186/e9e6e60a-5a03-4763-8b42-44b72cf5c1861.gif)
(J)1E1(K)'
\'
(L)09E05
(M)0X0AaA(N)15.2000e0(O)abH(P)0110Lu
(Q)1e1f(R)0.1L(S)80h(T)0xAUL
2.10写出以下表达式的求值结果。
设inta=3,b=2,c=4,d=0;
(1)a++;
(2)a+b<
c&
&
(b=d)
(3)!
(d=a)&
(a=b)
(4)!
a+c1||b+c/3
(5)!
!
a+b
(6)012<
<
3+1
(7)sizeof(32L)
(8)sizeof(0.005f)
(9)sizeof(7.0)
(10)sizeof(double)
(11)sizeof('
A'
)
(12)sizeof('
2)
(13)3<
a<
c
(14)3<
a&
(15)a&
b|c^++d>
>
1
(16)b?
a:
~d
(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若有定义doublex=2.5,y=4.7;
inta=7;
表达式x+a%3(int)(x+y)%2/4的值是。
2.12若有定义inta=2,b=3;
doublex=3.5,y=2.5;
表达式(float)(a+b)/2+(int)x%(int)y的值是。
2.13若有定义inta=3,b=2,c=0;
执行下列表达式,写出变量值和表达式值。
(1)c=ab;
则a=,b=,c=,表达式=
(2)c=++ab;
(3)b=c(b);
2.14若a=10,b=7,写出下列表达式的值和变量a的值。
(1)a/=aa;
(2)a=a;
(3)a/=2+3;
(4)a%=n%=4;
(1)a<
=n++/4(6)a=a,a=b,a++;
2.15写出下列数学表达式对应的C表达式。
(1)
(2)
(3)
(4)
(5)
(6)
2.16写出以下程序的输出(请上机验证)。
#include<
stdio.h>
voidmain()
{inta=157;
unsignedlongb=0xa8d5b;
charc='
a'
;
doublex=30.57;
printf("
%6d,%08X,%o,%+10d\n"
a,a,a,a);
%lu,b=%10lx,%+5lu,%08lX\n"
b,b,b,b);
c=%3c\nc=%d\nc=%04x\n"
c,c,c);
%f,%g,%e,%E,%10.3f,%.3e\n"
x,x,x,x,x,x);
%.f,%+0d\n"
8,4,x,6,a);
}
2.17如果希望a=15,b=38.7,c='
x=1e6,写出下面程序的正确输入格式(请上机验证)。
#include"
stdio.h"
{inta;
floatb;
charc;
doublex;
scanf("
%d,%f%c,x=%lf"
&
a,&
b,&
c,&
x);
a=%d,b=%.1f,c=%c,x=%.0E\n"
a,b,c,x);
2.18下列程序的输入输出语句虽然不存在任何语法问题,但无法正确输入/输出某些变量,请指出程序中的问题并改正。
{longa;
intb;
floaty;
%d%d%f%f"
a,b,x,y);
a=%o,b=%.0f,x=%0G,y=%Lg\n"
2.19输入圆的半径r,编程计算并输出圆的周长和面积。
2.20输入三角形的三边长a,b,c,编程计算并输出三角形的面积。
(注意:
输入a,b,c时,应保证三角形两边之和大于第三边)三角形面积计算公式如下:
2.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.1C语言的三种循环语句是什么?
它们各自有什么特点?
3.2break、continue语句与goto语句有何区别?
3.3若a=3,b=2,c=1,则执行下列if语句后,依次写出a、b、c的值。
if(a>
b)a=b;
if(b>
c)b=c;
elsec=b;
c=a;
3.4执行下列程序后,x和y的值分别是多少。
intx,y;
for(y=1,x=1;
y<
=50;
y++)
{if(x>
=10)break;
if(x%2==1)
{x+=5;
continue;
}
x=3;
3.5写出以下程序的输出结果。
main()
{intc='
a=0,k=1;
while((k+=2)<
8)
{putchar(++c);
a+=k;
printf("
%d\n"
a);
return1;
3.6下面程序的循环体共执行了多少次,输出的结果是什么?
{intm,n;
m=10;
n=1;
do{m;
n+=5;
if(!
(n%3))printf("
%4d%4d\n"
m,n);
}while(m>
n);
3.7若输入为ABCD,下面程序的输出是什么?
{charch,n;
for(n=0;
(ch=getchar())!
=10;
n++)putchar(ch+32);
n);
3.8若a,n,i,j,k都是int型变量,且n值大于0。
执行下面的程序后,变量a的值是多少?
(用n表达变量a的值)
a=0;
for(i=1;
i<
n;
i++)
for(j=1;
j<
=i;
j++)
fo(k=1;
k<
=j;
k++)
a++;
3.9假设变量已有正确定义,以下程序能够正确计算p=n!
的有。
(A)for(p=1,k=0;
=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;
dop=k;
while(++k>
(E)p=0;
for(k=1;
k++)p=k;
(F)for(p=1,k=0;
p=++k);
3.10以下程序的功能是输入10个字符,如果输入的是数字字符0,则输出字符;
如果是数字字符1-9,则原样输出;
如果输入的是其它字符则不输出,但要求用变量s累加计算它们的ASCII码平方和。
全部字符输入结束后,输出s的值。
有同学写了一个程序,编译完全正确,但无法得到所要求的结果,请帮助这位同学改正程序中的问题。
{charc,i,s;
10;
i++);
{c=getchar();
if('
1'
=c<
='
9'
)putchar(c);
if(c='
0'
)putchar('
'
);
elses=cc;
\ns=%d\n"
s);
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语句两种方法描述以下计算要求:
t²
0≤t<
y=t²
11≤t<
2
2t+12≤t<
3
3.14编程输出一个周期的余弦函数cosx的值,要求每隔/20输出一个函数值。
3.15编程输出以下计算结果。
0.020.220.420.620.821.021.221.421.621.821.922.02
3.16输入一个实数a和一个整数m,不使用系统库函数,计算并输出am。
比如:
输入a值为3,m值为3,则输出27.0000;
输入a值为2,m值为3,则输出0.1250。
3.17编程求出一个长整数的十进制位数。
比如,输入35076,输出为5;
输入为24,输出为2。
3.18输入一个正长整数,按相反次序输出该整数的各位数字。
比如,输入为35076,输出是67053。
3.19编写一个决定学生成绩的程序。
这个程序将读入一个学生的三次考试成绩(0-100),然后计算其平均值,并根据这个平均值决定学生的总成绩(用字母A,B,C,D,F来表示)。
字母成绩按如下规定来确定:
A平均成绩在90或90分以上
B平均成绩在80到89分
C平均成绩在70到79分
D平均成绩在60到69分
F平均成绩在60分以下
程序在显示了一个学生的字母成绩后,将继续对下一个学生的成绩进行处理,直到用户输入的学生成绩为负数时停止。
3.20编程输入两个日期y1,m1,d1和y2,m2,d2,计算并输出这两个日期相距的天数。
4.1输入若干整数,直到输入0时停止,统计并输出奇数的数目和偶数的数目。
4.2输入10个实数,输出这10个数的平均值。
4.3计算s=
。
要求n值由用户输入。
4.4根据本章打印杨辉三角形例题中组合数的递推计算方法计算组合数
,要求输入n、m值,输出组合数。
程序中应对输入的n,m有效性进行检查。
4.5输入x值,计算
,要求最后一项绝对值小于106时停止计算。
4.6用公式
计算的近似值,计算时取1000个因子。
4.7计算
的前n1项和。
要求x和n值由键盘输入。
4.8输入x值(|x|<
1),计算
要求计算到最一项绝对值小于106时停止。
4.9一个小球从高度为h米处自由落下,每次落地后反弹回原高度的一半再落下。
求小球第k次落地时,总共走过了多少米?
第k次落地反弹后,可以反弹到多高?
4.10输入自然数n,输出其和等于n的所有不增的正整数和式。
如n=4,程序将输出:
4=4
4=3+1
4=2+2
4=2+1+1
4=1+1+1+1
要求程序完成一次输出后,继续提示用户输入n值,直到用户输入0或负数时才停止运行。
4.11编写程序,输入一个自然数n,将n分解成质因子连乘形式。
要求程序完成一次输出后,继续提示用户输入自然数,只有当输入的自然数是0或负数时,程序才停止运行。
4.12“有物不知何数,三三数剩二,五五数剩三,七七数剩二”问物有多少?
(引自《孙子算经》)编程输出1000以内所有的解。
4.13韩信点兵:
有兵一队,五伍剩一,六伍剩五,七伍剩四,十一伍剩十,问兵几何?
4.14有30个男女小孩同在一家饭馆进餐,共花了50元,其中每男宾3元,女宾2元,小孩1元。
问男、女、小孩各多少?
4.15将一张面值100元的人民币兑换为5元、2元、1元和5角的零钞,要求零钞总数不超过40张且每种至少1张,求所有兑换方案。
4.16有一个算式缺少了四个数字(如下所示),请编程找出这四个数字。
10566(475349)16=416354
4.17打印如下图形。
要求把图形放到屏幕中央并且打印行数n(n=1,2,…,9)由用户输入。
121
12321
1234321
123454321
4.18打印如下图形。
打印行数n由有户输入。
要求把图形放在屏幕中央。
aba
abcba
abcdcba
abcdedcba
4.19打印如下图形。
要求总行数n由键盘输入。
注意:
n必须是奇数。
4.20打印如下图形。
要求输入最大的字母来控制打印行数。
比如,下图应该输入字母D。
A
B-B
C―――C
D―――――D
B-B
A
4.21打印如下图形。
要求打印行数n由用户输入。
124711
235812
4571014
78101317
1112141721
4.22自拟格式,打印九九乘法表。
4.23p和q都是素数,若q=p2,那么p,q对被称为双素数。
例如,3,5就是双素数。
编程求1000以内所有的双素数。
4.24如果一个自然数的所有因子之和等于该数本身,称这个数为“完数”。
编程输出1000以内的全部完数。
要求输出格式如下:
28=1+2+4+7+14
4.25输入若干个自然数,直到输入0时停止,求所有自然数的最大公约数与最小公倍数。
4.26求2-10000中的守形数。
所谓守形数,是指某数平方的低位就是该数本身。
比如,52=25, 5是25的低位,因此5就是守形数;
762=5776,76是5776的低位,因此76也是守形数。
要求输出格式形如:
76:
7676=5776
4.27两个自然数a,b(ab),若a的因子和等于b,b的因子和等于a,称a,b为亲密数对,求1000以内
第五章习题
5.1建立一个N元实型数组,输出最大值与最小值元素的下标。
5.2编写程序,输入N个学生的成绩并用一维数组保存。
计算并输出平均成绩、最高分以及最低分。
5.3编程建立并输出一个N阶单位矩阵。
5.4建立一个整型一维数组,然后重排数组元素,使得所有奇数排在偶数前面。
5.5用一维数组存储素数,求1000以内的素数。
为了提高算法效率,在判断整数m是否是素数时,只需要用已经找到并存入数组中的素数去试除m。
5.6输入最多不超过15个正整数,求这些整数的最大公约数与最小公倍数。
要求用数组求解。
5.7写一个程序,输入一个N阶实数方阵,实现矩阵转置并输出。
5.8在屏幕上打印出以下杨辉三角形,要求打印出的行数n由用户输入。
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
…
(用二维数组求解)
5.9删除数组中小于0的所有元素,要求不另辟数组空间实现算法。
数组原来为:
529311071263
则删除小于0的元素后,数组变为93126
5.10输出一个二维数组中的鞍点(i0,j0)。
鞍点满足两个条件,一是在i0行它是最大元,二是在j0列它是最小元。
如果没有鞍点,输出提示信息。
5.11编程判断一个N阶方阵是否为对称矩阵。
5.12以下程序的功能是重新排列数组a[N]的元素,使相等元素放在一起,并且保持它们在数组中第一次出现的相对次序。
例如:
重排前:
4,3,4,2,4,5,2,4,3,1,5,4
重排后:
4,4,4,4,4,3,3,2,2,5,5,1
程序采用的算法是先删去重复元素,并统计各不同元素出现的次数,再按照各元素重复次数写回到数组a中。
#defineN20
{inta[N],b[N],c[N],i,j,k,t;
for(j=0;
N;
++j)
{b[j]=c[j]=1;
%d"
a[j]);
for(i=0;
if()
{a[++k]=;
for(j=i+1;
j++)if(a[j]==a[k]){b[j]=0;
;
t=N1;
for(i=k;
i>
=0;
i)
j;
j++)=a[i];
for(j=0;
j++)printf("
%5d"
a[j]);
第六章习题
6.1指针的三个属性是什么?
6.2指出下面程序中的指针常量标识符,并说明含义。
math.h>
{doublex,y;
inta[]={0,1,2,3};
intp=NULL;
scanf("
%lf"
y);
x=fabs(y);
p=&
a[1];
x=%.2f\n"
x);
6.3若有定义floata[7],p=a+3;
写出以下表达式代表的数组元素。
(1)a;
(2)p;
(3)(a+2);
(4)(p2);
(5)(p2);
(6)p[1];
(7)p[1];
(8)p[3];
6.4若有定义longa[10],i,p;
以下程序能够正确输入数组元素的是。
(A)i=0;
while(i<
10)scanf("
a[i++]);
(B)for(i=0,p=a;
%ld"
p[i]);
(C)for(p=a;
p<
=a+9;
p++)scanf("
p);
(D)p=a;
doscanf("
p++);
while(pa>
=10);
6.5以下程序能够安全正确地建立字符串的是。
(A)main(){chars[41];
%s"
s[0]);
(B)main(){chars[41];
%c"
(C)main(){chars;
(D)main(){chars[41],p=s;
p);
6.6定义三个变量用于存储读入的三个整数,另定义三个指向整型量的指针变量,并利用它们实现将读入的三个整数按值从小到大顺序输出。
6.7利用指针编写一个程序,使它能够从键盘读入4个数,并找出它们的平均值、最大值和最小值,然后将结果显示到屏幕上。
要求不能使用数组。
6.8编写一个程序,要求当用户输入两个字符串后,程序将这两个字符串连接起来输出。
6.9由用户输入一串字符,将其中大写字母变成小写字母,小写字母变成大写字母,并按倒序输出。
要求用下标和指针两种方法求解。
6.10编写一个程序,使它能够统计用户输入的字符串中的数字字符数目。
6.11编写程序,实现N元数组元素循环左移m次。
N=8,输入8个元素为12345678
则循环左移三次的输出结果是45678123
(要求用下标和指针两种方法求解)
6.12编写一个程序,使它能够模拟摩斯译码,即
将字母ABCDEFGHIJKLMNOPQRSTUVWXYZ
翻译成ZYXWVUTSRQPONMLKJIHGFEDCBA
例如,输入如下密码:
NZWZN,RZNZWZN
将译码为:
MADAM,IAMADAM
该程序要求用户从键盘输入一个按照以上密码规定编写的字符串,然后对其进行译码并输出结果。
6.13编写一个程序,输入一个字符串,删除字符