第一周任务总结(纸质题目)

月考核纸质题目总结

首先了解一下c语言中运算符的优先级(图片源自百度百科)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第一题

已知int x = 5,y = 5,z = 5;执行语句x%=y+z后,x的值是__5__

题解:因为%=的优先级低于+,所有先执行y+z的指令,值为10,然后计算x%=10,%=的意思为先取模之后将值赋给左边变量,x%=10相同与x=x%10,先计算%(取余)x=5%10,x=5。


第二题
以下程序的输出结果是__3__

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

题解:c = 5 ? a++: b–;中?:是条件运算符,条件运算符的优先级低于自增(++)和自减(–)

条件运算符的作用是如果条件为真,执行:之前的语句,如果条件为假,执行:之后的语句

自增和自减两个运算符的作用都是将变量i的值加1(减1),但两个运算符有前置和后置之分,两者的区别在于,算术表达式本身的值不同,算术表达式++i(–i)的值为变量i加1(减1)之后的值,而算数表达式i++(i–)的值为变量i加1(减1)之前的值。
简而言之,i++(i–)是执行完指令之后再自增(减),但++i(–i)是先自增(减)再执行指令

所以此题先判断语句c=5的真假,此语句为真,所以执行a++,先输出a的值,再对a的值加1


第三题
下面程序的运行结果是__a=2,b=8__

#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);
} 

题解:do-while语句的功能是先无条件执行循环体,然后判断条件表达式是否成立,如果成立,再执行循环体语句,如果不成立,退出循环
在此题中,先进入循环执行b-=a,b-=a等同于b=b-a=10-1=9,然后执行a++
第一次循环结束,此时b=9;a=2,
判断条件表达式b–<0,–先于<,但–为后置,所以先与0比较,b>0,不满足条件,退出循环,同时,b-1=8
输出结果,a=2,b=8


第四题
下面程序段运行的结果是____x=15,y=14____

#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=1,y<10,满足条件,进行第一次循环,y=( (x=3 , 4 ) , 2 ),x+1和x-1中,只计算结果,不会对x的值有影响,然后将最右表达式的值2赋给y
第一次循环结束,结果为x=3,y=2
y=2,y<10,满足条件,进行第二次循环,y=( (x=6 , 7 ) ,5 ),第二次循环结束,结果为x=6,y=5;
y=5,y<10,满足条件,进行第三次循环,y=( (x=15, 16 ), 14 ),第三次循环结束,结果为x=15,y=14。
y=14,y>10,不满足条件,退出循环,输出结果x=15,y=14


第五题
以下程序的输出结果是__10,10 __ 9,1__

#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;
}

题解:x–,先输出x,再对其–
x=10>8,进入第一次循环,输出x=10,y=10,之后赋值i=1,y=1,x=9
x=9>8,进入第二次循环,输出x=9,y=1,之后赋值x=8,i=2,y=2
x=8,不满足条件,退出循环


第六题
下面程序的运行结果是_11__

#include <stdio.h>
int main()
{
	int i,sum;
 	for(i = 1;i < 5; i++)
 	{
  		sum += i;
 	}
 	printf("%d\n",sum);
	return 0;
}

题解:i=1<5,执行一次循环,sum=sum+i=(sum没有赋初值,此时应该为一个随机数,在DEVC++中,sum初值被赋成了1)=1+1=2;
i=2<5,执行第二次循环,sum=sum+i=2+2=4;
i=3<5,执行第三次循环,sum=sum+i=4+3=7;
i=4<5,执行第四次循环,sum=sum+i=7+4=11.


第七题
已知char a[]=“Beijing”;,则数组a所占的储存空间是__8__个字节
题解:因为Beijing共有7个字符,占7个字节,但字符串中还有一个串结束符"\0",所以共计有8个字符,所占的储存空间是8个字节

下图为常见的字符类型占用字节数

类型占用字节数
char1
int4
short [int]2
long [int]4
long long [int]8
float4
double8

第八题
当执行下面程序时,如果输入abc,则输出结果是_____

#include <stdio.h>
#include <string.h>
int main()
{
	char str[10] = "12345";
	gets(str);
 	strcat(str,"def");
 	printf("%s\n",str);
 	return 0;
}

题解:首先程序对str字符串进行初始化为12345,但在语句gets(str)中,新输入了abc将原来初始化的值进行了覆盖,使str里存进了abc,strcat是字符串处理函数中的一条,作用是将字符串str2连接到字符数组str1的后面,并返回str1,(将def连接到abc的后面,并返回到str中,使得str[10]中的值为abcdef),最终输出字符串str为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错误,
(指针变量名).成员名 可以写成 指针变量名->成员名 相同于 结构体变量.成员名
A项中正确格式应为指针变量名->成员名,错误
附加:若想输出第二个成员的年龄,应该将classes[1]->age改为(classes+1)->age,
classes[0]->age和classes[2]->age同理
B项中表示结构体中第二个成员的name中的第一个字符(H)的ASCII码,为72,正确
C项中表示结构体中第二个成员的name的第六个字符(a)的ASCII码,为97,错误
D项中表示结构体中第一个成员的name的第六个字符(g)的ASCII码,为103,错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值