1.C语言的标识符?
答:C语言的标识符是由字母、数字和下划线组成,第一个字符不能是数字,只能是字母或者是下划线数组
2.如下选项中可用的合法整数是(选项B的数字中间有一个空格)
A: Xff
B: 1 2
C: 0x77
D: 018
答:首先整数的数字必须是连续的,选项B错误;C语言中,整数有八进制、十进制和十六进制三种表示形式,十进制的数码取值为0~9,没有前缀;八进制的数码取值为0~7,必须以0开头,做为八进制数的前缀;十六进制的数码取值为:0~9,A~F或a~f,前缀为0X或0x
3.对于if(表达式)语句,如下叙述正确的是
A. "表达式"能够是常量
B. "表达式"的值只能是整数值
C. "表达式"不能是变量
D. "表达式"中不能够出现字符
答: if(表达式)语句中,表达式一般是逻辑表达式或关系表达式,也能够是算术表达式或赋值表达式,甚至是一个变量或常量.函数
3.如有定义:int a,b,c;如下选项中的赋值语句正确的是:
A: a = (b = c) + 1
B: (a = b) = c = 1
C: a = (b == c) = 1
D: a + b = c
答: 赋值运算符的结合性是由右向左结合,赋值运算符左值为变量,右值为变量或常量,且左右两边数据类型相同才能实现赋值.
A选项中,将c赋值给b,让后将b+1赋值给a,正确.B选项中,将1赋值给c,赋值运算(a=b)=c中左值为表达式,不是变量不能被赋值,错误.C选项中赋值运算(b==c)=1左值为逻辑表达式,不是变量不能被赋值,错误.D错误指针
4.有以下程序:code
#include<studio.h> void main(){ char *p1 = 0; int *p2 = 0; double *p3 = 0; printf("%d,%d,%d\n",sizeof(p1),sizeof(p2),sizeof(p3)); }
程序输出结果是:4 4 4
答:sizeof用来获取类型或数据对象的长度,也便是一个这种类型的变量在内存中所占字节数.因为一个变量的地址也是一个值,所以就能够把这个地址值存放到另外一个变量里保存.这种专门用来存放变量地址的变量,称为"指针变量".全部类型的指针变量都是地址,所占字节数均为4对象
5.有以下程序:内存
#include<studio.h> void main(){ int i,k; int array[4][2] = {{1,2},{4,9},{6}}; for(int i=0;i<2;i++) for(int k=0;k<4;k++){ printf("%d",array[k][i]); } printf("\n"); }
程序运行后的输出结果是:
1 4 6 0 2 9 0 0ci
答: 二维数组的初始化有2种方式,其中一种是分行初始化,方式为:<font color="red">数据类型数组名行下标表达式 = {{第0行初值表},{第1行初值表},....{最后一行初值表}};</font>若是初值表只对部分元素赋初值,没有被赋值的元素将被自动赋值为0字符串
6.有以下程序:io
#include<studio.h> void main(){ int i,*ptr; int array[5] = {5,3,1}; for(ptr=array,i=0;i<5;i++,ptr++){ if(*ptr == 0){ putchar('X'); }else{ putchar('A' + *ptr); } } printf("\n"); }
程序运行后输出的结果是:FDBXX
答:在对数组进行初始化时,若是对数组的所有元素赋以初值,定义时能够不指定数组长度,若是被定义数组的长度与初值个数不一样,则数组长度不能省略;若是在说明数组时给出了长度,但没有给全部的元素赋初值,那么C语言将自动对剩下的元素赋初值,则array={5,3,1,0,0}.程序执行过程为:执行for循环,将数组首地址赋值给指针ptr,依次遍历每个元素,若是数组元素为0则输出"X",若是不为0则按照字母表输出字符"A"后第<font color="blue">array[i]个字符</font>for循环
7.有以下程序:(字符数组默认元素是'0')
#include<studio.h> void main(){ char name[10] = {'S','T','R','I','N','G'}; name[3] = 'E'; name[5] = 0; printf("%s",name); }
程序输出结果是: C
A: STRENG
B: STRIEG
C: STREN
D: STREN0
答:printf函数按照格式符说明输出对应的数据.%s控制符用于输出字符串,输出时从给定地址开始依次输出字符,直到遇到'0'结束.<font color="red">给字符变量赋值0,至关于赋值'0'.</font>由于这是个字符数组,因此只能赋值字符和字符的ascii值,因此0是一个ascii值,对应的字符是'0'.初始化时name="STRING",改动第4个和第6个字符元素以后字符串变为"STREN".
8.有以下程序
#include<studio.h> int disp(char *str){ while(*str) putchar(*str++); return *str; } void main(){ printf("%d\n",disp("NAME")); }
程序输出结果是: A
A: NAME0
B: NAMEE
C: NAME
D: NAME0
解析:调用disp函数,将字符串"NAME"首地址传给str,在while循环中,依次判断字符串中字符是否为'0',不是'0'则输出字符,不然结束循环.当(*str)='0'时,结束循环,返回字符'0'的ASCII值0,并输出. NAME0
9.有以下程序
#include<studio.h> #define D(x) 4*x+1 void main(){ int i=2.j=4; printf("%d\n",D(i+j)); }
程序输出结果是: B
A: 25
B: 13
C: 9
D: 12
解析: 带参数的宏定义不是进行简单的字符串替换,而是进行参数替换.替换过程是:用宏调用提供的实参字符串,直接置换宏定义命令中相应形参字符串,非形参字符串保持不变.调用函数D(i+j),进行替换为4*i+j+1=13
10.有以下程序
#include<studio.h> void main(){ int a=-2,b=0; while(a++ && ++b); printf("%d,%d",a,b); }
程序运行输出后结果是: D
A: 0,2
B: 0,3
C: 1,3
D: 1,2
解析:此题主要考察惰性求值-2 1-1 2 0 3 => 1 3注意最后一个循环,前面为0也就是假,因此不会进行后面的运算