✅作者简介:嵌入式入坑者,与大家一起加油,希望文章能够帮助各位!!!!
📃个人主页:@rivencode的个人主页
🔥系列专栏:《C语言入门必刷百题》
💬保持学习、保持热爱、认真分享、一起进步!!
一.选择题
试题1:
答案:B
解析:
其实就是考察了一个if-else语句else的匹配问题:else应该与离它最近的if进行匹配,其次是一个if语句无大括号的情况下只能执行最近邻的一行语句。
试题2:
答案:C
解析:
这题的关键在于p与q只是交换了内容,a与b并没有变化,要明白指针变量也是一个变量只不过指针变量用来存储地址,在32位平台上地址就是32位的,所以不管什么类型的指针变量都是4个字节。
知识点详情参考:指针从入门到熟练掌握
试题3:
答案:ABD
解析:
A选项:一眼能看出来
B选项:
运算法则:
同值取0,异值取1;
1^1=0
0^0=0
1^0=1
0^1=1
性质:
1.交换律 a^ b = b^a
2.结合律 a^ b ^ c = a^ (b^c)
3.对于任何数x x^x=0, x ^ 0=x
不用临时变量交换两个数:
C选项:
D选项:
知识点详情参考:指针从入门到熟练掌握
试题4:
答案:C
解析:
试题5:
答案:C
解析:
i%5==0,代表当i加到5的倍数时就打印一个换行符,保证了一行5个元素。
试题6:
答案:A
解析:
试题7:
答案:C
解析:
A选项:调用函数创建栈帧出函数销毁栈帧,其实严格来说A也是错的因为在正式调用函数之前会让临时变量入栈(形成临时拷贝)。
我觉得学到一定程度一定要去理解函数的栈帧,从汇编角度深入理解栈的概念。
C选项: 构造函数和析构函数都没有返回类型,也没有return语句
知识点详情参考:函数栈帧的形成与释放
试题8:
答案:C
解析:
strlen():测字符串长度(不包括后面的’\0’字符)
strcap():无此函数
strcat():字符串连接函数
strcmp():字符串比较函数
知识点详情参考:字符串与内存操作函数详解与模拟实现
试题9:
答案:B
解析:
首先明白std[3],*p=std 是啥东西:
改成下面这样就OK了
试题10:
答案:C
解析:
而且还存在内存泄漏,因为开辟的动态内存,并没有free掉,而且随着退出MallocMen函数pc指针被销毁,则这一部分动态分配的内存都找都找不到了。
知识点详情参考:函数栈帧的形成与释放 指针从入门到熟练掌握
二.编程题
点击题目即可跳转刷题
1.BC6牛牛的第二个整数
1.题目描述
2.解题思路
输入三个变量,打印第二个就行
3.代码实现
#include <stdio.h>
int main() {
int a=0;
int b=0;
int c=0;
scanf("%d %d %d",&a,&b,&c);
printf("%d\n",b);
return 0;
}
2.BC7牛牛的字符矩形
1.题目描述
2.解题思路
利用一个双重循环打印
3.代码实现
#include <stdio.h>
int main()
{
int i=0;
int j=0;
char ch=getchar();
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
printf("%c",ch);
}
printf("\n");
}
return 0;
}
3.BC8牛牛的字符菱形
1.题目描述
2.解题思路
这里提供两种解题方式
- 第一种:直接用printf函数按照格式进行打印。
- 第二种:通用方式可以打印具有n行的菱形:
字符菱形可以被视作是上三角加上最中间的一行以及下三角三个部分,分别进行打印。
菱形一般都为奇数层,即一共有奇数行。
假设我们要打印一个一共n行的菱形,比如n=5,则上三角有2行,中间一行,下三角2行,上三角的是行数一定等于下三角的行数=n/2。
我们先打印一个上三角,一行一行进行打印,而打印一行(一行包括打印空格与打印字符 )
上三角:空格数即为上三角的行数n/2,且逐行递减,而字符数则是2*i -1。
中间行直接打印n个字符即可
下三角:可以认为是上三角的对称图形,直接反过来打印就行看代码就懂了。
3.代码实现
解法一:
int main()
{
char ch=getchar();
printf(" %c \n",ch);
printf(" %c%c%c \n",ch,ch,ch);
printf("%c%c%c%c%c\n",ch,ch,ch,ch,ch);
printf(" %c%c%c \n",ch,ch,ch);
printf(" %c \n",ch);
return 0;
}
解法二:
void PrintRhombus(int n,char ch )
{
int i, j = 0;
int num = n / 2;
//打印上三角:一行一行进行打印,一次循环打印一行
for (i = 1; i <= num; i++)
{
//打印空格
for (j = i; j <= num; j++)
{
printf(" ");
}
//打印字符
for (j = 1; j <= i * 2 - 1; j++)
{
printf("%c", ch);
}
//换行
printf("\n");
}
for (i = 0; i<n; i++)
{
printf("%c", ch);
}
printf("\n");
//打印下三角:一行一行进行打印,一次循环打印一行
for (i = num; i >= 1; i--)
{
//打印空格
for (j = i; j <= num; j++)
{
printf(" ");
}
//打印字符
for (j = 1; j <= i * 2 - 1; j++)
{
printf("%c", ch);
}
//换行
printf("\n");
}
}
int main()
{
char ch = getchar();
PrintRhombus(5,ch);
return 0;
}
4.BC9字符转ASCII码
1.题目描述
2.解题思路
字符在内存中也是以二进制的形式进行存储的,比如说十进制97代表字符a,而这个97看存储97的这个变量是什么类型如果是int那它就是97,如果char那它就代表字符a,其实在内存中的存储形式是一模一样的,只是看你以上面类型去解释这段二进制序列(97的二进制)
利用printf函数对内置类型变量按照想要的格式输出如%d可以将变量按整形值输出 %c则输出其对应字符。
3.代码实现
#include <stdio.h>
int main()
{
char ch =getchar();
printf("%d\n",(int)ch);
return 0;
}
5.BC10实现四舍五入
1.题目描述
2.解题思路
看代码叭
3.代码实现
解法一:
当浮点型强制转化为整形,则直接忽略小数
int main()
{
double d=0;
scanf("%lf",&d);
//判断d正负
if(d>0)
printf("%d",(int)(d+0.5));
else
printf("%d",(int)(d-0.5));
return 0;
}
解法二:
0.lf:保留一位小数自带四舍五入
int main()
{
double d=0;
scanf("%lf",&d);
printf("%0.lf",d);
}
解法三:
利用round四舍五入函数
int main()
{
double d = 0;
scanf("%lf", &d);
printf("%d\n",(int )round(d) );
}
三.如何高效刷题
如何刷题:
1.如果你是基础不太好,可以先按照题解,跟着手打代码,重点理解题目思路,将题目所用到的知识点,解题技巧提炼出来(锻炼代码能力,解题思路)。
2.当有一定的代码能力之后,但是看题还是没有思路,可以先看解题思路理解它,然后尝试用代码去实现它。(主要锻炼代码能力,进一步锻炼解题思维)
3.拿到一个题目自己先尝试解题,最好是能将解题思路用画图的方式体现出来,这样更能加深印象,然后用代码实现,实现之后再看看题解,或者别人的解题方法,进行对比,找到最优解题思路
最后:在解题过程中,碰到问题如下图(题目提交后通不过,报错(代码可能有bug),尽量独立思考,可以先尝试用它的测试用例,一步一步走读代码,看看问题出现在那个地方,如果实在是没有看出来,可以将该函数拷贝到VS中进行调试代码,一定能找出来。(锻炼自己的代码调试能力)