高级语言程序设计与应用教程习题答案.docx
《高级语言程序设计与应用教程习题答案.docx》由会员分享,可在线阅读,更多相关《高级语言程序设计与应用教程习题答案.docx(23页珍藏版)》请在冰豆网上搜索。
![高级语言程序设计与应用教程习题答案.docx](https://file1.bdocx.com/fileroot1/2023-1/8/b789ea2b-9d51-4c73-8035-a5e5ec2fa96d/b789ea2b-9d51-4c73-8035-a5e5ec2fa96d1.gif)
高级语言程序设计与应用教程习题答案
第二章
一、单选题
1
B
2
C
3
C
4
B
5
B
6
A
7
B
8
A
9
D
10
CC
11
BC
12
B
13
C
14
DBA
15
C
二、填空题
1.3、1
2.2
3.4
4.-264
5.n=1
三、简答题(略)
第三章
一、单选题
1
C
2
D
3
B
4
B
5
C
6
C
7
B
8
A
9
D
10
D
11
D
12
C
13
A
14
D
二、填空题
6.顺序结构、选择结构、循环结构
7.scanf()、printf()
8.1
9.2
10.1
11.1
2
3
12.s=254
13.8
三、简答题
1.什么是结构化的程序设计?
它有什么特点?
答:
结构化程序设计的基本思想是:
任何程序都可以通过顺序结构、选择结构、循环结构表示。
复杂程序是经过这三种基本结构反复嵌套使用而构成的。
结构化程序的优点是程序模块结构清楚,层次分明,易于读写。
2.什么是关系运算?
什么是逻辑运算?
什么是条件运算?
答:
(1)关系运算是通过C语言提供的6种关系运算符对两个值的大小等关系进行比较。
(2)逻辑运算既通过三种逻辑运算符对逻辑量进行与、或、非的运算即逻辑运算。
(3)条件运算是通过条件运算符“?
:
”构造的条件表达式:
表达式1?
表达式2:
表达式3,根据表达式1的值判断条件表达式的最终计算结果是取表达式2的值还是取表达式3的值。
3.空语句是可有可无的吗?
答:
不是,虽然空语句是什么也不执行的语句,但是在程序中空语句可用来构成循环结构中的空循环体。
4.C语言中如何判断一个量的"真"、"假"?
答:
如果某个量的值不为0时,则在逻辑运算中被判别为真;否则,如果其值为0时,被判别为假。
5.请谈谈条件表达式和条件语句有什么区别和联系?
答:
条件表达式和条件语句都可以根据给定的条件进入不同的分支执行语句。
条件表达式语句简练,如果选择结构比较简单,可以采用条件表达式来实现。
而通过条件语句,以及语句的嵌套,可以实现更复杂的选择结构。
四、程序设计题
1.编写程序,输出x2的值,x取值从0到10。
答案:
#include"stdio.h"
voidmain()
{
intx;
for(x=0;x<=10;x++)
printf("square(%d)=%d\n",x,x*x);
}
2.编写程序,从键盘输入三个整数,求其中的最大数和最小数,并输出结果。
答案:
#include"stdio.h"
voidmain()
{
intx,y,z,max,min;
printf("Pleaseinputthreeintegernumber:
");
scanf("%d%d%d",&x,&y,&z);
min=max=x;
if(x==y&&y==z)
printf("x=y=z,max=min=%d\n",max);
else
{
if(y>max)
max=y;
if(z>max)
max=z;
if(ymin=y;
if(zmin=z;
printf("max=%d,min=%d\n",max,min);
}
}
3.编写程序,把键盘中输入的字符串中的数字字符删除,然后输出删除数字后的字符串。
答案:
解法1(利用数组):
#include"stdio.h"
voidmain()
{
charc,s[50]="",i=0;
c=getchar();
while(c!
='\n')
{
if(c<'0'||c>'9')
{
s[i]=c;
i++;
}
c=getchar();
}
printf("%s\n",s);
}
解法2(不用数组):
#include"stdio.h"
voidmain()
{
charc,i=0;
c=getchar();
while(c!
='\n')
{
if(c<'0'||c>'9')
printf("%c",c);
c=getchar();
}
printf("\n");
}
4.编写程序,打印九九乘法表。
答案:
#include"stdio.h"
voidmain()
{
inti,j;
for(i=1;i<=9;i++)
{
for(j=1;j<=i;j++)//注意j的终值到i即可
printf("%d*%d=%d\t",i,j,i*j);//输出一行的多个乘法式子
printf("\n");//一行多个式子输出完毕,再换行
}
}
5.编写猜数游戏,程序给定某个整数,从键盘反复输入数据进行猜测。
如果未猜中,程序提示输入过大或过小;如果猜中,则输出猜的次数。
最多允许猜10次。
答案:
解法1(指定被猜数):
#include"stdio.h"
voidmain()
{
intx,i=1;
intn=88;//指定被猜数88
printf("pleaseinputanumber.\n");
scanf("%d",&x);
while(i<10)
{
if(x!
=n)
{
if(x>n)
printf("%d>n!
Tryagain!
\n",x);
else
printf("%dTryagain!
\n",x);
scanf("%d",&x);
i++;
}
else
{
printf("Youareright,thenumberis%d,andyouhavetried%dtimes.\n",n,i);break;
}
}
if(i==10)
{
printf("Youhavetried10times.Gameover!
\n");
printf("Thenumberis%d.\n",n);
}
}
解法2(随机产生被猜数):
#include"stdio.h"
#include//包含产生随机数库函数rand()的头文件
voidmain()
{
intx,i=1;
intn=rand();//使用库函数产生被猜数
printf("pleaseinputanumber:
\n");
scanf("%d",&x);
while(i<10)
{
if(x!
=n)
{
if(x>n)
printf("%d>n!
Tryagain!
\n",x);
else
printf("%dTryagain!
\n",x);
scanf("%d",&x);
i++;
}
else
{
printf("Youareright,thenumberis%d,andyouhavetried%dtimes.\n",n,i);break;
}
}
if(i==10)
{
printf("Youhavetried10times.Gameover!
\n");
printf("Thenumberis%d.\n",n);
}
}
6.答案:
#include"stdio.h"
voidmain()
{
inti=1;
floatj,sum;
sum=1.0;
do
{
j=1.0/(i*(i+1));
sum=sum+j;
//printf("i=%d,j=%f\n",i,j);
i=i+1;
}
while(j>=0.001&&i<=20);
printf("sum=%f\n",sum);
}
7.答案:
#include"stdio.h"
voidmain()
{
intk,sum1=0;
floatsum=0,sum2=0;
for(k=1;k<=100;k++)
sum=sum+k;
for(k=1;k<=50;k++)
sum1=sum1+k*k;
for(k=1;k<=10;k++)
sum2=sum2+1.0/k;
sum=sum+sum1*sum2;
printf("sum=%f\n",sum);
}
8.打印所有“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。
答案:
#include"stdio.h"
voidmain()
{
intk;
intm,n,t;
for(k=100;k<=999;k++)
{
m=k/100;
n=k/10%10;
t=k%10;
if(m*m*m+n*n*n+t*t*t==k)
printf("k=%d\n",k);
}
}
9.打印如下图案:
*
***
*****
答案:
解法1(指定行数):
#include"stdio.h"
voidmain()
{
inti=3;//行数
intm,n;//n为空格个数,m为*个数
intk,t;
for(k=1;k<=i;k++)
{
n=i-k;
m=k*2-1;
for(t=1;t<=n;t++)
printf("");
for(t=1;t<=m;t++)
printf("*");
printf("\n");
}
}
解法2(输入行数):
#include"stdio.h"
voidmain()
{
inti;//行数
intm,n;//n为空格个数,m为*个数
intk,t;
printf("pleaseinputrownumber:
");
scanf("%d",&i);
for(k=1;k<=i;k++)
{
n=i-k;
m=k*2-1;
for(t=1;t<=n;t++)
printf("");
for(t=1;t<=m;t++)
printf("*");
printf("\n");
}
}
第四章
一、单选题
1
C
2
B
3
D
4
D
5
D
6
A
7
D
8
C
9
C
10
B
11
C
12
A
13
C
14
C
15
C
16
D
17
A
18
C
19
C
20
A
二、填空题
14.12
15.-850,2,0
16.k=p
k
17.357
18.2
19.25
20.30
21.a*b*c*d*
22.5335
23.12334
三、编程题
1.【分析与解答】
(1)对于字符的输入要使用while循环,只是要注意,循环的终止条件是:
等于’\n’。
(2)在while循环体中,用if条件来判断是否为数字字符,若是,就使对应的元素增1;if中的条件表达式可用C的库函数:
isdigit(ch),这时要在程序前加:
#include 行;也可用:
ch>=’0’&&ch<=’9’。
(3)若用num数组元素来进行统计,当ch中是数字“0”时,使num[0]增1、当ch中是数字“1”时,使num[1]增1…,num的下标表达式可用:
ch-‘0’。
(4)注意,在定义数组时,数组的大小应符合使用的要求。
在利用数组元素作为计数器时,不要忘记首先应该给数组元素赋0值。
(5)总结:
通过本题的编程,要求掌握利用数组元素作为计数器的基本算法。
#include"stdio.h"
voidmain()
{
intnum[10]={0},i;
charch;
scanf("%c",&ch);
while(ch!
='\n')
{
if(ch>='0'&&ch<='9')
num[ch-'0']++;
scanf("%c",&ch);
}
for(i=0;i<10;i++)
printf("Thecountof%dis:
%d\n",i,num[i]);
}
2.【分析与解答】
(1)使用while循环输入学生成绩,循环条件是a>=0.0&&a<=100&&n<1000;当输入的数不在0到100之间,或者输入的成绩个数超过1000个,则停止输入;
(2)在while循环内,将输入的数累加到sum中,同时赋给数组元素x[n];
(3)求出平均值,ave=sum/n;
(4)使用for循环for(i=0;i#include"stdio.h"
voidmain()
{
floatx[1000],sum=0.0,ave,a;
intn=0,i;
printf("Entermark:
\n");
scanf("%f",&a);
while(a>=0.0&&a<=100&&n<1000)
{
sum+=a;x[n]=a;
n++;
scanf("%f",&a);
}
ave=sum/n;
printf("Output:
\n");
printf("ave=%f\n",ave);
for(i=0;iif(x[i]printf("%f\n",x[i]);
}
3.【分析与解答】
(1)使用循环嵌套,外循环是数组的行循环,共循环4次;
(2)外循环内的循环for(j=1;j<=i;j++)printf("%c",'');用于输出每行前面的空格;
(3)循环for(j=i;j<4;j++)printf("%4d",num[i][j]);用于每行空格后面的元素。
#include"stdio.h"
voidmain()
{
intnum[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}},i,j;
for(i=0;i<4;i++)
{
for(j=1;j<=i;j++)
printf("");//四个空格组成的字符串
for(j=i;j<4;j++)
printf("%4d",num[i][j]);
printf("\n");
}
}
5.【分析与解答】
(1)在定义数组时应该注意,进行逆置操作的矩阵必须是一个方阵,行、列数相同。
(2)对矩阵进行逆置的操作可由双重循环来完成:
for(i=0;ifor(j=0;j
内循环的控制变量j的变化范围从0到i,以对角线为界,把对称位置上的元素值进行对调。
(3)总结:
本题主要的算法也是交换算法,关键是需要正确确定交换的范围。
#include"stdio.h"
#defineN5
voidmain()
{
intnum[N][N]={{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20},{21,22,23,24,25}
};
inti,j,t;
for(i=0;i{
for(j=0;jprintf("%4d",num[i][j]);
printf("\n");
}
for(i=0;ifor(j=0;j<=i;j++)
{
t=num[i][j];
num[i][j]=num[j][i];
num[j][i]=t;
}
for(i=0;i{
for(j=0;jprintf("%4d",num[i][j]);
printf("\n");
}
}
第五章
一、单选题
1
C
2
无
33
3
B
4
A
5
C
6
D
7
A
二、填空题
24.10720
25.58
26.return,return(表达式)
27.定义,调用
28.传值,传地址
三、编程题
1.答案:
#include
intc(intx,inty)/*求杨辉三角形中第x行第y列的值*/
{
intz;
if((y==1)||(y==x+1))
return1;/*若为x行的第1或第x+1列,则输出1*/
z=c(x-1,y-1)+c(x-1,y);/*否则,其值为前一行中第y-1列与第y列值之和*/
returnz;
}
voidyanghui(intn)
{
inti,j;
for(i=0;i<=n;i++)/*控制输出N行*/
{
for(j=0;j<24-2*i;j++)
printf("");/*控制输出第i行前面的空格*/
for(j=1;j
printf("%4d",c(i,j));/*输出第i行的第j个值*/
printf("\n");
}
}
voidmain()
{
intn=13;
printf("N=");
while(n>12)
scanf("%d",&n);/*控制输入正确的值以保证屏幕显示的图形正确*/
yanghui(n);
}
2.答案:
#include
#include
boolIsPrimer(intn)
{
inti,m;
m=int(sqrt(n));
for(i=2;i<=m;i++)
{
if(n%i==0)
returnfalse;
}
returntrue;
}
voidmain()
{
inti;
scanf("%d",&i);
if(IsPrimer(i))
printf("这是素数\n");
else
printf("这是不是素数\n");
}
3.答案:
#include
intf(inti)
{
if(i==1)
return1;
if(i==0)
return1;
returnf(i-1)+f(i-2);
}
voidmain()
{
inti;
for(i=0;i<40;i++)
printf("%d\t",f(i));
}
4.答案:
#include
intchange(intc)
{
intt,i;
intresult=0;
i=1;
while(c>0)
{
t=c%6;
result=result+t*i;
i=i*10;
c=c/6;
}
returnresult;
}
voidmain()
{
intinput;
scanf("%d",&input);
printf("%d\n",change(input));
}
5.答案:
#include
floatx;
floatf(intc)
{
if(c<=0)
return1;
else
returnf(c-1)*x/c;
}
floatsum(inttimes)
{
inti;
floatresult=0;
for(i=0;i{
result=result+f(i);
}
returnresult;
}
voidmain()
{
scanf("%f",&x);
printf("%f\n",sum(40));
}
第六章
一、单选题
1
A
2
D
3
C
4
C
5
C
6
C
7
D
8
B
9
D
10
C
二、分析下列各程序的运行结果
29.该程序实现了两个字符串的连接。
30.该程序统计输入结束后数组中的字符个数。
三、程序设计
1.答案:
(1)float*fptr;
(2)fptr=&number1;
(3)printf("%f\n",*fptr);
(4)number2=*fptr;
(5)printf("%f\n",number2);
(6)printf("%p\n",&number1);
(7)printf("%p\n",fptr);打印出来的值相等
2.答案:
#include
voidmain()
{
chars1[10]="1234567";
chars2[10]="";
char*p1;
char*p2;
p1=s1;
p2=s2;
for(;*p2=*p1;p1++,p2++)
{
}
printf("%s\n",s2);
}
3.答案:
#include
#include
voidmain()
{
charstr[100],ch;
char*p;
intj=0;
while
(1)
{
scanf("%c",&ch);
if(ch=='\n')
{
str[j]='\0';
break;
}
elsestr[j]=ch;
j++;
}
p=str;
intH_letter=0,L_letter=0,space=0,number=0,o