a++和++a区别
1.执行下列程序段后,变量a,b,c的值分别是 ()
int x=10,y=9;
int a,b,c;
a=(--x==y++)?--x:++y;
b=x++;
c=y;
- A a=9,b=9,c=9
- B a=9,b=10,c=9
- C a=1,b=11,c=10
- D a=8,b=8,c=10
答案:D
解析:
a=(--x==y++)?--x:++y;
x = 10; x = 9 x = 8
----(--x==y++为真)------> -----(执行--x)-----> a = 8
y = 9; y = 10 y = 10
b = x++; 8
c = y; 10
错误原因:
不知道在同一个表达式内++a和a++依旧严格执行先后逻辑
++a ,a++与||运算的短路原则
2.以下程序的输出结果是( )。
main()
{
int a = 0,b = 0,c = 0;
if(++a>0||++b>0) ++c;
printf(“a = %d,b=%d,c=%d”,a,b,c);
}
- A a=1,b=1,c=1
- B a=0,b=0,c=0
- C a=1,b=0,c=1
- D a=1,b=1,c=0
答案:C
解析:
main()
{
int a = 0,b = 0,c = 0;
if(++a>0||++b>0) ++c; //-------> ++a = 1 ++b = 1 ++c = 1----->a = 1 b = 0 c = 1
printf(“a = %d,b=%d,c=%d”,a,b,c); // a = 1 b = 0 c = 1
}
错误原因:
忽略了||运算的短路原则(一旦第一个条件为真,将不再执行后面判断语句,直接进入后面代码)
指针、内存空间、字符串常量区
1.下面的程序运行结果为( )。
char *RetMenory(void)
{
char p[] = “hello world”;
return p;
}
void Test(void)
{
char *str = NULL;
str = RetMemory();
puts(str);
}
- A 语法有错误,不能编译
- B hello world
- C 结果不可预知
- D hello world+乱码
答案: C
解析:
char *RetMenory(void)
{
char p[] = “hello world”;
return p; //------------->返回一个指向字符数组p的指针
} //------------->函数调用结束,系统回收对应空间使用权
void Test(void)
{
char *str = NULL;
str = RetMemory();
puts(str); //-------------->打印对应空间的字符串内容,但此时相应空间的内容系统可能进行更改
}
错误原因:
对字符串数组、堆栈字符串常量区、指针概念理解不到位
函数
1.函数调用时,实参与形参的个数必须相同
- A T
- B F
答案:A
解析:无
错误原因:
对函数概念和场景应用不熟悉
1.在堆区创建一个结构体数组,数组名为student,成员包含姓名,学号,成绩(数据类型自己设定)。写一个程序,要求可以循环的从终端输入学生信息,当输入一行‘#’时表示完成输入。完成输入后自动打印出所输入的学生信息,打印结果按学生成绩从低到高打印。
1.在堆区创建一个结构体数组,数组名为student,成员包含姓名,学号,成绩(数据类型自己设定)。写一个程序,要求可以循环的从终端输入学生信息,当输入一行‘#’时表示完成输入。完成输入后自动打印出所输入的学生信息,打印结果按学生成绩从低到高打印。