C 语言是一种结构化语言,它层次清晰,便于按模块化方式组织程序,易于调试和维护。C语言的表现能力和处理能力极强,它不仅具有丰富的运算符和数据类型,便于实现各类复杂的数据结构,还可以直接访问内存的物理地址,进行位一级的操作。而在C 语言的基础上,1983 年又由贝尔实验室的Bjarne Strou-strup 推出了C。 C 进一步扩充和完善了C 语言,成为一种面向对象的程序设计语言。C 提出了一些更为深入的概念,它所支持的这些面向对象的概念容易将问题空间直接地映射到程序空间,为程序员提供了一种与传统的结构化程序设计不同的思维方式和编程方法,因而也增加了整个语言的复杂性,掌握起来有一定的难度。
1.1 CC 工程师标准
1.1.1 初级要求
标准C 基础:一般应包括对于数据类型、变量常量、数组、函数、指针和字符串、结构、联合和枚举的理解和运用。
作为一个合格的软件工程师,具备扎实的编程基础是十分必要的,这也是各大互联网公司面试中一定会考察的知识点。例如下面的题目摘自某知名互联网公司的招聘考试试题。
题1-1:请看下面的代码。程序运行的结果是( )。
#include
int main
{
int a=1,b=2,c=3,d=0;
ifa==1 && b==2
ifb!=2||c--!=3
printf"%d,%d,%d\n", a,b,c;
else
printf"%d,%d,%d\n", a,b,c;
else
printf"%d,%d,%d\n", a,b,c;
return 0;
}
A. 3,2,1 B. 1,3,2
C. 1,3,3 D. 1,2,3
正确答案:C
【解析】
ifa==1 && b==2 条件成立。运算后a=1, b=3
ifb!=2 || c--!=3 条件1 成立,因为或运算在条件1 成立后条件2 不执行
printf"%d,%d,%d\n", a,b,c; a=1,b=3,c=3
else
printf"%d,%d,%d\n", a,b,c;
else
printf"%d,%d,%d\n", a,b,c;
题1-2:下列代码中,prim 函数的功能是分解质因数。请填写括号中的内容。
void primint m, int n
{
if m = n
{
while ① n;
② ;
primm, n;
cout }
}
正确答案:① m%n ② m=n
【解析】n 从2 开始,第一处为m%n,代表取余。当余数是0 的时候表示除尽,跳出while循环,即找出一个质因数。此时一个质因数即为n,然后 m=n,即让m 除以这个质因数,然后再进入求新m 质因数的递归。
题1-3:若有以下类型说明语句:char w; int x; float y; double z; 则表达式w-x*yz 的结果为double 类型, 表达式intx y-z*w 的结果为( )类型。
A. float
B. char
C. int
D. double
正确答案:C
【解析】当操作数的类型不同,而且不属于基本数据类型时,经常需要强制类型转换,将操作数转化为所需要的类型。显式强制类型转换需要使用强制类型转换运算符,格式如下:
type 或type。其中,type 为类型描述符, 如int、float 等。
为表达式。经强制类型转换运算符运算后,返回一个具有type 类型的数值,这种强制类型转换操作并不改变操作数本身,运算后操作数本身未改变。
题1-4:C 语言中运算对象必须为整型的运算符是( )。
A. %=
B.
C. =
D. <=
正确答案:A
【解析】%= 是取模运算,也就是求余数的运算,只有整数才能取模。
题1-5:在C 语言程序中,表达式85 的结果是( )。
A. 1.6
B. 1
C. 3
D. 0
正确答案:B
【解析】C 语言中整数的运算结果仍然为整数。
题1-6:设x 为int 型变量,且x=10,则执行语句x =x 后,x 的值为( )。
A. 10
B. 20
C. 40
D. 30
正确答案:B
【解析】例如式子a =b,即把a b 的值再赋值给a。对于本题来说,x =x 即把x x 的值赋给x,x 最后为20。
题1-7:在C 语言程序中,表达式5%2 的结果是( )。
A. 2.5
B. 2
C. 1
D. 3
正确答案:C
【解析】% 指的是取余数,5 除以2 的余数为1。
题1-8:如果int a=3, b=4;则条件表达式aA. 3
B. 4
C. 0
D. 1
正确答案:A
【解析】a题1-9:C 语言中,关系表达式和逻辑表达式的值是( )。
A. 0
B. 0 或1
C. 1
D. T 或F
正确答案:B
【解析】逻辑表达式是指运算符为或||、与&&、非! 的表达式。返回值为0 或1,0 表示false,非0 表示true。关系表达式是指运算符为、=、==、!= 的表达式,返回值同样为0 或1。
题1-10:设a、b 和c 都是int 型变量,且a=3, b=4, c=5, 则下面的表达式中,值为0 的表达式是( )。
A. ''a''&&''b''
B. aC. a||b c&&b-c
D. !a正确答案:D
【解析】|| 和&& 的优先级高于和-,|| 和&& 的优先级相等,且是左结合的,就是从左边开始结合到右边。
题1-11:下面( )表达式的值为4。
A. 113
B. 11.03
C. float113
D. int11.03 0.5
正确答案:D
【解析】A. 整数的运算结果仍然为整数,结果为3;B. 由于11.0 是float 型,因此计算结果也为float 型,值为3.0;C. 结果强制类型转换为float 类型,值为3.0;D.11.03 0.5=4.1,强制类型转换为整型,结果为4。
题1-12:已知int x=5, y=5, z=5;执行语句x%=y z; 后,x 的值是( )。
A. 0
B. 1
C. 5
D. 6
正确答案:C
【解析】x=x%y z,x=5%5 5=5,结果为5。
题1-13:已知字母A 的ASCII 码为十进制数65,且c2 为字符型,则执行语句c2=''A'' ''6''-''3''; 后,c2 中的值为( )。
A. 68
B. ''D''
C. 错误
D. ''d''
正确答案:B
【解析】c2 的ASCII 码为十进制数68,因为c2 是字符型的,所以应该是字母D。
题1-14:下列关于C 语言的叙述错误的是( )。
A. 大写字母和小写字母的意义相同
B. 不同类型的变量可以在一个表达式中
C. 在赋值表达式中等号= 左边的变量和右边的值可以是不同类型
D. 同一个运算符号在不同的场合可以有不同的含义
正确答案:A
【解析】C 语言中,大小写代表不同的两个标识符。A 错误。
题1-15:有:int w=11, x=12, y=3, m; 执行语句m=wA. 1
B. 2
C. 3
D. 以上结果都不对
正确答案:C
【解析】m=w题1-16:设整型变量 a=2,则执行下列语句后,浮点型变量b 的值不为0.5 的是( )。
A. b=1.0a;
B. b=float1a;
C. b=1floata;
D. b=1a*1.0;
正确答案:B
【解析】B 中整数与整数的运算结果仍然为整数,所以1a 的值为0,强制转化为float 型后结果为0.0。
题1-17:若int n; float f=13.8; 则执行n=intf%3 后,n 的值是( )。
A. 1
B. 4
C. 4.333333
D. 4.6
正确答案:A
【解析】13.8 取整之后等于13,13 对3 求余结果是1,选A。
题1-18:在C 语言的库函数中,可以输出char 型变量x 值的语句是( )。
A. getcharx
B. fputcx
C. putcharx
D. putsx
正确答案:C
【解析】输出函数是putchar 和printf,putchar 只能输出字符常量和字符型变量。getchar
和putchar 是一对函数,针对字符及字符变量进行操作。getchar 可以接受各种字符,包括空格和回车,相应的putchar 可以输出一个字符。
题1-19:以下说法正确的是( )。
A. ''x'' 5 是一个错误的表达式
B. C 语言不允许类型的混合运算
C. 强制类型转换时,类型说明符必须加括号
D. intx y 和intx y 是完全等价的表达式
正确答案:C
【解析】A 表达式正确;B 中C 语言允许类型混合运算;C 正确;D 中intx y 先将x 转换为整型,
再与y 进行加法运算,intx y 先将x 与y 相加,结果再转换为整型,两个式子是不同的。
题1-20:在C 语言中,认为( )为逻辑真。
A. true
B. 大于0 的值
C. 非0 整数
D. 所有非0 的值
正确答案:D
【解析】C 语言中,0 是假值,其他的都是真值。
题1-21:表示关系xA. xB. xC. xD. x正确答案:A
【解析】题中x题1-22:能正确表示逻辑关系a=10 或aA. a=10 or aB. a=0||aC. a=10&&aD. a=10||a正确答案:D
【解析】逻辑运算符||表示或的意思。
题1-23:判断char 型变量c1 是否为大写字母的表达式为( )。
A. ''A''B. c1=''A'' & c1C. ''A''=c1
D. c1=''A''&& c1正确答案:D
【解析】C 语言规定,字符常量在程序中要用单引号括起来。判断c1 是否为大写字母的充要条件为c1=''A'' 和c1=''Z'',用逻辑与&& 来表示。所以选项D 正确。
题1-24:若int i=10; 执行下列程序后,变量i 的正确结果是( )。
switch i {
case 9: i =1;
case 10: i =1;
case 11: i =1;
default: i =1;
}
A. 13
B. 12
C. 11
D. 10
正确答案:A
【解析】由于case 中缺少break 语句,在case 10 之后程序会一直执行下去,因此结果为13。
题1-25:在下面的条件语句中 其中s1 和s2 表示C 语言语句,只有一个在功能上与其他三个语句不等价,它是( )。
A. if a s1; else s2;
B. if a==0 s2; else s1;
C. if a!=0 s1; else s2;
D. if a==0 s1; else s2;
正确答案:D
【解析】答案A 中 ifa s1; else s2;,假设a==0,那么if 语句条件为假,执行s2,假设a!=0,
执行s1;答案B 中 ifa==0; s2; else s1;,假设a==0,那么if 语句条件为真,执行s2,假设a!=0,
执行s1;答案C 中 ifa!=0 s1; else s2;,假设a==0,那么if 语句条件为假,执行s2,假设a!=0,
执行s1;答案D 中 ifa==0 s1; else s2;,假设a==0,那么if 语句条件为真,执行s1,假设a!=0,
执行s2。
题1-26:假定所有变量均已正确定义,则下列程序段运行后y 的值是( )。
int a=0,y=10;
ifa=0
y--;
else ifa0
y;
else
y =y;
A. 20
B. 11
C. 9
D. 0
正确答案:A
【解析】ifa=0y--;其中a=0 是先给a 赋值为0 再判断,这里的a 为0 了,ifa 就是假的,不成立;else ifa0 继续判断a0。上面已经把 a 赋值为0,所以这里也不成立;y 不执行,然后执行else y =y;做到这一步了,y=y y=20,所以a 的值是0,y 的值是20。
题1-27:假定所有变量均已正确定义,则下列程序段运行后x 的值是( )。
a=b=c=0;
x=35;
if!a
x--;
else
ifb;
ifc
x=3;
else
x=4;
A. 34
B. 4
C. 35
D. 3
正确答案:B
【解析】程序是一步一步往下执行的,对于if 语句,只有为真的时候才会执行其后面的语句。if!a 会执行后面的语句,因为非零即为真,执行到这步后,x=34,但是程序继续往下,ifc 后面的语句不执行,就执行了else 后的语句,所以x=4。