牛客网-《刷C语言百题》第三期
创始人
2024-01-20 03:02:02

✅作者简介:嵌入式入坑者,与大家一起加油,希望文章能够帮助各位!!!!
📃个人主页:@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 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);elseprintf("输入错误\n");}return 0;
}

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

三.如何高效刷题

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

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

在这里插入图片描述

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

点击跳转开启刷题模式

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
苁蓉的食用方法 鲜苁蓉的吃法有... 肉苁蓉号称“温而不热,补而不峻,暖而不燥,滑而不泄,故有从容之名。”历来也是传统药食同源的滋补佳品。...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
阳澄湖在哪里哪个省的 阳澄湖是... 点击题目下方苏州生活指南有用 有趣 有态度近期的阳澄湖度很高,3月24日,央视二套《第一时间》直播连...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...