计算机能力挑战赛--程序设计C语言--20年真题解析--超详细

选择题

1

关于联合体和结构体,以下描述错误的是()

联合体union的存放顺序是所有成员都从高地址开始存放的

联合体中可以定义多个成员,联合体的大小由最大的成员的大小决定。

可以使用匿名结构体来定义结构体变量

结构体变量可以用.运算符访问其成员

选A

联合体(union)是一种特殊的数据结构,允许在相同的内存位置存储不同的数据类型。在联合体中,所有成员共享同一块内存空间,即它们的地址是相同的

union UnionName {
    type1 member1;
    type2 member2;
    // ...
};

其中,UnionName 是联合体的名称,type1type2 等是成员的数据类型,member1member2 等是成员的名称。

在使用联合体时,只能同时存储一个成员的值。当赋值给一个成员时,其他成员的值会被覆盖。这是因为联合体的所有成员共享相同的内存位置。因此为了存放联合体中所有类型的数据,联合体的大小由最大的成员的大小决定

匿名结构体是指在定义结构体变量时,不给结构体起一个具体的名字

// 定义匿名结构体并创建结构体变量
struct {
    int x;
    int y;
} point;

可以用.访问成员, 结构体指针可以使用->访问

2

阅读以下程序:
int main(){
    int sum=0;
    enum n{a,b,c,d,e,f};
    enum n i;
    for(i=a;i<=f;i=(enum n)((int)i+1))
        sum+=(int)i;
    printf("%d",sum);
    return 0;
},对于该程序,以下描述错误的是()

d的值为3

程序运行之后,输出结果为15

语句"sum+=(int)i;"执行了5次

可以在枚举定义的花括号内显式地为枚举成员赋值

选C

enum 是一种用来定义一组命名整数常量的数据类型。这个题定义了一个枚举类型 n,包含了常量 abcdef

每个枚举常量都会被分配一个整数值,默认情况下从0开始递增。

a 的值为0,b 的值为1,依此类推,f 的值为5。

  for(i=a;i<=f.....可以认为 循环是从0-5的

((int)i+1)) 将i强制转换为int(因为上面有定义enum n i;) 

然后加1 强转为enum类型 再赋值给i 相当于i++, 但是enum n类型不是常量, 不能直接自增

sum再加上强转为int类型的i, 循环六次后

i = 0+1+2+3+4+5 = 15

3

关于结构体,以下描述正确的是()

结构体成员是全局变量

结构体指针变量可以用->运算符访问其成员

两个结构体变量之间不能直接用\'=\'相互赋值

结构体指针在声明时会自动为其分配结构体内存空间

选B

定义在哪里就是什么变量 定义在全局就是全局变量 定义在局部就是局部变量

B正确

两个结构体变量之间是可以直接用 = 相互赋值的

D错误。在C语言中,结构体指针在声明时并不会自动为其分配结构体内存空间。声明结构体指针只是为指针变量分配了内存空间来存储地址,但并没有分配结构体的实际内存空间。

这里提醒一下大家, 以后声明结构体指针 一定要记得初始化, 就算暂时没有指向的地址也要置为空指针NULL 不然成为野指针是很危险的

4

阅读以下程序:                                                                                                                                                               int fun(int n[],int Len){
 int Max=n[0];
 for(int i=1;i<Len;i++)
  if(Max<n[i])
   Max=n[i];
 return Max;
}
int main(){
 int n[]={1,2,3,4,5};
 printf("%d",fun(n,sizeof(n)/sizeof(int)));
 return 0;
}以下描述错误的是()

fun()函数的返回值类型是int

fun()函数的功能是求数组n中元素的最大值,并将其返回

输出结果为5

for循环中i++执行了5次

没啥好说的 选D

从1 到5 执行了四次,再i++判断 i就是5了,加了五次

5

以下描述正确的是()

C语言程序可以有多个main函数

函数可以嵌套定义

C语言源程序中,main函数可以在其它函数之后

C语言是计算机低级语言

选C 

只能有一个主函数

不可以嵌套定义

在C语言中,函数的定义通常是在全局作用域或者另一个函数的外部进行的,而不允许在另一个函数内部嵌套定义一个完整的函数。

C语言是计算机高级语言

6

以下关于C语言函数的描述,错误的是()。

每个C语言程序都至少有一个函数

函数可以嵌套定义

函数可以嵌套调用

函数可以没有返回值

选B

至少有main函数

可以嵌套调用

void函数就是没有返回值

7

阅读下面这个函数:
int fun(int a, int b) {
    return a>b ? a:b;
}
该函数的作用是()

返回两个数的最小值

返回两个数的最大值

判断两个数是否相等

返回a+b的值

返回两个数的最大值 选B

8

在调用函数时,若实参是数组名, 它与对应形参之间的数据传递方式是()

单向值传递

由实参传形参,再由形参传实参

地址传递

传递方式由用户指定

传递地址

以下两种传递相同 都是传数组名 数组名就是首元素地址

传的地址那么就是某type*类型

void f1(int a[]){
    
}

void f2(int* a){
    
}

9

对于语句char q=\'A\';char *p=&q;以下描述错误的是()

*p是指针

(int)q的值为65

p的内存单元中储存着q的内存单元的地址

字符\'A\'在内存中是以二进制形式存储

10

先不写了 明天就比赛了 链接我放出来 是计算机能力挑战赛官方公众号发的题

https://github.com/kismetfor/ComputerChallengeRace/blob/main/3/C%E8%AF%AD%E8%A8%80.xlsx

操作题

  • 22
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值