高级语言程序设计课后练习参考答案全部.docx
- 文档编号:6697920
- 上传时间:2023-01-09
- 格式:DOCX
- 页数:30
- 大小:40.44KB
高级语言程序设计课后练习参考答案全部.docx
《高级语言程序设计课后练习参考答案全部.docx》由会员分享,可在线阅读,更多相关《高级语言程序设计课后练习参考答案全部.docx(30页珍藏版)》请在冰豆网上搜索。
高级语言程序设计课后练习参考答案全部
特别说明:
此答案不是标准答案,仅供参考,如有疑问,请与老师共同商量
第1章
一、单项选择题
1-6ACDBBD
二、填空题
1、机器、过程2、源、解释、编译、目标
3、用某种计算机能理解并执行的计算机语言描述解决问题的方法和步骤、分写解决问题的方法步骤并将其记录下来的过程
第2章
一、单项选择题
1-5ACCBB6-10ADDDD
二、填空题
1、\2、小写
3、字母、下划线、32、84、P10
5、P10-116、函数调用、表达式
7、main8、main、main
9、/*、*/10、分
11、略
第3章
一、单项选择题
1-5CBABB6-10ACBAB11-15AADAD16-20CDCCB
21-25CCCDB26-30ACDDC31-34CADC
二、填空题
1、字符、字符串2、-15、-15
3、0、655354、2、1
5、'\0'、06、#define符号常量常量
7、48、数据类型符变量名1,变量名2,……
9、unsignedint、double、char10、constintnn=199;
11、1.012、a/(b*c)
13、1、014、非0、0、1、0
15、116、(x>20&&x<30)||x<-100
17、x<0||y<0||z<018、0
19、20、5、5、3
21、++、&&
22、算术、关系、逻辑、赋值、逗号、条件
第4章
一、单项选择题
1-5BCBDC6-10CBCAB11-15CAADC16-18ADA
二、填空题
1、顺序、循环
2、单分支、双分支、多分支
3、直到、当
4、#include
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;
printf("%d",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 2、i=3,s=0 3、x>=1 4、x%i==0 5、t3=-t3 五、程序设计题 1、思路: 输入f之后,按照公式计算c即可。 #include voidmain() { floatf,c; printf("请输入华氏温度f: "); scanf("%f",&f); c=(f-32)*5/9.0; printf("摄氏温度c为%f\n",c); } 2、思路: 输入a之后,判断如果大于等于0则输出1,否则输出-1。 #include voidmain() { inta; scanf("%d",&a); if(a>=0) printf("1\n"); else printf("-1\n"); } 3、思路: 输入一个数之后,先考虑x小于等于1的情况,如果不满足这个条件,则再判断是否小于10,针对每种情况进行计算即可。 #include voidmain() { floatx,y; scanf("%f",&x); if(x<=1)/*处理x小于等于1的情况*/ y=x; else { if(x<10)/*处理x大于1小于10的情况*/ y=2*x-1; else/*处理x大于等于10的情况*/ y=3*x-11; } printf("y=%f\n",y); } 4、思路: 输入3个数之后,如果a小于b则a为小的,否则b为小的,在这个判断中将小的值保存在min中;最后再判断c是否比min小,如果比min小则c是最小的,否则就是原来的min是最小的。 #include voidmain() { floata,b,c,min; scanf("%f%f%f",&a,&b,&c); if(a min=a; else/*否则b为小的*/ min=b; if(c min=c; printf("最小值为%f\n",min); } 5、思路: 让输入的数除以10求余得到最后一位数字,然后判断这位数字是否比当前最大的要大,如果比当前最大的要大,则更新maxnum;求得最后一位数之后,让这个数除以10则去掉它的最后一位。 依次循环直到这个数变为0。 #include voidmain() { shorta; intmaxnum=0;/*假设最大的数开始为0*/ scanf("%d",&a); while(a! =0)/*只要a不等于0,表示还没有求完数中每一位的值*/ { if(a%10>maxnum)/*判断目前这个数的最后一位是否大于最大的*/ maxnum=a%10; a=a/10;/*去掉这个数的最后1位*/ } printf("最大的数字为%d\n",maxnum); } 6、思路: 根据题意这个数为3位的数,则本题的循环初值是100,终值是999。 在循环题中,对每个i都求出它的个位、十位和百位,然后对这三个数字求他们的立方和,如果等于1099,就输出它。 当循环完毕之后就能把100-999中所有满足条件的数字输出。 #include voidmain() { 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的十位*/ x=x/10;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 voidmain() { intnum,zheng,fu,ling,i; zheng=0;/*保存整数的个数*/ fu=0;/*保存负数的个数*/ ling=0;/*保存0的个数*/ for(i=1;i<=10;i++) /*在循环体中,每输入一个数,判断这个数的类型并给对应的变量增加1*/ { scanf("%d",&num); if(num>0)/*如果为正数*/ zheng++; elseif(num<0)/*如果为负数*/ fu++; else/*为零*/ ling++; } printf("正数%d个,负数%d个,零%d个\n",zheng,fu,ling); } 8、题目中的 应该修改为 思路: 这是一种累加运算,n从1开始,每次累加 ,直到 小于10-6。 #include voidmain() { 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++; } printf("e的值为%f\n",e); } 9、思路: 这是一种累加运算,n从1开始,每次累加 ,直到 小于10-6。 #include voidmain() { intn=1; floaty,s;/*y保存累加的和,s表示每次被加的数*/ y=0; s=1.0/(n*n+1);/*计算第1个被加数*/ while(s>1e-6) { y=y+s;/*将被加数累加到y中*/ /*下列步骤为计算好下一个被加数*/ n++; s=1.0/(n*n+1); } printf("y=%f\n",y); } 10、思路: 在循环体中,依次把0x30至0x5f的值用%d以及%c输出即可。 #include voidmain() { intx; for(x=0x30;x<=0x5f;x++) printf("ASCII码为%d的数值对应字符为%c\n",x,x); } 11、 方法1: #include voidmain() { inti; for(i=1;i<=100;i++) printf("%d的平方为%d\n",i,i*i); } 方法2: #include voidmain() { inti; i=1; while(i<=100) { printf("%d的平方为%d\n",i,i*i); i++; } } 方法3: #include voidmain() { inti; i=1; do { printf("%d的平方为%d\n",i,i*i); i++; }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 8、x1小于x2、x1等于x2、x1大于x2 9、4、s[0]、'\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 五、程序设计题 1、思路: 输入10个数保存到数组a中,然后计算数组a中10个元素之和,最后让这个和除以10就得到平均值。 #include voidmain() { floata[10],sum,avg; inti; for(i=0;i<10;i++)/*输入10个单精度型数据保存到数组a中*/ scanf("%f",&a[i]); sum=0; for(i=0;i<10;i++)/*计算这10个元素之和*/ sum=sum+a[i]; avg=sum/10;/*让10个元素之和除以10即可得到平均值*/ printf("所有元素的平均值为: %f\n",avg); } 2、思路: 先输入10个数保存到数组a中;然后通过一个循环将第一个元素与最后一个元素交换,第2个元素与倒数第2个元素交换,交换到中间即可完成逆序存放;最后输出数组a的元素即可。 #include voidmain() { inta[10],i,temp;/*temp用来做交换两个元素的临时变量*/ for(i=0;i<10;i++)/*输入10个整数保存到a中*/ scanf("%d",&a[i]); for(i=0;i<=4;i++)/*通过循环交换元素*/ { temp=a[i]; a[i]=a[9-i]; a[9-i]=temp; } for(i=0;i<10;i++)/*输出交换后a的内容*/ printf("%d",a[i]); } 3、思路: 输入两个字符串保存到str1和str2数组之后,然后将第2个字符串str2连接到第1个字符串str1的后面。 难点是如何确定把str2添加到str1的哪个元素之后以及为连接后的字符串加结束标志;可以通过统计str1的长度,将str2的每个元素加在str1数组长度位置之后,最后记得给连接后总的字符串添加上'\0'作为字符串的结束标志。 #include #include voidmain() { 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的字符*/ for(i=0;str2[i]! ='\0';i++)/*依次将str2的内容连接到str1之后*/ { str1[k]=str2[i]; k++; } str1[len1+len2]='\0';/*给连接后的字符串添加结束标志*/ puts(str1); } 4、思路: 先输入n,接着根据n输入n个数保存到数组x中。 然后计算出这n个数的平均值,最后按照公式计算这n个数与平均值的平方和。 #include #include voidmain() { floatx[100],x0=0,s=0; inti,n; printf("请输入n的值: "); scanf("%d",&n);/*输入n的值*/ printf("请输入%d个数据: ",n); for(i=0;i scanf("%f",&x[i]); for(i=0;i x0=x0+x[i]; x0=x0/n;/*计算这n个数的平均值*/ for(i=0;i s=s+(x[i]-x0)*(x[i]-x0); printf("s=%f\n",s); } 5、思路: 通过一个双重循环输入数据保存到数组a中,然后假设a[0][0]既是最大(max)的又是最小(min)的,同时将最大和和最小的行、列坐标均设置为0;接着使用双重循环依次遍历数组a的每一个元素,如果比max大就更新max(同时也更新max对应的行和列坐标),如果比min小则更新min(同时更新min对应的行和列坐标);最后输出数据时要将行和列坐标的值均加1,因为在数组中下标从0开始而实际生活中的下标是从1开始。 #include voidmain() { 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保存最小值的列号*/ for(i=0;i<3;i++)/*通过这个双重循环输入3行5列的整数到数组a中*/ for(j=0;j<5;j++) scanf("%d",&a[i][j]); max=min=a[0][0];/*假设数组的第1个元素是最大的、最小的*/ max_i=max_j=min_i=min_j=0;/*设置最大、最小的行和列值为0*/ for(i=0;i<3;i++)/*通过这个双重循环依次遍历数组a的每个元素,并求出最大、最小值*/ for(j=0;j<5;j++) { if(a[i][j]>max)/*如果当前元素的值比max还大,则要记录下来*/ { max=a[i][j]; max_i=i; max_j=j; } else/*不是最大的,有可能是最小的*/ if(a[i][j] { min=a[i][j]; min_i=i; min_j=j; } } printf("最大值为%d,行为%d,列为%d\n",max,max_i+1,max_j+1); printf("最小值为%d,行为%d,列为%d\n",min,min_i+1,min_j+1); } 6、思路: 通过一个循环输入数据保存在50行3列的数组a中(每列放一科的成绩),然后通过一个循环计算每科的平均值,最后输出这3个平均值。 #include voidmain() { intstu[50][3],i; floatsum1,sum2,sum3;/*sum1保留第1科的和,sum2保留第2科的和,sum3保留第3科的和,最后让sum1、sum2、sum3除以50即可得到平均分*/ sum1=sum2=sum3=0; for(i=0;i<50;i++)/*输入成绩*/ scanf("%d%d%d",&stu[i][0],&stu[i][1],&stu[i][2]); for(i=0;i<50;i++)/*计算每科的总分*/ { sum1=sum1+stu[i][0]; sum2=sum2+stu[i][1]; sum3=sum3+stu[i][2]; } printf("%f,%f,%f\n",sum1/5,sum2/5,sum3/5); /*输出平均分*/ } 7、输入一个数保存到num中,然后将num的每一位数值逆序存储到数组a中。 求num每一位数值的方法: 让num除以10求余数则得到这个数的最后1位数值,让num除以10则将最后一位去掉,如此重复直到num为0。 最后逆序输出数组a中保存有数值的元素即可。 #include voidmain() { intnum,a[5],i; scanf("%d",&num);/*输入这个数*/ i=0; while(num>0) { a[i]=num%10;/*将当前数的最后1位保存在a[i]中*/ num=num/10;/*去到当前这个数的最后一位*/ i++;/*更新i,方便存下一个数*/ } /*由于刚才存放时,是将这个数的每1位逆序存放到数组a中,所以在下面的输出时要从最后一个存放数值的元素开始输出*/ i--;/*由于在前一个循环中,i增加到没有存放数的地方*/ while(i>=0) { printf("%d",a[i]); if(i>0)/*由于最后一个数值之后不输出逗号,所以在最后一个数值之前都输出逗号*/ printf(","); i--; } } 8、思路: 通过gets函数将输入字符串保存到数组中;然后通过循环依次读取每个字符,判断处理每个字符,处理方法为: 通过if判断如果是大写字母让其加3,是小写字母让其减3;最后输出处理之后的字符。 #include #include voidmain() {chara[100]; inti; gets(a);/*输入字符串*/ for(i=0;i { if(a[i]>='A'&&a[i]<='Z')/*判断是否是大写字母*/ a[i]=a[i]+3; elseif(a[i]>='a'&&a[i]<='z')/*判断是否是小写字母*/ a[i]=a[i]-3; } puts(a);/*输出字符串*/ } 9、思路: 与上一题一致,只是输入数据后,通过循环读取每个字符的处理方法不同,如果值是大于等于'A'+3且小于等于'Z'+3则让其减3(这个地方处理的是由原来大写字母加密所得的),如果值是大于等于'a'-3且小于等于'z'-3则让其加3(这个地方处理的是由原来小写字母加密所得的)。 #include #include voidmain() {chara[100]; inti; gets(a);/*输入字符串*/ for(i=0;i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 高级 语言程序设计 课后 练习 参考答案 全部