C语言练习5(巩固提升)

C语言练习5

    • 选择题

选择题

1,下面代码的结果是:( )

#include <stdio.h>
#include <string.h>
int main()
{
    char arr[] = { 'b', 'i', 't' };
    printf("%d\n", strlen(arr));
    return 0;
}

A.3
B.4
C.随机值
D.5
💯答案解析:

😸正确答案:C
strlen是用来获取字符串的有效长度的,结尾标记’\0’不包含在内。
strlen获取的规则非常简单:从前往后依次检测,直到遇到’\0’是就终止检测。
而上题中arr是一个字符数组,不是一个有效的字符串,因为后面没有放置’\0’,因此strlen在求解时,将有效字符检测完之后,还会继续向后检测,直到遇到’\0’是才终止,因此答案为不确定,就看紧跟在’t’之后的第一个’\0’在什么位置。因此:答案选C
在这里插入图片描述

2,下面代码输出的结果是:( )

#include <stdio.h>
int num = 10;
int main()
{
    int num = 1;
    printf("num = %d\n", num);
	return 0;	
}

A. 程序有问题,不能编译
B.输出1
C.输出10
D.输出0
💯答案解析:

😸正确答案:B
本题主要考察变量的访问规则,C语言中:

  1. 不允许在同一个作用域中定义多个相同名称的变量比如:在一个班级中存在两个名字相同的学生王帅,当老师点王帅回答问题时,那个回答就冲突了
  2. 允许在不同的作用域中定义多个相同名称的变量比如:两个班级中各有一个王帅,老师在A班中点王帅回答问题,不会有任何歧义
  3. 不同作用域中定义的变量,在访问时采用就近原则。比如:你们村有一个小伙伴名字叫刘德华,那你在你们村喊刘德华时,你们村的刘德华就会跑过来响应你,而我们世界级别人见人爱的天王他不会理你,因为距离远听不见,但是两个刘德华可以同时存在这个 世界上,只要不在一个村,就不会冲突。
    根据以上描述可知,对于以上代码: 1. 全局作用域中的num和main中的num可以同时存在,不会冲突,因为不是同一个作用域2. 在main函数中访问num时,采用就近原则,因此访问的是main中的num,相当于将全局作用域中的num屏蔽了
    A:错误:因为两个num不在同一个作用域中,可以通过编译
    B:正确,main中访问的是main中的num,而main函数中的num是1,因此打印1
    C:错误,应该访问main函数中的num,而不是全局作用域中的num
    D:错误,凑选择的
    在这里插入图片描述

3,关于C语言关键字说法正确的是:( )
A.关键字可以自己创建
B.关键字不能自己创建
C.关键字可以做变量名
D.typedef不是关键字
💯答案解析:

😸正确答案:B
C语言关键字:C语言定义的,具有特定含义、专门用于特殊用途的C语言标识符,也称为保留字 A:错误,关键字是语言自身定义的 B:正确 C:错误,关键字具有特殊含义,不能作为变量名 D:错误,typedef是用来给类型取别名的关键字 因此,选择B

4,关于static说法不正确的是:( )
A.static可以修饰局部变量
B.static可以修全局变量
C.static修饰的变量不能改变
D.static可以修饰函数
💯答案解析:

😸正确答案:C
本题主要考察static的特性

  1. static修饰变量
    a. 函数中局部变量:声明周期延长:该变量不随函数结束而结束
    初始化:只在第一次调用该函数时进行初始化
    记忆性:后序调用时,该变量使用前一次函数调用完成之后保存的值
    存储位置:不会存储在栈上,放在数据段
    b. 全局变量:改变该变量的链接属性,让该变量具有文件作用域,即只能在当前文件中使用
    c. 修饰变量时没有被初始化时会被自动初始化为0
  2. static修饰函数
    改变该函数的链接属性,让该函数具有文件作用域,即只能在当前文件中使用
    A:正确,原因参考上述注解 B:正确,原因参考上述注解 C:错误,const修饰的变量不能改变 D:正确,原因参考上述注解 因此:选择C

5,下面代码执行的结果是:( )

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

A.1 2 3 4 5 6 7 8 9 10
B.5 5 5 5 5 5 5 5 5 5
C.死循环的打印5
D.0 1 2 3 4 5 6 7 8 9
💯答案解析:

