c语言习题及答案Word文件下载.docx
- 文档编号:20607092
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:16
- 大小:25.83KB
c语言习题及答案Word文件下载.docx
《c语言习题及答案Word文件下载.docx》由会员分享,可在线阅读,更多相关《c语言习题及答案Word文件下载.docx(16页珍藏版)》请在冰豆网上搜索。
A)67B)67.0C)不确定D)67L
1.6执行printf(%x,100);
后的输出结果是(C)。
A)100B)0x100C)0X64D)64
1.7存储字符串屜屜屜?
憯换屜?
尶需要的字节数是(D)。
A)11B)13C)6D)7
【习题3】
一、计算题
3.12.8+7%3*11%2/4(答案:
2.8)
3.25/2+5.0/2+7%6(答案:
5.5)
3.3a=12,a*=2+3(答案:
a=60)
3.4a=3,b=4,c=5,a+b>
c&
&
b==c(答案:
0)
3.53>
5?
3:
5<
8?
25:
40(答案:
25)
3.6设a=1,b=2,c=3,d=4,m=n=1,有表达式(m=a>
b)&
(n=c>
d),计算表达式后m,n的值?
(答案:
m=0,n=1)
3.7设intb=7;
floata=2.5,c=4.7;
求下面表达式的值。
a+(int)(b/2*(int)(a+c)/2)%4(答案:
4.5)
二、单项选择题
8xy,则不正确的C语言表达式是(若有代数式C)。
3.8
bcA)x/b/c*y*8B)8*x*y/b/c
C)8*x*y/b*cD)x*y/c/b*8
3.9有如下类型说明:
intk,a,b;
unsignedlongw=8;
doublex=2.9
则以下不符合C语言语法的表达式是(A)。
w*=-2
B)x%(-3)A).
C)k=(a=6,b=4,a-b)D)a*=a+=a-=(b=4)*(a=3)
3.10有如下类型说明:
floatn;
intm;
则以下能实现将n中的数值保留小数点后两位,第三位四舍五入的表达式是(B)。
A)n=(n*100+0.5)/100.0B)m=n*100+0.5,n=m/100.0
C)n=n*100+0.5/100.0D)n=(n/100+0.5)*100.0
3.11设k=7,x=12;
则下列表达式值为3的是(D)。
A)x%=(k%=5)B)x%=(k-k%5)
C)x%=k-k%5D)(x%=k)-(k%=5)
3.12已知m=48,ch='
n=0;
则表达式(m>
=n&
ch<
'
!
n)的值是(B)。
A)0B)1C)真D)非0
3.13下面哪个式子在b为奇数时结果为假(C)。
A)a%2==1B)!
(a%2==0)C)!
(a%2)D)a%2
3.13执行printf(%f,(x=3,y=5,x>
y?
1:
1.5));
后的输出结果是(D)。
A)语法错误B)1C)1.5D)1.500000
3.14能表示条件0≤x≤100的表达式是(D)。
A)0<
=x<
=100B)x>
=0,x<
=100
C)0≤x≤100D)x>
=0&
x<
3.15判断char型变量ch为数字的正确表达式是(B)。
A)ch>
=B)ch>
='
0'
9'
C)'
≤ch≤'
D)ch>
||ch<
三、编程题(应用条件运算)
3.16输入一个整型成绩x,3.17如果大于等于60分,3.18输出“pass”,3.19否则输出“fail”。
printf(%s,x>
60?
pass:
ail);
3.17输入一个年份y,如果是闰年,输出“yisaleapyear”,否则输出“yisnotaleapyear.”
printf(%dis%s,y%4==0&
y_x0010_0!
=0||y@0==0?
aleapyear.:
otaleapyear.);
3.18输入三条边a,b,c,如果它们能构成一个三角形,输出“Yes”,否则输出“No”。
printf(%s,a+b>
a+c>
b&
b+c>
a?
Yes:
No);
,按从小到大的输出结果。
x,y,z输入三个数3.19.
分别用max0,min0代表最大、最小值,mid0表示中间值。
max0=(x>
x:
y)>
z?
(x>
y):
z;
max0=(x<
y)<
(x<
mid0=x+y+z-max0-min0;
【习题4】
4.1编程实现,输入一个整数,判断它是否为偶数,并显示相应的信息。
x代表输入的整数,if(x%2==0)printf(\
even);
elseprintf(\
odd);
4.2编程实现,输入一个平面上的点,判断它是否落在单位圆上,并显示相应的信息。
x,y代表平面坐标,if(x*x+y*y==1)printf(\
Yes);
4.3编程实现,输入一个成绩等级(A-E),显示相应的百分制成绩段。
A:
90-100
B:
80-89
C:
70-79
D:
60-69
E:
<
60
chargrade;
if(grade=='
)printf(\
90-100);
elseif(grade=='
B'
80-89);
....
4.4写出下面程序的运行结果:
#include<
stdio.h>
main()
{
inta=-1,b=1,c=5;
switch(a>
0){
case1:
switch(b-2<
printf(&
);
break;
case2:
printf(*);
}
case0:
switch(c==5){
printf(!
printf(#);
default:
printf(%%);
printf(@);
运行结果:
#@
4.5编程实现,使用循环结构打印以下图案。
*
***
*****
*******
输出时,本图案要按向上三角形和向下三角形进行输出。
每行输出中包括空格输出,‘*'
号输出。
输出空格和‘*'
号个数要与行循环控制变量关联起来。
【习题5】
填空题:
5.1若有定义inta[3][5];
则排列在数组中的第9个元素是(a[1][3])。
5.2strlen(Howareyou\n)的值是(12)。
5.3C语言中字符串结束的标志是('
\0'
)。
5.4写出一个名为s的单精度实型一维数组,长度是6,所有元素初值均为0,其数组定义语句是(floats[6]={0};
5.5strcmp(how,How)的值是(32或>
0)。
选择题:
下笔如有神读书破万卷
)的值是(D5.6若有ints[4]={1,2,3,4};
,则s[s[0]+2*s[2]-s[3]]D.4
B.2C.3A.1
)B5.7对数组的描述正确的是(
.数组一旦定义其大小是固定的,但数组元素的类型可以不同。
A
.数组一旦定义其大小是固定的,但数组元素的类型必须相同。
B
.数组一旦定义其大小是可变的,但数组元素的类型可以不同。
C
.数组一旦定义其大小是可变的,但数组元素的类型必须相同。
D
B)对字符串?
祯进行完整赋值的操作是(5.8
B.chars[]=Boy;
A.chars[3]={'
'
o'
y'
};
D.chars[3];
s=Boy;
C.chars[3]={Boy};
C)其数组下标的数据类型允许是(5.9在c语言中引用数组元素时,整型表达式B.A.整型常量
任何类型的表达式D.C.整型常量或整型表达式)。
B5.10对以下说明语句的正确理解是(
inta[10]={6,7,8,9,10};
a[5]a[1]至.将5个初值依次赋给Aa[4]至5个初值依次赋给a[0]B.将a[10]
a[6]至个初值依次赋给C.将5所以此语句不正确,D.因为数组长度与初值的个数不相同
三、看程序写结果5.11
main()
2}},c[3][3],i,j;
for(i=0;
i<
3;
i++)
{
for(j=0;
j<
j++)
c[i][j]=a[a[i][j]][a[j][i]];
printf(],c[i][j]);
printf(\
运行结果为:
220002201
5.12当运行以下程序时,从键盘输入:
Ah2MAA3ha,请写出输出结果。
{chars[80],c='
;
inti=0;
scanf(%s,s);
while(s[i++]!
)
if(s[i]==c)s[i]=s[i]-32;
elseif(s[i]==c-32)s[i]=s[i]+32;
puts(s);
运行结果为:
AH2Ma
四、编程题
5.13用数组方法定义一个矩阵,求其转置矩阵。
已知a[3][2],转置后的结果存放在b[2][3];
则b[j][i]=a[i][j];
5.15从键盘输入9个不同的整数,组成三行三列的二元数组,找出每一列中的最大元素,并输出其行、列下标。
已知a[3][3],max,row,col分别用来存放一列的最大值,行下标和列下标。
5.15利用一个二维数组,打印出以下杨辉三角形,要求打印出10行。
1
11
121
1331
14641
15101051
∶
∶.D.intf(x,y:
int)
下笔如有神读书破万卷
,主对列所有元素赋值110列的二维数组,并且通过两重循环对第1提示:
定义一个10行a[i][j]=a[i-1][j]+a[i-1][j-1]求出其它元素的值。
角线也赋值。
根据求出的每个学生的两门30个学生的学号和两门课程的成绩输入到一个二维数组中,5.16把两门课程成请按学生总分的高低打印出成绩单(包括学号、课程的总成绩也放于此数组中,绩和总分)。
列4列的数组。
为了先快速测试算法是否正确?
可以定义一个3行提示:
定义一个30行4算法调试成功后在加上减少调试程序时反复输入数据的麻烦,的数组,并且通过赋初始值,个1输入数据部分。
实现从高到低打印出成绩可以通过排序(降序);
也可以通过另外定义一维数组作为索引,再通过索引打印成绩。
从键盘上输入一串字符,将其逆向显示。
5.17
为止。
首先计算字符串的长度,在从右边逐一显示字符,直到下标等于0
】【习题6填空题。
6.1C语言程序执行的开始处是main函数。
和执行部分6.2C程序中的一个函数由两部分组成,即声明部分
void6.3为了保证被调用函数不返回任何值,其函数定义的类型应为时被释放。
static,则该变量的值在程序执行完成6.4若一个局部变量的存储类型是。
6.5预处理命令#include的作用是文件包含。
1,不等为06.6定义一个宏,功能是判断两个数是否相等,相等为#defineEQU(a,b)(a)==(b)?
0
种,4共寄存器型、和外部类型6.7变量的存储类别有自动型、静态型、标识。
、registerexternstatic它们分别用auto、、
选择题。
下述函数定义形式正确的是(C)6.8B.intf(intx,y)A.intf(intx;
inty)
C.intf(intx,inty)
)A关于函数参数,说法正确的是(6.9
A.实参与其对应的形参各自占用独立的内存单元
B.实参与其对应的形参共同占用一个内存单元
C.只有当实参和形参同名时才占用同一个内存单元
D.形参是虚拟的,不占用内存单元
6.10用数组名作为函数的实参时,传递给形参的是(A)。
A.数组的首地址B.数组的第1个元素
C.数组中的全部元素D.数组的元素个数
6.11复合语句中定义的变量的作用范围是(D)。
A.整个源文件B.整个函数
C.整个程序D.所定义的复合语句
6.12一个函数的返回值由(D)确定。
A.return语句中的表达式B.调用函数的类型
C.系统默认的类型D.被调用函数的类型
6.13在一个C源文件中,若要定义一个只允许本源文件所有函数使用的全局变量,其他文件中不允许使用,则该变量需要使用的存储类别是(D)。
A.autoB.registerC.externD.static
判断题
6.14若定义的函数没有参数,则函数名后的圆括号可以省略。
(′)
6.15函数的函数体可以是空语句(?
)。
6.16只有main函数才能调用其他函数。
(?
6.17return语句中表达式的类型必须与函数定义的类型一致。
6.18函数的实参和形参可以是相同的名字。
6.19函数调用中,形参与实参的类型和个数必须保持一致。
6.20外部类型的变量只能定义一次,但可在不同地方声明多次。
6.21外部类型的变量作用范围大,编程中应多用外部变量。
6.22预处理命令行必须以#开头,且最后要用分号结尾。
6.23宏命令的处理占用编译时间,而不占用运行时间。
看程序写结果
6.24
intfun(intn)
{intf=1;
f=f*n*2;
return(f);
{inti,j;
for(i=1;
=5;
printf(%d\t,fun(i));
程序运行结果:
246810
6.25
intx1=30,x2=40;
{intx3=10,x4=20;
sub(x3,x4);
sub(x2,x1);
牰湩晴尨?
┽?
?
┽層?
砬?
※
sub(intx,inty)
{intx1=x;
x=y;
y=x1;
}
x1=30,x2=40,x3=10,x4=20程序运行结果:
6.26
4
#defineA
#defineB(x)A*x/2
{floatc,a=4.5;
c=B(a);
printf(c=%5.1f,c);
c=9.0
编程题
6.25写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。
两个整数由键盘输入。
最大公约数可以采用“辗转相除法”,最小公倍数将两数乘积除于最大公约数。
“辗转相除法”:
设两个数分别用m,n表示且m>
n,临时变量t,t=m%n;
m=n;
n=t;
直到n等于0。
6.26有3′3的矩阵A和3′2的矩阵B,编制一个函数,求C=AX′B。
参照习题5.17,A,B,C三个数组作为函数参数。
6.27编写一函数,使输入的一个字符串按反序存放,在主函数中输入输出字符串。
一维字符数组用来存放字符串,并且将它传递到函数,在函数中通过元素值交换来完成反序存放。
6.28编制一个函数,由参数传入一个字符串,统计此字串中字母、数字、和其他字符的个数,在主函数中输入字符串并显示统计结果。
参照例题6.10。
【习题7】
1.1语句inta,*p=&
a;
的含义是什么?
答:
定义整型变量a,和整型指针变量p,并且p指向变量a。
1.2写出下列数组元素的指针法表示。
(1)num[3]
(2)data[4][2]
(1)*(num+3)
(2)*(*(data+4)+2)
1.3写出下列数组元素的下标法表示。
*(a[2]+5)(3)(*(a+3))[4]
(2)*(*(a+1)+2))1(
(1)a[1][2]
(2)a[3][4](3)a[2][5]
1.4分析程序,写出程序输出结果。
(1)main()
{inta[5]={1,2,3,4,5};
int*p=&
a[1];
printf(%d,p[2]);
输出结果:
(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;
inta,b,c;
sub(10,5,&
a);
sub(7,a,&
b);
sub(a,b,&
c);
printf(M,M,M\n,a,b,c);
-5,-12,-7
(6)#include<
fun(char*s)
{char*p=s;
while(*p)p++;
return(p-s);
{char*str=abcd;
i=fun(str);
printf(%d,i);
1.5定义语句int*f();
和int(*f)();
的含义分别是什么?
答:
int*f();
表示函数返回一个整型指针;
int(*f)();
表示f是函数指针,指向整型函数。
1.6在二维数组中存放有4个学生,5门课程的成绩,用指针编程实现:
(1)求出每门课程的平均成绩。
(2)求每个学生的总成绩和平均成绩。
(3)在屏幕上列出各课成绩在85分以上的学生名单。
)在屏幕上列出补考通知单。
4(.
(1)
(2)(3)略,(4)根据成绩小于60分,由于有5门课程的成绩,所以需要使用else
if结构。
1.7输入一个字符串,内有数字和非数字字符,例如:
a345dsaf412x?
371+89tah74
编程将其中连续的数字作为一个证书,一次存放到一个数组d中,例如:
345放在d[0],412放在d[1],......。
统计共有多少个证书,并输出这些整数。
从字符串中提取?
:
t=ch-'
t=t*10+(ch-'
t='
3'
-'
=3;
t=3*10+('
4'
)=34;
t=34*10+('
5'
)=345
1.8编写把十六进制数字字符串变换成整数的函数:
inthtoi(char*s)。
同1.7
1.9编写把十进制整数变换成二进制数字字符串的函数:
char*itob(intn)。
1.10用字符指针实现字符串拷贝功能,不能使用库函数。
定义两个字符数组a,b,复制操作b[i]=a[i];
1.11用字符指针实现字符串连接功能,不能使用库函数。
定义两个字符数组a,b,先将下标定位到a的末尾'
,在将b的元素赋值给a的对应元素,注意:
别忘了添加字符串结束标志'
1.12用指向指针的指针的方法对5个字符串排序并输出。
一个指针数组和一个指向指针的指针变量。
【习题8】
8.1定义复数结构体,并写出复数的加、减、乘、除、的计算函数。
复数包括两个部分:
实部和虚部。
8.2定义一个结构体变量(包括年、月、日)。
计算该日在本年中是第几天。
注意闰年问题。
计算该日是本年中的第几天,是从本年1月1日起。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 习题 答案