IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 牛客网-《刷C语言百题》第三期 -> 正文阅读

[C++知识库]牛客网-《刷C语言百题》第三期

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

一.选择题

试题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中进行调试代码,一定能找出来。(锻炼自己的代码调试能力)

在这里插入图片描述

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

点击跳转开启刷题模式

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-11-05 00:06:35  更:2022-11-05 00:06:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 4:37:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码