万字长文带你玩转2020全国大学生计算机技能应用大赛—C语言模考整理解析

本文前段可能让你索然无味,但是后劲大.

如有解释错误的地方,欢迎在评论区指正

1.判断下列常量不合法的是:
选项Value
A0128
B-45
C123.5e4
D’ \n ’

答案:A
(c语言常量中以0开头为8进制数,其中不可能出现8;)

浮点常量由整数部分、小数点、小数部分和指数部分组成。您可以使用小数形式或者指数形式来表示浮点常量。

  1. 小数形式中必须有整数部分和小数部分,或者两者同时存在
  2. 指数形式中必须有小数点和指数 e/E,或者两者同时存在

字符串常量要用双引号 “ ” 括起来

2. 以下标识符合法的是:
选项Value
Aif
Bvoid
C_3w
D2a

答案:C
标识符由数字、字母和下划线组成,且开头只能是字母或下划线。

3.以下变量初始化合法的是:
选项Value
Aint a=b;
Bint 0 == sum;
Cfloat x,y,z;
Dchar c; c=’ c ';

答案:D
其中A、C均未初始化,而B初始化错误;

4.有以下程序:
#include <stdio.h>
void fun(int *a,int *b)
{
	*a++;
	*b=*b-1;
}
void main()
{
	int c = 2,d = 3,*p = &c;
	fun(p,&d);
	printf("%d %d",c,d);
}
选项Value
A2,3
B2,2
C3,2
D3,3

答案:B
这个程序首先定义了两个整型常量 c、d 并分别赋值,还定义了一个指针p,指向c的内存地址;然后进入fun函数,在fun函数中对 p 指针的指向的内存地址做了自增运算,因为开始定义的int型,所以p指针的指向地址往后移4,且此时p指针不在指向c常量 则c的值不变;然后对b指针指向的d做减一操作后结束函数;因此最后输出的是(2,2)

5.当变量c的值不为2、4、6时,值也为“真”的表达式是( )。

在这里插入图片描述

答案为:B

c语言逻辑运算符中:&& 与运算符“一假为假,全真为真”;|| 或运算符“全假为假,一真为真”;
整题的意思是:可以找出一组c不是2、4、6的值让选项为真,
则当c的值为3、5、7时,A选项全为假,且为或运算,全式为假;
当c的值为7、8、9时,B选项(c>=2&&c<=6)为假,而(c=3)和(c!=5)为真,或运算全式为真;
当c的值为3、5、7时,C选项 (c>=2&&c<=6)为假,且(c%2)为1再取反为0,与运算全式为假;
当c的值为3、5、7时,D选项(c>=2&&c<=6)为假,且(c%2!=1)也为假,与运算全式为假;

6.以下叙述中错误的是( )。
选项Value
A在程序中凡是以“ # ”开始的语句行都是预处理命令行
B预处理命令行的最后不能以分号表示结束
C#define MAX 是合法的宏定义命令行
DC程序对预处理命令行的处理是在程序执行的过程中进行的

答案是:D
其中A选项比较模糊,因为如果是在注释中,那#define就失效了,就不能算是个预处理命令行
如下:

/*
	#define MAX
*/

B选项和C选项正确,D选项对预处理命令行的处理是在程序执行之前之前完成的(编译),不是程序执行的过程中,所以才称之为预处理。

7.变量a中的数据用二进制表示的形式是01011101,变量b中的数据用二进制表示的形式是11110000.若将a的高4位取反,低4位不变,所要执行的运算是( )。
选项value
Aa^b
Ba1b(此处1为竖直的一杠(或运算符),因markdown格式的限制在表格中打不出来)
Ca&b
Da<<4

答案:A
这道题涉及到c语言的 “位运算” ,因为在计算机内部(笼统的说)数值的储存都是以二进制的方式进行;而计算机对二进制数进行的一些运算就叫做位运算

