c语言习题及答案.docx
- 文档编号:23047435
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:18
- 大小:23.77KB
c语言习题及答案.docx
《c语言习题及答案.docx》由会员分享,可在线阅读,更多相关《c语言习题及答案.docx(18页珍藏版)》请在冰豆网上搜索。
c语言习题及答案
【习题1】
一、判断并改错
1.1C程序执行的入口是main()函数,所以main函数必须放在程序的开头。
错误:
main函数可以放在程序的任何位置。
并不限定在程序的开头。
定义一个函数包括数据说明部分和执行语句部分,两者可以交叉出现。
错误:
不可以交叉出现,数据说明部分在执行语句部分的前面。
scanf("%d,%d",&x,&y);的正确输入格式:
3,4<回车>。
正确
注释内容太多会影响程序的执行效率。
错误:
不会影响程序的执行效率。
因为在编译时,编译系统将注释内容删除或用空格代替,所以注释内容不会编译到目标程序中。
二、编程题
输入圆的半径,求圆的周长,并将结果保留两位小数输出到屏幕上。
提示:
定义圆的半径r,圆的周长:
2**r,输出结果保留2位小数可以用%.2f
输入两个整数,输出其中最大者。
提示:
模仿例
【习题2】
一、单项选择题
下面四个选项中,均是不合法的用户标识符的选项是(C)。
A)BA、x_0、do
B)float、1a0、_Y
C)x-y、goto、123
D)_123、tmp、CHAR
下列选项中不正确的常数的选项是(D)。
A)0x12FB)C)D)0388
下面正确的字符常量是(B)。
A)"a"B)'\\'C)"\n"D)"\376"
下面正确的字符串常量是(C)。
A)'a'B)'376'C)"\\n"D)376
表达式'A'+4*'b'的正确结果是(B)。
A)67B)C)不确定D)67L
执行printf("%x",100);后的输出结果是(C)。
A)100B)0x100C)0X64D)64
存储字符串"\\\'abc\376"需要的字节数是(D)。
A)11B)13C)6D)7
【习题3】
一、计算题
+7%3*11%2/4(答案:
5/2+2+7%6(答案:
3.3a=12,a*=2+3(答案:
a=60)
3.4a=3,b=4,c=5,a+b>c&&b==c(答案:
0)
3>53:
5<825:
40(答案:
25)
设a=1,b=2,c=3,d=4,m=n=1,有表达式(m=a>b)&&(n=c>d),计算表达式后m,n的值
(答案:
m=0,n=1)
设intb=7;floata=,c=;求下面表达式的值。
a+(int)(b/2*(int)(a+c)/2)%4(答案:
二、单项选择题
若有代数式
,则不正确的C语言表达式是(C)。
A)x/b/c*y*8B)8*x*y/b/c
C)8*x*y/b*cD)x*y/c/b*8
有如下类型说明:
intk,a,b;
unsignedlongw=8;
doublex=
则以下不符合C语言语法的表达式是(A)。
A)x%(-3)B)w*=-2
C)k=(a=6,b=4,a-b)D)a*=a+=a-=(b=4)*(a=3)
有如下类型说明:
floatn;
intm;
则以下能实现将n中的数值保留小数点后两位,第三位四舍五入的表达式是(B)。
A)n=(n*100+/B)m=n*100+,n=m/
C)n=n*100+D)n=(n/100+*
设k=7,x=12;则下列表达式值为3的是(D)。
A)x%=(k%=5)B)x%=(k-k%5)
C)x%=k-k%5D)(x%=k)-(k%=5)
已知m=48,ch='a',n=0;则表达式(m>=n&&ch<'b'&&!
n)的值是(B)。
A)0B)1C)真D)非0
下面哪个式子在b为奇数时结果为假(C)。
A)a%2==1B)!
(a%2==0)C)!
(a%2)D)a%2
执行printf("%f",(x=3,y=5,x>y1:
);后的输出结果是(D)。
A)语法错误B)1C)D)
能表示条件0≤x≤100的表达式是(D)。
A)0<=x<=100B)x>=0,x<=100
C)0≤x≤100D)x>=0&&x<=100
判断char型变量ch为数字的正确表达式是(B)。
A)ch>="0"&&ch<="9"B)ch>='0'&&ch<='9'
C)'0'≤ch≤'9'D)ch>='0'||ch<='9'
三、编程题(应用条件运算)
输入一个整型成绩x,如果大于等于60分,输出“pass”,否则输出“fail”。
提示:
printf("%s",x>60"pass":
"fail");
输入一个年份y,如果是闰年,输出“yisaleapyear”,否则输出“yisnotaleapyear.”
提示:
printf("%dis%s",y%4==0&&y%100!
=0||y%400==0"aleapyear.":
"notaleapyear.");
输入三条边a,b,c,如果它们能构成一个三角形,输出“Yes”,否则输出“No”。
提示:
printf("%s",a+b>c&&a+c>b&&b+c>a"Yes":
"No");
输入三个数x,y,z,按从小到大的输出结果。
提示:
分别用max0,min0代表最大、最小值,mid0表示中间值。
max0=(x>yx:
y)>z(x>yx:
y):
z;max0=(x y) y): z; mid0=x+y+z-max0-min0; 【习题4】 编程实现,输入一个整数,判断它是否为偶数,并显示相应的信息。 提示: x代表输入的整数,if(x%2==0)printf("\neven");elseprintf("\nodd"); 编程实现,输入一个平面上的点,判断它是否落在单位圆上,并显示相应的信息。 提示: x,y代表平面坐标,if(x*x+y*y==1)printf("\nYes");elseprintf("\nNo"); 编程实现,输入一个成绩等级(A-E),显示相应的百分制成绩段。 A: 90-100 B: 80-89 C: 70-79 D: 60-69 E: <60 提示: chargrade; if(grade=='A')printf("\n90-100"); elseif(grade=='B')printf("\n80-89"); .... 写出下面程序的运行结果: #include<> main() { inta=-1,b=1,c=5; switch(a>0){ case1: switch(b-2<0){ case1: printf("&");break; case2: printf("*");break; } case0: switch(c==5){ case0: printf("! ");break; case1: printf("#");break; default: printf("%%"); } default: printf("@"); } } 运行结果: @ 编程实现,使用循环结构打印以下图案。 * *** ***** ******* ***** *** * 提示: 输出时,本图案要按向上三角形和向下三角形进行输出。 每行输出中包括空格输出,‘*’号输出。 输出空格和‘*’号个数要与行循环控制变量关联起来。 【习题5】 填空题: 若有定义inta[3][5];则排列在数组中的第9个元素是(a[1][3])。 strlen("Howareyou\n")的值是(12)。 5.3C语言中字符串结束的标志是('\0')。 写出一个名为s的单精度实型一维数组,长度是6,所有元素初值均为0,其数组定义语句是(floats[6]={0};)。 strcmp("how","How")的值是(32或>0)。 选择题: 若有ints[4]={1,2,3,4};,则s[s[0]+2*s[2]-s[3]]的值是(D) .2C 对数组的描述正确的是(B)。 A.数组一旦定义其大小是固定的,但数组元素的类型可以不同。 B.数组一旦定义其大小是固定的,但数组元素的类型必须相同。 C.数组一旦定义其大小是可变的,但数组元素的类型可以不同。 D.数组一旦定义其大小是可变的,但数组元素的类型必须相同。 对字符串"Boy"进行完整赋值的操作是(B)。 A.chars[3]={'B','o','y'};B.chars[]="Boy"; C.chars[3]={"Boy"};s[3];s="Boy"; 在c语言中引用数组元素时,其数组下标的数据类型允许是(C)。 A.整型常量B.整型表达式 C.整型常量或整型表达式D.任何类型的表达式 对以下说明语句的正确理解是(B)。 inta[10]={6,7,8,9,10}; A.将5个初值依次赋给a[1]至a[5] B.将5个初值依次赋给a[0]至a[4] C.将5个初值依次赋给a[6]至a[10] D.因为数组长度与初值的个数不相同,所以此语句不正确 三、看程序写结果 main() {inta[3][3]={{1,0,2},{2,2},{0,2}},c[3][3],i,j; for(i=0;i<3;i++) { for(j=0;j<3;j++) { c[i][j]=a[a[i][j]][a[j][i]]; printf("%5d",c[i][j]); } } printf("\n"); } 运行结果为: 220002201 当运行以下程序时,从键盘输入: Ah2MAA3ha,请写出输出结果。 main() {chars[80],c='a'; inti=0; scanf("%s",s); while(s[i++]! ='\0') if(s[i]==c)s[i]=s[i]-32; elseif(s[i]==c-32)s[i]=s[i]+32; puts(s); } 运行结果为: AH2Ma 四、编程题 用数组方法定义一个矩阵,求其转置矩阵。 提示: 已知a[3][2],转置后的结果存放在b[2][3];则b[j][i]=a[i][j]; 从键盘输入9个不同的整数,组成三行三列的二元数组,找出每一列中的最大元素,并输出其行、列下标。 提示: 已知a[3][3],max,row,col分别用来存放一列的最大值,行下标和列下标。 利用一个二维数组,打印出以下杨辉三角形,要求打印出10行。 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 ∶ ∶ 提示: 定义一个10行10列的二维数组,并且通过两重循环对第1列所有元素赋值1,主对角线也赋值。 根据a[i][j]=a[i-1][j]+a[i-1][j-1]求出其它元素的值。 把30个学生的学号和两门课程的成绩输入到一个二维数组中,求出的每个学生的两门课程的总成绩也放于此数组中,请按学生总分的高低打印出成绩单(包括学号、两门课程成绩和总分)。 提示: 定义一个30行4列的数组。 为了先快速测试算法是否正确可以定义一个3行4列的数组,并且通过赋初始值,减少调试程序时反复输入数据的麻烦,算法调试成功后在加上输入数据部分。 实现从高到低打印出成绩可以通过排序(降序);也可以通过另外定义1个一维数组作为索引,再通过索引打印成绩。 从键盘上输入一串字符,将其逆向显示。 提示: 首先计算字符串的长度,在从右边逐一显示字符,直到下标等于0为止。 【习题6】 填空题 6.1C语言程序执行的开始处是main函数。 6.2C程序中的一个函数由两部分组成,即声明部分和执行部分。 为了保证被调用函数不返回任何值,其函数定义的类型应为void。 若一个局部变量的存储类型是static,则该变量的值在程序执行完成时被释放。 预处理命令#include的作用是文件包含。 定义一个宏,功能是判断两个数是否相等,相等为1,不等为0。 #defineEQU(a,b)(a)==(b)1: 0 变量的存储类别有自动型、静态型、寄存器型、和外部类型共4种,它们分别用auto、static、register、extern标识。 选择题 下述函数定义形式正确的是(C)。 A.intf(intx;inty)B.intf(intx,y) C.intf(intx,inty)D.intf(x,y: int) 关于函数参数,说法正确的是(A)。 A.实参与其对应的形参各自占用独立的内存单元 B.实参与其对应的形参共同占用一个内存单元 C.只有当实参和形参同名时才占用同一个内存单元 D.形参是虚拟的,不占用内存单元 用数组名作为函数的实参时,传递给形参的是(A)。 A.数组的首地址B.数组的第1个元素 C.数组中的全部元素D.数组的元素个数 复合语句中定义的变量的作用范围是(D)。 A.整个源文件B.整个函数 C.整个程序D.所定义的复合语句 一个函数的返回值由(D)确定。 A.return语句中的表达式B.调用函数的类型 C.系统默认的类型D.被调用函数的类型 在一个C源文件中,若要定义一个只允许本源文件所有函数使用的全局变量,其他文件中不允许使用,则该变量需要使用的存储类别是(D)。 A.autoB.registerC.externD.static 判断题 若定义的函数没有参数,则函数名后的圆括号可以省略。 (′) 函数的函数体可以是空语句(? )。 只有main函数才能调用其他函数。 (? ) 语句中表达式的类型必须与函数定义的类型一致。 (′) 函数的实参和形参可以是相同的名字。 (? ) 函数调用中,形参与实参的类型和个数必须保持一致。 (? ) 外部类型的变量只能定义一次,但可在不同地方声明多次。 (? ) 外部类型的变量作用范围大,编程中应多用外部变量。 (′) 预处理命令行必须以#开头,且最后要用分号结尾。 (′) 宏命令的处理占用编译时间,而不占用运行时间。 (? ) 看程序写结果 intfun(intn) {intf=1; f=f*n*2; return(f); } main() {inti,j; for(i=1;i<=5;i++) printf("%d\t",fun(i)); } 程序运行结果: 246810 intx1=30,x2=40; main() {intx3=10,x4=20; sub(x3,x4); sub(x2,x1); printf("x1=%d,x2=%d,x3=%d,x4=%d",x1,x2,x3,x4); } sub(intx,inty) {intx1=x; x=y; y=x1; } 程序运行结果: x1=30,x2=40,x3=10,x4=20 #defineA4 #defineB(x)A*x/2 main() {floatc,a=; c=B(a); printf("c=%5.1f",c); } 程序运行结果: c= 编程题 写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。 两个整数由键盘输入。 提示: 最大公约数可以采用“辗转相除法”,最小公倍数将两数乘积除于最大公约数。 “辗转相除法”: 设两个数分别用m,n表示且m>n,临时变量t,t=m%n;m=n;n=t;直到n等于0。 有3′3的矩阵A和3′2的矩阵B,编制一个函数,求C=AX′B。 提示: 参照习题,A,B,C三个数组作为函数参数。 编写一函数,使输入的一个字符串按反序存放,在主函数中输入输出字符串。 提示: 一维字符数组用来存放字符串,并且将它传递到函数,在函数中通过元素值交换来完成反序存放。 编制一个函数,由参数传入一个字符串,统计此字串中字母、数字、和其他字符的个数,在主函数中输入字符串并显示统计结果。 提示: 参照例题。 【习题7】 语句inta,*p=&a;的含义是什么 答: 定义整型变量a,和整型指针变量p,并且p指向变量a。 写出下列数组元素的指针法表示。 (1)num[3] (2)data[4][2] 答: (1)*(num+3) (2)*(*(data+4)+2) 写出下列数组元素的下标法表示。 (1)*(*(a+1)+2) (2)(*(a+3))[4](3)*(a[2]+5) 答: (1)a[1][2] (2)a[3][4](3)a[2][5] 分析程序,写出程序输出结果。 (1)main() {inta[5]={1,2,3,4,5}; int*p=&a[1]; printf("%d",p[2]); } 输出结果: 4 (2)main() {chara[]="IloveChina! "; char*p=a; p=p+2; printf("%s",p); } 输出结果: loveChina! (3)main() {inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; int(*pa)[4]=a; pa++; printf("%d",*(*(pa+1)+2)); } 输出结果: 11 (4)main() {char*str[]={"zhao","qian","sun","li"}; inti; for(i=0;i<4;i++) printf("%c",str[i][0]); } 输出结果: zqsl (5)voidsub(intx,inty,int*z) {*z=y-x;} main() { inta,b,c; sub(10,5,&a); sub(7,a,&b); sub(a,b,&c); printf("%4d,%4d,%4d\n",a,b,c); } 输出结果: -5,-12,-7 (6)#include<> fun(char*s) {char*p=s; while(*p)p++; return(p-s); } main() {char*str="abcd"; inti; i=fun(str); printf("%d",i); } 输出结果: 4 定义语句int*f();和int(*f)();的含义分别是什么 答: int*f();表示函数返回一个整型指针;int(*f)();表示f是函数指针,指向整型函数。 在二维数组中存放有4个学生,5门课程的成绩,用指针编程实现: (1)求出每门课程的平均成绩。 (2)求每个学生的总成绩和平均成绩。 (3)在屏幕上列出各课成绩在85分以上的学生名单。 (4)在屏幕上列出补考通知单。 提示: (1) (2)(3)略,(4)根据成绩小于60分,由于有5门课程的成绩,所以需要使用elseif结构。 输入一个字符串,内有数字和非数字字符,例如: a345dsaf412x371+89tah74 编程将其中连续的数字作为一个证书,一次存放到一个数组d中,例如: 345放在d[0],412放在d[1],......。 统计共有多少个证书,并输出这些整数。 提示: 从字符串中提取"345": t=ch-'0';t=t*10+(ch-'0');t=t*10+(ch-'0'); t='3'-'0'=3;t=3*10+('4'-'0')=34;t=34*10+('5'-'0')=345 编写把十六进制数字字符串变换成整数的函数: inthtoi(char*s)。 提示: 同 编写把十进制整数变换成二进制数字字符串的函数: char*itob(intn)。 提示: 同 用字符指针实现字符串拷贝功能,不能使用库函数。 提示: 定义两个字符数组a,b,复制操作b[i]=a[i]; 用字符指针实现字符串连接功能,不能使用库函数。 提示: 定义两个字符数组a,b,先将下标定位到a的末尾'\0',在将b的元素赋值给a的对应元素,注意: 别忘了添加字符串结束标志'\0'。 用指向指针的指针的方法对5个字符串排序并输出。 提示: 一个指针数组和一个指向指针的指针变量。 【习题8】 定义复数结构体,并写出复数的加、减、乘、除、的计算函数。 提示: 复数包括两个部分: 实部和虚部。 定义一个结构体变量(包括年、月、日)。 计算该日在本年中是第几天。 注意闰年问题。 提示: 计算该日是本年中的第几天,是从本年1月1日起。 有5个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入5个学生数据,要求在屏幕上显示出3门课程的平均成绩,以及最高分数的学生的数据(包括学号、姓名、3门课程成绩、平均分)。 提示: 定义结构体数组。 最高分数是指每个学生3门课程的平均分最高。 编写求链表长度的函数。 提示: 从链表指针头往表尾移动计算结点的个数。 已有两个链表a、b,每个链表的结点包括学号、成绩。 要求把两个链表合并,按学号升序排列。 提示: 可以定义一个新的链表,先从链表a,再从链表b中取出结点,依次按学号升序插入到新的链表中。 利用节中的structcard结构编写一个程序实现5个人员数据输入和在屏幕上显示的功能: 如果job项为't',则在position项为教师的职称(助教、讲师、副教授、教授);如果job项为's',则class项为学生的班级号,如501。 提示: 在结构体中嵌入共用体position,根据job成员确定position的具体值。 口袋中有红、黄、兰3中颜色的球若干个。 每次从口袋中取出1个球,根据颜色的不同,输入相应的颜色英文字符串。 要求用枚举变量实现。 提示: 参照例。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 习题 答案