【C初阶】C初阶考试题

news2025/1/10 16:31:42

选择加编程

  • 一、选择题
    • (一)递归
    • (二)后置++发生死循环
    • (三)后置++运算
    • (四)操作符运算
    • (五)全局变量与生命周期
    • (六)操作符知识
    • (七)主函数的位置
    • (八)主函数main
    • (九)C语言程序
    • (十)do……while语句
    • (十一)double浮点型运算
    • (十二)for循环的循环次数
    • (十三)取地址
    • (十四)|操作符
    • (十五)类型相加减
  • 二、编程题
    • (一)求最小公倍数
      • 1.题目描述
      • 2.解题思路
      • 3.解题代码
    • (二)倒置字符串
      • 1.题目描述
      • 2.解题思路
      • 3.解题代码
  • 总结


一、选择题

(一)递归

在这里插入图片描述
A 41
B 67
C 109
D 177

解析:答案是B,这题目是递归很麻烦,每传递一次就需要增加一次cnt,所以根据画图或者手算fib数列能够得到其结果是67。
在这里插入图片描述

(二)后置++发生死循环

在这里插入图片描述
解析:答案选D,x++和x–都是先使用再运算,所以是当x=1进去以后,先输出1,再往下运算的时候x加一变成2,而x–的操作是赋值操作,要的是结果,此时x变成1,在括号里面一直是>0的数,所以是死循环。

(三)后置++运算

在这里插入图片描述
解析:答案选C。此题需要注意的是输出的是i和j,i++是先使用再运算,所以,i的本身的值赋给j,j先是1,而i在使用完以后就是需要自增1,所以i的值为1。

(四)操作符运算

在这里插入图片描述
解析:答案选A。*=是先把=后面的值运算完再和k相乘,所以原式等价于k=k*(i+j)。

(五)全局变量与生命周期

在这里插入图片描述
解析:答案选A。如果函数内的局部变量和全局变量同名,那么在函数内部局部变量会屏蔽全局变量,使用的是局部变量。因为函数有声明周期,当遇到最后一个花括号后函数生命周期结束。因此本题中 test 函数内全局变量 a 被局部变量 a 屏蔽。对 a 的修改不会对全局变量 a 带来任何影响。所以全局变量 a 的值保持为 1。

(六)操作符知识

在这里插入图片描述
解析:答案选C。我们看A选项中文是或者,所以操作符是||,B选项中switch语句中不一定要含有default,但一般是需要的,C选项是正确的,D选项中单分支是可以的。

(七)主函数的位置

在这里插入图片描述
解析:答案选C。main函数是可以放在任意地方的,但一个程序只能放一个。

(八)主函数main

在这里插入图片描述
解析:答案选D。A选项是正确的,C源程序中可以由很多个函数组成,B选项是正确的,一个C源程序是需要包含一个main主函数的,C选项也是正确的,D选项中注释说明可以用在多条语句后面。

(九)C语言程序

在这里插入图片描述
解析:答案选C。C语言本身是没有输入输出语句,在标准库中提供了输出输出语句。

(十)do……while语句

在这里插入图片描述
解析:答案选C。do……while语句是不管三七二十一先进行一次运算,再看条件,当我们看,进入内部以后,c的值是-1,a的值变成-1,值已经发生改变了,而此时的判断条件是a=-1<0不成立,然后跳出循环了。

(十一)double浮点型运算

在这里插入图片描述
解析:答案为D。x是double型的,3/2输出的是整型,答案是1,而y的值本身就是一个double型的,所以y的值为2.000000+1=3.000000。

(十二)for循环的循环次数

在这里插入图片描述
解析:答案选C。=是赋值的意思,所以y=123是恒成立的,所以只需要看x<4的条件即可,所以是循环4次。

(十三)取地址

在这里插入图片描述
解析:答案选D。由题可知指针p是指向变量year的,*p等价于year
A选项 等价于year+=1,因此year=1010;
B选项 先算括号里的,等价于year++,year=1010;
C选项 先算括号里的,等价于++year,year=1010;
D选项 单目运算符从右至左,先地址++,再取值;

(十四)|操作符

在这里插入图片描述
解析:答案选A。
在这里插入图片描述

(十五)类型相加减

在这里插入图片描述
解析:答案选D。自动类型转换就是编译器默默地、隐式地、偷偷地进行的数据类型转换,这种转换不需要程序员干预,会自动发生。
1.将一种类型的数据赋值给另外一种类型的变量时就会发生自动类型转换,如: float f = 100; 100 是 int 类型,会自动转换成 float,再赋值给 f。
2.在不同类型的混合运算中,编译器也会自动地转换数据类型,将参与运算的所有数据先转换为同一种类型,然后再进行计算。转换的规则如下:
a.转换按数据长度增加的方向进行,以保证数值不失真,或者精度不降低。例如,int 和 long 参与运算时,先把 int 类型的数据转成 long 类型后再进行运算。
所有的浮点运算都是以双精度进行的,即使运算中只有 float 类型,也要先转换为 double 类型,才能进行运算。
char 和 short 参与运算时,必须先转换成 int 类型。