下面列举位运算的一些类别;
在这里插入图片描述则对照位运算的运算规则,我们可以得到答案为A;

8.下面程序段的运行结果是( )。
char *s = "abcde";
s+=2;
printf("%d",s);
选项Value
Acde
B字符 ’ c ’
C字符 ’ c ’ 的地址
D无确定的输出结果

答案为:C

开始的时候 s 为一个指向’‘abcde’‘字符串的地址,也就是字符串首字母’a’的地址,然后s = s+2后,指针的位置往后移2位指向’c’,利用%d输出的话,为16位的字符’c’的地址

9.阅读下列程序,则执行后的结果为( )。
#include "stdio.h"
main(){
	int c[][4] = {1,2,3,4,5,6,7,34,213,56,62,3,23,12,34,56};
	printf("%x,%x\n",c[2][2],*(*(c+1)+1));
}

这道题在2020c语言模考的时候是显示缺失的,只有一部分,导致我一直看不懂这是什么意思,这里要吐槽一下官方,后来去查了一下找到了原题。(我的浏览器没问题,没任何缩放。)
在这里插入图片描述

答案为:A

首先,prinf("%x,%x\n")中用的小写的x,表示用16进制输出数,并且格式为小写的abcdef,排除D,然后要注意的一点就是,二维数组数组名代表数组的首地址,既(c+1)代表二维数组的第1行(从0行开始计数),(c+1)+1就是第一行的第一个数,所以是6

10.C语言结构体类型变量在程序运行期间( )。
选项Value
ATC环境在内存中仅仅开辟一个存放结构体变量地址的单元
B所有的成员一直驻留在内存中
C只有最开始的成员驻留在内存中
D部分成员驻留在内存中

答案为:B

*结构类型变量与其他基础类型变量一样,在某个代码块内,只要这个变量存在,那么其内部所有成员都存在。
而在TC环境中,定义结构体变量后,编译为其分配一批连续的单元存放各成员值。 *

TC环境度娘介绍:
在这里插入图片描述
而在TC和VC环境下,内存分配的差异可以看这篇博文;

TC和VC环境下,结构体内存分配差异

简单来说就是在TC环境下,任何类型的指针内存都为2,而在VC环境中内存有对齐机制,总内存大小与结构体内变量的排序有关。

11.设有定义语句 int (*f)(int);则以下叙述正确的是( )。
选项Value
Af是基类型为 int 的指针变量
Bf是指向函数的指针变量,该函数具有一个int类型的形参
Cf是指向int类型一维数组的指针变量
Df是函数名,该函数的返回值是基类型为int类型的地址

答案为:B

这里要辨析清楚
int *f() : 表示函数的功能是: 返回一个地址
int (*f)() : 表示 这是一个函数的指针.它要指向一个函数才能有用.指向一个函数之后道可以用它来代替该函数.之后使用这个指针相当于使用该函数.

12.在16位IBM-PC机上使用C语言,若有如下定义,则结构变量b占用内存的字节数为( )。
struct data
{
	int i;
	char ch;
	double f;
}b;
选项Value
A1
B2
C7
D11

答案为:C

因为在16位PC机上,int类型占2字节,char占1字节,double类型占4字节,三者相加为7

13.设有如下程序段,则执行p=s;语句后,以下叙述正确的是( )。
char s[20]="Beijing", *p;
p = s;
选项Value
A可以用*p表示s[0]
Bs数组中元素的个数和p所指字符串长度相等
Cs和p都是指针变量
D数组s中的内容和指针变量p中的内容相同

答案为:A

B:s数组元素的个数为7,而p所指字符串长度为20;
C:s是一维数组,p是指针变量
D:应改为数组s中的内容和指针变量p所指数组的内容相同,因为单单说指针p的内容只为16进制的地址

————————————————————————————————————————————————————

以下为多选题(紧张又刺激)

14.以下可以定义为用户标识符的有:

