牛客网-《刷C语言百题》第三期

news2024/11/30 6:36:06

✅作者简介:嵌入式入坑者,与大家一起加油,希望文章能够帮助各位!!!!
📃个人主页:@rivencode的个人主页
🔥系列专栏:《C语言入门必刷百题》
💬推荐一款模拟面试、刷题神器,从基础到大厂面试题👉点击跳转开启刷题模式
在这里插入图片描述

目录

  • 一.选择题
  • 二.编程题
    • 1.BC11成绩输入输出
    • 2.BC12学生基本信息输入输出
    • 3.BC13出生日期输入输出
    • 2.BC14按照格式输入并交换输出
    • 5.BC15大小写转换
  • 三.如何高效刷题

一.选择题

试题1:
da在这里插入图片描述

答案:C
解析:该题主要考察了操作符的优先级,首先+号比+=、-=操作符优先级要高,因为像=、/= 、+=、-=优先级比赋值=优先级都要低,所以表达式等价于a += a -= (a + a);先算加法,第二个考察的点就是操作符的结合性,像=、/= 、+=、-= 这些操作符的结合性都是从右往左计算,也就是等价于 a += (a -= (a + a));**
在这里插入图片描述

在这里插入图片描述

知识点详情参考:C语言操作符详解

试题2:
在这里插入图片描述

答案:D

解析:
ABC选项:数组的下标下限为0
D选项:定义了两个字符变量c1、c2,一个字符指针变量c3,一个字符数组c4。

试题3:
在这里插入图片描述

答案:D

解析:
~:按位取反
^:异或:相同为0,相异为1

在这里插入图片描述

求反运算~
求反运算符~为单目运算符,具有右结合性。 其功能是对参与运算的数的各二进位按位求反。

在这里插入图片描述
注意:符号位照样取反

按位异或运算 ^
按位异或运算符“^”是双目运算符。 其功能是参与运算的两数各对应的二进制位相异或,当两对应的二进制位相异时结果为1,相同结果为0,

在这里插入图片描述

按为异或的特点:
最好能记住解题块的很
性质:
1.交换律 a^ b = b^a
2.结合律 a^ b ^ c = a^ (b^c)
3.任何数后零异或都是它本身
4. 自身与自身异或为0

其实上面的特点很好证明只要记住:相同为0,相异为1

知识点详情参考:C语言操作符详解

试题4:
在这里插入图片描述

答案:C
解析:
1."A’与’A’是不相同的,一个是字符串一个是字符,其实"A"字符串后面还隐藏了一个\0字符代表字符串的结束标志。
在这里插入图片描述

2.他们都是常量,常量可以是任何的基本数据类型,比如单独一个10或者单独一个3.14都是常量。

试题5:
在这里插入图片描述

答案:B

解析:
a,b都是整形,则a/b结果必定是整数,得出的结果是小数怎么办?,只能是取整,而取整的方式有三种:
1.向负无穷取整
2.向整无穷取整
3.向零取整
C语言中默认是向零取整,这里只讲向零取整,其他看下面的知识点详情。
什么是向零取整

在这里插入图片描述
其实C语言中的默认取整方式是向零取整
c=a/b+0.4
首先a/b直接就取整为1了,1+0.4取整为1,则c=1
在这里插入图片描述

知识点详情参考:深度理解取余取模运算

试题6:

在这里插入图片描述
答案:D

解析:
题目中创建了一个a数组,p指针变量初始化等于a,a为数组名,数组名一般情况下都表示为数组首元素的地址,
有两种特殊情况:
1.sizeof(数组名):表示求整个数组的大小(单位为字节)
2.&数组名:表示整个数组地址,&数组名+1跳过整个数组
则在这里p整个指针变量就保存了数组首元素2的地址。

a[i]=*p++;//++操作符的优先级比 *解引用操作高,但是这里的++是后置++则先a[i]=*p然后再p++,则其实数组的内容并没有发生变化。

程序等价于下图:
在这里插入图片描述

试题7:
在这里插入图片描述

答案:C

解析:
这个题得好好讲讲,总有人分不清下面两句代码的区别。
在这里插入图片描述

看下图就明白了:

