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
C语言练习5(巩固提升),C语言刷题专栏,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:错误,凑选择的
    C语言练习5(巩固提升),C语言刷题专栏,c语言,开发语言

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
C语言练习5(巩固提升),C语言刷题专栏,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.
C语言练习5(巩固提升),C语言刷题专栏,c语言,开发语言

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语言练习题,希望大家与我共同进步,早日成为大佬!文章来源地址https://www.toymoban.com/news/detail-676278.html

到了这里,关于C语言练习5(巩固提升)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

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

    1,下面代码的结果是:( ) A.3 B.4 C.随机值 D.5 💯答案解析: 😸正确答案:C strlen是用来获取字符串的有效长度的,结尾标记’\\0’不包含在内。 strlen获取的规则非常简单:从前往后依次检测,直到遇到’\\0’是就终止检测。 而上题中 arr是一个字符数组,不是一个有效的字符

    2024年02月11日
    浏览(30)
  • C语言-每日刷题练习

      小明正在玩一个“翻硬币”的游戏。 桌上放着排成一排的若干硬币。我们用  *  表示正面,用  o  表示反面(是小写字母,不是零),比如可能情形是  **oo***oooo ,如果同时翻转左边的两个硬币,则变为  oooo***oooo 。现在小明的问题是:如果已知了初始状态和要达到的目

    2024年02月05日
    浏览(27)
  • 【C语言】数组和指针刷题练习

    指针和数组我们已经学习的差不多了,今天就为大家分享一些指针和数组的常见练习题,还包含许多经典面试题哦! 一、求数组长度和大小 普通一维数组 字符数组 字符串数组 指向字符串的字符指针 二维数组 总节: 数组名的意义: sizeof(数组名),这里的数组名表示整个数

    2024年02月07日
    浏览(30)
  • C语言:截断+整型提升+算数转换练习

     详情关于整型提升、算数转换与截断见文章: 《C语言:整型提升》  《C语言:算数转换》 一、代码一 int main() {     char a = -1;     signed char b = -1;     unsigned char c = -1;     printf(\\\"%d %d %d\\\", a, b, c);     return 0; }  求输出结果 解析如下代码: 二、代码二 int main() {     char a

    2024年02月10日
    浏览(31)
  • 【C语言】【典例详解】【刷题】猜名次&&猜凶手【循环练习】

    目录 猜名次问题 典例题目 题目分析: 代码实现: 运行结果: 猜凶手问题  典例题目 题目分析 代码实现: 运行结果: 猜名次: 5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果: A选手说:B第二,我第三; B选手说:我第二,E第四; C选手说:我第一,D第二;

    2024年02月07日
    浏览(26)
  • js刷题巩固之路

    1. 两数之和 给定一个整数数组  nums  和一个整数目标值  target ,请你在该数组中找出  和为目标值  target   的那  两个  整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案

    2024年02月07日
    浏览(31)
  • C语言数据在内存中存储---整型提升练习

    前言:学习了C语言中的整型提升,总是感觉听的时候很明白,但当自己做题的时候,又总是遗漏了哪一步。自己的感悟:整型提升步骤以及原理都一样,就是把步骤记清楚一步一步的来就行。因此通过下面的一道题来每日复习。 前景回顾: 整型提升:一个表达式中的操作数

    2024年02月10日
    浏览(47)
  • 鸿蒙开发:深入了解Arkts语言中的Want对象及其运用【鸿蒙专栏-23】

    Arkts语言中的 Want 是一种用于对象间信息传递的载体,主要用于应用组件之间的信息传递。本文将深入探讨 Want 的定义、用途、类型以及参数说明

    2024年02月05日
    浏览(38)
  • 【刷题专栏—突破思维】LeetCode 142. 环形链表 II

    前言 :本篇博客将讲解三个OJ题,前两个作为铺垫,最后完成环形链表的节点的寻找 题目链接:LeetCode—相交链表 题目描述: 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 图示两个链表在节

    2024年02月05日
    浏览(28)
  • 【刷题专栏—突破思维】LeetCode 138. 随机链表的复制

    前言 随机链表的复制涉及到复制一个链表,该链表不仅包含普通的next指针,还包含random指针,该指针指向链表中的任意节点或空节点。 题目链接: LeetCode 138. 随机链表的复制 题目介绍: 给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指

    2024年02月05日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包