为什么又要说这个很捞的问题呢,因为对于新手来说,有时候就是容易错啊:)

选项Value
Ascanf
Bshort
C_3com
Dint

答案为:A,C

有人就会问了,scanf怎么可以是标识符呢,我每天老见它,一天好几次了,这么熟还可以是标识符!!???

啊~骚年对的,它可以是标识符,不信你看看c语言的关键字里面有没有它
在这里插入图片描述没有吧~,其实scanf只是你经常使用的函数,并不是关键字,因此可以使用它来当关键字,但是在日常的编程实践中还是不要使用的好哇

15.以下选项中不是c语言合法整数的是( )
选项Value
A10110
B0238
C0Xffa
Dx2a2

答案为:B,D

B:以0开头为8进制数,式子不能有8出现;
D:x2a2为16进制,但开头没有0x的标识

16.以下叙述错误的是( )
选项Value
Ac语言函数可以嵌套使用,如fun(fun(x))
Bc语言程序是由过程和函数组成的
Cc语言函数不可以单独编译
Dc语言中除了main函数,其他函数不可以作为单独文件形式存在

答案为:BCD

B:C语言程序中没有过程的概念,C语言执行的基本单位是函数,一个程序可以有多个函数,但main(),有且只能有一个,各函数之间是平行关系,不允许嵌套定义但可以嵌套调用.
C:可以单独编译,例如库函数就是把函数放到库里,把一些常用到的函数编译完放到一个文件里,供不同的人进行调用。
D:c语言中函数与文件没有直接关系,因此任何函数都可以作为单独文件形式存在。将main函数作为单独文件只是因为程序简单等原因没有特意给主文件命名

17.以下4个选项中,可以看作是一条语句的有( )
选项Value
A{ ; }
Ba=0,b=0,c=0;
Cif(a>0);
Dif(b==0) m =1;n=2;

答案为:ABC

A为复合语句,在程序中将复合语句看为一条语句,其中D有两条语句,不骜述

18.对Do-while语句描述正确的是( )
选项Value
Ado-while 语句构成的循环可以使用 break 语句退出循环
Bdo-while 语句构成的循环必须使用 break 语句退出循环
Cdo-while 语句构成的循环 , 当 while 中的表达式值为非零时结束循环
Ddo-while 语句构成的循环 , 当 while 中的表达式值为零时结束循环

答案为:AD

B:do-while语句构成的循环也可以在当不满足while条件后退出
C:应该是while表达式值为0(假)时结束循环

19.有定义语句:int x,y; 若要通过scanf("%d,%d",&x,&y); 语句使变量x得到数组11,变量y得到12,下列四组输入正确的是( )
选项Value
A11 12< 回车 >
B11,< 空格 >12<回车 >
C11,12< 回车 >
D11,< 回车 > 12< 回车 >

答案为:BCD

c语言中scanf函数不读入键盘输入的空格,且"%d,%d"两个%d用逗号隔开,因此我们在键盘上输入时也要与其保持一致,输入逗号

20.以下对switch语句和break语句中有描述错误的有( )
选项Value
A在 switch 语句中必须使用 break 语句
Bbreak 语句只能用于 switch 语句
C在 switch 语句中 , 可以根据需要使用或不使用 break 语句
Dbreak 语句是 switch 语句的一部分

答案为:ABD

A:在switch中break也不是必须使用的,break只是跳出这个循环或switch。如果你不用break的话,那么在执行完目标后,继续执行下面的case。不过一般来说,break都要使用的。B、D错误不多BB了

21.已知:int x=1,y=2,z=3;则值不为0的表达式是( )
选项Value
Ax<=y
Bx&&y

在这里插入图片描述
在这里插入图片描述
为什么要放图片???,因为markdown表格里面 “| |” 打不出来,如果有大神会请教教我:)

答案为:ABD

