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

  • 17
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rivencode

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值