月考核纸质任务
资料
优先级:按位取反是位运算符中优先级最高的,然后是算术运算符,其次是<<、>>,然后是关系运算符,最后是&、^、|
题目一
已知 int x = 5, y = 5, z = 5; 执行语句x %= y + z后, x 的值为多少?
#include <stdio.h>
int main(){
int x = 5;
int y = 5;
int z = 5;
printf("%d\n", x%=y+z);
return 0;
}
由运算优先级应先算加法,故本题可简化为计算 5 % 10 = 5
故输出结果 x = 5 。
题目二
下面程序的运行结果是?
#include <stdio.h>
int main(){
int a = 3, b = 3, c = 1;
c = 5 ? a++: b--;
printf("%d\n", c);
return 0;
}
此题重点在于条件运算符,意为先判断问好前的条件是否成立,若成立则执行第一种情况,若不成立则执行第二种情况。 本题的判断条件为5,即为默认成立,执行 c = a++; 此等式可分解为 c = a; a++; 故 c = 3,最后输出结果为3 。
题目三
下面程序的运行结果是?
#include <stdio.h>
int main(){
int a = 1,b = 10;
do{
b -= a;
a++;
}while(b-- < 0);
printf("a = %d,b = %d\n",a,b);
}
if(b-- < 0) 可以理解为 先判断b是否小于0,在将b自减。 本题为while(b-- < 0);while循环后有一个分号,故直接跳出循环,再将b自减 于是可求出 a = 2 , b = 8 。
题目四
下面程序段运行的结果是?
#include <stdio.h>
int main(){
int x,y;
for(y = 1; y < 10;){
y=((x = 3 * y, x + 1), x - 1);
}
printf("x=%d, y=%d\n",x,y);
return 0;
}
逗号运算符的优先级最低,故先计算括号中的部分,算完后取括号中最后一项的值,若y 的值不大于或等于10就继续循环,直到y满足条件后输出。易得,x = 15 , y = 14 。
题目五
以下程序的输出结果是?
#include <stdio.h>
int main(){
int x = 10,y = 10,i;
for(i = 0; x > 8; y = ++i)
printf("%d,%d",x--,y);
return 0;
}
y = i++ 可转化为 y = i ; i++ ;
同理 printf("%d",x–); 可转化为 printf("%d",x); x–;
故本题易得 会进行两次循环
即输出两组结果 10,10 9,1 。
题目六
#include <stdio.h>
int main(){
int i,sum;
for(i = 1;i < 5; i++){
sum += i;
}
printf("%d\n",sum);
return 0;
}
因为本题没有给sum初始值,故随着电脑的不同,sum所给的随机初始值也会不同,故此题无法确定sum的值。
题目七
已知 char a[] = “Beijing”; 则数组a所占的存储空间是几个字节?
一个字母占一个字符,在数组的末尾还有一个’\0‘占一个字节,故共计8个字节。
题目八
当执行下面程序时,如果输入abc,则输出结果是?
#include <stdio.h>
#include <string.h>
int main(){
char str[10] = "12345";
gets(str);
strcat(str,"def");
printf("%s\n",str);
return 0;
}
gets获取的str数组为abc,故字符串数组被重置为abc,再与def通过 strcat 函数相连得 abcdef 。
题目九
已知A的ASCII码值是65,并有如下定义:
#include <stdio.h>
struct person{
char name[10];
int age;
}classes[10] = {{"LiMing",29},{"HongGang",21},{"WangFang",22}};
下列表达式中,值为72的是_B_
A、 classes[0]->age + classes[1]->age + classes[2]->age
B、 classes[1].name[0]
C、 classes[1].name[5]
D、 classes -> name[5]
-> 叫做指向结构体成员运算符,用于指向结构体中的某个成员,用于结构体指针。故A、D错。
B项中,classes[1].name[0]项为H,H的ASCII码为72,故B正确。
C项中,所对应的字母为G,ASCII码不为72,故C错误。
所以答案选B 。