c初阶检测题

news2024/12/22 20:04:11

选择题

1.局部变量的作用域是:(D)

A.main函数内部
B.整个程序
C.main函数之前
D.局部变量所在的局部范围

2.字符串的结束标志是:(A)

作业内容
A.是’0’
B.是EOF
C. 是’\0’
D.是空格

3.下面那个不是转义字符?(C)

A.‘\n’ //‘\n’ 转义字符,代表换行
B.‘\060’ //‘\060’ 转义字符,060八进制数据,十进制为48,表示ASCII码为48的’0’
C.‘\q’ //‘\q’ 什么都不是
D.‘\b’ //‘\b’ 转义字符,表示退格

4.下面代码的结果是:( C)

#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.随机值 strlen函数是以’\0’为停止标识符,在arr数组中没有碰到,自然向后随机读取至’\0’
D.5

5.下面代码输出的结果是:( B )

#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
本题主要考察变量的访问规则,C语言中:

  1. 不允许在同一个作用域中定义多个相同名称的变量
  2. 允许在不同的作用域中定义多个相同名称的变量
  3. 不同作用域中定义的变量,在访问时采用就近原则。

6.下面程序的结果是:( A)

#include <stdio.h>
#include <string.h>
int main()
{
    printf("%d\n", strlen("c:\test\121"));
    return 0;
}

A.7
B.8
C.9
D.10

c:\test\121,来逐步分析c是1个,:2个,\t3个,est6个,\121(八进制数字)7个。

7.关于C语言关键字说法正确的是:( B )

A.关键字可以自己创建
B.关键字不能自己创建
C.关键字可以做变量名
D.typedef不是关键字

8.用在switch语言中的关键字不包含哪个?(A )

A.continue
B.break
C.default
D.case

9.关于数组描述错误的是:(B)

A.数组是一组相同类型元素的集合
B.数组的下标是从1开始的
C.数组的下标是从0开始
D.数组如果初始化,可以不指定数组的大小

10.C语言中下面哪个数组的创建错误的:( B)

A.int arr[10] = {0}
B.int n = 10; int arr[n] ={0} // 对c语言来讲,数组的大小必须是常量
C.int arr[] = {1,2,3,4,5,6,7,8,9,0}
D.char ch[10] = “hello bit”

11.下面哪个不是关键字:( C)

A.int
B.struct
C.define // 定义标识符
D.continue

12.下列程序执行后,输出的结果为(B)

#include <stdio.h>
int cnt=0;
int fib(int n){
  cnt++;
  if(n==0)
    return 1;
  else if(n==1)
    return 2;
  else
    return fib(n-1)+fib(n-2);
}
void main()
{
  fib(8);
  printf("%d",cnt);
}

A. 41
B. 67
C. 109
D. 177

这道题很明显就是问这个fib函数一共被调用了多少次,来具体分析一下就可以了。
在这里插入图片描述
把数一下有多少个数字就知道答案是多少了,很明显答案是67。

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

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

A. 1
B. 无任何输出
C. 2
D. 陷入死循环

这个很简单先使用那么打印的1,该语句过后x变为2,先判断while条件为2,后使用变为1,之后再次先使用打印的为1,该语句过后为2,之后判断条件又为2,判断后变为1,所以这段代码是在死循环的打印“01”。

14.下面的代码段中,执行之后 i 和 j 的值是什么(C)

int i=1;
int j;
j=i++;

A. 1,1
B. 1,2
C. 2,1
D. 2,2

这里i的值先使用赋给j,所以j为1,这条语句执行完i变为2,所以很明显答案是2,1。

15.以下程序的k最终值是(A)

int i = 10;
int j = 20;
int k = 3;
k *= i + j;

A. 90
B. 50
C. 70
D. 30
最后一条语句的意思可以理解为最后的k=k*(i+j),所以k=90

16.以下 C 程序的输出结果是(A)

#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
test()函数内的常量无法在该函数范围外使用,所以打印出的a是1。

17.下列描述中正确的是(C)
A. 表示m>n为true或者m<n为true的表达式为m>n&&m<n
B. switch语句结构中必须有default语句
C. 如果至少有一个操作数为true,则包含“||”运算符的表达式true
D. if语句结构中必须有else语句

这道题很明显选C,就不再过多解释

18.C 语言规定,在一个源程序中,main函数的位置(C)
A. 必须在最开始
B. 必须在系统调用的库函数的后面
C. 可以任意
D. 必须在最后

很明显答案是C

19.以下叙述不正确的是(D)
A. 一个C源程序可由一个或多个函数组成
B. 一个C源程序必须包含一个main函数
C. C程序的基本组成单位是函数
D. 在C程序中,注释说明只能位于一条语句的后面

很明显选择D

