信盈达考试中心笔试试题—C语言测试试题 姓名:____________ 联系方式:___________ 测试成绩:_____ 老师评价:___________
一、填空题(每题2分,共20分) 1.已知unsigned char a = 250; int b = 250; 则计算: b = a
a = ___250____,b = ___1000________。
unsigned char a = 250;// 1111 1010
11 1110 10 1000
数据类型:
基本数据类型:int 按大小: short int 2字节 16位 long int 4个字节 int 4个字节
按符号:
有符号:
signed int -----缺省,默认为有符号的
无符号: unsigned int
字符型 char 1字节
在内存中以整数的形式存储
默认为有符号
float 实型----单精度 4字节 3.1415-----0.31415 符号位+小数位+指数 double 双精度 8个字字节
求数据类型所占空间的大小:
sizeof(数据类型/变量名) ------关键字
构造数据类型:结构体 数组 共用体
指针类型
空类型(void)
----------------------- 位运算符: > & | ~ ^ 数据进行运算之前,需要将数据转换成二进制进行运算
1)按位 & 规则:有0为0,全1为1
char a=0x56 //0101 0110 char b=0x78 //0111 1000 a | b : ----------------------------- 0111 1110
2)按位 | 规则:有1为1 全0为0
3)按位 ^ 规则:相同为0,相异为1 char a=0x56 //0101 0110 char b=0x78 //0111 1000 a ^ b : 0010 1110
4)按位
char a=0x56 0101 1000
4)按位 >> 规则:整体右移,低位溢出,高位补0
char a=0x56 //0101 0110
0001 0101>>2
数据类型的转换
强制数据类型转换
高精度---》低精度 (int)1.23 float a=12.34 int b; b=(int)a 自动数据类型转换 ----》由低精度-->高精度转换
从低到高:
char--short--int--long--float--double
运算符:
1.算数运算符:+
数据溢出:
数据从最大值方向溢出,此时,会从最小值开始递增
数组从最小值方向溢出,会从最大值方向开始递增
数据类型决定数据存储范围
4.已知:int a; 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(\"格式控制\",地址列表) int a; scanf(\"%d\",&a);
格式控制:控制数据输入的格式 %d %f %s %u %c %o %x 格式控制符 跟取地址列表
原样输入原样输出----- ------------------------ 5.已知:int a = 10; int b = 20; (a + b, a++, ++b); printf(\"a = %d b = %d\\n\", a, b); 输出___11___21_____。 (a + b, a++, ++b);
---------- 6.已知:double a = 10; int b = 5; double c; c = a % b; 程序编译报错的原因是
_变量a为double类型的数据_____________
7.已知有一个二进制数:0101 0101 1101 0101, 则其对应的八进制形式为:___52725_______, 十六进制形式为:__0x55D5________。
8.堆栈是一组相同相同数据类型数据的集合,
则堆栈的特点是_____先进后出________________。
9.已知队列是一种特殊的线性表,有这自己的独特的特点, 则其特点是______先进先出_______。
10.写出: 0 ‘0’ “0”的区别: \"0\"----‘0’\'\\0\' ____________________________________________________________________________________________。
char a[5]={\'h\',\'e\',\'l\',\'l\',\'o\'};---->字符数组
数据类型 数组名[长度];
数组名[下标]
字符串:由多个字符来组成
--------------------
二、选择题(每题2分,共20分) 1.已知a, b, c都是int类型变量, 其中: a = 8,b = 9,c = 10, 则表达式:1
A)真 B) 假 C) 1 D) 0 2.C语言提供的合法的关键字是( d ) A) include B) public C) Case D) do c++ :
switch(整型常量表达式) { case 整型常量 :语句块; case 整型常量1:语句块2 ... default: 语句块 } do { //循环体
}while(条件表达式);
while(条件表达式) { //循环体 }
inlcude :文件包含指令 #: 预处理
程序编译的四步:
预处理
编译
汇编
链接
3.在C语言中,若对函数类型未加明显式说明,
则函数的隐含类型是( C ) A) void B) double
C) int
----------------- 函数的定义的形式:
函数返回值类型 函数名(参数列表) { 函数体 }
函数说明:
函数返回值类型:函数要返回的数据类型 void 表示函数无返回值
函数名:代表了函数的入口地址
参数列表:数据类型 参数名
函数名 参数名 都要符合标识符的命名规则:
标识符的命名规则:
1.由数字,字母,下划线,美元符($)组成 2.开头不能为数字 3.并且不能是关键字 int jc(int n) { int i; int s=1; for(i=1;i
return s; }
4.已知 char a = 130; printf(\"%d\\n\", a); 的输出结果是( B )
D) char
A) 130
B)-126 C) 有语法错误,无输出结果
D) -1
------------------------ char a; 数据存储范围:-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) a0
B) !a
C) a=0
if(a) { //语句块1 } else { //语句块2 } 条件表达式成立的依据:条件表达式结果为非0值
--------------- if语句的嵌套 if(条件表达式1) { //语句块1 } else if(条件表达式2) { //语句块2 } else if(条件表达式3) { //语句块3 } else {
D) a
//语句块4 }
switch(整型常量表达式) { case 整型常量:语句块1; case 整型常量:语句块2; case 整型常量:语句块3;
。。。。
default:语句块n; }
--- 终端输入一个学生成绩:
判断输入的数据是否为成绩
如果不是成绩:打印数据输入有误,
程序代码结束
显示成绩所处的等级:
等级划分:
90-100 A 90-99 100 9 10 80-89 B 8 70-79 C 7 60--69 D 6
#include
int main() { int n;
while(1) { printf(\"请输入学生成绩:\"); scanf(\"%d\",&n);
if(n100) { printf(\"sorry,数据输入有误!\\n\"); return 0; } n=n/10;
switch(n) { case 10 :printf(\"该学生所处的成绩等级是A\\n\");break; case 9 : printf(\"该学生所处的成绩等级是A\\n\");break; case 8 : printf(\"该学生所处的成绩等级是B\\n\");break; case 7 : printf(\"该学生所处的成绩等级是C\\n\");break; case 6 : printf(\"该学生所处的成绩等级是D\\n\");break; default: printf(\"改学生的成绩不合格\\n\"); } } return 0; }
7.若有定义:int a=8,b=5,c;,执行语句c=a/b+0.4;后,c的值为( B ) A) 1.4
B) 1
C) 2.0
D) 2 ------------------- int a=8,b=5,c;,执行语句c=1+0.4
8.若有以下程序段, int c1=3, c2=2, c3; c3 = 1.0 / c2 * c1; 则执行后,c3中的值是( C ) A) 0
B) 0.5 C) 1
D) 1.5 ---------------------- int c1=3, c2=2, c3; c3 = 0.5* c1;
9.若有以下定义和语句 char c1=\'b\',c2=\'e\'; printf(\"%d,%c\\n\",c2-c1,c2-\'a\'+\"A\"); 则输出结果是( D ) A)2,M
B)3,E C)2,E
D)输出项与对应的格式控制不一致,输出结果不确定
10.假设有说明语句:char a=\'\\72\'; 则变量a ( A ) A) 包含1个字符
B) 包含2个字符 C) 包含3个字符
D) 说明不合法
三、简答&程序题(每题6分,共60分)
1.我们学习过的9条语句是指那些语句?并且至少写出3条语句的结构,如while语句: while(表达式) { 循环体; }
------------------------- 1 2 5 4 for(赋值表达式;条件表达式;循环变量表达式) { 3 6 //循环体; }
赋值表达:执行一次
四个跳转语句:
break:
适用于循环 switch
作用:结束循环语句,跳出switch结构
continue 语句
适用于循环语句
作用:结束本次循环
#include int main() { int i;
for(i=0;i
return : 返回一个数值
结束函数
#include int pi(); int main() { int i; int s; for(i=0;i
int pi() { printf(\"hello world\\n\"); return 1; printf(\"are you ok!\\n\"); return 2; }
goto 语句
真正的跳转语句
语法:goto 标签名
只能在同一个函数进行跳转
#include
int main() {
int i; int sum=0; for(i=1;i
printf(\"%d\\n\",sum); } ------ #include int main() { int i=1; int sum=0; mu: if(i
sum=sum+i; i++; goto mu; } printf(\"%d\\n\",sum); }
2.输入一个不多于5位的正整数,判断他是几位数,
并逆序输出。
#include int main() { int n; int a[5]; int i=0; int cnt=0; scanf(\"%d\",&n); //1234 while(n>0) { a[i++]=n%10; n=n/10; cnt++; } for(i=0;i
3.编程实现求
1*1*1 + 2*2*2 + 3*3*3 + ....+ 100*100*100的和。
#include int main() { int i; int sum=0; for(i=1;i
printf(\"%d\\n\",sum); } ---------- #include int main() { int i; int sum=0; for(i=1;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 int main() { int i; int sum=0; for(i=1;i
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 int s=0; int sum=0; for(i=0;i
----------------------------- 求一个数的阶乘, 显示:
1!=1 2!=1*2 3!=1*2*3 1!= 2!= 3!= 4!= ... 10!
1!+2!+3!+4!...10!=
int s=1; int sum=0 for(i=1;i
5.编写一个函数实现将两个正整数合成一个整型数。 如 12 和 34合成1234。
12 34 1200+34 123 456 123000+456 ---------------------------
#include
int hc(int a,int b);
int main() { int x,y; int sum; while(1) { printf(\"please enter two numbers:\\n\"); scanf(\"%d%d\",&x,&y);
sum=hc(x,y);
printf(\"%d, %d 合成 %d\\n\",x,y,sum); } } int hc(int a,int b) // int a=x,int b=y { int c=b; while(c>0) { c=c/10; a=a*10; }
return (a+b); } --------
6.简要说明自定义函数中数据的传递有那两种方式, 并说明其各自的特点。(最好举例说明)。
值传递:形参改变,不会影响实参 址传递:形参改变,会影响实参
#include
void swap(int x,int y) int main() { int a=3; int b=4;
printf(\"交换之前:a=%d,b=%d\\n\",a,b); swap(a,b); swp(&a,&b); printf(\"交换之后:a=%d,b=%d\\n\",a,b); } void swap(int x,int y)//int x=a,int y=b { int temp; temp=x; x=y; y=temp; } void swp(int *x,int *y); { int tmp; tmp=*x; *x=*y; *y=tmp; }
指针:存地址的变量
指针的定义形式:
数据类型 *指针名; 数据类型:指针指向的地址空间的数据类型决定 * :标识符,只是说明该变量是指针变量
指针运算: & 取地址 * 取内容
7.strlen()函数是求解字符串的长度,已知该函数的功能, 请重新写一个子函数,实现跟strlen()函数一样的功能。
strlen() 执行原理:求解字符串的字符个数,不包含\'\\0\'
char str[50];
scanf(\"%s\",str); //scanf()函数遇到空格则停止输入
字符串输入函数gets()
字符串输出函数puts()--->输出一个字符串 n=strlen(str);
#include #include
int my_strlen(char *p);
int main() {
char str[50]; int n;
gets(str);
//n=strlen(str); n=my_strlen(str);
printf(\"%s\\n\",str); printf(\"%d\\n\",n);
} int my_strlen(char *p) { int n=0;
while(*p!=\'\\0\') { p++; n++; }
return n; }
8.求具有abcd=(ab+cd)2性质的四位数。
如3025这个数具有一种独特的性质:将它平分为二段, 即30和25,使之相加后求平方,即(30+25)2, 恰好等于3025本身。
编写一个程序输出具有这样性质的全部四位数。
1000 ~ 9999
#include
int main() { int ab,cd; int i; for(i=1000;i
9.写一个冒泡排序的程序,排序的数字个数不少于五个。
冒泡排序:相邻的数字进行比较
根据从小到大或者从大到小进行排序
1 2 3 4 5 6 7 8 9 10
第一轮:2 3 4 5 6 7 8 9 10 1 第一轮:3 4 5 6 7 8 9 10 2 1 第三轮:4 5 6 7 8 9 10 3 2 1 第四: 第五:
#include
int main() { int a[100]; int i,j,tmp; int n;
printf(\"请输入要排序的个数:\"); scanf(\"%d\",&n);
for(i=0;i
for(i=0;i
for(i=0;i
10.strcat()函数是字符串连接函数, 请重写一个子函数,并实现其功能
strcat(数组1,字符串/数组名)
执行原理:将字符串或者数组名里面字符连同\'\\0\' 一起连接到数组1的\'\\0\'位置; (将数组1的\'\\0\'位置覆盖)
#include
void my_stcat(char *s,char *p); int main() { char str[50]; char buf[20];
printf(\"请输入第一个字符串:\"); gets(str); printf(\"请输入第二字符串:\"); gets(buf);
my_stcat(str,buf);
puts(str); } void my_stcat(char *s,char *p) { char *pf=s;
while(*pf!=\'\\0\') pf++; while(*p!=\'\\0\') { *pf=*p; pf++; p++; } *pf=\'\\0\'; }