在这里插入图片描述
这里来解决几个疑问:
1.char* s1 = “Hello world” 是代表什么意思?
我们都知道s1是一个char 类型的指针变量,要存储一个字符的地址,而 “Hello world” 就是代表首元素’H’字符的地址,相当于s1指向了’H’这个字符,则就可以通过s1这个指针变量来找到这个字符串。
2."Hello world"是一个常量的字符串只不过我们用栈区定义的一个指针变量s1来指向这个字符串的首元素’H’的地址,是常量该字符串不能被修改。

3.s1[i]等价于(s1+i)
在这里插入图片描述
知识点详情参考:字符串与内存操作函数详解与模拟实现

试题8:
在这里插入图片描述

答案:B
解析:
首先是三目运算符:
在这里插入图片描述
是不是会感觉有点奇怪,a=1,b=-3,为啥a+b会是正数呢,原因就在于存在算术转化:请看下图
在这里插入图片描述
(无符号)unsigned int 的排名要比 (有符号)signed int要高,则a+b的结果的类型是无符号数,我们知道无符号数一定为正数,其实a+b的结果是一个很大的正数。
在这里插入图片描述
如果你觉得上图是正常的,那你看看下图:
在这里插入图片描述
怎么用%d打印又是负数呢?
其实啊在计算机中我们存储的所有东西包括字符,汉字,数字,统统会转化为对应的二进制序列,不同类型的数据像整形,字符型,浮点型…,在计算机中都是以二进制的形式进行存储,则同样一段二进制序列用不同的类型去解释就会得到不同结果,则在本题中,a+b的计算结果存储在CPU的某个寄存器中(结果也是二进制,不过它的类型是无符号整形)),但是我们硬要用%d进行打印,也就是说以有符号的整形进行打印则这段二进制(在计算机中存储的整数都是以补码的形式),就会被解释成有符号的整数。

知识点详情参考:C语言深度解剖之数据到底在内存中如何存储

试题9:
在这里插入图片描述

答案:A
解析:
在这里插入图片描述
总结:continue:while,do while 跳转到条件判定,for转到到i++然后再判定,在本题中,3的倍数会被跳过不打印。

试题10:
在这里插入图片描述

答案:C
解析:
这题主要考察了结构体内存对齐的知识:

先看内存对齐规则:
这里的大小都是以字节为单位

  1. 第一个成员在相对于结构体变量地址偏移量为0的地址处。
  2. 其他成员变量要对齐到某个数字(成员变量的对齐数)的整数倍的地址处。成员变量的对齐数 = 编译器默认的一个对齐数 与 该成员大小的较小值。VS中默认的对齐数为8
  3. 结构体总大小为最大对齐数(每个成员变量都有一个对齐数,)是成员变量的最大对齐数的整数倍。
  4. 如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。
    在这里插入图片描述

在这里插入图片描述
此外:像char a[10] ,不过只是10个char类型的变量堆叠而成,本质对齐数还是1,short c[3]同理。
知识点详情参考:结构体详解-内存对齐

二.编程题

点击题目即可跳转刷题

1.BC11成绩输入输出

1.题目描述
在这里插入图片描述
2.解题思路
题目很简单,主要是要按照题目给的格式进行打印

3.代码实现

#include <stdio.h>

int main() 
{
    int a;
    int b;
    int c;
    //
    scanf("%d %d %d",&a,&b,&c);
    printf("score1=%d,score2=%d,score3=%d",a,b,c);
    return 0;
}

4.相关知识点
在这里插入图片描述
在这里插入图片描述

2.BC12学生基本信息输入输出

1.题目描述
在这里插入图片描述
2.解题思路
1.按照格式进行输入输出,格式的话一直复制题目给的就好了(以免出错)。
2.保留两位小数

C语言中采用float和double关键字来定义小数,float称为单精度浮点型,double称为双精度浮点型,long double更长的双精度浮点型。
float采用%f占位符。
double采用%lf占位符。测试结果证明,double不可以用%f输入,但可以用%f输出,但是不建议采用%f,因为不同的编译器可能会有差别。

printf("%.nlf",value); /* 表示保留n位小数 */
printf("%m.nlf",value); /* 表示控制宽度为m,保留n为小数,右对齐 */
printf("%-m.nlf",value); /* 表示控制宽度为m,保留n为小数,m前面的-表示左对齐 */

3.代码实现

int main()
 {
    int id=0;
    float C=0.0;
    float math=0.0;
    float english=0.0;
    scanf("%d;%f,%f,%f",&id,&C,&math,&english);
    printf("The each subject score of No. %d is %.2f, %.2f, %.2f.",id,C,math,english);
    return 0;
}

