【C初阶】C初阶考试题

news/2025/1/11 14:34:08/

选择加编程

  • 一、选择题
    • (一)递归
    • (二)后置++发生死循环
    • (三)后置++运算
    • (四)操作符运算
    • (五)全局变量与生命周期
    • (六)操作符知识
    • (七)主函数的位置
    • (八)主函数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;elsemin = 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指针加1end++;}Reverse(start, end - 1);//倒置单个字符串start = end + 1;//保证start指针在end的后一位if (*end != '\0') {//此时保证end指针和start指针指向的是一个位置end++;}}printf("%s\n", arr);return 0;
}

总结

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


http://www.ppmy.cn/news/10463.html

相关文章

【Linux】进程信号

前言&#xff1a; 大家好呀&#xff0c;欢迎大家点进这篇Linux学习笔记。本篇将会着重介绍Linux中信号的相关操作&#xff0c;更加深刻的去理解进程和操作系统之间的关系。 我的上一篇Linux博客&#xff1a;【Linux】进程间通信-共享内存_柒海啦的博客-CSDN博客 让我们直接开始…

Qu artu s II 9.0 软件的使用

1&#xff0e;实验目的和要求本实验为验证性实验&#xff0c;其目的是熟悉Qu artu s II 9.0 软件的使用&#xff0c;学会利用Qu artu s II 9.0 软件来完成整个EDA 开发的流程。2&#xff0e;实验原理利用VHDL 完成电路设计后&#xff0c;必须借助EDA 工具中的综合器、适配器、时…

云服务器定时执行python脚本

文章目录前言crontab简介基本语法定时任务具体内容python 脚本定时任务前言 在服务器上定时执行任务有两种方式&#xff0c;一种是at定时任务&#xff0c;一种是crond任务调度&#xff0c;at命令是一次性定时计划任务&#xff0c;at的守护进程 atd会以后台模式运行&#xff0c…

学校里很少提及但很实用的C语言开发基础知识

目录0. 前言1. 开发环境1.1 IDE1.2 代码文本编辑器1.3 编译器1.3.1 GCC1.4 调试器2. C语言2.1 位域2.2 指示器2.2.1 数组指示器2.2.2 结构体指示器2.2.3 结构体 数组2.3 变长数组2.4 预处理指令2.4.1 #运算符2.4.2 ##运算符2.4.3 可变参数宏2.5 泛型选择2.6 内建函数2.7 其他特…

我只是把握好了这3点,1个月后成功拿下大厂offer!

目录 一、写在前面二、技术广度的快速准备三、技术深度的快速准备四、基础功底的快速准备五、下篇预告 一、写在前面 春节过后&#xff0c;即将迎来的是一年一度的金三银四跳槽季。 假如你准备在金三银四跳槽的话&#xff0c;那么作为一个Java工程师&#xff0c;应该如何利…

遥感图像处理:最小噪声分离变换(Minimum Noise Fraction Rotation,MNF Rotation)

遥感图像处理&#xff1a;最小噪声分离变换&#xff08;Minimum Noise Fraction Rotation&#xff0c;MNF Rotation1.PCA变换2.MNF3.PCA和MNF1.PCA变换 在统计学中&#xff0c;主成分分析PCA是一种简化数据集的技术。它是一个线性变换。这个变换把数据变换到一个新的坐标系统中…

【自用】高频电子线路复习(更新中)

疫情原因 没有考试就放假回家了 返校后将先进行死亡考试周 七天考完九门 回校再进行极限复习只能说可以通过 而不利于绩点的提升 所以要从现在开始抽取一些时间进行学习 第七章 频率变换方法与电路分析 7.1 非线性电路包括 发送端的高频振荡器、倍频器、谐振功率放大器和调…

用一串Python代码爬取网站数据

如觉得博主文章写的不错或对你有所帮助的话&#xff0c;还望大家多多支持呀&#xff01;关注、点赞、收藏、评论。 目录一.编码问题二、文件编码三、基本方法四、登录五、断线重连六、正则匹配Excel操作转换网页特殊字符一.编码问题 因为涉及到中文&#xff0c;所以必然地涉及…