😸正确答案:
答案解析:C
上述代码本来的想法应该是:循环10次,每次循环时如果i == 5则打印i的结果。但if语句中表达式的==写成了赋值,相当于每次循环尽量都是将i的值设置成了5,5为真,因此每次都会打印5。i每次修改成5打印后,i的值永远不会等于10,因此造成死循环 故:死循环的打印5。因此:选择C
在这里插入图片描述

6,switch( c )语句中,c不可以是什么类型( )
A.int
B.long
C.char
D.float
💯答案解析:

😸正确答案:D
switch语句中表达式的类型只能是:整形和枚举类型 。D选项为浮点类型,不是整形和枚举类型

7,关于while(条件表达式) 循环体,以下叙述正确的是( )? (假设循环体里面没有break,continue,return,goto等等语句)
A.循环体的执行次数总是比条件表达式的执行次数多一次
B.条件表达式的执行次数总是比循环体的执行次数多一次
C.条件表达式的执行次数与循环体的执行次数一样
D.条件表达式的执行次数与循环体的执行次数无关
💯答案解析:

😸正确答案:B
while循环中,当条件表达式成立时,才会执行循环体中语句,每次执行期间,都会对循环因子进行修改(否则就成为死循环),修改完成后如果while条件表达式成立,继续循环,如果不成立,循环结束 故:while循环条件将会比循环体多执行一次。因此:选择B

8,能把函数处理结果的二个数据返回给主调函数,在下面的方法中不正确的是:( )
A.return 这二个数
B.形参用数组
C.形参用二个指针
D.用二个全局变量
💯答案解析:

😸正确答案:A
A:错误,一个函数只能返回一个结果 B:正确,将形参存在数组中,修改数组中内容,可以通过数组将修改结果带出去C:正确,形参如果用指针,最终指向的是外部的实参,在函数中对指向指向内容进行修改,改变的就是外部的实参 D:正确,全局变量不受函数的结束而结束,在函数中改变全局变量,主调函数中可以看到改变之后的结果

9,于函数调用说法不正确的是:()
A.函数可以传值调用,传值调用的时候形参是实参的一份临时拷贝
B.函数可以传址调用,传址调用的时候,可以通过形参操作实参
C.函数可以嵌套定义,但是不能嵌套调用
D.函数可以嵌套调用,但是不能嵌套定义
💯答案解析:

😸正确答案:C
A:正确,形参按照值的方式传递,将来形参就是实参的一份临时拷贝,修改形参不会影响外部的实参 B:正确,形参按照指针方式传递,将来形参就是实参地址的一份拷贝,形参指向的是实参,修改形参指针指向的内容, 就是在操作实参 C:错误,C语言中,函数不能嵌套定义 D:正确,函数可以嵌套调用,即:A()中调用B(),B()中调用A(),但是要控制好,否则就成为无限递归 。因此,选择C

10,关于以下说法描述正确的是:( )
A.函数的实参只能是变量
B.形参是在函数调用的时候才实例化,才开辟内存空间
C.函数设计应该追求高内聚低耦合
D.有了库函数就不需要自定函数了
💯答案解析:

😸正确答案:C
A:错误,函数的实参可能是变量,也可能是常量,也可能是宏,也可能是指针等等 B:正确,函数没有调用时,形参没有空间 C:正确,高内聚低耦合即:函数体内部实现修改了,尽量不要对外部产生影响,否则:代码不方便维护 D:错误,库函数是语言设计者为了让用户能够更好的使用,而给出的,但并不能解决用户的所有问题,因此其他问题还需要用户自己写方法解决

11,以下叙述中不正确的是:( )
A.在不同的函数中可以使用相同名字的变量
B.函数中的形式参数是在栈中保存
C.在一个函数内定义的变量只在本函数范围内有效
D.在一个函数内复合语句中定义的变量在本函数范围内有效(复合语句指函数中的成对括号构成的代码)
💯答案解析:

😸正确答案:D
A:正确 不同的函数属于不同的作用域,因此不同的函数中定义相同名字的变量不会冲突 B:正确 在C语言中,函数的形参一般都是通过参数压栈的方式传递的 C:正确 在函数内定义的变量,称为局部变量,局部变量只能在其定义的函数中使用 D:错误 复合语句中定义的变量只能在复合语句中使用 因此:选择D