4.相关知识点
C语言中%5d %05d %-5d %.5d 的区别:
在这里插入图片描述
总结:
如果d前面的是正数则右对齐,其余往左补零或空格
如果d前面的是负数则右对齐,其余往右补零或空格
超过的这个数,全取就好了

浮点数的格式也差不多,只不过中间用.分隔。

printf("%.nlf",value); /* 表示保留n位小数 */
printf("%m.nlf",value); /* 表示控制宽度为m,保留n为小数,右对齐 */
printf("%-m.nlf",value); /* 表示控制宽度为m,保留n为小数,m前面的-表示左对齐 

其实这些格式还是很有用的,尤其是输出到屏幕上的格式。
输出到屏幕上其实都是字符:这个字符包括数字,英文,汉字等其他国家的语言。
就拿汉字来说,我们用字符串可以存储汉字,但如何存储呢?
我们都知道计算机只能存储二进制序列,像ASCLL码一样,'A’用65表示,其实汉字也是一样只不过汉字比英文26个字母多的多,可能一个汉字需要几个字节来表示,当然也有不同的汉字编码。

详情参考:液晶显示中英文

3.BC13出生日期输入输出

1.题目描述

在这里插入图片描述

2.解题思路
看上题知识点讲解这题当练手了
3.代码实现

int main()
{
    int a,b,c;
     scanf("%4d %2d %2d",&a,&b,&c);
     printf("year=%d\n",a);
     printf("month=%02d\n",b);
     printf("date=%02d\n",c);
}

2.BC14按照格式输入并交换输出

1.题目描述
在这里插入图片描述

2.解题思路
与上题一样主要考察的就是按照已给格式进行输入输出,当然简单的交换两个元素(通过一个临时变量来实现交换)。
3.代码实现

int main() {
    int a;
    int b;
    int tmp;
    scanf("a=%d,b=%d",&a,&b);
    tmp=a;
    a=b;
    b=tmp;
    printf("a=%d,b=%d",a,b);
    return 0;
}

在这里插入图片描述

5.BC15大小写转换

1.题目描述
在这里插入图片描述
2.解题思路
题目中多组输入,指的是会可能输入1组也可能输入3组,所以我们需要搞个循环,输入一个字符可以用ch=getchar()函数,也可以使用scanf(“%c”,&ch )的形式,输出一个字符可以用putchar(ch),也可以使用printf(“%c”,ch )的形式,对于大小写字母转化,其实对应的大写字母与小写字符它们的ASCll值相差32。
大写转小写:大写字母+32
小写转大写:大写字母-32

这些字符都是以ASCll值(十进制)对应的二进制序列存储在内存中。
在这里插入图片描述

3.代码实现

int main() 
{
	char ch;
    //EOF本质为-1,作为文本的结束标志,字符的取值范围为0~255不可能出现负数
	while ((ch = getchar()) != EOF)
	{
        //读取输入缓存区\n字符,防止被ch读取
		getchar();
        //大写转小写
		if (ch>= 'A' && ch <= 'Z')
			printf("%c\n", ch + 32);
        //小写转大写
		else if (ch >= 'a' && ch <= 'z')
			printf("%c\n", ch - 32);
		else
			printf("输入错误\n");
	}

	return 0;
}

请添加图片描述
当我敲一个A字符然后需要敲一个回车,其实A字符与\n字符一起被放在输入缓冲区,ch=getchar()只会取出一个字符A,\n回车还在输入缓冲区中,则需要用getchar()将\n读取走,防止下次ch=getchar(),ch读取到\n。

三.如何高效刷题

如何刷题:
1.如果你是基础不太好,可以先按照题解,跟着手打代码,重点理解题目思路,将题目所用到的知识点,解题技巧提炼出来(锻炼代码能力,解题思路)。在这里插入图片描述
2.当有一定的代码能力之后,但是看题还是没有思路,可以先看解题思路理解它,然后尝试用代码去实现它。(主要锻炼代码能力,进一步锻炼解题思维)

3.拿到一个题目自己先尝试解题,最好是能将解题思路用画图的方式体现出来,这样更能加深印象,然后用代码实现,实现之后再看看题解,或者别人的解题方法,进行对比,找到最优解题思路
在这里插入图片描述
最后:在解题过程中,碰到问题如下图(题目提交后通不过,报错(代码可能有bug),尽量独立思考,可以先尝试用它的测试用例,一步一步走读代码,看看问题出现在那个地方,如果实在是没有看出来,可以将该函数拷贝到VS中进行调试代码,一定能找出来。(锻炼自己的代码调试能力)

在这里插入图片描述

最后的最后为了前途也为了钱途刷起来:

点击跳转开启刷题模式

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

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

相关文章

【HTML5期末大作业】制作一个简单HTML我的班级网页(HTML+CSS+JS)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

微信小程序 |从零实现酷炫纸质翻页效果

&#x1f4cc;个人主页&#xff1a;个人主页 ​&#x1f9c0; 推荐专栏&#xff1a;小程序开发成神之路 --【这是一个为想要入门和进阶小程序开发专门开启的精品专栏&#xff01;从个人到商业的全套开发教程&#xff0c;实打实的干货分享&#xff0c;确定不来看看&#xff1f; …

保姆级透明背景动画导出 —— json格式(Mac系统)

日常能想到的小动画基本就是使用ps导出GIF动画/AE通过插件直接导出GIF&#xff0c;方便快捷&#xff1b;但最近工作中遇到了关于透明背景导出GIF动画的问题&#xff1a;导出的GIF动画有白边&#xff0c;有锯齿感。 网上找了一大堆教程&#xff0c;主要原因出在GIF格式本身的问…

黑马程序员Java实战项目--- ATM系统

项目介绍与功能演示 黑马银行ATM系统技术选型分析&#xff1a; 学习本项目&#xff0c;你将至少得到如下收获&#xff1a; 1、优秀的面向对象编程能力。 2、 清晰、缜密的业务、数据分析能力。 3、熟练使用程序流程技术来控制计算机完成自己的想法。 4、形成良好的编码习惯…

【面试题】移除数组删除重复项合并数组

1️⃣ 原地移除数组中所有的元素val 【OJ链接】 2️⃣ 删除排序数组中的重复项 【OJ链接】 3️⃣ 合并两个有序数组 【OJ链接】 1️⃣ 原地移除数组中所有的元素val 题目要求是要在数组中&#xff0c;把指定的数字全部去除&#xff0c;题目中也是强调了空间复杂度要求为O(1)&am…

项目经理要“谋定而后动,知止而有得,万事皆有法,不可乱也”

出自《大学》&#xff0c;“谋定而后动&#xff0c;知止而有得”的含义为谋划准确周到而后行动&#xff0c;知道目的地&#xff08;合适的时机收手&#xff09;才能够有所收获。 谋定而后动是告诉我们做任何事一定要进行谋划部署&#xff0c;做好准备&#xff0c;我们才能开始行…

数据结构作业:时间复杂度和二叉树

计算时间复杂度&#xff1a; int x0,i,j; 1 for(i1;i<n;i) n { for(j1;j<2*i;j) 2(n-1) { x; 2(n-1)*n } } 2(n-1)*n2n^2-2n 修改后的运行次数函数中&#xff0c;只保留最高阶项。 所以时间复杂度为 &#xff1a;…

老生常谈的商城系统(Asp.Net+uniapp)

真正的大师,永远都怀着一颗学徒的心&#xff01; 最近几天合肥是真热 这时候就应该宅在家里 吃着西瓜 啃着鸭脖 喝着啤酒 刷着剧 想想也太美好了吧 哈哈 我得醒醒 写完这篇推荐 吃吃喝喝去了 一、项目简介 今天推荐一款商城系统&#xff0c;虽然比较老生常谈了&#xff0…

【项目】若依框架如何实现批量导入,并解析出表中内容返回给前端? - poi依赖

文章目录实现效果&#xff1a;具体实现步骤&#xff1a;扩展实例内容&#xff1a;poi工具包ExcelHandlerAdapter接口ExcelUtil.java代码controllerserviceserviceImplmapper.javamapper.xmlTnProductProperty.java实现效果&#xff1a; 点击“导入excl”按钮 --> 弹出“文件…

MSDC 4.3 接口规范(27)

MSDC 4.3 接口规范&#xff08;27&#xff09;7.4.4 代码7.4.5 更新组呼业务7.4.5.1 接口函数7.4.5.2 先决条件7.4.5.3 说明7.4.5.4 调用流程7.4.6 其他信息通知7.4.6.1 组呼服务停止7.4.6.1.1 接口函数7.4.6.1.2 先决条件7.4.6.1.3 说明7.4.6.1.4 调用流程7.4.6.2 SAI 列表更新…

Nginx禁止文件下载防止服务器被恶意扫描

比如将网站数据库导出到站点根目录进行备份&#xff0c;很有可能也会被别人下载&#xff0c;从而导致数据丢失的风险。以下规则可以防止一些常规的文件被下载&#xff0c;可根据实际情况增减。我们可以通过以下俩种方法来防止服务器被恶意扫描&#xff0c;其中以彼之道&#xf…

ffmpeg解复用FLV文件

该博文是基于&#xff1a; ffmpeg&#xff1a;V 5.1.2 FLV格式是H2.64视频和aac音频复用得到的格式&#xff0c;我们所说的FLV解复用就是将FLV格式的数据的H2.64视频帧和aac音频帧分离。 分离完成后&#xff0c;音频是纯数据无法播放&#xff0c;需要添加ADTS头&#xff0c;视频…

浅谈基于以太网的煤矿电力监控系统的设计与应用

王兰 安科瑞电气股份有限公司 上海嘉定 201801 摘 要&#xff1a;针对传统煤矿电力监控系统通讯网络性能较差、无法实现准确故障定位及报警、不具备数据交互功能等问题&#xff0c;结合分布式网络及GPS授时技术设计了一套基于工业以太网及RS485总线架构的煤矿电力监控系…

第二十三课.扩散模型

目录概述前向过程逆向过程DDPM概述 近几年扩散模型不断涌现&#xff0c;但都来源于一个基础模型&#xff1a;DDPM&#xff08;Denoising Diffusion Probabilistic Model&#xff09;。扩散模型本质是生成模型&#xff0c;过去我们常用的生成模型包括GAN和VAE&#xff0c;利用随…

【Linux】冯诺依曼体系结构

目录&#x1f308;前言&#x1f337;1、冯诺依曼体系结构&#x1f338;2、操作系统(Operator System)&#x1f339;2.1、概念&#x1f340;2.2、如何理解管理&#x1f341;3、进程&#x1f342;3.1、概念&#x1f308;前言 本篇文章进行操作系统中进程的学习&#xff01;&…

全新一代智慧园区数字孪生解决方案,为园区运营商和集成商赋能!

对于园区运营方而言&#xff0c;园区既要满足使用者的需求&#xff0c;还要面对后期运营过程中大量、繁琐的维护管理工作&#xff0c;同时还要兼顾园区运维效率和管理成本。 随着5G、物联网、云计算、人工智能、大数据等技术的快速发展和应用&#xff0c;园区运维智能化升级已…

自动控制原理 - 2 控制系统的数学模型 节2.7-2.10

2 控制系统的数学模型2.7 结构图的等效变换准则2.8 结构图等效变换的应用2.9 信号流图2.10 梅逊公式 2 控制系统的数学模型 2.7 结构图的等效变换准则 结构图没有直接给出系统输入与输出之间的定量关系。如何得到系统输入输出之间的传递函数&#xff0c;从而便于进一步分析系…

质量管理PPAP说明

PPAP是英文Production Part Approval Process的缩写&#xff0c;中文翻译为生产件批准程序。PPAP是TS16949质量管理体系五大工具之一&#xff0c;用于汽车整车或零部件生产过程的质量管控。 各种质量管理类书籍关于PPAP的介绍有很多&#xff0c;但什么情况下必须提交PPAP&…

Spring Boot + Docker实战

文章目录1.编写DockerFile2.构建镜像3.查看编译的镜像4.启动镜像测试5.创建私有仓库5.1查询registry镜像5.2加载镜像5.3运行镜像容器5.4检查容器6.搭建Registry web6.1首先搜索并拉取镜像6.2运行一个registry web容器6.3验证7.推送镜像到私有仓库8.服务器拉取镜像部署8.1 资源限…

在线电子书阅读小程序,微信小程序电子书阅读,微信小程序小说阅读器毕业设计作品

项目背景和意义 目的&#xff1a;本课题主要目标是设计并能够实现一个基于微信小程序在线电子书阅读系统&#xff0c;前台用户使用小程序&#xff0c;后台管理使用基JavaMySql技术&#xff1b;通过后台录入电子书信息、书目录信息&#xff0c;用户通过小程序登录&#xff0c;查…