飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3984|回复: 0

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

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

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

    [LV.4]偶尔看看III

    发表于 2017-4-30 13:27:35 | 显示全部楼层 |阅读模式
    [C] 纯文本查看 复制代码
    main(){
            int c = 0x20;
            char a;
            while(c < 0x80)
            {
                    if(c!= 0x20 && c%16 == 0)
                    {
                            printf("\n");
                    }
                    if(!(c%16))
                    {
                            printf("%x0H: ",c/16);
                    }
                    printf("%c",c++);
            }
            printf("\nPlease input num: ");
            scanf("%c",&a);
            printf("a is %c\n",a);          
            if('A' <= a && a<= 'Z')           /*千万不要写成('a'<= c <= 'z')*/
            {
                   /* a += 0x20;  */
    		c = c | 0x20;
            }
            else
            {
                    if('a' <= a && a <= 'z')    /*千万不要写成('a'<= c <= 'z')*/
                    {
                           /* a -= 0x20;  */
    			c = c & 0xdf;
                    }
    
            }
            printf("a is new %c",a);
    
    }
    
    这是C语言的逻辑('a'<= c && c <= 'z')这是数学逻辑('a'<= c <= 'z');不要想当然的用数学逻辑让编译器执行,编译器不认;下次一定注意;
    
    A 0x41:  0100-0001
    a 0x61:  0110-0001
    
    相差0x20;
    
    布尔运算:(按位操作 0 < - > 1)   
    
    或运算(|):只要有一个为1,结果为1;
    x | z == 1
    0   1 == 1
    1   0 == 1
    
    c = c | 0x20;
    
    与运算(&):只要有一个为0,结果为0;
    x & z == 0
    1   0 == 0
    0   1 == 0
    
    c = c & 0xdf;
    
    取反(~):
    
    char a = 0x64;
    a = ~a;
    
    异或运算(^):
    0  1  //1
    1  0
    0  0  //0
    1  1
    相同的0;不同得1;
    
    A 0X64
    B 0X32
    A ^ B
    0110-0100  A
    0011-0010  B
    -------------
    0101-0110  C
    0011-0010  B
    -------------
    0110-0100  A
    
    A^B得到结果c;那么A、B、C三者之间任意两个数异或都会得到第三个数;
    
    ======================================================================
    main()
    {
            char i = 0;
            char * str = "Hello,Nisy!";
            for(; i < 10;i++ )
            printf("%X",*(str + i));
            printf("\n%s",str);
    }
    把"Hello,Nisy!"存储在*str内存里面;printf("%x",*(str + i));打印的时候%x是小写就出入小写,反之亦然;
    -----------------------
    main()
    {
            int i;
            char a[15];     /*现申请15个字节*/
            for(i = 0; i < 15 ;i++)
            {
                    a[i] = 'a';    /*把这15个字节都赋值为a*/
            }
            for(i = 0; i < 15 ;i++)
            {
                    printf("%c",a[i]);    /*把这15个为a字节的数据打印出来*/
            }
            printf("\n");
            scanf("%10s",a);   /*scanf("%s");%s之间必须要设定长度*/
            printf("%s\n",a);   /*%s为字符串*/
            for(i = 0; i < 15 ;i++)
            {
                    printf("%2X",a[i]);	/*输入数据后,把输入的数据按16进制输出;疑问:%x和%2x之间的关系?*/
            }
            printf("\n");
            i = 0;
            while(a[i] != 0)	/*测试一下是否字符串是以0结果的,遇到0停止打印*/
            {
                    printf("%c",a[i]);
                    i++;
            }
    
    }
    
    结论:%s输出字符串,在内存中字符串是以0结果的;
    =============================================================================
    封装函数:
    void showstr(char * str)
    {
            int i=0;
            while(str[i])
            {
                    printf("%c",str[i]);
                    i++;
            }
            printf("\n");
    
    
    }
    
    
    main()
    {
            int i;
            char str[20];
            for(i = 0; i < 20; i++)
            {
                    str[i] = 'a';
            }
            scanf("%10s",str);
            showstr(str);
            for(i = 0; i < 20; i++)
            {
                   if(str[i] >= 'A'&& str[i] <= 'z')
                   {
                            str[i] |= 0x20;
                   }
            }
    
            showstr(str);
    
    }
    
    把      
            int i=0;
            while(str[i])
            {
                    printf("%c",str[i]);
                    i++;
            }
            printf("\n");
    这段重复的代码封装成一个函数,在调用的时候直接写showstr(str);就可以不需要再重新打一遍代码;
    ---------------------------------------
    用goto解释for()循环:
    main()
    {
            int i;
          /*  for(i = 0 ; i < 10 ; i++)
            {
                    printf("%d",i);
            }       */
    
            i = 0;
          /*  while(i < 10) */
    while_start:                   /*先在定义开始的标号*/
            if(i < 10)                                        /*判断条件是否满足*/
                    goto while_ok;  /*如果满足条件就跳到while_ok;这句执行*/
            else
                    goto while_end;  /*否则就跳到while_end;这句执行*/
    
            {
    while_ok:                          /*while_ok;的代码*/
                    printf("%d",i);
                    i++;
                    goto while_start;    /*执行完后跳到while_start;这里*/
            }
    while_end:                             /*结束*/
            i = i + 1;
    mark:
            i = 1 + 2;
            printf("\n");
    }
    
    --------------
    程序中 每一个函数 都需要在main()外部申请一些空间来实现函数的调用和返回;
    
    每一个函数 都需要以下的空间长度:
    	参数的空间;
    	函数的返回地址;
    
    
    第九课最后还拆解了上面的封装函数;(未写)

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

    本版积分规则

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