20.以下叙述正确的是(C)
A. 在C程序中,main函数必须位于程序的最前面
B. C程序的每行中只能写一条语句
C. C语言本身没有输入输出语句
D. 在对一个C程序进行编译的过程中,可发现注释中的拼写错误

21.在上下文及头文件均正常的情况下,执行如下代码, c 的值是(C)

int a = 0, c = 0;
do{
 --c;
 a = a-1;
}while(a > 0);

A. 0
B. 1
C. -1
D. 死循环
很明显c的值是-1,不过多解释了。

22.假定 x 和 y 为 double 型,则执行 x=2; y=x+3/2; 后y的值为(D)
A. 3.500000
B. 3
C. 2.000000
D. 3.000000
在这里插入图片描述
double类型确实可以存储浮点型数据,但是别忘了c语言中整形数字相除默认舍弃余数。

23.以下for循环的执行次数是(C)

for(int x = 0, y = 0; (y = 123) && (x < 4); x++);

A. 是无限循环
B. 循环次数不定
C. 4次
D. 3次
注意看for循环的条件中是给y赋值为123,而不是判断123,所以能进行四次循环

24.若有定义语句:int year=1009,*p=&year;以下不能使变量 year 中的值增至 1010 的语句是(D)
A. *p+=1;
B. (*p)++;
C. ++(*p)
D. *p++

可以理解为解引用,p此时代表year值的地址,也就是1009这个数字的地址,那么ABC都可以,D选项则是p这个地址加1,之后解引用,不太理解也可以看调试过程
在这里插入图片描述
执行
p++前p的地址是0x006ffc04储存的值则是1009,p-1地址则是比p的地址少4
在这里插入图片描述
执行完后可以看到原本属于p地址的0x006ffc04变成了p-1的地址,相信大家这次明白了吧。

25.选择表达式 11|10 的结果(本题数值均为十进制)(A)
A. 11
B. 10
C. 8
D. 2
按位或是二进制上,只要有一个为1,那么就为1,11的二进制是:1011,10的二进制是1010,所以为1011,即11。

26char a; int b; float c; double d;

则表达式 a*b+d-c 值的类型为(D)
A. float
B. int
C. char
D. double

首先字符型和整形相乘变成整形,之后加双精度浮点型减去浮点型还为双精度浮点型,故选D

编程题

1.求最小公倍数:
题目描述:正整数 a 和正整数 b 的最小公倍数,是指能被 a 和 b 整除的最小的正整数。请你求 a 和 b 的最小公倍数。
比如输入5和7,5和7的最小公倍数是35,则需要返回35。
输入描述:输入两个正整数。
输出描述:输出最小公倍数。

法一:

#include<stdio.h>
int main()
{
	int a, b = 0;
	scanf("%d %d", &a, &b);
	int c = ((a > b) ? a : b);
	while (1)
	{
		if ((c % a == 0 && c % b == 0 ))
		{
			break;
		}
		c++;
	}
	printf("a和b的最小公倍数是:");
	printf("%d", c);
	return 0;
}

首先输入a和b,然后设置公倍数c为a和b的较大值,之后在死循环中c++,如果符合c能整除a和b说明为最小公倍数,跳出死循环即可,但这种方法在ACM编译器会超出时间限制,我们看另一种方法。
法二:

#include <stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	int i = 0;
	for (i = 1;; i++)
	{
		if (a * i % b == 0)
		{
			printf("%d\n", a * i);
			break;
		}
	}
	return 0;
}

相对于法一循环次数过多,法二先为一个数的整数倍,之后判断是不是另一个数的整数倍,是跳出循环即可。

2.题目描述:将一句话的单词进行倒置,标点不倒置。比如 “I like beijing.”,经过处理后变为:“beijing. like I”。
字符串长度不超过100。
输入描述:输入一个仅包含小写字母、空格、‘.’ 的字符串,长度不超过100。
‘.’ 只出现在最后一个单词的末尾。
输出描述:依次输出倒置之后的字符串,以空格分割。

法一:

#include<stdio.h>
void resever(char* pc)
{
	char str[100][100] = {0};
	int i = 0;
	int	j = 0;
	while (*pc != '\0')//pc为\0停止循环
	{
		while (*pc != ' '&&*pc!='\0')//进入赋值单词循环
		{
			str[i][j] = *pc;//pc所指向的内容赋值给第i行第j个元素
			j++;//继续赋值第i行的元素
			pc++;//同上
		}
		i++;//第一个单词赋值完毕,进入下一行
		j = 0;//下一行把j进行归0,从0开始赋值
		if (*pc != '\0')//如果到最后一个单词,再pc++的话就会跳过\0,指向位置地址
		{
			pc++;//跳过空格
		}
	}
	for ( i = i-1; i >= 0; i--)//赋值完毕会发现i此时指向下一行,所以进行-1操作倒着打印二维数组
	{
		printf("%s ", str[i]);
	}
}
int main()
{
	char str[100] = {0};
	gets(str);
	resever(str);
	return 0;
}

