高级语言程序设计课后练习参考答案全部Word文件下载.docx
《高级语言程序设计课后练习参考答案全部Word文件下载.docx》由会员分享,可在线阅读,更多相关《高级语言程序设计课后练习参考答案全部Word文件下载.docx(30页珍藏版)》请在冰豆网上搜索。
![高级语言程序设计课后练习参考答案全部Word文件下载.docx](https://file1.bdocx.com/fileroot1/2023-1/9/07bbf70c-04b4-4c5e-9a11-c55f2b0199e5/07bbf70c-04b4-4c5e-9a11-c55f2b0199e51.gif)
4、#include<
stdio.h>
5、输出格式字符串、输出表达式表
6、整、短整、无符号、字符、长整、无符号长整、单精度、双精度、单精度、双精度。
7、如果e1和e2两个条件都成立,那么就执行语句s。
8、如果e1条件成立执行语句s1,如果e1不成立但e2成立则执行语句s2。
9、###a=26,b=13,c=19。
10、if(a<
=b)
{
x=1;
printf("
%d"
x);
}
else
y=2;
y);
11、先执行语句然后判断表达式,直到表达式不成立才停止执行语句。
12、先判断表达式再执行语句,如果表达式不成立就停止执行语句。
13、10
三、阅读程序题
1、A=65,A=0101,A=0x41
2、10,4,3
3、-1
4、0,8,-22
5、8,5,2
6、在循环语句中重复输入数值,如果输入的数值小于0就输出-1,如果输入的数大于0则输出1,如果输入的数值是0则结束循环。
7、输出10个数,求这10个数中的奇数之和保存在s1中,偶数之和保存在s2中,最后分别输出s1和s2。
8、输出1到99中能被3整除且被10整除余数为1的数。
四、程序填空题
1、if(x<
z)x=z
2、i=3,s=0
3、x>
=1
4、x%i==0
5、t3=-t3
五、程序设计题
1、思路:
输入f之后,按照公式计算c即可。
#include<
voidmain()
{
floatf,c;
请输入华氏温度f:
"
);
scanf("
%f"
&
f);
c=(f-32)*5/9.0;
摄氏温度c为%f\n"
c);
}
2、思路:
输入a之后,判断如果大于等于0则输出1,否则输出-1。
inta;
a);
if(a>
=0)
printf("
1\n"
-1\n"
3、思路:
输入一个数之后,先考虑x小于等于1的情况,如果不满足这个条件,则再判断是否小于10,针对每种情况进行计算即可。
floatx,y;
x);
if(x<
=1)/*处理x小于等于1的情况*/
y=x;
if(x<
10)/*处理x大于1小于10的情况*/
y=2*x-1;
else/*处理x大于等于10的情况*/
y=3*x-11;
y=%f\n"
4、思路:
输入3个数之后,如果a小于b则a为小的,否则b为小的,在这个判断中将小的值保存在min中;
最后再判断c是否比min小,如果比min小则c是最小的,否则就是原来的min是最小的。
floata,b,c,min;
%f%f%f"
a,&
b,&
c);
if(a<
b)/*如果a比b小则a为小的*/
min=a;
else/*否则b为小的*/
min=b;
if(c<
min)/*如果c比min还小,则c是最小的*/
min=c;
最小值为%f\n"
min);
5、思路:
让输入的数除以10求余得到最后一位数字,然后判断这位数字是否比当前最大的要大,如果比当前最大的要大,则更新maxnum;
求得最后一位数之后,让这个数除以10则去掉它的最后一位。
依次循环直到这个数变为0。
shorta;
intmaxnum=0;
/*假设最大的数开始为0*/
while(a!
=0)/*只要a不等于0,表示还没有求完数中每一位的值*/
if(a%10>
maxnum)/*判断目前这个数的最后一位是否大于最大的*/
maxnum=a%10;
a=a/10;
/*去掉这个数的最后1位*/
最大的数字为%d\n"
maxnum);
6、思路:
根据题意这个数为3位的数,则本题的循环初值是100,终值是999。
在循环题中,对每个i都求出它的个位、十位和百位,然后对这三个数字求他们的立方和,如果等于1099,就输出它。
当循环完毕之后就能把100-999中所有满足条件的数字输出。
intx,a,b,c,i;
for(i=100;
i<
1000;
i++)
x=i;
/*将i复给x,下列语句中求出x的个、十、百位就等于是求i的个、十、百位*/
a=x%10;
/*求x的个位*/
x=x/10;
b=x%10;
/*求x的十位*/
c=x%10;
/*求x的百位*/
if(a*a*a+b*b*b+c*c*c==1099)/*如果个、十、百位的立方和等于1099则输出这个数*/
printf("
%d"
i);
7、思路:
设置3个变量分别保存每一类数的个数,开始时这三个变量的初值均为0。
然后在循环体中依次输入10个数(每次循环输入一个),输入一个数之后,判断这个数的类型并使对应类的变量加1。
#include<
intnum,zheng,fu,ling,i;
zheng=0;
/*保存整数的个数*/
fu=0;
/*保存负数的个数*/
ling=0;
/*保存0的个数*/
for(i=1;
=10;
/*在循环体中,每输入一个数,判断这个数的类型并给对应的变量增加1*/
scanf("
num);
if(num>
0)/*如果为正数*/
zheng++;
elseif(num<
0)/*如果为负数*/
fu++;
else/*为零*/
ling++;
正数%d个,负数%d个,零%d个\n"
zheng,fu,ling);
8、题目中的
应该修改为
思路:
这是一种累加运算,n从1开始,每次累加
,直到
小于10-6。
inti=2;
floate,s,n;
/*e表示和,n表示每次被加数的分子,s表示每次的被加数*/
e=1;
/*第1个被加数1没有规律,所以初值为1*/
n=1;
/*第1个被加数的分子为1*/
s=1;
/*第1个被加数为1*/
while(s>
1e-6)
e=e+s;
/*将被加数累加到e中*/
/*下列步骤为计算好下一个被加数*/
n=n*i;
s=1/n;
i++;
e的值为%f\n"
e);
9、思路:
intn=1;
floaty,s;
/*y保存累加的和,s表示每次被加的数*/
y=0;
s=1.0/(n*n+1);
/*计算第1个被加数*/
y=y+s;
/*将被加数累加到y中*/
n++;
s=1.0/(n*n+1);
10、思路:
在循环体中,依次把0x30至0x5f的值用%d以及%c输出即可。
intx;
for(x=0x30;
x<
=0x5f;
x++)
ASCII码为%d的数值对应字符为%c\n"
x,x);
11、
方法1:
inti;
=100;
%d的平方为%d\n"
i,i*i);
方法2:
i=1;
while(i<
=100)
i++;
方法3:
do
}while(i<
=100);
第5章
1-5DCBDA6-10CDDAC11-15ACDCA
1、0、6
2、0、0
3、floats[2][3]={{70.5,85.0,69.5},{92.5,89.5,78.0}};
4、s[3][0],s[0][2],s[3][2]
5、10说明:
n个数用冒泡法需要比较n-1趟,第1趟需要比较n-1个数,第2趟需要比较n-2个数,依次类推。
所以本体需要比较4趟,从第1趟到第4趟的比较次数分别为4、3、2、1,所以共比较了10次。
6、全部、所有行的前若干个
7、#include<
、#include<
string.h>
8、x1小于x2、x1等于x2、x1大于x2
9、4、s[0]、'
1、12
2、22
3、18
10
4、说明:
下列的□表示空格
*****
□*****
□□*****
□□□*****
□□□□*****
5、efabcd
6、abcAB
7、先输入9个数保存到3行3列的数组a中(程序第4、5行),然后将数组a转置的结果保存到数组b中(程序第6、7行),最后将数组b的所有元素输出(程序第8、9、10、11行)。
8、先输入9个数保存到3行3列的数组a中(程序第4、5行),再输入9个数保存的3行3列的数组b中(程序第6、7行),然后将数组a和b中对应下标的元素相加并将相加的结果保存到3行3列的数组c中(程序第8、9行),最后将数组c的所有元素输出(程序第10、11、12、13行)。
1、k=p
2、n=strlen(s1)
3、s[i]+=32;
、i++;
4、n%base、[d]
5、max_i=min_i=0、max_i=i
输入10个数保存到数组a中,然后计算数组a中10个元素之和,最后让这个和除以10就得到平均值。
floata[10],sum,avg;
for(i=0;
10;
i++)/*输入10个单精度型数据保存到数组a中*/
a[i]);
sum=0;
i++)/*计算这10个元素之和*/
sum=sum+a[i];
avg=sum/10;
/*让10个元素之和除以10即可得到平均值*/
所有元素的平均值为:
%f\n"
avg);
先输入10个数保存到数组a中;
然后通过一个循环将第一个元素与最后一个元素交换,第2个元素与倒数第2个元素交换,交换到中间即可完成逆序存放;
最后输出数组a的元素即可。
inta[10],i,temp;
/*temp用来做交换两个元素的临时变量*/
i++)/*输入10个整数保存到a中*/
=4;
i++)/*通过循环交换元素*/
temp=a[i];
a[i]=a[9-i];
a[9-i]=temp;
i++)/*输出交换后a的内容*/
a[i]);
输入两个字符串保存到str1和str2数组之后,然后将第2个字符串str2连接到第1个字符串str1的后面。
难点是如何确定把str2添加到str1的哪个元素之后以及为连接后的字符串加结束标志;
可以通过统计str1的长度,将str2的每个元素加在str1数组长度位置之后,最后记得给连接后总的字符串添加上'
作为字符串的结束标志。
charstr1[100],str2[100];
inti,k,len1,len2;
gets(str1);
/*输入第一串字符保存到str1*/
gets(str2);
/*输入第二串字符保存到str1*/
len1=strlen(str1);
len2=strlen(str2);
k=len1;
/*将str2连接到str1之后,那么在str1后的第k个位置开始放str2的字符*/
str2[i]!
='
;
i++)/*依次将str2的内容连接到str1之后*/
{
str1[k]=str2[i];
k++;
str1[len1+len2]='
/*给连接后的字符串添加结束标志*/
puts(str1);
先输入n,接着根据n输入n个数保存到数组x中。
然后计算出这n个数的平均值,最后按照公式计算这n个数与平均值的平方和。
floatx[100],x0=0,s=0;
inti,n;
请输入n的值:
n);
/*输入n的值*/
请输入%d个数据:
n);
n;
i++)/*输入n个数保存到数组x中,等于输入x1、x2、……、xn*/
x[i]);
i++)/*计算所输入n个数的和*/
x0=x0+x[i];
x0=x0/n;
/*计算这n个数的平均值*/
i++)/*按照公式计算x[i]-x0的平方和*/
s=s+(x[i]-x0)*(x[i]-x0);
s=%f\n"
s);
通过一个双重循环输入数据保存到数组a中,然后假设a[0][0]既是最大(max)的又是最小(min)的,同时将最大和和最小的行、列坐标均设置为0;
接着使用双重循环依次遍历数组a的每一个元素,如果比max大就更新max(同时也更新max对应的行和列坐标),如果比min小则更新min(同时更新min对应的行和列坐标);
最后输出数据时要将行和列坐标的值均加1,因为在数组中下标从0开始而实际生活中的下标是从1开始。
inta[3][5],i,j,max,min,max_i,max_j,min_i,min_j;
/*max保存最大的值,min保存最小的值,max_i保存最大值的行号,min_j保存最大值的列号,min_i保存最小值的行号,min_j保存最小值的列号*/
3;
i++)/*通过这个双重循环输入3行5列的整数到数组a中*/
for(j=0;
j<
5;
j++)
scanf("
a[i][j]);
max=min=a[0][0];
/*假设数组的第1个元素是最大的、最小的*/
max_i=max_j=min_i=min_j=0;
/*设置最大、最小的行和列值为0*/
i++)/*通过这个双重循环依次遍历数组a的每个元素,并求出最大、最小值*/
{
if(a[i][j]>
max)/*如果当前元素的值比max还大,则要记录下来*/
{
max=a[i][j];
max_i=i;
max_j=j;
}
else/*不是最大的,有可能是最小的*/
if(a[i][j]<
min)/*如果当前元素的值比min还小,则要记录下来*/
{
min=a[i][j];
min_i=i;
min_j=j;
}
}
最大值为%d,行为%d,列为%d\n"
max,max_i+1,max_j+1);
最小值为%d,行为%d,列为%d\n"
min,min_i+1,min_j+1);
通过一个循环输入数据保存在50行3列的数组a中(每列放一科的成绩),然后通过一个循环计算每科的平均值,最后输出这3个平均值。
intstu[50][3],i;
floatsum1,sum2,sum3;
/*sum1保留第1科的和,sum2保留第2科的和,sum3保留第3科的和,最后让sum1、sum2、sum3除以50即可得到平均分*/
sum1=sum2=sum3=0;
50;
i++)/*输入成绩*/
%d%d%d"
stu[i][0],&
stu[i][1],&
stu[i][2]);
i++)/*计算每科的总分*/
sum1=sum1+stu[i][0];
sum2=sum2+stu[i][1];
sum3=sum3+stu[i][2];
%f,%f,%f\n"
sum1/5,sum2/5,sum3/5);
/*输出平均分*/
7、输入一个数保存到num中,然后将num的每一位数值逆序存储到数组a中。
求num每一位数值的方法:
让num除以10求余数则得到这个数的最后1位数值,让num除以10则将最后一位去掉,如此重复直到num为0。
最后逆序输出数组a中保存有数值的元素即可。
intnum,a[5],i;
/*输入这个数*/
i=0;
while(num>
0)
a[i]=num%10;
/*将当前数的最后1位保存在a[i]中*/
num=num/10;
/*去到当前这个数的最后一位*/
/*更新i,方便存下一个数*/
/*由于刚才存放时,是将这个数的每1位逆序存放到数组a中,所以在下面的输出时要从最后一个存放数值的元素开始输出*/
i--;
/*由于在前一个循环中,i增加到没有存放数的地方*/
while(i>
=0)
if(i>
0)/*由于最后一个数值之后不输出逗号,所以在最后一个数值之前都输出逗号*/
"
i--;
}
8、思路:
通过gets函数将输入字符串保存到数组中;
然后通过循环依次读取每个字符,判断处理每个字符,处理方法为:
通过if判断如果是大写字母让其加3,是小写字母让其减3;
最后输出处理之后的字符。
{chara[100];
gets(a);
/*输入字符串*/
strlen(a);
i++)/*依次读取数组中的每个字符*/
if(a[i]>
A'
a[i]<
Z'
)/*判断是否是大写字母*/
a[i]=a[i]+3;
elseif(a[i]>
a'
z'
)/*判断是否是小写字母*/
a[i]=a[i]-3;
puts(a);
/*输出字符串*/
与上一题一致,只是输入数据后,通过循环读取每个字符的处理方法不同,如果值是大于等于'
+3且小于等于'
+3则让其减3(这个地方处理的是由原来大写字母加密所得的),如果值是大于等于'
-3且小于等于'
-3则让其加3(这个地方处理的是由原来小写字母加密所得的)。
strlen(