12,C语言规定,在一个源程序中,main函数的位置( )
A.必须在最开始
B.必须在库函数的后面
C.可以任意
D.必须在最后
💯答案解析:

😸正确答案:C
main函数的位置可以在任意位置,但是如果在主函数之中调用了哪些函数,必须在main函数前对其所调用函数进行生命或包含其被调用函数的头文件。 因此:选择C

13,在上下文和头文件均正常情况下,以下程序的输出结果是()

int x = 1;
do
{
	printf("%2d\n", x++);
} while (x--);

A. 1
B. 无任何输出
C. 2
D. 陷入死循环
💯答案解析:

😸正确答案:D
前置++:先加1后使用
后置++:先使用后加1
(- -同理)
x++先使用后加一,打印出1,x变2。x–先使用2为真,x变1进入循环。所以陷入死循环打印1

14,以下 C 程序的输出结果是()

#include <stdio.h>
#include <stdlib.h>
int a = 1;
void test()
{
	int a = 2;
	a += 1;
}
int main()
{
	test();
	printf("%d\n", a);
	return 0;
}

A.1
B. 2
C. 3
D. 4
💯答案解析:

😸正确答案:A
如果函数内部的全局变量和局部变量同名,那么在函数内部局部变量会屏蔽全局变量,使用局部变量,因此本题中全局变量会被tset()中的局部变量屏蔽,对a的修改不会对全局变量a带来任何影响,所以全局变量的值保持为1.
在这里插入图片描述

15,假定 x 和 y 为 double 型,则执行 x=2; y=x+3/2; 后y的值为()
A. 3.500000
B. 3
C. 2.000000
D. 3.000000
💯答案解析:

😸正确答案:D
3/2 == 1 ,x+3/2 == 3,double类型3.000000

16,选择表达式 11|10 的结果(本题数值均为十进制)()
A. 11
B. 10
C. 8
D. 2

💯答案解析:

😸正确答案:A

    1011//11
    1010//10
	1011//11

17,以下能对二维数组a进行正确初始化的语句是:( )
A.int a[2][]={{0,1,2},{3,4,5}};
B.int a[][3]={{0,1,2},{3,4,5}};
C.int a[2][4]={{0,1,2},{3,4},{5}};
D.int a[][3]={{0,2},{},{3,4,5}};
💯答案解析:

😸正确答案:B
对于二维数组int array[M][N], 说明如下:

  1. M和N都必须为常数,
  2. M代表数组有M行,N代表每行中有N个元素
  3. 其中M可以省略,省略后必须给出初始化表达式,编译器从初始化结果中推断数组有多少行
  4. N一定不能省略,因为N省略了就不能确定一行有多少个元素,也不能确定数组有多少行
    A:错误,参数上述说明 B:正确,参考上述说明 C:错误,数组有两行,但是初始化给了三行 D:错误,初始化不允许{0,2}该种情况存在 。因此,选择B

18,给出以下定义:

char acX[] = "abcdefg";
char acY[] = { 'a','b','c','d','e','f','g'};

以下说法正确的是( )
A.数组acX和数组acY等价
B.数组acX和数组acY的长度相同
C.sizeof(acX)>sizeof (acY)
D.strlen (acX)>strlen (acY)
💯答案解析:

😸正确答案:C
acX和acY都是字符数组,但是初始化表达式不同,acX和acY的区别如下:
acX:数组中总共有8个元素,分别是:‘a’,‘b’,‘c’,‘d’,‘e’,‘f’,‘g’,‘\0’
acY:数组中总共有7个元素,分别是:‘a’,‘b’,‘c’,‘d’,‘e’,‘f’,‘g’
sizeof这里求的是数组大小,数组大小等于有效元素个数*每个元素的大小。sizeof(acX) = 8,sizeof(acY) = 7
strlen求的是字符串长度,从首元素开始计算,遇见‘\0’停止,由于acY数组没有’\0‘,所以strlen(acY)的结果是个随机值。 因此,选择C

19,下面代码的结果是:( )

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

A.10
B.12
C.9
D.程序错误
💯答案解析:

😸正确答案:D
表达式(++i)+(++i)+(++i),只有操作符的优先级和结合性,没法确定唯一计算路径
所以这个表达式可能因为计算顺序的差异导致结果是不一致的,所以表达式是错误的表达式。
可以在VS和Linux gcc测试,结果可能有差异。

20,下面代码的结果是:

#include <stdio.h>
int i;
int main()
{
    i--;
    if (i > sizeof(i))
    {
        printf(">\n");
    }
    else
    {
        printf("<\n");
    }
    return 0; 
}

A.>
B.<
C.不输出
D.程序有问题
💯答案解析:

😸正确答案:A
C语言中,0为假,非0即为真。
全局变量,没有给初始值时,编译其会默认将其初始化为0。i的初始值为0,i–结果-1,i为整形,sizeof(i)求i类型大小是4,按照此分析来看,结果应该选择B,但是sizeof的返回值类型实际为无符号整形,因此编译器会自动将左侧i自动转换为无符号整形的数据,-1对应的无符号整形是一个非常大的数字,超过4或者8,故实际应该选择A
这道题其实很隐蔽,真是虾仁猪心!!!

💘后期会推出更多C语言练习题,希望大家与我共同进步,早日成为大佬!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/92174.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python3/pip3 SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed

环境&#xff1a; mac os 背景&#xff1a; 电脑之前安装的是python3.9 &#xff0c; 现在升级到python3.10。 从python官网下载macos版本的python3.10 pkg。 双击安装。 程序使用aiohttp访问ebay 。 出错&#xff1a; aiohttp.client_exceptions.ClientConnectorCertifi…

SpringBoot入门篇2 - 配置文件格式、多环境开发、配置文件分类

目录 1.配置文件格式&#xff08;3种&#xff09; 例&#xff1a;修改服务器端口。&#xff08;3种&#xff09; src/main/resources/application.properties server.port80 src/main/resources/application.yml&#xff08;主要用这种&#xff09; server:port: 80 src/m…

STTran: Spatial-Temporal Transformer for Dynamic Scene Graph Generation

文章目录 0 Abstract1 Introduction2 Related Work3 Method3.1 Transformer3.2 Relationship Representation3.3 Spatio-Temporal Transformer3.3.1 Spatial Encoder3.3.2 Frame Encoding3.3.3 Temporal Decoder 3.4 Loss Function3.5 Graph Generation Strategies 4 Experimen…

C++的静态栈以及有点鸡肋的array数组

目录 1.静态栈 1.举例展示 2.注意事项 2.array 1.静态栈 1.举例展示 1.我们想到栈&#xff0c;就会想到是一个数组来维护它的&#xff0c;并且一般由于不知道存储的多少内容&#xff0c;所以一般都是用动态数组不断的在堆上开辟新的空间。 但是C支持了一个新的语法就是静…

2. 两数相加(中等系列)

给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这两个数都不会以 0 …

芯讯通SIMCOM A7680C (4G Cat.1)AT指令测试 TCP通信过程

A7680C TCP通信 1、文档准备 去SIMCOM官网找到A7680C的AT指令集 AT指令官网 进入官网有这么多AT指令文件&#xff0c;只需要找到你需要用到的&#xff0c;这里我们用到了HTTP和TCP的&#xff0c;所以下载这两个即可。 2、串口助手 任意准备一个串口助手即可 这里我使用的是XC…

浏览器的事件循环

其实在我们电脑的操作系统中&#xff0c;每一个运行的程序都会由自己的进程&#xff08;可能是一个&#xff0c;也可能有多个&#xff09;&#xff0c;浏览器就是一个程序&#xff0c;它的运行在操作系统中&#xff0c;拥有一组自己的进程&#xff08;主进程&#xff0c;渲染进…

【springboot】Spring Cache缓存:

文章目录 一、导入Maven依赖&#xff1a;二、实现思路&#xff1a;三、代码开发&#xff1a; 一、导入Maven依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId><…

Nacos集群

需要与Nginx配合。 这是使用三个Nacos来搭建集群。 创建mysql数据库nacos。 配置Nacos 进入nacos的conf目录&#xff0c;修改配置文件cluster.conf.example&#xff0c;重命名为cluster.conf。 在cluster.conf文件的最后加上&#xff1a; #it is ip #example 127.0.0.1:8…