二、编程题

(一)求最小公倍数

1.题目描述

正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数。
数据范围:
在这里插入图片描述
输入描述:
在这里插入图片描述
输出描述:
在这里插入图片描述
示例1:
输入
5 7
输出
35
输入两个正整数A和B。
输出A和B的最小公倍数。

2.解题思路

最小公倍数:是指能同时被a和b整除的最小正整数。
思路1:赋给最大值法(算法较慢)。先将a和b中最大值赋给min,再min往后++,直到这个min能够整除a和b,这个min的值就是a和b的最小公倍数。
思路2:辗转相除法。利用最大公约数去求解,最小公倍数就是a*b的值除以最大公约数。分三种情况。第一种情况,当两个数互质的话,最小公约数就是这两个数相乘除以1(最大公倍数)即可;第二种情况,一个数是另一个数的倍数,那最小公倍数就是这两个数中的最大值,就是两个数相乘除以最大公因数;第三种情况,两者不成倍数但有共同的因子,那就跟第二种算法一样,相乘再除以最大公因数。如何理解辗转相除法呢,我们来三个例子解析一下:
例子一:4 16 ---- 16mod4=4所以最大公因数直接就是4。
例子二:32 20 ---- 我们在两个元素中找相同的元素,如果想要找相同的元素,那就需要一直进行取模运算,32和20经过第一次取模运算余的是12,所以32就可以转换成为20+12了,发现第一次运算完还没结束,20是两者共有的因子,而12是多出来的数,所以我们需要找第二步运算,继续找因子,所以我们需要把20拆开,那就取模12余8,进行完第二步以后,32变成12+12+8,20变成12+8,有共有的因子12和8,但是最大公因数那可是只能有一个,所以继续找因子,用12mod8余数为4,所以32和20变成8个4相加和5个4相加,那这个4不就是这两个数的共有的因子,所以4为最大公因数。
在这里插入图片描述
例子三、2 3 在这里插入图片描述
思路3:判断(i*a)modb。

3.解题代码

//方法一、从最大值往后一个一个试
#include<stdio.h>

int main() {
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	int min = 0;
	if (a > b)
		min = a;
	else
		min = b;
	while (min) {
		if (min % a == 0 && min % b == 0) {
			printf("最小公倍数是:%d\n", min);
			break;
		}
		min++;
	}

	return 0;
}
//方法二、辗转相除法
#include<stdio.h>
int main() {
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	int sum = a * b;
	int m = 0;
	while (m = a % b) { 
		a = b;
		b = m;
	}
	printf("%d", sum / b);
	return 0;
}
//方法三、判断(i*a)modb。
#include<stdio.h>
int main() {
	int a = 0;
	int b = 0;
	int i = 1;
	scanf("%d %d", &a, &b);
	while ((i * a) % b != 0) {
		i++;
	}
	printf("%d\n", i * a);
	return 0;
}

(二)倒置字符串

1.题目描述

将一句话的单词进行倒置,标点不倒置。比如 I like beijing. 经过函数后变为:beijing. like I
输入描述:
每个测试输入包含1个测试用例: I like beijing. 输入用例长度不超过100
输出描述:
依次输出倒置之后的字符串,以空格分割
示例1:
输入
I like beijing.
输出
beijing. like

2.解题思路

方法是先整体逆序,再去找单个单词进行逆序,那其实如果单纯中间没有空格那很简单了(如图1),直接定义left和right指针进行逆序即可,那事不随人愿,中间肯定是需要空格的,那我们开开心心的想那每个单词中间只有一个空格呢?那需要想一想了,那我们只需要把头指针和尾指针都往后移动一位到都指向单词第一位然后重复操作即可,但是事又不随人愿了,中间不免不小心多打了好几个空格怎么办呢?这就需要思考了,那是不是只要我们加个条件,先我们碰到空格的时候俩指针都不动,直接进入逆序,耍逆序函数一次,后面再进行end和start指针都往后一位再去判断是不是空格,要还是空格,那继续逆序一次,即保持空格不动,一直到我们start和end指针都找到不是空格和’\0’即可,然后继续逆序就好了。
在这里插入图片描述
在这里插入图片描述

3.解题代码

#include<stdio.h>
#include<string.h>

void Reverse(char* left, char* right) {
	//逆序
	while (left < right) {
		char temp = *left;
		*left = *right;
		*right = temp;
		left++;
		right--;
	}
}

