总结
-运算符
权当熟悉一下写博客吧
-
已知 int x = 5,y = 5,z = 5; 执行语句 x%=y+z后,x的值是____。
解析:先进行加法运算(算术运算),再进行取余赋值运算。答案为5 -
以下程序的输出结果是____。
#include<stdio.h>
int main()
{
int a = 3 ,b = 3 ,c = 1;
c = 5 ? a++ : b--;
printf("%d\n",c);
return 0;
}
解析:(表达式)?(表达式):(表达式)的含义为先判断问号前的表达式的真假,若真则取冒号左边运算的结果,否则取右边运算的结果。未取的一边不进行运算。答案为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);
return 0;
}
解析:do-while语句先执行一次循环体,再根据while后的表达式判断是否继续执行循环体。先执行一次后b为9,a为2,此时b–不小于0,结束循环,b–使b为8。答案为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;
}
解析:括号内有多个由逗号分隔的表达式时,先从左至右计算每个表达式,再取最后一个表达式的值,先计算最内的括号。本题先计算x = 3 * y得x = 3,再算x + 1,使内括号的值为4,再计算x - 1得y = 2……以此类推知道不满足y < 10退出循环。答案为x=15,y=14
5. 以下程序的输出结果是____。
#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;
}
解析:先看一个a++与++a的实验
可以看出,a++与++b都使a、b的值加了1,但a++并没有立即改变a的值,++b则是立即改变b。
再看本题,x=y=10,i=0,循环体先直接输出x–与y,因为x–延时生效,所以输出“10,10”,然后x–才使x=9,接下来y = ++i
++i即时生效,使y=1,再判断此时x=9>8,继续循环,输出x–与y,同理x–延时生效,输出“9,1”,然后x–使x=8,接下来y = ++i,判断此时x=8不大于8,结束循环。由于输出没有换行与空格,所以答案为10,109,1
- 下面程序的运行结果是____。
#include<stdio.h>
int main()
{
int i ,sum;
for(i = 1;i < 5; i++)
{
sum += i;
}
printf("%d\n",sum);
return 0;
}
解析:从for(i = 1;i < 5; i++)很容易看出循环了四次,sum被加上了1,2,3,4,由于sum没有被赋初始值,所以答案应该为随机数或sum+10。
-
已知 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;
}
解析:再次输入时会覆盖之前的赋值。答案:abcdef
9. 已知A的ASCII码值是65,并有如下定义:
struct person
{
char name[10];
int age;
}classes[10] = {{"LiMing",29},{"HongGong",21},{"WangFang",22}};
下述表达式中,值为72的是____。
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.printf("%d",classes[0]->age + classes[1]->age + classes[2]->age)会报错
改成
这样就对了
B.classes[1].name[0]对应字母H,而不是H前面的那个双引号,H的ASCII码为72。
C.classes[1].name[5]对应字母o,o的ASCII码为111。
D.classes->name[5]等价于classes[0].name[5]
即字母g,g的ASCII码为103。
答案:B