1.以下选择中,正确的赋值语句是(C)
A.a=1,b=2B.j++
C.a=b=5; D.y=(int)x
解析:选项A、B、D都无分号
变量 = 表达式;//赋值语句是一定带分号的
int a=b=c=5;//本语句错误
{
int a,b,c;
a = b = c = 5;
}//正确赋值语句
2.运算符优先级:
!、算术、关系、&&、||、按位、逻辑、?:、赋值、逗号
3.假设所有变量均为整型,表达式a=2,b=5,a>b?a++:b++,a+b的值是(8)
解析:首先保证一个问号表达式(语法分析,尽可能令语法无二义性,且完备)
题中表达式等价于(a=2,b=5,a>b)?a++:(b++,a+b)
根据逗号表达式,(式1,式2,...,式n),从左往右逐个计算,表达式值为最后一个式的值,优先级最低。
根据问号表达式,(式1?式2:式3),?式1为"真"时,只执行式1,为"假"时,只执行式2。
(a=2,b=5,a>b)?a++:(b++,a+b)
4.转义字符输出:
printf("%%");//输出一个%
printf("%%%d", 99);//输出%99
5.若int a=1,b=2,c=3,d; d=a*b+c?100:99;则d的值为(100)
6.若int d=22?33:44,55;则d的值为(44)
解析:算术 > 问号 > 赋值 > 逗号
d=a*b+c?100:99;等价于d=(a*b+c?100:99);
d=22?33:44,55;等价于(d=22?33:44),55;
7.char arr[] = 'a';(错误)
解析:无法从char转换为char[]
8.若对函数类型未加显示说明,则函数的隐含说明类型为(E)
A.staticB.externC.voidD.register E.int F.无法确定
9.在C语言中,函数的隐含存储类别是(B)
A.staticB.externC.voidD.register E.int F.无法确定
10.在C语言中,全局变量的存储类别是(B)
A.staticB.externC.voidD.register E.int F.无法确定
11.若有定义char *p; 则赋值语句*p=getchar();是(错误)
解析:指针p没有被初始化。
12.若有定义int a[m][n],(*p)[n]; p = a;则第i行第j列元素为(A、B、C)
A.a[i][j]B.*(p[i]+j)C.*(*(p+i)+j)
解析:
二维数组的第i行首地址为a+i、*(a+i)、&a[i][0]
二维数组的第i行第j列的地址为*(a+i)+j、&a[i][j]
二维数组各个元素位置理解:1.纵横;2.顺排,一维数组
顺排(一维数组)第i个元素地址:*a+i
13.以下程序的运行结果为(211)
int x=1,y=1,c=0; c=x++||y++; printf("%d%d%d",x,y,c);
解析:++ 优先级大于 || 优先级大于 =,其中||(逻辑或)的执行操作是:当||左侧表达式为“真”时,将不会执行右侧表达式。
14.若执行以下程序,则输出(508080)
int x=30,y=50,z=80; if(x>y||xz)z=x;x=y;y=z; printf("%d%d%d",x,y,z);
解析:>优先级大于&&优先级大于||,它们的结合性都是从左到右
根据编译器语法分析,x>y||xz等价于(((x>y)||(xz))即(0||1)&&(y>z)即(1&&0)为"假"
由于if(0)z=x;带了分号,故不执行z=x;
因此继续执行x=y;y=z;
15.C语言中,一维数组的定义方式为:类型说明符 数组名[(A)];一位数组的引用方式为:数组名[(B)]
A.常量表达式B.整型常量或整型表达式
C.整型常量D.整型表达式
解析:常量表达式包括:常量和符号常量(例如#define N 99)