int main() {
	char arr[100] = { 0 };
	gets(arr);
	//求字符串长度
	int len = strlen(arr);
	//先整体逆序
	Reverse(arr, arr + len - 1);
	printf("%s\n", arr);
	//定义头指针和尾指针都指向的第一个字符串位置
	char* start = arr;
	char* end = arr;
	//再逐个单词逆序
	//用end指针往后移动碰到'\0'和空格以前为一个单词
	while (*end != '\0') {//大条件end指针一直到'\0'
		while (*end != '\0' && *end != ' ') {
			//进入循环,end指针不等于'\0'和空格则end指针加1
			end++;
		}
		Reverse(start, end - 1);//倒置单个字符串
		start = end + 1;//保证start指针在end的后一位
		if (*end != '\0') {
			//此时保证end指针和start指针指向的是一个位置
			end++;
		}
	}
	printf("%s\n", arr);
	return 0;
}

总结

这些题目很常规,不是非常的难,考验的就是基础知识的掌握,当大家觉得题目很难的时候,要慢慢仔仔细细地进行剖析,不可一口气吃个胖子,在做这些题目的时候应当认认真真仔仔细细,看清楚条件和问题以及代码需要做些什么。

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

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

相关文章

前端对接微信公众号网页开发流程,前期配置

微信公众号网页开发&#xff0c;其实就是我们开发的h5网页需要放到微信浏览器环境中使用&#xff0c;但是需要对接公众号授权&#xff0c;授权之后可以获取到用户的个人信息&#xff0c;以及可以使用公众号提供的一些API,如&#xff1a;图片上传、图片预览、获取位置信息、微信…

【Java异常】Java异常监控重要手段 --异常链

目录标题前言一、异常链介绍1.1 异常链概述1.2 Java中如何使用异常链二、Throwable1.1 Throwable中哪些API提供存储cause的功能1.2 Throwable中如何获取cause三、项目实战演练示例1:未存储cause示例2:存储cause两层嵌套示例3:存储cause三层嵌套四、总结前言 “异常链”无论是在…

构造题(agc059_b)

https://atcoder.jp/contests/agc059/tasks/ B - Arrange Your Balls Editorial / Time Limit: 2 sec / Memory Limit: 1024 MB Score : 700700 points Problem Statement You have NN balls of colors C_1, C_2, \ldots, C_NC1​,C2​,…,CN​. Here, all colors are rep…

引发C++程序内存错误的常见原因分析与总结

目录 1、概述 2、变量未初始化 2.1、变量未初始化的场景说明 2.2、对0xcccccccc、0xcdcdcdcd和0xfeeefeee等常见异常值的辨识度 3、空指针与野指针 3.1、空指针 3.2、野指针 4、线程栈溢出 5、内存越界 6、内存泄漏 7、堆内存被破坏 8、内存访问违例 8.1、访问64K…

7.Isaac教程--在Python中开发Codelets

在Python中开发Codelets 虽然就性能而言&#xff0c;编写小码的最佳语言是 C&#xff0c;但并非应用程序的所有小码都需要使用相同的语言。 Isaac SDK 还支持 Python codelets&#xff0c;或 pyCodelets&#xff0c;适合那些更熟悉 Python 的人。 本节向您展示如何执行以下操作…

可视化系列讲解:SVG绘制基本图形及如何复用

文章目录一、SVG坐标系二、SVG坐标系单位三、SVG绘制基本图形3.1 矩形3.2 圆形3.3 椭圆3.4 直线3.5 折线3.6 多边型3.7 路径3.8 文字3.9 图片四、SVG元素的组合五、图形元素定义复用和使用定义的复用5.1 defs与use5.2 symbol与use一、SVG坐标系 SVG 使用的坐标系统&#xff08;…

【Python】函数——传递任意数量的实参

传递任意数量的实参和传递任意数量的关键字实参 *args&#xff1a;表示用来接收任意数量的实参&#xff0c;其中&#xff0c;形参*args的星号会让Python创建一个名为args的空元组&#xff0c;并将接收到的任意数量的实参存储在这个元组中。**kwargs&#xff1a;表示用来接收任…

ARX给CAD发送命令的几种方法

本文迁移自本人网易博客&#xff0c;写于2015年11月16日。1、ads_queueexpr( _T("(command\"_POINT\" \"1,1,0\")") );该函数CAD未公开&#xff0c;使用时提前声明下就可以了。可以参考帮助文件中&#xff1a;Tips and Techniques 。2、acDocMan…

嵌入式:人机交互接口设计详解

文章目录键盘和LED的接口原理HD7279A与S3C2410A的连接原理图键盘和LED控制的编程实例LCD显示原理LCD控制器概述嵌入式处理器与LCD的连接S3C2410A的LCD控制器&#xff08;1&#xff09;STN LCD&#xff08;2&#xff09;TFT LCDLCD控制器的框图LCD接口信号STN LCD控制器操作&…