此例我只讲一下CD两种情况,首先来一波速记C语言运算优先级
在这里插入图片描述

这个口诀可以记一下~ 当然其中还有一些细节需要你自己去查一下

!((x<y)&&!z||1) :首先()的优先级最高,则(x<y)为1 ;然后!的优先级第二,对z取反为0,再是&&,1&&0为0,接着为0||1为1,最后!1为0,结束;我简直是用完了我这辈子会的全部连接词

然后还有一点就是D里面的y-z为-1,在c语言中-1也为真,只有0才是假

22.一下描述正确的是( )
选项Value
A调用函数时 , 实参可以是表达式
B调用函数时 , 实参与形参可以共用内存单元
C调用函数时 , 将为形参分配内存单元
D调用函数时 , 实参与形参的类型必须一致

答案为:ACD

这波啊,我们直接解释B

函数在调用参数时,如果实参是表达式,则表达式的结果传入形参。形参和实参之间进行数据的拷贝,当然需要为形参临时分配内存单元,函数调用完成之后,形参分配的单元被系统收回。

23.已知int a =2;则正确的赋值表达式是
选项Value
Aa+=a-=(a=3)
Ba=int(-2.3)
Ca=a*3=2
Da%3

答案为:AB

C中a*2不能做左值,D中只是a对3进行取余,而没有赋值操作

24.下列对c语言逻辑运算符两侧的运算对象的数据类型描述不正确的是( )

此题存在争议性

选项Value
A只能是 0 或 1
B只能是 0 或非 0 正数
C可以是整型或字符型数据
D可以是任何类型的数据

答案是:ABD

首先排除AB,然后对于C和D网上有不同的说法,所以要骚年你自己掂量掂量啊~

在这里插入图片描述

—————————————————————————————————————————————————
下面是判断题~

25.(double)a乘以2是把a乘以2的结果强制转换为双精度浮点型。( )

答案:错误

应该解释为是将a先强制转换为双精度浮点型,然后再进行a乘以2的运算;如果按照题目来说应该是(double)(a*2)

26.结构体中的成员不可以与结构体变量同名。( )

答案:错误

这道题咱也不知道怎么解释,记着就好

27.变量的存储类型指出了变量的作用域和寿命。( )

答案:正确

按照变量的作用域(即从空间)角度分:可以分为全局变量和局部变量。

按照变量的生存期(即从时间)角度分:可以分为静态存储方式和动态存储方式。静态存储方式:是指在程序运行期间分配固定的存储空间的方式。动态存储方式:是在程序运行期间根据按需分配进行动态的分配存储空间方式。

用户存储空间可以分为程序区、静态存储区、动态存储区。全局变量全部存放在静态存储区,在程序开始执行时给全局变量分配存储区,程序运行完毕就释放。程序执行时它们占据固定的内存单元,而不动态分配和释放。

在这里插入图片描述

28. 自动类型变量可以定义在函数体外,这时应加说明符auto。( )

答案:错误

首先auto为函数内用于声明变量是自动类型的变量的关键字
用extern声明外部变量,目的是可以在其它的文件中调用

在本文中详细解释了extern的使用

29.使用sizeof运算符可以求得某种类型和某个变量在内存中占的字节数,不能求得某个表达式的类型在内存中所占的字节数。( )

答案:错误

我觉得下面这篇博文比我要讲的好

详解sizeof运算符

30.在引用结构体类型的变量时,如果成员本身又是一个结构体类型,则可以再次使用取成员符“ . ”,这样一级一级找到最低的一级的成员( )

详解结构体

答案:正确

如下示范

struct Birthday{                //声明结构体 Birthday
    int year;
    int month;
    int day;
};
struct Student{                 //声明结构体 Student
    char name[20];              
    int num;                    
    float score;                 
    struct Birthday birthday;   //生日
}stu1;

则使用stu1.birthday.year 访问出生的年份。

  • 26
    点赞
  • 116
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值