这里我们首先把str传给resever,之后在里面设置一个二维数组,把一个单词当作一个字符串的一维数组放到二维数组里面,之后倒着打印即可,具体解释看注释即可。

法二:

#include<stdio.h>
void resever(char* left, char* right)//反转函数
{
	while (left<right)
	{
		char temp = *left;
		*left = *right;
		*right = temp;
		left++;
		right--;
	}
}
int main()
{
	char str[100] = { 0 };
	gets(str);
	int len = strlen(str);
	resever(str, str+len-1);//先将整个字符串反转
	char* cur = str;
	char* left;
	char* right;
	while (*cur)//反转单词循环
	{
		left = cur;//先将首单词地址赋给left
		while (*cur != ' ' && *cur != '\0')//如果cur指向的不是空格和\0,则进入循环
		{
			cur++;//cur++
		}
		right = cur-1;//此时为空格或\0跳出循环,-1,则是空格或者\0前一个单词字母地址
		resever(left, right);//反转单词
		if (*cur != '\0')//若此时为\0,在进行cur++操作,则会跳出该英文句子
		{
			cur++;//cur++,跳过空格,指向下一个单词首字母
		}
	}
	printf("%s", str);
	return 0;
}

第二个方法则是先对整个字符串反转,之后再将每个单词反正即可。具体解释看注释。

今天就分享到这里谢谢大家。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

精选六个大学生可以做的兼职副业,学习赚钱两不误

在当今的社会中&#xff0c;大学生们面临着学业压力和生活开销。为了减轻家庭的负担&#xff0c;同时也为了更好地拓宽自己的视野和实践能力&#xff0c;许多大学生开始寻找一种既可以学习又能赚钱的副业。这样的选择&#xff0c;不仅可以弥补金钱上的不足&#xff0c;还可以提…

【java计算机毕设】博客管理系统 javaweb springboot vue mysql

目录 1.项目功能截图​ 2.项目简介 3.源码下载地址 1.项目功能截图 2.项目简介 博客管理系统 idea mysql5.7/8 vue html jdk1.8 系统功能&#xff1a; 前台功能&#xff1a;文章信息&#xff0c;相册信息&#xff0c;留言板&#xff0c;个人中心&#xff0c;后台管理 后…

闭包(函数)

把内部函数通过return扔出去 必要条件

靶机 DC-2

DC_2 信息搜集 存活检测 详细扫描 添加 host 后台网页扫描 网页信息搜集 主页面 找到 flag1&#xff0c;提示使用 cewl 密码生成工具 wp 登陆界面 使用 wpscan 扫描用户 wpscan --url http://dc-2/ --enumerate u 扫描出用户 tom、jerry、admin 将三个用户名写入文件中…

一文解密网络背后的秘密

一文解密网络背后的秘密 网络的发展史从键入网址到网页进行显示期间法上了什么&#xff1f;首先我们需要了解一下URLDNS解析建立连接什么是三次握手&#xff0c;可不可以两次呢&#xff1f; 本地发送请求&#xff0c;服务器处理请求断开连接 实践一下 相信大家对网络都不陌生了…

《认知觉醒:开启自我改变的原动力》

目录 第一章 大脑 — 一切问题的起源 第二章 潜意识 — 生命留给我们的彩蛋 第三章 元认知 — 人类的终极能能力 第四章 专注力——情绪和智慧的交叉地带 第五章 学习力——学习不是一味地努力 第六章 行动力 — 没有行动世界只是个概念 第七章 情绪力 — 情绪是多角度看…

【JavaScript】深入讲解浏览器渲染原理

一. 浏览器是如何渲染页面的&#xff1f; 当浏览器的网络线程收到 HTML 文档后&#xff0c;会产生一个渲染任务&#xff0c;并将其传递给渲染主线程的消息队列。 在事件循环机制的作用下&#xff0c;渲染主线程取出消息队列中的渲染任务&#xff0c;开启渲染流程。 渲染&…

Python数据分析实战-使用numpy.where方法基于条件替换某列的值(附源码和实现效果)

实现功能 在Pandas中&#xff0c;replace方法默认是基于精确匹配进行替换&#xff0c;而不是基于条件匹配。要实现基于条件的替换&#xff0c;可以使用numpy.where函数。将DataFrame中某一列的指定的两个值分别替换为0和1&#xff0c;其他值替换为2 实现代码 import pandas …

【tg】3:线程模型:4个主要线程

