1.要求把从1到1000的1000个数中找出能被21整除的所有数并依次把它存储在一个一维数组中并打印输出。
题目简单,提示 定义 int num;
num=1000/21;得到1到1000的1000个数中能被21整除的个数,也即要定义的一个一维数组大大小为num,存储1到1000的1000个数中能被21整除的所有数。
2. int n=2;
while(n>=0)
n=n-1;
printf("%d\n",n); 输出? 答案-1
3.char a[5]={1,2,3,4,5};
char *p1,*p2;
p1=a;
p2=p1;
printf("%d\n",*p1++);
printf("%d\n",*p2+1);
输出? 答案:
1
2
其实就是*p1++结果是取得*p1值p1再指向下一个元素地址,*p2+1先算p2+1,结果指向下一个元素地址,然后输出该值
4.int m=6;
if(m-->5) printf("%d\n",m);
else
printf("%d\n",m--);
输出?
解:if(m-->5)中先取m的值6来判断是否m>5,不管判断结果是真是假,接下来m就减1变成5了,所以输出5.
5.int x=1;
int y=1;
表达式(!x||y--)值是?
解答:开始不等于0,即是真,符号“!”是逻辑非运算,所以!x等于0,不管x是什么值,!x运算后是0;由于中间是或运算,所以编译器还得判断||右边的结果,由于y=1,所以判断y--为1,非0,所以结果输出1,然后y变为0.
6.int x,y,t;
x=y=3;
t=++x||++y;
则y的值是?
解答:由于t=++x||++y;中++x结果非0,即为真,而结果接下来是要和++y逻辑结果作或运算,因为左边为真了,编译器直接退出不再判断右边++y,即++y部分没得到执行,所以y结果仍然为原值3.
以上是本人面试中遇到的感觉需要注意的部分题。