C语言程序设计-第5章-习题 - 答案
- 格式:doc
- 大小:60.50 KB
- 文档页数:5
c语言《程序设计基础》课后习题参考答案与解析《程序设计基础》习题参考答案与部分解析第1章 C 语言概述一、填空a) C源程序的基本单位是函数。
b) 一个C程序中至少应包括一个 main函数。
c) 在C语言中,输出操作是有库函数 printf( )函数完成。
二、单选题1、A2、C3、B解析:第1题答案:A 。
因为一个C程序总是从main函数开始执行的,而不论main函数在程序中的位置。
且到main函数结束。
第2题答案:C 。
因为 main函数没有限制必须位于程序的最前面。
C程序书写自由,一行内可写几个语句。
在对一个C 程序进行编译的过程中,无法检查注释当中的拼写错误。
不过C语言本身并没有输入输出语句,输入输出是由函数完成的。
第3题答案:B。
因为一个C语言程序是由若干个函数组成的。
但至少包含一个main 函数,且main函数的位置不限。
三、编程题1、编写一个输出“Welcome to C!”信息的小程序。
解:程序如下#include “stdio.h”main( ){1printf(“Welcome to C!”) ;}2、已知三角形的三边长分别为3,4,5,试用海轮公式编程求其面积。
海伦公式为:S?= ,其中s= (a+b+s)/2 ;解:程序如下#include “math.h”#include “stdio.h”main( ){int a , b , c ; /* a ,b,c 3个整型变量表示三角形的3条边。
*/float s ,s1 ; /* s1作为面积变量,s 作为中间变量是都应该是实形*/a=3 ; b= 4; c=5 ;s= (a+b+c)/2.0 ;s1= sqrt(s*(s-a)*(s-b)*(s-c)); /* sqrt函数完成开平方根功能。
*/printf(“area=%f\n”,s1);}2第2章程序设计基础知识一、单选题1、C2、A3、C4、A5、C6、C7、D8、C9、D 10、A 11、D 12、A 13、C 14、C 15、B A 16、B 17 D解析:1. 答案:C。
第5章习题解答一、选择题1.以下叙述中错误的是。
A)对于double类型数组,不可以直接用数组名对数组进行整体输入或输出B)数组名代表的是数组所占存储区的首地址,其值不可改变C)在程序执行中,当数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息D)可以通过赋初值的方式确定数组元素的个数解析:对于double类型数组,不能直接用数组名对数组进行整体输入或输出。
所以选项A的说法是正确的。
数组名代表数组所占内存区的首地址,是一个固定指针,其值不可改变,因此选项B也是正确的。
在C语言一维数组定义时可以不指定数组长度,由赋初值的初值个数决定数组的长度。
因此选项D也是正确的。
C语言程序在执行时,不检查数组元素的下标是否越界,如果出现越界,可能会引起系统死机,因此选项C不正确。
答案:C2.有以下程序:/* 文件路径名:ex5_1_2\main.c */#include <stdio.h> /* 标准输入/出头文件*/int main(void) /* 主函数main() */{char s[] = "abcde"; /* 定义字符数组*/s += 2; /* s自加2 */printf("%d\n", s[0]); /* 输出s[0] */return 0; /* 返回值0, 返回操作系统*/}执行后的结果是。
A)输出字符a的ASCII码B)输出字符c的ASCII码C)输出字符c D)程序出错解析:数组s[]的首地址值s是不可改变的,故该程序编译时会出错。
答案:D3.有以下程序:/* 文件路径名:ex5_1_3\main.c */#include <stdio.h> /* 标准输入/出头文件*/int main(void) /* 主函数main() */{int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, *p = &a[3], *q = p + 2; /* 定义数组及变量*/printf("%d\n", *p + *q); /* 输出*p + *q之值*/return 0; /* 返回值0, 返回操作系统*/}程序运行后的输出结果是。
第5章判断题1-1C语言函数返回类型的默认定义类型是void。
(1分)T F1-2函数形参的存储单元是动态分配的。
(1分)T F1-3如果函数定义出现在函数调用之前,可以不必加函数原型声明。
(1分)T F1-4C 语言程序中可以有多个函数, 但只能有一个主函数。
(1分)T F1-5局部变量如果没有指定初值,则其初值不确定。
(1分)T F1-6C语言中,通过函数调用只能获得一个返回值。
(1分)T F1-7函数的实参和形参都可以是变量、常量和表达式。
(1分)T F1-8按照C语言的规定,在参数传递过程中,既可以将实参的值传递给形参,也可以将形参的值传递给实参,这种参数传递是双向的。
(1分)T F1-9按照C语言的规定,实参和形参的命名不得重复。
(1分)T F1-10一个函数定义中可以完整地包含另一个函数的定义。
(1分)T F1-11函数调用得到的值,可以作为另一次函数调用时的参数。
(1分)1-12c语言每个函数的返回值都是int型的。
(1分)T F1-13C语言在函数调用时,若形参实参都是普通变量,实参和形参可以共用存储单元。
(1分)T F1-14函数的形参都属于全局变量。
(1分)T F1-15实参向形参进行数值传递时,数值传递的方向是单向的,即形参变量值的改变不影响实参变量的值。
(1分)T F1-16全局变量只能定义在程序的最前面,即第一个函数的前面。
(1分)T F1-17全局变量与局部变量的作用范围相同,不允许它们同名。
(1分)T F1-18为了便于计算机存储管理,C语言把保存所有变量的数据区,分成动态存储区和静态存储区,静态局部变量被存放在动态存储区。
(1分)T F1-19自动变量如果没有赋值,其值被自动赋为0。
(1分)T F1-20静态局部变量如果没有赋值,其存储单元中将是随机值。
(1分)T F单选题2-1C语言中函数返回值的类型是由()决定的。
(1分)A.B.调用该函数的主调函数的类型C.调用函数时临时决定D.定义函数时所指定的函数类型2-2在一个被调用函数中,关于return 语句使用的描述,错误的是()。
单选题1、关于数组的定义与初始化,下列哪一项是错误的()A.int arr[5] = {1,2,3,4,5};B.int arr[] = {1,2,3,4,5};C.int arr[5] = {1,2,3};D.int arr[5] = {1,2,3,4,5,6};2、在定义数组int arr[10]后,下列选项中对arr的引用正确的是()A.arr[10]B.arr[6.3]C.arr(6)D.arr[0]3、在C语言中,引用数组元素时,其数组下标的数据类型允许是()4、若int arr[5] = {1,2,3}; 则arr[2]的值为()5、在执行int arr[][3] = {1,2,3,4,5,6}:语句后,arr[1][0]的值为()6、关于二维数组,下列选项能正确定义并赋初值的是()A.int n = 5,b[n][n];B.int a[1][2] = {{1},{3}};C.int c[2][] = {{1,2},{3,4}};D.int a[3][2] = {{1,2},{3,4}};7、阅读下列程序段:char s[18] = "a book!";printf("%.4s\n", s);其输出结果为()A.a book!B.a bookC.a bo8、阅读下列程序:int a[4][4] = { { 1, 3, 5, }, { 2, 4, 6 }, { 3, 5, 7 } };printf("%d%d%d%d\n", a[0][0], a[1][1], a[2][2], a[3][3]);正确的输出结果为()9、阅读下面程序:int i;int x[4][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };for (i = 0; i<4; i++)printf("%3d", x[i][3 - i]);下列选项中哪一项是正确的输出结果()A.1 5 9 13B.1 6 11 16C.4 7 10 13D.4 8 12 1610、下列描述中不正确的是()。
一、选择题1.设有程序段”int k=10;while(k=0)k=k-1;”,则下面叙述正确的是D 循环体语句一次也不执行2.设有程序段”int x=0,s=0;while(!x!=0)s+=++x;printf(“%d”,s);”则A 运行程序段后输出13.若有语句”int x=3;do{printf(“%d\n”,x-=2);}while(!(--x));”,则该程序段C 输出的是1和-24.下面循环语句中,错误的是D int a=1,b=2;do b--while(b= =0);5.已知”int i=5;”,下列do…while循环语句的循环次数为C 5do{printf(“%d\n”,i--);}while(i!=0);6.循环语句”for(int i=0,j=10;i=j=10;i++,j--)”的循环次数是D 无限7.循环语句”while(int i=0;)i--;”的循环次数是A 08.下述有关break语句的描述中,不正确的是C break语句用于if语句的内嵌语句内,它结束该if语句9.下面关于循环语句的描述中,错误的是B 循环体内必须同时出现break语句和continue语句10.以下不是死循环的是D for(;(c=getchar()!=’\n’);)printf(“%c”,c);11.执行语句”for(i=0;i++<3;);”后,变量i的值为C 412.语句”for(x=0,y=0;y!=1&&x<4;x++);”是C 循环4次13.与语句”while(!x);”等价的语句是A while(x= =0);14.执行下列程序段后a的值为B 2int a=1,b=10;do{b-=a;a++;}while(b--<0)二、编程题1.读入用户输入的6个整数并显示其平均值。
#include<stdio.h>main(){float sum=0;int tmp;int i;for(i=0;i<6;i++){printf("输入第%d个数:",i+1);scanf("%d",&tmp);sum=sum+tmp;}printf("平均值是:%f",sum/6);}2.先读入一个正整数n,然后计算并显示前n个偶数的和。
第5章补充习题及答案习题5.1 选择题(1)对定义语句int iArr[2]; 的正确描述是:()A. 定义一维数组iArr,其中包含iArr[1]和iArr[2]两个元素B. 定义一维数组iArr,其中包含iArr[0]和iArr[1]两个元素C. 定义一维数组iArr,其中包含iArr[0]、iArr[1]和iArr[2]三个元素D. 定义一维数组iArr,其中包含iArr(0)、iArr(1)和iArr[2]三个元素(2)以下关于数组的说法,不正确的是:()A. C语言中可以通过通过数组名对数值型数组进行整体的输入或输出B. 数组中的各元素依次占据内存中连续的存储空间C. 同一数组中的元素具有相同的名称和类型D. 在使用数组前必须先对其进行定义(3)有以下程序()#include “stdio.h”void main( ){ int iArr[3]={1,2,3},i;for(i=3; i>=1; i++) printf(“ %d ” , iArr[i] );}则程序运行后的输出结果是:A. 1 2 3B. 不确定的值C. 编译出错D. 3 2 1(4)执行以下程序段后,iArr[2]的值是:()int iArr[10]={1,2,3,4,5,6,7,8,9,10},i,j,t; i = 0 ; j = 9;while( i < j){ t= iArr[i] ; iArr[i] = iArr[j]; iArr[j]=t;i++; j--; }A. 8B. 2C. 3D. 9(5)有以下程序:#include “stdio.h”void main(){ char chA[10]=”abcdef”, chB[5]=”AB\0c”;strcpy(chA,chB);printf(“%c”, chA[3]);}则程序的运行结果是:()A. dB. cC. \0D. 05.2 填空题(1)对于二维数组iA[5][10],判断下列对数组元素的引用正确的是。
习题1、选择题(1)为了避免在嵌套对if()…else中产生歧义,C语言规定一般else子句总是与(B)对。
A.缩排位置相同的ifB. 其之前最近的ifC. 其之后最近的ifD. 同一行上的if (2)以下不正确的语句为( D )。
A.if(x>y);B. if(x<y){x++;y++}C.if(x!= y)scanf(“%d”,&x);else scanf(“%d”,&y)D. if(x=y)&&(x!=0)x+=y; (3)以下if语句语法正确的是(B )。
A.if(x>0)printf(“% f”,x)B. if(x>0){x++;printf(“% f”,x);}else printf(“%f”,-x); else printf(“%f”,-x);C. if(x>0){x++;printf(“% f”,x);};D. if(x>0){x++;printf(“% f”,x)};else printf(“%f”,-x); else printf(“%f”,-x);(4)阅读以下程序,则( D )。
main(){ int a=5,b=0,c=0;if(a=b+c)printf(“***\n”);else printf(“$$$\n”);}A. 有语法错误不能编译B.可以通过编译但不能通过连接C.输出***D.输出¥$$$ (5)下列程序执行时,若键盘输入5,则输出为()。
main(){ int a;scanf(“%d”,&a);if(a++>5) printf(“%d\n”,a);else printf(“%d\n”,a--);}A. 6B. 7C. cD. 4(6)已知a、b、c的值分别为4、5、6,执行以下语句后a、b、c的值分别是()。
if (a>b)a=b;b=c;c=a;A. 4、5、6B.5、6、6C. 4、6、4D. 5、6、52、输入一整数,判断其是奇数还是偶数并输出。
void main(){ int a;scanf("%d",&a);if (a%2==0) printf("偶数");else printf("奇数");}3、由键盘输入一个字符,判断是字母、数字还是其他字符。
#include "stdio.h"void main(){ char temp;temp=getch();if(temp>='a'&&temp<='z') printf("小写字母");else if(temp>='A'&&temp<='Z') printf("大写字母");else if(temp>='0'&&temp<='9') printf("数字");else printf("其他字符");}4、编写程序,求分段函数y的值,x的值由键盘输入x x≤0y= ﹛ 2x 0<x<13x2-6x+7 x≥1void main(){ int x,int y;printf("请输入X的值:");scanf("%d",&x);printf("\n");if(x>=0){ if(0<x<1) y=-2*x;else y=x }else { y=x*x-6*x+7; }printf("Y的值为:%d",&y);}5、输入三个数,按由大到小的顺序输出。
#include<stdio.h>void main(){ int a,b,c,temp=0;printf("please input a,b,c: ");scanf("%d %d %d",&a,&b,&c);if(a>b) {temp=a;a=b;b=temp;}if(a>c){temp=a;a=c;c=temp;}if(b>c){temp=b;b=c;c=temp;}printf("从小到大为:%d,%d,%d\n",a,b,c);}6、由键盘输入一个整数,判断其能否即被3整除又被5整除。
#include "stdio.h"void main(){ int n,i;scanf("%d",&n);if (n%3==0||n%5==0) { printf("Can\n"); }else printf("Can not!\n");}7、输入1-7中的一个数,判别并输出它对应的一个星期中的哪一天。
#include <stdio.h>main(){ int a;scanf("%d",&a);switch (a){ case 1:printf(“Monday\n");break;case 2:printf(“Tu esday\n"); break;case 3:printf(“Wendnesday\n"); break;case 4:printf(“Thursday\n"); break;case 5:printf(“Friday\n"); break;case 6:printf(“Saturday\n"); break;case 7:printf(“Sunday\n"); break;default:printf("Error\n");}}8y值。
void main(){ int x,y;scanf("%d",&x);if (x>=-1)if(-1<=x<=2) y=2x;else y=x*(x+2)else y=x-1;printf("y=%d",y);}9、设工资税率如下,其中s代表工资,r代表税率:s<500 r=0%500<=s<1000 r=5%1000<=s<2000 r=8%2000<=s<3000 r=10%3000<=s r=15%编一程序实现从键盘输入一个工资数,输出实发工资数。
要求使用switch语句。
#include<stdio.h>int main(){ float s,sum=0;printf("输入工资数:");scanf("%f",&s);switch((int)s/500){ case 0:sum=s;break;case 1:sum=s*0.95;break;case 2:case 3:sum=s*0.92;break;case 4:case 5:sum=s*0.90;break;case 6:sum=s*0.85;break;default:sum=s*0.85;}printf("实发工资数:%.2f\n",sum);}10、写出以下程序的运行结果。
(1)# include<stdio.h>void main( ){ int x=1,y=2,z=0,i=3;if(x<y) z=1;else if (x<i) z=2;printf(“z=%d\n”,z);}(2)# include<stdio.h>void main( ){ int x=1,y=2,z=0,i=3;if(x<y)z=1;else if (x<i)z=2;printf(“z=%d\n”,z);}(3)# include<stdio.h>void main( ){ int x=10,y=5;switch(x){ case 1:x++;default:x+=y;case 2:y--;case 3:x--;}printf(“x=%d,y=%d\n”,x,y);}(4)# include<stdio.h>void main( ){ int a=0,b=0,c=0;if(x++||++b)++c;printf(“\na=%d,b=%d,c=%d\n”,a,b,c);}11、用if()…else if()…形式代替下面程序段中的switch语句。
switch(k){ case 2:case 9:printf(“error!\n”);break;case 3:printf(“error!\n”);break;case 10:printf(“error!\n”);break;default:printf(“try again!\n);}12、用switch形式代替下面程序段中的if()…else if()…语句(k为整数)。
if(k==0)printf(“error!\n”);else if(k>=1&&k<=3) printf (“right!\n”);else if(k==4||k==5) printf(“just OK!\n”)else printf(“try again!\n”)13、用条件运算符代替下面程序段的if else语句。
if(f) printf(“YES!\n”)else printf(“NO!\n”)f? yes : no。