1
《计算机程序设计基础》 习
解答
第 1 章 C 语言程序设计基础知识
习题
一、
1.A 2. B 3. A 4. A 5. C 6. D 7. A 8. A 9. C 10. A
二、
1. 编译 2. 补码 3. ASCII 4. 8 5. 255 6. –1 7. z 8. 16 9. –128 到 127 10. 32
三、略
附加题答案
一、
1. D 2. C 3. A 4. B 5. A 6. D 7.A 8. A 9. D 10.
二、
1. COMMAND.COM
2. 树型或层次型
3. CD ..
4. REN MY.TXT MY.C
5. DIR A:\TC\*.C/P
6. DOS\FORMAT A:/S 或\DOS\FORMAT A:/S 或 C:\DOS\FORMAT A:/S
7. 2 8. 10100.111 9. 路径 10. 64
三、略
第 2 章 基本数据类型及其运算
习题答案
一、单选题
1.D 2.B 3.C 4.C 5.D 6.D 7.B 8.-12 9.B 10.B
二、填空题
1.字母或下划线 2.单引号 或 ' ' 3.\ 4. ASCII 5.初始化 6. 5
7. sqrt((sin(30*3.14/180)+1)*(sin(30*3.14/180)+1)/cos(30*3.14/180));
8. fabs(1-pow(x,3.6));
9. (exp(1.2)+exp(-1.2))/2.0;
10. cos(30*3.14/180)/sin(30*3.14/180)+log(7)/log(2);
三、简答题
1. 01、195、0xff21、'\ff'、-0.e5、"123"
2. year、123、ABC、e、pi、int_
3. 字符是用单引号括起来的一个字符,其长度为 1,而字符串是用双引号括起来的多个字符
且在其尾部有一个空字符‘\0’,其长度为字符个数加 1。
4. 因为在 C 语言中,定义变量即通知系统按变量的类型分配一个单元,并建立意义对应的
关系,以后程序中引用该变量名即引用该变量对应单元的内容。如果一个变量没有定义而被
2
引用,由于系统没有为该变量分配内存单元,故对其引用是无意义的。所以要“先定义,后
使用”。
5. 相同类型数据间的运算,其结果的类型不变。不同类型数据间的运算,其结果类型变化
如图 2-11 所示。
附加题解答
一、单选题
1. A 2. B 3. C 4. D 5.C 6. A 7.A 8.C 9. D 10.B
二、填空题
1. 1 2.不同 3. #define 4. 2 5. double 6. 0 7.无符号 8. 0 9. 高 10. 2
三、简答题
略
第 3 章 顺序结构程序设计
习题答案
一、单选题
1.D 2.A 3.C 4.D
二、填空题
1. 输入输出函数 2. ;
3.printf() , scanf() 4.将 x 原来的值加上 3 以后重新赋给变量 x
三.、阅读题
1. a=98
x=45.78
c=9
2. m=12,n=9 9.34 17.2b,G
或
m=12,n=9
9.34 17.2b,G
3. int m=10,10 , 12
unsigned u=42315, -23221,a54b
long k=600000, 10176
float x=34.500000,3.45000e+01,34.5
double y= 76.100,8e+01
char a=′0′,b=a ,c=65
string,abcd , 123
4. a=4 b=9
a=9 b=4
四、编程题
3
1.
#include
#define PI 3.14159
main()
{ float a,b,c,alfa,p,area;
printf(″\n 请输入三角形的两条边的边长及夹角: ″);
scanf(″%f%f%f″,&a,&b,&alfa);
c=sqrt(a*a+b*b-2*a*b*cos(alfa*PI/180));
p=(a+b+c)/2;
area=sqrt(p*(p-a)*(p-b)*(p-c));
printf(″\n 该三角形的第三条边边长为:%6.1f″,c);
printf(″\n 该三角形的面积为:%6.2f″,area);
}
2.
#include
main()
{ float x,y;
printf(″\n 请输入 x 的值:″);
scanf(″%f″,&x);
y=((((3.0/4*x+12)*x-7.5)*x-8.0/3)*x+2)*x-4;
printf(″\n 多项式的值为:%f″,y);
}
或者 /*3.4.2. 2 y=3/4*x**5+12*x**4-7.5*x**3-8/3*x**2+2*x-4 */
#include
main()
{ float x,y;
printf(″\n 请输入 x 的值:″);
scanf(″%f″,&x);
y=3.0/4*pow(x,5)+12*pow(x,4)-7.5*pow(x,3)-8.0/3*x*x+2*x-4;
printf(″\n 多项式的值为:%f″,y);
}
3.
main()
{ int m,a,b,c,n;
printf(″\n 请输入一个三位正整数:″);
scanf(″%d″,&m);
a=m/100; b=m%100/10; c=m%10;
n=c*100+b*10+a;
printf(″\n 逆序的整数为:%d″,n);
}
或者 /* 3431 123---->321 */
main()
4
{ int a,b,c;
printf(″\n 请输入一个三位正整数:″);
scanf(″%c%c%c″,&a,&b,&c);
printf(″\n 逆序的整数为:%c%c%c″,c,b,a);
}
4.
main()
{ int m,num1,num2,num5;
float x;
printf(″\n 请输入钱的数目:″);
scanf(″%f″,&x);
m=(int)(x*100);
num5=m/5; m=m%5;
num2=m/2; m=m%2;
num1=m;
printf(″\n 最少的硬币数为:″);
printf(″\n 需要 1 分硬币%d 个,2 分硬币%d 个,5 分硬币%d 个″,num1,num2,num5);
}
附加题答案
一、单选题
1.A 2.B 3.A 4.B 5.C 6.B 7.A 8.B 9.D 10.B 11.D
二、填空题
1. 9,5 2. 4.4
3. 6 6 6.000000 6.000000 4. a=98,b=765.000000,c=4321.000000
5. 5.0,4,c=3 6.|98 |,|00098|,|98 |
三、阅读题
1.
(1)i=178,178,92930226
(2)i=| +178|178|178 |00000178|
(3)j=-34,65502,92995550
(4)j=| -34|-34|-0000034|
2.
(1)k=178, 178, 91488434
(2)k=| +178|262 | b2|
(3)n=-34, 65502, 91553758
3.
(1)a=178, (0)262, (0x)b2
(2)a=| 178|(0)262 |(0x)000000b2|
4.
(1)x=12.374000, 1.23740e+01, 12.374
5
(2)x=| 12.374000| 12.37|12|
(3)y=0.000001, 6.72000e-07, 6.72e-07
(4)y=| 6.72000e-07| 6.7e-07|7e-07|
5.
(1)ch1=E, (ASCII)69:(0)105:(0x)45
(2)e, (ASCII)101
(3)ch2=8, (ASCII)56
(4)8, 9
6.
(1)12345| 12345|12345 |
(2)| 12|123|
四、编程题
1.
main()
{ float r,h,v;
printf(″\n 请输入圆锥体的底部圆的半径和锥体的高度:″);
scanf(″%f%f″,&r,&h);
v=1.0/3*3.14*r*r*h;
printf(″\n 圆锥体的体积为:%f″,v);
}
2.
main()
{ int m,a,b,c,d;
printf(″\n 请输入一个四位正整数:″)
scanf(″%d″,&m);
a=m/1000; m=m%1000;
b=m/100; m=m%100;
c=m/10; m=m%10;
d=m
printf(″\n%8d%8d%8d%8d″,a,b,c,d);
printf(″\n%8d%8d%8d%8d″,a+′0′,b+′0′,c+′0′,d+′0′);
}
3.
#include
main()
{ int n;
float a,r,t;
printf(″\n 请输入本钱(元)和年利率:″);
scanf(″%f%f″,&a,&r);
printf(″\请输入存储年数:″);
6
scanf(″%d″,&n);
t=a*pow((100+r)/100,n);
printf(″\nt=%.2f″,t);
}
4.
main()
{ char ch;
printf(″\n 请输入一个小写英文字母:″);
scanf(″%c″,&ch);
printf(″\n%5c%5d″,ch,ch);
ch-=′a′-′A′;
printf(″\n%5c%5d″,ch,ch);
}
5.
#include
main()
{ char ch1,ch2,ch3,ch4;
int m=′a′-′A′;
printf(″\n 请输入英文单词(GOOD) ″);
ch1=getchar(); ch2=getchar();
ch3=getchar(); ch4=getchar();
putchar(′\n′);
putchar(ch1+m); putchar(ch2+m);
putchar(ch3+m); putchar(ch4+m);
}
6.
main()
{ int m;
float x,y;
printf(″\n 请输入一个实数:″);
scanf(″%f″,&x);
m=x; y=x-m;
printf(″\n%d,%f″,m,y);
}
第 4 章 选择结构程序设计
习题答案
一、单选题
1.B 2.A 3.B 4.B
7
二、填空题
1.1 0 2.!、%、>、&&、||、?:、=
3.1 4.(x==100 && y>80 || y==100 && x>80) && z>80
三、阅读题
1.a=1,b=0,c=0
2.a=8,b=8,c=10
3.y=0.500000
4.2
3
四、编程题
1. #include
main()
{float x,y;
scanf("%f",&x);
if(x>0) y=x+exp(x);
if(x= =0) y=0;
if(x<0) y=log10(abs(x))+pow(x,4);
printf("y=%f\n",y);
}
2. #include "stdio.h"
main()
{ char c;
c=getchar();
if (c= ='k' || c= ='K') printf("KOREA WORLD CUP");
else if (c= ='j' || c= ='J') printf("JAPAN WORLD CUP");
else if (c= ='c' || c= ='C') printf("BEIJIN OLYMPIC GAMES");
else printf("%c\n",c);
}
3.一:main()
{int a,b,c,max,min;
scanf("%d%d",&a,&b);
min=(a=b) ? a:b;
scanf("%d",&c);
if(cmax) printf("%d,%d,%d\n",min,max,c);
if(c>min && cb) {t=a;a=b;b=t;}
if(a>c) {t=a;a=c;c=t;}
if(b>c) {t=b;b=c;c=t;}
printf("%d,%d,%d\n",a,b,c);
}
4.main()
{int e=0;
float score;
char grade;
printf("input score:");
scanf("%f",&score);
if (score>100||score<0) {printf("\ndata error");e=1;}
switch (score/10)
{case 10:
case 9:grade='A';break;
case 8:grade='B';break;
case 7:grade='C';break;
case 6:grade='D';break;
case 5:
case 4:
case 3:
case 2:
case 1:
case 0:grade='E';}
if (e= =0) printf("score is%6.2f, grade is %c\n",score,grade);
}
若将 switchz 中的条件稍作改动,程序可写为:
main()
{int e=0;
float score;
char grade;
printf("input score:");
scanf("%f",&score);
if (score>100||score<0) {printf("\ndata error");e=1;}
switch (score/10-5)
{case 5:grade='A';break;
case 4:grade='A';break;
9
case 3:grade='B';break;
case 2:grade='C';break;
case 1:grade='D';break;
default:grade='E';
}
if (e= =0) printf("score is%6.2f, grade is %c\n",score,grade);
}
附加题答案
一、单选题
1.B 2.A 3.C 4.B 5.C 6.D
一、填空题
1.1 0 2. 1
3.非 0 4. 0
5.p%q!=0 6. a%2!=0
三、阅读题
1. a=1,b=0,c=1
2. a=2,b=6
3 a=0,b=1
4. y=10
5. a=4,b=6
6. sum=91
二、编程题
1.#include
main()
{char x;
x=getchar();
if('a'<=x && x<='z') putchar(x);
else if('A'<=x && x<='Z') putchar(x+32);
else printf("cuo le");
}
2.分析:对 a≠0 应考虑下面的情况:
(1)b2-4ac>0 时,方程有两个不等的实根
(2)b2-4ac=0 时,方程有两个相等的实根
(3)b2-4ac<0 时,方程有两个复数根
方法一:用嵌套的 if 语句
#include
main()
{float a,b,c,disc,x1,x2,real,imag;
scanf("%f%f%f",&a,&b,&c);
disc=b*b-4*a*c;
if(disc>=0)
if(disc>0)
{x1=(-b+sqrt(disc))/(2*a);
10
x2=(-b-sqrt(disc))/(2*a);
printf("x1=%0.2f\tx2=%0.2f\n",x1,x2);
}
else
{x1=x2=(-b)/(2*a);
printf("x1=x2=%0.2f\n",x1);
}
else
{real=(-b)/(2*a);
imag=sqrt(fabs(disc))/(2*a);
printf("x1=%.2f+%.2fi\tx2=%.2f-%.2fi\n",real,imag,real,imag);
}
}
方法二:用 if-else if 语句
#include
main()
{float a,b,c,disc,x1,x2,real,imag;
scanf("%f%f%f",&a,&b,&c);
disc=b*b-4*a*c;
if(disc>0)
{x1=(-b+sqrt(disc))/(2*a);
x2=(-b-sqrt(disc))/(2*a);
printf("x1=%0.2f\tx2=%0.2f\n",x1,x2);
}
else if(disc==0)
{x1=x2=(-b)/(2*a);
printf("x1=x2=%0.2f\n",x1);
}
else if(disc<0)
{real=(-b)/(2*a);
imag=sqrt(fabs(disc))/(2*a);
printf("x1=%.2f+%.2fi\tx2=%.2f-%.2fi\n",real,imag,real,imag);
}
}
3.#include
main()
{float x,y,z;
scanf("%f",&x);
z=1*(x>0)+2*(x==0)+3*(x<0);
switch(z)
{case 1: y=x+exp(x);break;
case 2: y=0;break;
case 3: y=log10(abs(x))+pow(x,4);
}
11
printf("y=%f\n",y);
}
4.main()
{int year,month,days,leap;
scanf("%d%d",&year,&month);
switch(month)
{case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:days=31;break;
case 4:
case 6:
case 9:
case 11:days=30;break;
case 2:
if(year%4==0 && year%100!=0 || year%400==0)
days=29;
else
days=28;
}
printf("%d %d days:%d\n",year,month,days);
}
5.main()
{int n,i=1;
long s=1;
scanf("%d",&n);
loop: if(i<=n)
{s*=i;
++i;
goto loop;
}
printf("n!=%ld\n",s);
}
6.main()
{int a=0,b=0,c=0,d=0,e=0;
float score;
loop1: printf("input score:");
scanf("%f",&score);
if(score= =-999) goto loop2;
if (score>100||score<0) {printf("\ndata error");goto loop1;}
switch (score/10-5)
12
{case 5:a=a+1;goto loop1;
case 4:a=a+1;goto loop1;
case 3:b=b+1;goto loop1;
case 2:c=c+1;goto loop1;
case 1:d=d+1;goto loop1;
default:e=e+1;goto loop1;
}
loop2: printf("A=%d,B=%d,C=%d,D=%d,E=%d\n",a,b,c,d,e);
}
第 5 章 循环结构程序设计
习题答案
一、单选题
1.A 2.D 3.B 4.C
二、填空题
1.e2 等于 0 2.switch、循环 或 循环、switch
3.0 4.0 30
执行结果为:k=61
三、阅读题
1.
#
#@
2.61
3.2,1,2,1,3,1,1,0
4.668977
四、编程题
1. main()
{long s=0,t=1;
int i;
for(i=1;i<5;i++)
{t*=i+1;
s+=i*t;
}
printf("s=%ld\n",s);
}
2. main()
{long s=0,a,b=0;
int n,i;
scanf("%ld%d",&a,&n);
for(i=0;i
main()
{char c;
int i,dx=0,xx=0,sz=0,qt=0;
for(i=0;i<20;i++)
{c=getchar();
if('A'<=c && c<='Z') dx+=1;
else if('a'<=c && c<='z') xx+=1;
else if('0'<=c && c<='9') sz+=1;
else qt+=1;
}
printf("dx=%d,xx=%d,sz=%d,qt=%d\n",dx,xx,sz,qt);
}
4.main()
{int a,b,c,d,x,y,z;
for(a=1;a<=9;a++)
for(b=0;b<=9;b++)
for(c=1;c<=9;c++)
for(d=0;d<=9;d++)
{x=1000*a+100*b+10*c+d;
y=100*c+10*d+c;
z=100*a+10*b+c;
if(x-y= =z) goto loop;
}
loop: printf("A=%d,B=%d,C=%d,D=%d\n",a,b,c,d);
printf("%d-%d=%d\n",x,y,z);
}
附加题答案
一、单选题
1.C 2.D 3.B 4.A 5.D 6.B
二、填空题
1.if goto 2.goto
3.5 4.5
5.9 1 6.0 20
三、阅读题
1.$
$$
$$$
$$$$
14
$$$$$
2.s=28
3.0 1 1 2 15 3
4.y=876
5.10 11
6. 1 2 3 4 5 6 7 8 9
- - - - - - - - -
1 1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 9 12 15 18 21 24 27
4 16 20 24 28 32 36
5 25 30 35 40 45
6 36 42 48 54
7 49 56 63
8 64 72
9 81
四、编程题
1. main()
{int a,b,r,m;
scanf("%d%d",&a,&b);
m=a*b;
r=a%b;
while (r!=0)
{a=b;b=r;r=a%b;}
printf("%d,%d\n",b,m/b);
}
2. #include
main()
{int i,j,a,m;
for (j=100;j<=300;j++)
{m=sqrt(j);
for(i=2;i<=m;i++)
{if (j%i==0) break;
continue;
}
if(i>m) printf("%5d",j);
}
}
3.main()
{int i,j,k,n;
for (n=100;n<1000;n++)
{i=n/100;
j=(n-100*i)/10; /* 或 j=n/10-i/10; */
15
k=n-100*i-10*j; /* 或 k=n%10; */
if (n==i*i*i+j*j*j+k*k*k)
printf("%d\n",n);
}
}
执行结果为:
153
370
371
407
4. main()
{char ch;
for(ch='Z';ch>='A';ch--)
printf("%c%c",ch,ch+32);
}
5.main()
{int n=1000,i;
float a=0.0,b=2.0,h,x,f0,f1,s=0.0,s1;
x=a;
h=(b-a)/n;
f0=x*x+x+1.0;
for(i=1;i<=n;i++)
{s1=f0*h;
s+=s1;
x+=h;
f0=x*x+x+1.0;
}
printf("n=%d,a=%5.2f,b=%5.2f,s=%8.2f\n",n,a,b,s);
}
6.#include
main()
{float x,x0,f,f1;
x=1.5;
do
{x0=x;
f=((2*x0-4)*x0+3)*x0-6;
f1=(6*x0-8)*x0+3;
x=x0-f/f1;
}
while(fabs(x0-x)>=1e-5);
printf("%5.2f\n",x);
}
第 6 章 数 组
16
习题答案
一、单选题
1.B 2.C 3.B 4.B
二、填空题
1.0 2.地址 起始
3.char str[16]= “I am a teacher”; 4.答案:a[1][2]
三、阅读题
1.sum=1234
2.–1 –4 –6 –4 –1
3. 2 2 0
0 0 2
2 0 1
4.将按所输入的字符按从大到小的次序排列出来。
四、编程题
1. main()
{float a[10],max,t;
int i,j,k;
for(i=0;i<10;i++)
scanf("%f",&a[i]);
for(i=0;i<9;i++)
{max=a[i];
k=i;
for(j=i+1;j<10;j++)
if(max=a[j][3]) continue;
{t=a[i][0];a[i][0]=a[j][0];a[j][0]=t;
t=a[i][1];a[i][1]=a[j][1];a[j][1]=t;
t=a[i][2];a[i][2]=a[j][2];a[j][2]=t;
t=a[i][3];a[i][3]=a[j][3];a[j][3]=t;
}
}
for (i=0;i<30;i++)
{for (j=0;j<4;j++)
printf("%5d",a[i][j]);
printf("\n");
}
}
4. #include "string.h"
main()
{char a[80],b[80];
int i=0,j,k=0;
gets(a);
while(a[i]!='x')
i++;
for (j=i+1;a[j]!='x';j++)
{b[k]=a[j];
k++;}
b[k]='\0';
puts(b);
printf("%d\n",strlen(b););
}
附加题答案
一、单选题
1.2.3.4.5.6.
二、填空题
1.不确定的 2.连续的
3.行 4.取整
5.答案:将回车符转换成'\0' 6.换行符
三、阅读题
18
1.5 4 3 2 1
2.0 –1 1 1 2 3
3.s1=12 s2=12
4.1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
5.COMPUTER
6.pen
paper
四、编程题
1.main()
{int a[8],i,k=0,x,y;
scanf("%d",&x);
while(x!=0)
{y=x/2;
a[k]=x-2*y;
k+=1;x=y;
}
for (i=k-1;i>=0;i--)
printf("%d",a[i]);
}
2.main()
{int a[10]={0},i,j,x;
for (i=0;i<10;i++)
{scanf("%d",&x);
j=x-(x/10)*10;
a[j]=a[j]+1;
}
for (i=0;i<10;i++)
printf("%3d",a[i]);
}
3. # define M 20
# define L 30
# define N 20
main()
{ int a[M][L],b[L][N],c[M][N],i,j,k;
int m,l,n;
scanf("%d%d%d",&m,&l,&n);
for(i=0;i