今天是10道选择题
下面代码段的输出结果是:
int main()
{
int a = 3;
printf("%d\n", (a += a -= a * a));
return 0;
}
-12
自右至左的结合方向称为“右结合性”。最典型的右结合 性运算符是赋值运算符。
如x=y=z,由于“=”的右结合性,应先执行y=z,再执行x=(y=z)运算。
C语言运算符中有不少为右结合性,应注意区别,以避免理解错误。
计算顺序是从左至右
先计算a * a,
再依次向左计算
a * a == 9
3 - 9 == -6
-6 + -6 == -12
若运行以下程序时,从键盘输入 ADescriptor<回车> ,则下面程序的运行结果是
#include
int main()
{
char c;
int v0 = 0, v1 = 0, v2 = 0;
do
{
switch (c = getchar())
{
case'a':case'A':
case'e':case'E':
case'i':case'I':
case'o':case'O':
case'u':case'U':v1 += 1;
default:v0 += 1; v2 += 1;
}
} while (c != '\n');
printf("v0=%d,v1=%d,v2=%d\n", v0, v1, v2);
return 0;
}
v0=12,v1=4,v2=12
这道题容易做出v0=8,v1=4,V2=8这样的结果
但我们需要注意的是:case后面没有break的话,会一直执行下去
所以default一共执行了12次
如下函数是求两个int数字最大公约数的,指出其中存在的问题【多选】
int gcd(char x, char y)
{
int min = x < y ? x : y;
for (min = 0; min > 0; min--)
if (x% min = 0 && y % min = 0)
return min;
}
A: 参数类型不对
B: 循环变量min初值不对
C: 判断等于的符号不对
D: 返回类型不对
A、B、C
这就是一道简单的概念题
A:函数实参是int类型,形参用char,发生截断,数据丢失
B:min在for循环中,被初始化为0,与传入的参数已经无关了
C:if条件判断处,将判断相等符号==,写成赋值符号=
D:虽然这个函数不是在所有条件下都有返回值,但这里返回值类型没问题
下列 for 循环的次数为
for (int i = 0; i || i++ < 5;);
无限次
i先使用再增加,
使用:0<5,为真,值是1
增加:i增加为1,
判断条件:1||1,恒为真,死循环
在c语言中,一个函数不写返回值类型,默认的返回类型是
int
我第一次知道这个知识点
设函数 fun 和实参数组的说明是如下形式,则对函数的调用语句中,正确的是
void fun(char ch, float x[]);
float a[10];
A: fun(“asd” , a[]);
B: fun(‘x’ , A);
C: fun(‘68’ , 2.8);
D: fun(32 , a)
D
数组传参只传入数组名就可以了,
如C选项这种,传入的是float类型,与数组无关
在上下文及头文件均正常的情况下,下列代码的输出是( )(注: print 已经声明过)
int main()
{
char str[] = "Geneius";
print(str);
return 0;
}
print(char* s)
{
if (*s)
{
print(++s);
printf("%c", *s);
}
}
suiene
这段代码就是使用递归倒序打印字符串
但因为是++s,在回归时s指向的对象已经不是第一个字符了,所以打印不出G
在下面的字符数组定义中,哪一个有语法错误( )
A:char a[20]="abcdefg";
B: char a[]="x+y=5.";
C: char a[15];
D: char a[10]='5'
D
’5‘是字符常量,不能用于数组的初始化
下列定义数组的语句中正确的是【多选】( )
A:#define size 10
char str1[size], str2[size+2];
B:char str[];
C: int num['10'];
D:int n=5;
int a[n][n+2];
AC
这里对C和D做一下解释
C:
字符’0’,转换成十进制为48,所以C选项最终为
int num[48]
D:
注意:在C99之后支持使用变长数组
但这是特例,在此不做考虑
已知 i,j 都是整型变量,下列表达式中,与下标引用 X[i][j] 不等效的是【多选】()
A: *(X[i]+j)
B: *(X+i)[j]
C: *(X+i+j)
D: *(*(X+i)+j)
BC
A选项是 正确的,X[i]就是第i行的数组名,数组名表示首元素的地址,X[i]表示第i行的第一个元素的地址,+j后就是第i行下标为j的元素的地址,整体解引用就是X[i][j],A正确。
B选项因为[]的优先级高于*,所以代码相当于**((x+i)+j),X+i+j后就越界了,并不代表X[i][j],所以错误。
C选项也明显不对,X是二维数组的数组名,数组名相当于第一行的地址,X+i+j,跳过了i+j行,就越界了,C错误。
D选项是标准的指针形式访问二位数组的一个元素。
这篇文章到这里就结束了,我们下篇文章见~