media :调用主线程worker therad 、network thread 是webrtc要求的module thread 也是webrtc的moudle需要的代码分布 G:\CDN\P2P-DEV\tdesktop-offical\Telegram\ThirdParty\tgcalls\tgcalls\StaticThreads.hgetThreads 触发创建线程 分别获取,看起来是分别只有1个的 Threads…

不愧是疑问解决神器(二)!你强任你强

不愧是疑问解决神器(二)&#xff01;你强任你强&#x1f44d;&#x1f44d;&#x1f44d; 第3章 代码的坏味道 1.神秘命令(Mysterious Name)? 整洁代码中最重要的一环就是有一个好名字&#xff0c;使他们能够清晰地表明自己的功能和用法。但正因为如此&#xff0c;命名就成了…

17.Tensor Product Spaces

同样&#xff0c;本文仍采用非标准 的符号。 在之前的文章里&#xff0c;已经展示了&#xff1a; 使用张量积将向量和协向量组合在一起可以为我们提供线性映射&#xff0c;这个线性映射的系数实际上只是一个数组的条目。 还展示了&#xff1a;使用张量积组合两个协向量&#x…

Linux系统之部署WBO在线协作白板

Linux系统之部署WBO在线协作白板 一、WBO白板工具介绍1.1 WBO白板简介1.2 WBO白板特点 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、检查本地环境3.1 检查本地操作系统版本3.2 检查系统内核版本 四、部署Node.js环境4.1 下载Node.js安装包4.2 解压Node.js安装包4.3 …

进制转换(二进制、八进制、十进制、十六进制)

目录 一&#xff1a;十进制转换为二进制、八进制、十六进制 &#xff08;1&#xff09;整数转换 &#xff08;2&#xff09;小数转换 1&#xff09;十进制转二进制 2&#xff09;十进制转八进制 3&#xff09;十进制转十六进制 二&#xff1a;二进制、八进制、十六进制转…

数据库实验二:图书信息管理系统数据查询与数据更新

实验项目名称&#xff1a;图书信息管理系统数据查询与数据更新 实验目的与要求实验原理与内容1&#xff0e; 实验原理&#xff1a;2 . 实验内容&#xff1a;2. 数据查询 实验设备与软件环境实验过程与结果1. 数据更新图书信息表t_book新增馆藏可借图书c_book借书证表t_libraryC…

offsetof宏计算某变量相对于首地址的偏移量

宏&#xff1a;offsetof的使用 //offsetof (type,member) //type是结构体的类型名&#xff0c;member是结构体中的成员名。struct Student {char name[5]; // 姓名int age; // 年龄float score; // 成绩 };int main() {struct Student s;printf("%zd\n", off…

MyBatis Generator - 快速生成 实体类 和 映射文件

目录 一、MyBatis Generator 的使用 1.1、生成类和映射文件 1.1.1、在 pom.xml 中引入依赖 1.1.2、根据 configurationFile 标签中配置的路径 创建 generatorConfig.xml 文件 1.1.3、自动生成类 和 映射文件 1.1.4、在 Insert 标签中添加获取主键值的选项 1.1.5、扫描配置…

Linux完全卸载PyTorch重装(cuda11.1)

目录 1.命令行输入2.命令行接着输入3.可以看到卸载完后4.下载PyTorch&#xff08;cuda对应11.1&#xff0c;可以通过test_gpu.py的测试&#xff09; 原因&#xff1a;网上看的很多卸载的&#xff0c;并没有把所有跟随PyTorch的包卸载干净&#xff0c;虽然可能后期不会出现较大问…

【计算机操作系统慕课版】第二章课后习题笔记(创作周年纪念版)

一、简答题 (1)什么是前趋图&#xff1f;试画出下面四条语句的前趋图. S1&#xff1a;axy&#xff1b; S2&#xff1a;bz1&#xff1b; S3&#xff1a;ca-b&#xff1b; S4&#xff1a;wc1&#xff1b; 答&#xff1a;前趋图(Precedence Graph)是一个有向无循环图&#xff…

我朋友软件测试月薪5w,跟他聊过之后,才知道差距在哪里!

当我开始工作的时候&#xff0c;年薪50万对于我来说是一个遥不可及的幻想。我认为作为一名普通的软件测试工程师&#xff0c;月薪2w已经是天花板了。然而随着时间的推移和经验的积累&#xff0c;看到越来越多的同行拿到高薪时&#xff0c;我才意识到束缚我薪水的不是行业的天花…

集合迭代器

Iterator迭代器的定义&#xff1a;迭代器&#xff08;Iterator&#xff09;模式&#xff0c;又叫做游标&#xff08;Cursor&#xff09;模式。GOF给出的定义是&#xff0c;提供一种方法访问一个容器&#xff08;container&#xff09;对象中各个元素&#xff0c;而又不需暴露该…