c语言刷题易错篇
大家好小编只是一个c语言基础新手。希望能与大家一起学习 共同进步 给小编个关注 以后大家一起学习也是很愉快的事情呢。不足之处希望能指出 。好让小编有进步
下面直接进入正题
首先我给大家介绍几个易错的基础题:
第一个取余的盲区
: 直接看代码吧 咱们猜猜结果是多少
#include<stdio.h>
int main()
{
int i = 8;
int j = -3;
printf("%d", i%j*j);
system("pause");
return 0;
}
以上代码大家来猜猜结果是多少;小编当初可是得出了 一个惊天地泣鬼神的操作哦 大胆的写上了 一个大大的 -3 一个红叉叉直接打脸
以上代码便是编译结果了 经过小编的重复修改数据,最终得出 一个正数对一个负数取余就相当于对这个负数的绝对值取余。所以才有的-6结果 大家会了吗?
第二个printf的盲区
:也是很基础的题.但是错误的也很多下面直接看代码
#include<stdio.h>
int main()
{
printf("%d", printf("%d", printf("%d", 123) ) );
system("pause");
return 0;
}
我们知道printf函数格式控制符就是对后面变量的一个解释,但也没有想过printf的返回值是什么呢?不知道也没关系由小编告诉你们吧。printf的返回值是输出元素的字符个数,所以最内层的printf输出123返回为2 最外层也就是1咯, 所以最终结果是12331 下面看看编译器的结果吧
小编说对了哦 !!!!给个关注吧.以后会持续分享的
第三个 const的用法//此处只用于一级指针哦 二级指针小编const没试过呢
以上的A是参考答案。参考永远只是参考,也会有出错的时候
首先我给大家介绍介绍 const的用法大家就知道如何去想这个题了
//一级指针和const结合的方式:
const int *p; //修饰int即*p 所指向的内容无法改变
int const *p; //修饰int即*p 所指向的内容无法改变
int *const p; //修饰int* 即*p 不能改变指向
const int *const p; //修饰int和int* 指向和所指向的内容都不能改变
巧记方法 :const若是与int之间若是没有 * 则为修饰P 则是指向的内容无法改变。 若是与int 之间有则是修饰* 毕竟*代表指针 指针就是指向地址嘛,故地址无法改变
经过以上的描述大家应该知道答案了吧。欢迎在评论区留言哦。经过这个题 小编要告诉大家 刷题的时候不要一味的去看答案,要有自己独特的理解。对答案要有质疑.
第四个
下面小编直接公示小编写的代码咯。如有更好的建议希望在评论区或私聊告诉小编哦!
#include<stdio.h>
int main()
{
//使用longlong是因为要避免数据过大而导致的错误
long long int c = 0;//表示C的个数
long long int ch = 0;//表示CH的个数
long long int chn = 0;//表示CHN的个数
char arr[8000]={
0};//用来承载输入的数据
scanf("%s",arr);
char* p = arr; //用p指向arr的首地址;
while(*p)
{
if('C' == *p)
{
c++;
}
else if('H' == *p)
{
ch+=c;
}
else if('N' == *p)
{
chn+=ch;
}
p++;
}
printf("%lld",chn);
return 0;
}
今天的分享就到这里了。小编要去干饭了 !!!
小编qq:2206730228
欢迎各位来骚扰小编