1.以下程序的运行结果是()
#include <stdio.h>
int main() {
int sum, pad,pAd;
sum = pad = 5;
pAd = ++sum, pAd++, ++pad;
printf("%d\n",pAd);
}
答案为7
由于赋值运算符的优先级高于逗号表达式,因此pAd = ++sum, pAd++, ++pad;等价于(pAd = ++sum), pAd++, ++pad; sum 先自增然后赋值给 pAd,pAd 为 6,然后 pAd 自增变为 7。逗号表达式的结果为最后一个表达式的值,因此正确答案为 7。
2.哪一句会出错?
char* s="AAA"; //1
printf("%s",s); //2
s[0]='B'; //3
printf("%s",s); //4
第3句
初始化指针时所创建的字符串常量被定义为只读。如果试图通过指针修改这个字符串的值,程序就会出现未定义的行为。S[0]只可读,不可写
3.对于如下C语言函数:fun(5)的结果为()
int fun (int n) {
int x = 1, k;
if (n == 1) return x;
for(k = 1; k < n; ++k)
x = x + fun(k) * fun(n - k);
return x;
}
答案为51
4.以下程序的输出结果为
#include <stdio.h>
int func(int x, int y) { return (x + y); }
int main() {
int a = 1, b = 2, c = 3, d = 4, e = 5;
printf("%d\n", func((a + b, b + c, c + a), (d, e)));
return 0;
}
答案为9
逗号表达式是一组由逗号分隔的表达式,这些表达式是从左向右计算。逗号表达式的结果是其最后边表达式的值,如果最后边的操作数是左值,则逗号表达式的值也是左值。此类表达式通常用于for循环。