C语言.docx
《C语言.docx》由会员分享,可在线阅读,更多相关《C语言.docx(34页珍藏版)》请在冰豆网上搜索。
C语言
信盈达考试中心笔试试题—C语言测试试题
姓名:
____________联系方式:
___________测试成绩:
_____老师评价:
___________
一、填空题(每题2分,共20分)
1.已知unsignedchara=250;
intb=250;则计算:
b=a<<2;后,
a=___250____,b=___1000________。
unsignedchara=250;//11111010
11111010<<2
1111101000----->1000
数据类型:
基本数据类型:
int
按大小:
shortint2字节16位
longint4个字节
int4个字节
按符号:
有符号:
signedint-----缺省,默认为有符号的
无符号:
unsignedint
字符型char1字节
在内存中以整数的形式存储
默认为有符号
float实型----单精度4字节
3.1415-----0.31415
符号位+小数位+指数
double双精度8个字字节
求数据类型所占空间的大小:
sizeof(数据类型/变量名)------关键字
构造数据类型:
结构体数组共用体
指针类型
空类型(void)
-----------------------
位运算符:
<<>>&|~^
数据进行运算之前,需要将数据转换成二进制进行运算
1)按位&
规则:
有0为0,全1为1
chara=0x56//01010110
charb=0x78//01111000
a|b:
-----------------------------
01111110
2)按位|
规则:
有1为1全0为0
3)按位^
规则:
相同为0,相异为1
chara=0x56//01010110
charb=0x78//01111000
a^b:
-------------------------------
00101110
4)按位<<
规则:
整体左移,高位溢出,低位补0
chara=0x56
01011000<<2
4)按位>>
规则:
整体右移,低位溢出,高位补0
chara=0x56//01010110
00010101>>2
数据类型的转换
强制数据类型转换
高精度---》低精度
(int)1.23
floata=12.34
intb;
b=(int)a
自动数据类型转换----》由低精度-->高精度转换
从低到高:
char--short--int--long--float--double
运算符:
1.算数运算符:
+-*/%(求余)
1)/
当除法两边是整数的时候,结果会自动取整
10/3=3
当除法两边有一边是小数的时候,结果会取准确值
10/3.0=3.333333
2)%(求余)
两边都必须为整数
用法:
位数分离
inta=123
a%10----3
a/10%10=2
a/100=1
2.关系运算符:
><>=<=!
===
由关系运算符组成的式子叫做关系表达式
关系表达式的结果只有两种0或1
对于数据来说,只要是一个非0值,条件成立
优先级:
><>=<=高于!
===
3)逻辑运算符:
&&||!
&&
表达式1||表达式2
4)!
!
表达式
单目运算符
优先级:
!
高于&&高于||
------------------
括号(){}.->
单目运算符~!
++--
指针运算符:
*&
算数运算符
位运算:
<<>>
关系运算符:
位运算符:
&高于^高于|
逻辑算符:
&&高于||
三目运算符:
复合赋值运算符(赋值运算符):
+=-=*=
a+=2;--->a=a+2
逗号运算符
(表达式1,表达式2...表达式n);
前置后置++
++a:
a++:
后置
inta=1,b=2;
intc;
c=a++;//c=1,a=2
c=++b;//c=3,b=3
(条件表达式)?
表达式1:
表达式2
------------------------------------------------
2.已知:
inta=5;intb=6;intc=7;intd=8;
求计算表达式(a=c>b)||(d=b>a)后。
a,b,c,d的值分别是__1,6,7,8__________________。
----------------------------------------------
(a=1)||(d=b>a)
3.已知字母a的ASCII码为十进制数97,且设ch为char型变量,
则表达式ch='z'*4;的值为___-24______。
---------------------------------------------
'z'==122*4=488;
charch=488;-128~127
488-256=232-256=-24
---------------------------------------------
字符:
单引号表示
字符串吧:
双引号来表示
字符串:
由多个字符组成
"you"='y''o''u''\0'
"y"='y''\0'
'z'==122*4=488;
charch;
数据溢出:
char:
有符号:
数据是按位存储的
对于有符号的数据来说,最高位---符号位
最高位1---负数
最高位0---正数
最大值:
01111111--------127
最小值:
10000000---------128
无符号:
最大值:
11111111--------255
最小值:
00000000-------0
--------------------------------
数据溢出:
数据从最大值方向溢出,此时,会从最小值开始递增
数组从最小值方向溢出,会从最大值方向开始递增
数据类型决定数据存储范围
4.已知:
inta;scanf("%o",&a);
假设用户输入:
482\n。
则printf("a=%o\n",a);
输出______4______。
printf("格式控制",输出列表)
格式控制:
格式符:
控制数据输出的格式
%d
%f
%s
%u
%c
%o
%x
%p输出地址
格式符跟输出列表在类型数量位置上一一对应
转义字符:
'\n':
回车换行
'\t':
'\r':
回车不换行
'\hhh':
八进制
'\72'-----7*8+2=58
'\xh':
十六进制
格式输入函数
scanf("格式控制",地址列表)
inta;
scanf("%d",&a);
格式控制:
控制数据输入的格式
%d
%f
%s
%u
%c
%o
%x
格式控制符跟取地址列表
原样输入原样输出-----
-------------------------------------------------------
5.已知:
inta=10;intb=20;(a+b,a++,++b);
printf("a=%db=%d\n",a,b);输出___11___21_____。
(a+b,a++,++b);
-----------------------------------------
6.已知:
doublea=10;intb=5;doublec;
c=a%b;程序编译报错的原因是
_变量a为double类型的数据_____________
7.已知有一个二进制数:
0101010111010101,
则其对应的八进制形式为:
___52725_______,
十六进制形式为:
__0x55D5________。
8.堆栈是一组相同相同数据类型数据的集合,
则堆栈的特点是_____先进后出________________。
9.已知队列是一种特殊的线性表,有这自己的独特的特点,
则其特点是______先进先出_______。
10.写出:
0‘0’“0”的区别:
"0"----‘0’'\0'
____________________________________________________________________________________________。
chara[5]={'h','e','l','l','o'};---->字符数组
数据类型数组名[长度];
数组名[下标]
字符串:
由多个字符来组成
---------------------------------------------------
二、选择题(每题2分,共20分)
1.已知a,b,c都是int类型变量,
其中:
a=8,b=9,c=10,
则表达式:
1<=a的值为(c)
A)真B)假C)1D)0
2.C语言提供的合法的关键字是(d)
A)includeB)publicC)CaseD)do
c++:
switch(整型常量表达式)
{
case整型常量:
语句块;
case整型常量1:
语句块2
...
default:
语句块
}
do
{
//循环体
}while(条件表达式);
while(条件表达式)
{
//循环体
}
inlcude:
文件包含指令
#:
预处理
程序编译的四步:
预处理
编译
汇编
链接
3.在C语言中,若对函数类型未加明显式说明,
则函数的隐含类型是(C)
A)voidB)doubleC)intD)char
-----------------
函数的定义的形式:
函数返回值类型函数名(参数列表)
{
函数体
}
函数说明:
函数返回值类型:
函数要返回的数据类型
void表示函数无返回值
函数名:
代表了函数的入口地址
参数列表:
数据类型参数名
函数名参数名都要符合标识符的命名规则:
标识符的命名规则:
1.由数字,字母,下划线,美元符($)组成
2.开头不能为数字
3.并且不能是关键字
intjc(intn)
{
inti;
ints=1;
for(i=1;i<=n;i++)
s=s*i;
returns;
}
4.已知chara=130;printf("%d\n",a);
的输出结果是(B)
A)130B)-126
C)有语法错误,无输出结果D)-1
------------------------
chara;数据存储范围:
-128~127
5.若变量a是int类型,并执行了语句:
a='A'+1.6;
65+1.6
则正确的叙述是(D)
A)a的值是字符'C'B)a的值是浮点型
C)不允许字符型和浮点型相加
D)a的值是字符'A'的ASCII值加上1
6.若要求在if后一对圆括号中表示a不等于0的关系,
则能正确表示这一关系的表达式为(D)
A)a<>0B)!
aC)a=0D)a
if(a)
{
//语句块1
}
else
{
//语句块2
}
条件表达式成立的依据:
条件表达式结果为非0值
----------------------------------------------
if语句的嵌套
if(条件表达式1)
{
//语句块1
}
elseif(条件表达式2)
{
//语句块2
}
elseif(条件表达式3)
{
//语句块3
}
else
{
//语句块4
}
switch(整型常量表达式)
{
case整型常量:
语句块1;
case整型常量:
语句块2;
case整型常量:
语句块3;
。
。
。
。
default:
语句块n;
}
----------------------------------
终端输入一个学生成绩:
判断输入的数据是否为成绩
如果不是成绩:
打印数据输入有误,
程序代码结束
显示成绩所处的等级:
等级划分:
90-100A90-99100910
80-89B8
70-79C7
60--69D6
<60成绩不合格
#include
intmain()
{
intn;
while
(1)
{
printf("请输入学生成绩:
");
scanf("%d",&n);
if(n<0||n>100)
{
printf("sorry,数据输入有误!
\n");
return0;
}
n=n/10;
switch(n)
{
case10:
printf("该学生所处的成绩等级是A\n");break;
case9:
printf("该学生所处的成绩等级是A\n");break;
case8:
printf("该学生所处的成绩等级是B\n");break;
case7:
printf("该学生所处的成绩等级是C\n");break;
case6:
printf("该学生所处的成绩等级是D\n");break;
default:
printf("改学生的成绩不合格\n");
}
}
return0;
}
7.若有定义:
inta=8,b=5,c;,执行语句c=a/b+0.4;后,c的值为(B)
A)1.4B)1C)2.0D)2
--------------------------------------------------
inta=8,b=5,c;,执行语句c=1+0.4
8.若有以下程序段,intc1=3,c2=2,c3;c3=1.0/c2*c1;
则执行后,c3中的值是(C)
A)0B)0.5C)1D)1.5
-----------------------------------------------------
intc1=3,c2=2,c3;c3=0.5*c1;
9.若有以下定义和语句charc1='b',c2='e';
printf("%d,%c\n",c2-c1,c2-'a'+"A");则输出结果是(D)
A)2,MB)3,E
C)2,ED)输出项与对应的格式控制不一致,输出结果不确定
10.假设有说明语句:
chara='\72';则变量a(A)
A)包含1个字符B)包含2个字符
C)包含3个字符D)说明不合法
三、简答&程序题(每题6分,共60分)
1.我们学习过的9条语句是指那些语句?
并且至少写出3条语句的结构,如while语句:
while(表达式)
{
循环体;
}
--------------------------------------------------------
1254
for(赋值表达式;条件表达式;循环变量表达式)
{
36
//循环体;
}
赋值表达:
执行一次
四个跳转语句:
break:
适用于循环switch
作用:
结束循环语句,跳出switch结构
continue语句
适用于循环语句
作用:
结束本次循环
#include
intmain()
{
inti;
for(i=0;i<=6;i++)
{
printf("%d\n",i);
if(i==4)
break;
printf("%d\n",i);
}
}
return:
返回一个数值
结束函数
#include
intpi();
intmain()
{
inti;
ints;
for(i=0;i<=6;i++)
{
printf("%d\n",i);
if(i==4)
continue;
printf("%d\n",i);
}
s=pi();
printf("%d\n",s);
}
intpi()
{
printf("helloworld\n");
return1;
printf("areyouok!
\n");
return2;
}
goto语句
真正的跳转语句
语法:
goto标签名
只能在同一个函数进行跳转
#include
intmain()
{
inti;
intsum=0;
for(i=1;i<=100;i++)
sum=sum+i;
printf("%d\n",sum);
}
-------------------------------------
#include
intmain()
{
inti=1;
intsum=0;
mu:
if(i<=100)
{
sum=sum+i;
i++;
gotomu;
}
printf("%d\n",sum);
}
2.输入一个不多于5位的正整数,判断他是几位数,
并逆序输出。
#include
intmain()
{
intn;
inta[5];
inti=0;
intcnt=0;
scanf("%d",&n);
//1234
while(n>0)
{
a[i++]=n%10;
n=n/10;
cnt++;
}
for(i=0;iprintf("%d",a[i]);
printf("\n");
}
3.编程实现求
1*1*1+2*2*2+3*3*3+....+100*100*100的和。
#include
intmain()
{
inti;
intsum=0;
for(i=1;i<=100;i++)
{
sum=sum+i*i*i;
if(i==100)
printf("%d*%d*%d=",i,i,i);
else
printf("%d*%d*%d+",i,i,i);
}
printf("%d\n",sum);
}
-----------------------------------------
#include
intmain()
{
inti;
intsum=0;
for(i=1;i<=100;i++)
{
sum=sum+i*i*i;
//if(i==100)
//printf("%d*%d*%d=",i,i,i);
//else
//printf("%d*%d*%d+",i,i,i);
}
printf("1*1*1+2*2*2+3*3*3+....+100*100*100=%d\n",sum);
}
4.编程计算1*2*3+3*4*5+.......+99*100*101的值。
#include
intmain()
{
inti;
intsum=0;
for(i=1;i<=99;i+=2)
sum=sum+i*(i+1)*(i+2);
printf("1*2*3+3*4*5+...+99*100*101=%d\n",sum);
}
----------------------------------------
终端输入一个整数(任意),输入一个数,控制位数
n=5
a+aa+aaa+aaaa+aaaaa
3,6
3+33+333+3333+33333+333333
ints=0;
intsum=0;
for(i=0;i<5;i++)
{
s=s+a;
sum=sum+s;
a=a*10;
}
-----------------------------
求一个数的阶乘,
显示:
1!
=12!
=1*23!
=1*2*3
1!
=
2!
=
3!
=
4!
=
...
10!
1!
+2!
+3!
+4!
...10!
=
ints=1;
intsum=0
for(i=1;i<=10;i++)
{
s=s*i;
sum=sum+s;
}
5.编写一个函数实现将两个正整数合成一个整型数。
如12和34合成1234。
1234
1200+34
123456
123000+456
---------------------------
#include
inthc(inta,intb);
intmain()
{
intx,y;
intsum;
while
(1)
{
printf("pleaseentertwonumbers:
\n");
scanf("%d%d",&x,&y);
sum=hc(x,y);
printf("%d,%d合成%d\n",x,y,sum);
}
}
inthc(inta,intb)//inta=x,intb=y
{
intc=b;
while(c>0