高级语言程序设计与应用教程习题答案Word格式.docx
- 文档编号:19654385
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:23
- 大小:22.04KB
高级语言程序设计与应用教程习题答案Word格式.docx
《高级语言程序设计与应用教程习题答案Word格式.docx》由会员分享,可在线阅读,更多相关《高级语言程序设计与应用教程习题答案Word格式.docx(23页珍藏版)》请在冰豆网上搜索。
(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"
intx,y,z,max,min;
printf("
Pleaseinputthreeintegernumber:
"
);
scanf("
%d%d%d"
&
x,&
y,&
z);
min=max=x;
if(x==y&
&
y==z)
x=y=z,max=min=%d\n"
max);
else
{
if(y>
max)
max=y;
if(z>
max)
max=z;
if(y<
min)
min=y;
if(z<
min)
min=z;
max=%d,min=%d\n"
max,min);
}
3.编写程序,把键盘中输入的字符串中的数字字符删除,然后输出删除数字后的字符串。
解法1(利用数组):
charc,s[50]="
i=0;
c=getchar();
while(c!
='
\n'
)
if(c<
'
0'
||c>
9'
{
s[i]=c;
i++;
}
c=getchar();
%s\n"
s);
解法2(不用数组):
charc,i=0;
printf("
%c"
c);
\n"
4.编写程序,打印九九乘法表。
inti,j;
for(i=1;
i<
=9;
i++)
for(j=1;
j<
=i;
j++)//注意j的终值到i即可
%d*%d=%d\t"
i,j,i*j);
//输出一行的多个乘法式子
//一行多个式子输出完毕,再换行
5.编写猜数游戏,程序给定某个整数,从键盘反复输入数据进行猜测。
如果未猜中,程序提示输入过大或过小;
如果猜中,则输出猜的次数。
最多允许猜10次。
解法1(指定被猜数):
intx,i=1;
intn=88;
//指定被猜数88
pleaseinputanumber.\n"
%d"
x);
while(i<
10)
if(x!
=n)
if(x>
n)
printf("
%d>
n!
Tryagain!
x);
else
%d<
scanf("
i++;
else
Youareright,thenumberis%d,andyouhavetried%dtimes.\n"
n,i);
break;
if(i==10)
Youhavetried10times.Gameover!
Thenumberis%d.\n"
n);
解法2(随机产生被猜数):
#include<
cstdlib>
//包含产生随机数库函数rand()的头文件
intx,i=1;
intn=rand();
//使用库函数产生被猜数
pleaseinputanumber:
&
6.答案:
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&
=20);
sum=%f\n"
sum);
7.答案:
intk,sum1=0;
floatsum=0,sum2=0;
for(k=1;
k<
=100;
k++)
sum=sum+k;
=50;
sum1=sum1+k*k;
sum2=sum2+1.0/k;
sum=sum+sum1*sum2;
8.打印所有“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。
intk;
intm,n,t;
for(k=100;
=999;
m=k/100;
n=k/10%10;
t=k%10;
if(m*m*m+n*n*n+t*t*t==k)
k=%d\n"
k);
9.打印如下图案:
*
***
*****
解法1(指定行数):
inti=3;
//行数
intm,n;
//n为空格个数,m为*个数
intk,t;
n=i-k;
m=k*2-1;
for(t=1;
t<
=n;
t++)
"
=m;
*"
解法2(输入行数):
inti;
//n为空格个数,m为*个数
pleaseinputrownumber:
i);
第四章
16
17
18
19
20
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
<
ctype.h>
行;
也可用:
ch>
=’0’&
ch<
=’9’。
(3)若用num数组元素来进行统计,当ch中是数字“0”时,使num[0]增1、当ch中是数字“1”时,使num[1]增1…,num的下标表达式可用:
ch-‘0’。
(4)注意,在定义数组时,数组的大小应符合使用的要求。
在利用数组元素作为计数器时,不要忘记首先应该给数组元素赋0值。
(5)总结:
通过本题的编程,要求掌握利用数组元素作为计数器的基本算法。
intnum[10]={0},i;
charch;
ch);
while(ch!
if(ch>
&
ch<
num[ch-'
]++;
scanf("
for(i=0;
i<
10;
i++)
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;
n;
i++)if(x[i]<
ave)printf("
%f\n"
x[i]);
判断数组中的数如果小于平均值就输出。
floatx[1000],sum=0.0,ave,a;
intn=0,i;
Entermark:
%f"
a);
while(a>
1000)
sum+=a;
x[n]=a;
n++;
ave=sum/n;
Output:
ave=%f\n"
ave);
for(i=0;
if(x[i]<
ave)
printf("
3.【分析与解答】
(1)使用循环嵌套,外循环是数组的行循环,共循环4次;
(2)外循环内的循环for(j=1;
j++)printf("
'
'
用于输出每行前面的空格;
(3)循环for(j=i;
4;
%4d"
num[i][j]);
用于每行空格后面的元素。
intnum[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}},i,j;
j++)
//四个空格组成的字符串
for(j=i;
5.【分析与解答】
(1)在定义数组时应该注意,进行逆置操作的矩阵必须是一个方阵,行、列数相同。
(2)对矩阵进行逆置的操作可由双重循环来完成:
for(i=0;
N;
for(j=0;
i;
j++){
t=p[i][j];
p[i][j]=p[j][i];
p[j][i]=t;
内循环的控制变量j的变化范围从0到i,以对角线为界,把对称位置上的元素值进行对调。
(3)总结:
本题主要的算法也是交换算法,关键是需要正确确定交换的范围。
#defineN5
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(j=0;
t=num[i][j];
num[i][j]=num[j][i];
num[j][i]=t;
第五章
无
33
D
24.10720
25.58
26.return,return(表达式)
27.定义,调用
28.传值,传地址
1.答案:
stdio.h>
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)
i++)/*控制输出N行*/
24-2*i;
j++)
/*控制输出第i行前面的空格*/
i+2;
c(i,j));
/*输出第i行的第j个值*/
intn=13;
N="
while(n>
12)
n);
/*控制输入正确的值以保证屏幕显示的图形正确*/
yanghui(n);
2.答案:
math.h>
boolIsPrimer(intn)
inti,m;
m=int(sqrt(n));
for(i=2;
if(n%i==0)
returnfalse;
returntrue;
if(IsPrimer(i))
这是素数\n"
这是不是素数\n"
3.答案:
intf(inti)
if(i==1)
if(i==0)
returnf(i-1)+f(i-2);
40;
%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;
intinput;
input);
change(input));
5.答案:
floatx;
floatf(intc)
if(c<
=0)
returnf(c-1)*x/c;
floatsum(inttimes)
floatresult=0;
times;
result=result+f(i);
sum(40));
第六章
C
二、分析下列各程序的运行结果
29.该程序实现了两个字符串的连接。
30.该程序统计输入结束后数组中的字符个数。
三、程序设计
(1)float*fptr;
(2)fptr=&
number1;
(3)printf("
*fptr);
(4)number2=*fptr;
(5)printf("
number2);
(6)printf("
%p\n"
number1);
(7)printf("
fptr);
打印出来的值相等
chars1[10]="
1234567"
;
chars2[10]="
char*p1;
char*p2;
p1=s1;
p2=s2;
for(;
*p2=*p1;
p1++,p2++)
%s\n"
s2);
string.h>
charstr[100],ch;
char*p;
intj=0;
while
(1)
if(ch=='
str[j]='
\0'
elsestr[j]=ch;
j++;
p=str;
intH_letter=0,L_letter=0,space=0,number=0,o
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 高级 语言程序设计 应用 教程 习题 答案