postman接口参数化设置

为什么需要参数化&#xff1f; 我们在做接口测试的过程中&#xff0c;会遇到需要测试同一个接口使用不同的数据的情况&#xff0c;如果每次去一个个填写数据就太麻烦了&#xff0c;这时我们就需要用到接口参数化&#xff0c;我们把数据单独的存放在一个文件中管理&#xff0c;…

[好书推荐] 之 <趣化计算机底层技术>

趣化计算机底层技术 底层技术优势购买 底层技术 相信很多老铁跟我一样, 在深入了解底层技术的时候 — — 就很头大 很多书籍看上去跟一个 老学究 一样, 说的话不是我们这些小白看的懂得… 看不懂就会 打击我们的自信心我们就有可能找一堆理由去玩(理所应当地去玩的那一种, 反…

Redis使用

环境配置 代码实现 Java public CoursePublish getCoursePublishCache(Long courseId){//查询缓存Object jsonObj redisTemplate.opsForValue().get("course:" courseId);if(jsonObj!null){String jsonString jsonObj.toString();System.out.println("从缓…

微服务中间件--http客户端Feign

http客户端Feign http客户端Feigna.Feign替代RestTemplateb.自定义Feign的配置c.Feign的性能优化d.Feign的最佳实践分析e.Feign实现最佳实践(方式二) http客户端Feign a.Feign替代RestTemplate 以前利用RestTemplate发起远程调用的代码&#xff1a; String url "http:…

基于XGBoots预测A股大盘《上证指数》(代码+数据+一键可运行)

对AI炒股感兴趣的小伙伴可加WX&#xff1a;caihaihua057200&#xff08;备注&#xff1a;学校/公司名字方向&#xff09; 另外我还有些AI的应用可以一起研究&#xff08;我一直开源代码&#xff09; 1、引言 在这期内容中&#xff0c;我们回到AI预测股票&#xff0c;转而探索…

网络基础入门

认识协议 协议其实是一种约定 网络协议初识&#xff1a; 1.内核上以结构体形式呈现 2.操作系统要进行协议管理--先描述&#xff0c;在管理 3.协议的本质是软件&#xff0c;软件是可以分层的&#xff0c;&#xff08;联系C继承多态的知识 &#xff09; 可以参考 &#xff1…

2023/8/17总结

项目完善&#xff1a; 算法推荐 item-CF 算法推荐我主要写的是协同过滤算法&#xff0c;然后协同过滤算法分成俩种—— 基于用户的 user-CF 基于物品的 item-CF 因为害怕用户冷启动&#xff0c;和数据量的原因 我选择了 item-CF 主要思路是——根据用户的点赞列表&…

什么是JVM ?

目录 一、JVM 简介 1.1 JVM 发展史 1.Sun Classic VM 2.Exact VM 3.HotSpot VM 4.JRockit 5.J9 JVM 6.Taobao JVM&#xff08;国产研发&#xff09; 1.2 JVM 和《Java虚拟机规范》 二、 JVM 运行流程 JVM 执行流程 三、JVM 运行时数据区 3.1 堆&#xff08;线程共享…

86. 分隔链表(中等系列)

给你一个链表的头节点 head 和一个特定值 x &#xff0c;请你对链表进行分隔&#xff0c;使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你应当 保留 两个分区中每个节点的初始相对位置。 示例 1&#xff1a; 输入&#xff1a;head [1,4,3,2,5,2], x 3 输出&…

wireshark 流量抓包例题重现

[TOC](这里写目录标题 wireshark抓包方法wireshark组成 wireshark例题 wireshark抓包方法 wireshark组成 wireshark的抓包组成为&#xff1a;分组列表、分组详情以及分组字节流。 上面这一栏想要显示&#xff0c;使用&#xff1a;CtrlF 我们先看一下最上侧的搜索栏可以使用的…

IDEA快速设置Services窗口

现在微服务下面会有很多SpringBoot服务&#xff0c;Services窗口方便我们管理各个SpringBoot服务&#xff0c;但有时IDEA打开项目后无法的看到Services窗口&#xff0c;以下步骤可以解决&#xff01;