Java IO流 - 转换流的使用详细介绍

文章目录转换流字符输入转换流字符输出转换流转换流 之前我们代码编码和文件编码都是UTF-8, 所以没有出现中文乱码的问题 我们知道代码编码和文件编码的格式如果不一致的话会出现中文乱码的问题 那么如果在开发中, 我们确实会遇到编码不一致的情况如何解决呢? 我们可以使用字符…

【高阶数据结构】手撕红黑树(超详细版本)

&#x1f308;欢迎来到数据结构专栏~~手撕红黑树 (꒪ꇴ꒪(꒪ꇴ꒪ )&#x1f423;,我是Scort目前状态&#xff1a;大三非科班啃C中&#x1f30d;博客主页&#xff1a;张小姐的猫~江湖背景快上车&#x1f698;&#xff0c;握好方向盘跟我有一起打天下嘞&#xff01;送给自己的一句…

JMS规范和AMQP协议

参考资料&#xff1a;《JMS与AMQP简述以及比较》《AMQP协议详解》《MQ消息队列的JMS规范和AMQP协议的区别》《消息队列之JMS和AMQP对比》写在开头&#xff1a;本文为学习后的总结&#xff0c;可能有不到位的地方&#xff0c;错误的地方&#xff0c;欢迎各位指正。一般情况下MQ的…

【数据结构与算法——C语言版】6. 排序算法(3)——插入排序

前言 在本系列的上两篇文章分别介绍了两种O(n2)的排序算法——选择排序和冒泡排序&#xff0c;今天是第三种O(n2)的排序算法&#xff1a;插入排序。 插入排序 核心思想 它的基本思想是将一个记录插入到已经排好序的有序表中&#xff0c;从而产生一个新的、记录数增 1 的有序…

软件测试~自动化测试Seleniums---1

一.什么是自动化测试 1.自动化测试介绍 自动化测试指软件测试的自动化&#xff0c;在预设状态下运行应用程序或者系统&#xff0c;预设条件包括正常和异常&#xff0c;最后评估运行结果。将人为驱动的测试行为转化为机器执行的过程。 将测试人员双手解放&#xff0c;将部分测…

机器视觉(十):印刷体字符识别

目录&#xff1a; 机器视觉&#xff08;一&#xff09;&#xff1a;概述 机器视觉&#xff08;二&#xff09;&#xff1a;机器视觉硬件技术 机器视觉&#xff08;三&#xff09;&#xff1a;摄像机标定技术 机器视觉&#xff08;四&#xff09;&#xff1a;空域图像增强 …

Unreal模块创建流程

可以把开发中通用的功能封装成模块,以在不同项目之间复用,这里记录一下创建模块的步骤:在工程的Source文件夹中新建文件夹,命名为模块名称TestCustomModule:如果要区分模块内脚本的公私有权限,则在模块文件夹内创建Public和Private文件夹,这里我没有区分,就不创建了:在模块文件…

Js如何实现一个累加向上漂浮动画

前言 在不久之前,看到一个比较有意思的小程序,就是静神木鱼,可以实现在线敲木鱼,自动敲木鱼,手盘佛珠,静心颂钵的 整个小程序功能比较小巧,大道至简,曾风靡过一阵的,无论在App应用市场上,还是小程序里,一些开发者都赚得盆满钵满,用于缓解当代年轻人的一个焦虑,佛系解压,算是一…

Kubernetes:通过轻量化工具 kubespy 实时观察YAML资源变更

写在前面 分享一个小工具 kubespy 给小伙伴博文内容涉及&#xff1a; 工具的简单介绍下载安装以 kubectl 插件方式使用 Demo 理解不足小伙伴帮忙指正 我所渴求的&#xff0c;無非是將心中脫穎語出的本性付諸生活&#xff0c;為何竟如此艱難呢 ------赫尔曼黑塞《德米安》 简单介…

详解二分查找的两种写法以及二分查找的六种变形

目录 一、二分查找的两种写法 1.1 - 第一种写法&#xff08;左闭右闭&#xff09; 1.2 - 第二种写法&#xff08;左闭右开&#xff09; 二、二分查找的六种变形 2.1 - 查找第一个 target 的元素位置 2.2 - 查找第一个 > target 的元素位置 2.3 - 查找第一个 > ta…

JS类型转换机制

概述 JS中有六种简单数据类型&#xff1a;undefined、null、boolean、string、number、symbol&#xff0c;以及引用类型&#xff1a;object 但是我们在声明的时候只有一种数据类型&#xff0c;只有到运行期间才会确定当前类型let x y ? 1 : a; &#xff0c;x的值在编译阶段…