高级语言程序设计课后练习参考答案全部Word文件下载.docx

上传人:b****5 文档编号:19714911 上传时间:2023-01-09 格式:DOCX 页数:30 大小:40.44KB
下载 相关 举报
高级语言程序设计课后练习参考答案全部Word文件下载.docx_第1页
第1页 / 共30页
高级语言程序设计课后练习参考答案全部Word文件下载.docx_第2页
第2页 / 共30页
高级语言程序设计课后练习参考答案全部Word文件下载.docx_第3页
第3页 / 共30页
高级语言程序设计课后练习参考答案全部Word文件下载.docx_第4页
第4页 / 共30页
高级语言程序设计课后练习参考答案全部Word文件下载.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

高级语言程序设计课后练习参考答案全部Word文件下载.docx

《高级语言程序设计课后练习参考答案全部Word文件下载.docx》由会员分享,可在线阅读,更多相关《高级语言程序设计课后练习参考答案全部Word文件下载.docx(30页珍藏版)》请在冰豆网上搜索。

高级语言程序设计课后练习参考答案全部Word文件下载.docx

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(

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1