总结-运算符

总结

-运算符

权当熟悉一下写博客吧

  1. 已知 int x = 5,y = 5,z = 5; 执行语句 x%=y+z后,x的值是____。
    解析:先进行加法运算(算术运算),再进行取余赋值运算。答案为5

  2. 以下程序的输出结果是____。

#include<stdio.h>
int main()
{
	int a = 3 ,b = 3 ,c = 1;
	c = 5 ? a++ : b--;
	printf("%d\n",c);
	return 0;
}

解析:(表达式)?(表达式):(表达式)的含义为先判断问号前的表达式的真假,若真则取冒号左边运算的结果,否则取右边运算的结果。未取的一边不进行运算。答案为3
在这里插入图片描述

  1. 下面程序的运行结果是____。
#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

  1. 下面程序的运行结果是____。
#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

  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。

  1. 已知 char a[] = “beijing”;,则数组a所占的存储空间是____个字节。
    解析:一个字符占一个字节,字符串末尾有一个’\0’也占一个字节。答案:8

  2. 当执行下面的程序时,如果输入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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值