首页 > 其他分享 >C语言初学习——易错点合集(持续更新中)

C语言初学习——易错点合集(持续更新中)

时间:2024-03-14 23:44:06浏览次数:15  
标签:易错 main int value C语言 ++ printf 例题 合集

转义字符
例题一

int main()
{
    char s[] = "012xy\08s34f4w2";
    int i, n = 0;
    for (i = 0; s[i] != 0; i++)
    {
        if (s[i] >= '0' && s[i] <= '9')
        {
            n++;
        }
    }
    printf("n=%d\n", n);
}

输出:
——
n=3
——

例题二

int main()
{
    char s[] = "\01234";
    for (int i = 0; s[i]; i++)
    {
        printf("1");
        printf("%c\n", s[i]);
    }
}

输出:
——
1

13
14

——

总结:
八进制值的判断取决于后续是否为合法的八进制。
以\开始,最少1位,最多3位,且必须是合法的8进制数字,即0~7,如"\012"。
例:在"\08"中,’\0’为结束符。

自增与自减
例题一

int main()
{
    int k = 5, n = 4;
    while (k--)
    {
        printf("%d\n", k -= 1);
    }
    printf("---------\n");
    while (--n)
    {
        printf("%d\n", --n);
    }
}

输出:
——
死循环
——

总结:
自增与自减也同样应用在循环体判断里,后置--时先根据当前值进行判断,是否进入循环体,再改变自身的值,最后执行循环体语句。

例题二

int main()
{
    int a = 0;
    printf("%d %d %d %d", ++a, a, a++, ++a, a);
}

输出:
——
3 3 1 3
——
总结:
在C语言中有个很常用的函数printf,使用时从右向左压栈,依次从右向左开始计算,计算完后才会往%d中输出,因为有多条赋值语句,所以它是个累加过程,直到压栈结束后输出最终得累加值,而遇到a++这种先使用再变化的量则优先输出。
参考:
https://blog.csdn.net/weixin_43919932/article/details/88544728

指针
例题一

main()
{
    int m = 0;
    int *n = &m;
    printf("value:%d\taddress:%d\n", m, &m);
    *n += 1;
    printf("value:%d\taddress:%d\n", *n, n);
    *n++;
    printf("value:%d\taddress:%d\n", *n, n);
}

输出:
——
value:0 address:6422036
value:1 address:6422036
value:6422040 address:6422040
——
总结:
因为后置 ++ 运算符的优先级高于 * ,所以在编译器的语句实际上是:*(n++);

问:浮点数
例题一

float fun(float h)
{
    return (int)(h * 100) / 100.0;
}
main()
{

    printf("%f\n", fun(22.223000));
    printf("%f", (int)(22.223000 * 100) / 100.0);
}

输出:
——
22.219999
22.220000
——
疑问:
为什么相同的操作,使用函数进行封装后导致了精度缺失

标签:易错,main,int,value,C语言,++,printf,例题,合集
From: https://www.cnblogs.com/lanying24/p/18052023

相关文章

  • 实验一c语言输入输出和简单程序应用编程
    1#include<stdio.h>2intmain()3{456printf("o\n");7printf("<H>\n");8printf("II\n");9printf("o\n");10printf("<H>\n");11......
  • (计算机二级C语言)程序设计题<75>
    题目:#include<math.h>#include<stdio.h>doublefun(intn){}voidmain(){intn;doubles;voidNONO();printf("\n\nInputn:");scanf("%d",&n);s=fun(n);printf("\n\ns=%f\n\n",s......
  • (计算机二级C语言)程序设计题<74>
    题目:#include<stdio.h>#include<math.h>doublefun(intn){}voidmain(){intn;doublesum;voidNONO();printf("\n\nInputn:");scanf("%d",&n);sum=fun(n);printf("\n\nsum=%f\......
  • c语言:深入了解指针(2)
    1.const修饰变量变量是可以修改的,如果将变量的地址传给一个指针变量,可以通过指针变量来改变这个变量的值,如果我们不想这个变量的值不能被随意更改,我们就可以使用const来修饰这个变量。intmain(){ intn=10;//n是变量 n=5; printf("%d\n",n); return0;}我们可......
  • [C语言]还原原版的扫雷
    今天看了b站鹏哥做的扫雷,其中有几点鹏哥没有进行优化,第一个就是没有在进行游戏前不布置雷,在选择第一个方块的时候再布置雷,还有就是如何像原版扫雷一样,点到一个周围为0的方块再检测其周围的方块的取值,鹏哥也暗示了可以用递归的方法,最后一点就是像原版一样进行标记选择,最后一点其......
  • C语言const 和 *的爱恨情仇
    相信所有在学C的人都对const和*这对小情侣非常熟悉,实在是太烦了。他们中间还时不时得加个第三者什么int,char啥的。看了很多资料再加上我自身的总结提炼理解以后,我终于把他们理清了。首先const这个关键字是用来修饰常量的,我们就简称它为常量。定义指针的时候都会用到*,int*p......
  • 实验1 c语言开发环境使用和数据类型、运算符、表达式
    task1`#include<stdio.h>intmain(){printf("o\n");printf("\n");printf("II\n");printf("o\n");printf("<H>\n");printf("II\n");return0;}``#include<stdio......
  • 实验1_C语言输入输出和简单程序编写
    task1_11#include<stdio.h>2#include<stdlib.h>3intmain()4{5printf("O\n");6printf("<H>\n");7printf("II\n");8printf("O\n");9printf("<H>\n");10p......
  • C语言:洛谷数组题目(2)(冰雹猜想,校门外的树,旗鼓相当的对手)
    目录1.前言2.三则题目1.冰雹猜想1.题目描述2.输入格式3.输出格式4.题解2.校门外的树1.题目描述2.输入格式3.输出格式4.题解3.旗鼓相当的对手1.题目描述2.输入格式3.输出格式4.题解3.小结1.前言今天小蒟蒻继续为大家分享洛谷数组题单题解,一共三道题,希望大......
  • 滴水逆向笔记系列-c语言总结6-20.多级指针 数组指针 函数指针-21.位运算-22.内存分配
    第二十课c语言13多级指针数组指针函数指针1.多级指针反汇编一二级指针可以看到p1==*(p1+0)==p1[0]本来一直没想懂为什么是movsxecx,byteptr[eax],是byte,才发现p1是char类型,所以才得用movsx拓展(p1+2)==p1[2],指针可以用和[]取值,他们是一样的(((p3+1)+2)+3)==p3[......