牛客错题整理——C语言(实时更新)

1.以下程序的运行结果是()

#include  
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 
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循环。

你可能感兴趣的:(牛客刷题栏,c语言,算法,学习,程序人生)