牛客网-《刷C语言百题》第一期
手把手教你C语言刷题从入门到熟练掌握!!!
✅作者简介:嵌入式入坑者,与大家一起加油,希望文章能够帮助各位!!!!
📃个人主页:@rivencode的个人主页
🔥系列专栏:《C语言入门必刷百题》
💬保持学习、保持热爱、认真分享、一起进步!!
一.选择题
试题1 :
答案:D
解析:
||为逻辑或,&&为逻辑与,!为逻辑非
知识点详情参考:C语言操作符详解
试题2 :
答案:B
解析:
int ptr[4]:表示的是指针数组,ptr与[]先结合而不是与先结合,所以ptr表示一个数组,ptr的右边[4]表示数组有4个元素,ptr的左边int 表示数组的每个元素为一个整形指针变量
int (ptr[4]) :的()表示与上面的int ptr[4]一模一样都是ptr与[]先结合,所以输出也一样
知识点详情参考:《指针从入门到熟练掌握》
试题3 :
答案:C
解析:
首先明确移位操作符(<< >>)的优先级比位操作符(& ^ |)优先级的要高,则原式=3<<2|3等价于(3<<2)|3 ,3<<2相当于3*4=12
则原式=12|3
00001100 ==12的二进制:
00000011 ==3
位或一下 00001111=15(十进制)
知识点详情参考:C语言操作符详解
试题4 :
答案:C
解析:
f(1):n=2;i=2;调用f(2)
f(2):n=4;i=3;调用f(4)
f(4):n=7;i=4;调用f(7)
f(7):返回7
即最终函数返回结果为7
这题的关键在于 static int i = 1,当局部变量加上static关键字修饰,则变量的生命周期为(程序从运行到结束),根本原因static关键字修饰的局部变量,会存储在静态数据区(与全局变量的生命周期),而且递归调用的时候static int i = 1,只会定义一次,并不是每次定义成1。
会不会有人算成5的,如果没有static结果还就是5,为啥呢?,原因就在于,局部变量出函数就被销毁(内存被自动回收)因为递归调用了函数,虽然函数体是一样的,但是递归调用一次函数就创建一个函数的栈帧,他们的栈是不一样的,所以每个函数栈都有一个局部变量i,而且初始值都为1。
这个题目涉及的知识点比较多:
《static,const,volatile,extern,register关键字深入解析》
《函数栈帧的形成与释放》
试题5 :
答案:B
解析:
知识点详情参考:自定义类型-结构体详解
试题6 :
答案:A
解析:
字符串"a+b=20\n"长度是不算后面的\0字符的,而\n是一个转义字符,是一个字符,所以长度为7=strlen(“a+b=20\n”),如果是算字符串占内存多大空间,则需要算上字符串最后的\0字符,则占内存大小为8字节。
知识点详情参考:《C语言指针进阶》
二.编程题
点击题目即可跳转刷题
1.BC1HelloNowcoder
1.题目描述
2.解题思路
使用C语言打印函数printf输出Hello Nowcoder!字样就好
3.代码实现
#include <stdio.h>
int main()
{
printf("Hello Nowcoder!");
return 0;
}
4.涉及知识讲解
使用printf函数打印
2.BC2小飞机
1.题目描述
2.解题思路
使用C语言打印函数printf输出,需要注意的是,输出完一行需要用\n来换行,而且后面的空格可以不打,也能达到图案的效果。
3.代码实现
#include <stdio.h>
int main()
{
printf(" ** \n");
printf(" ** \n");
printf("************\n");
printf("************\n");
printf(" * * \n");
printf(" * * \n");
return 0;
}
4.涉及知识讲解
\n为转义字符,打印的时候表示换行
字符都有对应的ASCLL值,不管是字符还是整形int,存储在计算机中都只是一堆二进制序列。
3.BC3牛牛学说话之-整数
1.题目描述
2.解题思路
使用scanf函数格式化输入一个整数%d,使用C语言打印函数printf格式化输出,以整数的形式%d输出,scanf函数后面变量要以&(取地址的形式),因为输入一个数将会保存在该地址上的空间(变量)。
3.代码实现
int main()
{
int a=0;
scanf("%d",&a);
printf("%d",a);
return 0;
}
4.涉及知识讲解
格式化输入scanf,格式化输出printf,以不同的数据类型保存在内存中,或者输出到屏幕。
同一个数可以按照不同的类型进行输出,其实这个数在内存中存储的(十进制97对应的二进制序列)二进制序列是一样,就看你用什么类型去解释这一串二进制序列。
4.BC4牛牛学说话之-浮点数
1.题目描述
2.解题思路
浮点数flaot以%f小数形式,主要是保留三位小数%0.3后面是3就是保留三位小数。
3.代码实现
int main()
{
int a=0;
scanf("%d",&a);
printf("%d",a);
return 0;
}
4.涉及知识讲解
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前面的-表示左对齐 */
5.BC5牛牛学说话之-字符
1.题目描述
2.解题思路
字符以%c形式输入输出。
3.代码实现
#include <stdio.h>
int main()
{
char ch=0;
scanf("%c",&ch);
printf("%c",ch);
return 0;
}
三.如何高效刷题
如何刷题:
1.如果你是基础不太好,可以先按照题解,跟着手打代码,重点理解题目思路,将题目所用到的知识点,解题技巧提炼出来(锻炼代码能力,解题思路)。
2.当有一定的代码能力之后,但是看题还是没有思路,可以先看解题思路理解它,然后尝试用代码去实现它。(主要锻炼代码能力,进一步锻炼解题思维)
3.拿到一个题目自己先尝试解题,最好是能将解题思路用画图的方式体现出来,这样更能加深印象,然后用代码实现,实现之后再看看题解,或者别人的解题方法,进行对比,找到最优解题思路
最后:在解题过程中,碰到问题如下图(题目提交后通不过,报错(代码可能有bug),尽量独立思考,可以先尝试用它的测试用例,一步一步走读代码,看看问题出现在那个地方,如果实在是没有看出来,可以将该函数拷贝到VS中进行调试代码,一定能找出来。(锻炼自己的代码调试能力)
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)