飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 1859|回复: 0

[C/C++] C语言--学习笔记--第四课

[复制链接]
  • TA的每日心情

    2019-4-15 08:38
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2017-4-30 13:09:23 | 显示全部楼层 |阅读模式
    这份笔记是学习Nisy的C语言课程时随笔记录的(开始只是想根据每课的内容做个大纲;后来发现根据课程的讲解做做笔记可以加深不少印象),记录的内容和顺序大致和课程相同,也有一些自己的注释和疑问(未进行二次处理,难免有记录失误的地方);笔记中的代码,在turboc2中都可编译运行;看论坛里有人发布过这套C语言的课后作业,好像还没有人发布过笔记,就发出来仅供参考!
    [C] 纯文本查看 复制代码
    main()
    {
            char a[2];
            * (a)  = 0;
            *(a+1) = 0;
    
            scanf(" %d ",a);
            printf("%d",*a);
    }
    结论scanf(" %d ",a);这个语句如果%d前面加的空格,输入的时候也要加空格,如果后面加了空格,scanf就会等一个非空格或回车的字符,然后才执行下面的语句;
    =================================================================================
    main()
    {
            char a[2];
            * (a)  = 0;
            *(a+1) = 0;
    
            scanf("%d",(char *)a);
            printf("%d",*(int *)a);
    }
    结论:输入300,输出也是300. scanf存储数据时,需要知道内存的地址和长度。%d就已经规定了2个字节的长度。所以(char *)a只表示地址而已。
    =================================================================================
    main()
    {
            int a = 5;
            int b = 0;
    
            b = a++;  /* a++ <==> a = a + 1; */
            printf("a++ this is %d\n",b);
    
            b = ++a;
            printf("++a this is %d",b);
    }
    
    结果:
    a++ this is 5
    ++a this is 7
    
    结论:
    b = a++; 是把a的数据给b,然后再自家1;
    
    b = ++a; 是先自家1,然后再把值给b;
    
    main()
    {
            int i[4];
    
            int k = 0;
            int a = 0;
    
            scanf("%d %d %d",i,(i+1),(i+2));
            printf("%d\n",a);
            if(i[a++] <= 0)
            {
             printf("%d\n",a);
    
             printf("%d is Over!!\n",i[a++]);
            }
            printf("%d\n",a);
    
            if(i[a++] <= 0)
             printf("%d is Over!!\n",i[a++]);
            if(i[a++] <= 0)
             printf("%d is Over!!\n",i[a++]);
    
    这段代码证明只要是出现a++的话,a就会自加1;if(i[a++] <= 0)  printf("%d is Over!!\n",i[a++]);
    这相当于两次a++;  if(i[a++] <= 0) 不管输入的数出错与否,a都会自加1;所以printf("%d is Over!!\n",i[a-1]);这就正确了。
    
    main()
    {
            int i[4];
    
            int k = 0;
            int a = 0;
    
           scanf("%d %d %d",i,(i+1),(i+2));
          /* if(i[a++] <= 0 || i[a++] <= 0 || i[a++] <= 0) */
             if((++a && i[0] <= 0) || (++a && i[1] <= 0) || (++a && i[2] <= 0))
              {
                    printf("%d is Over!!\n",i[a-1]);
                    k = 1;
              } 
    
            if(i[0]+i[1] > i[2] && i[0]+i[2] > i[1] && i[1]+i[2] > i[0])
              {
              ;
              }
            else
              {
                 k = 1;
              }
    
            if( k == 1 )
              {
                    printf("SJX is Error!!!");
              }
            else
              {
                    printf("%d",i[0] + i[1] + i[2]);
              }
    
    
    }
    完美的三角形周长
    
    main()
    {
            int i;
            int u;
            int k;
            int a = 0;
    
             scanf("%d %d %d",&i,&u,&k);
             printf("%u %u %u\n",&i,&u,&k);
             if((++a && i <= 0) || (++a && u <= 0) || (++a && k <= 0))
              {
                    printf("i+1 is %u %d\n",&i+1,&i+1);
                    printf("i+2 is %u %d\n",&i+2,&i+2);
    
                    printf("%d is Over!!\n",*(&i+(a-1)));
              }
    
    这段代码是根据内存地址来定位内存数据;地址分别是65492 65494 65496 但是因为定义的是int型数据,所以&i+(a-1) <==> &i + 1 其实在内存中的地址是两个位数移动的;(&i + n)加几就是加几个&i单元的的长度。 





    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表