c语言基础查漏补缺

来源:互联网 发布:游戏源码论坛 编辑:程序博客网 时间:2024/04/30 11:32
该部分只是用来记录c语言模糊的知识点


  • 字符常量 char(字符常量单引号里面只能写入一个字符,而且不能是中文字符)
以下写法错误
char c = '123';char c1 = '哦';

  • sizeof
          1.作用
          用来计算一个变量或者一个常量、一种数据类型所占的内存字节数。
          2.基本形式
          sizeof( 变量\常量 ) 
int size = sizeof(a);
          sizeof 变量\常量         
int size = sizeof a;
         sizeof( 数据类型 )  
intsize = sizeof(int);
          不能是sizeof 数据类型

  • 关系运算(比较运算)
               关系运算符中==、!=的优先级相等,<、<=、>、>=的优先级相等,且前者的优先级于后者:2==3>1
              关系运算符的结合方向为“从左往右”: 4>3>2
             关系运算符的优先级小于算术运算符:3+4>8-2
3 > 4 + 7    //    0(3>4) + 7    //    75 != 4 + 2 * 7 > 3 == 10      // 0

                                              字符串
  • 在c语言中,字符串可以看成是一个字符数组,为了能和普通的字符数组区分开,要在字符串尾部添加结束标志’\0'
          有三种初始化方法        
char s[] = {'l','e','o','\0'};//字符串char s1[4] = {'l','e','o','\0'};//字符串char s3[] = "mj";//字符串会自动在尾部添加'\0',他的长度还是4

下面代码就会出现一些问题
char s2[4] = {'l','e'};//不是字符串,只是字符数组 第1、 2如果不添加结束标志,字符串就会有问题。 比如 在打印的时候char s[] = {'l','e','o','\0'};char s2[4] = {'l','e'}printf("%s\n",s2);//因为没有结束标志,打印的时候 会输出leleo等乱七八糟的字符,就是因为在内存中

出现错误的原因

s2

l

e

S

l

e

o

\0



  • 字符串输出 c语言中有两种
           printf("%s\n",s);
    puts(s);//两者区别  1 printf可以输出多个,puts只能输出一个,2puts()自动换行

  • 字符串输入
             scanf()//可以同时读取多个字符串,不能读取空格tab 存放完毕后,系统会在尾部加上一个结束标记\0
     gets(s);//不安全的,一次只能读一个字符串,可以读取空格 、tab的字符串 存放完毕后,系统会在尾部加上一个结束标记\0

  • 字符串数组
      一维字符串数组可以存放一个字符串
      二维字符串数组,可以存放多个字符串

  • 字符处理函数
          1、字符输出函数putchar  (一次性只能输出一个字符)
                      putchar(65);//直接在控制台输出A
      putchar('A');//直接在控制台输出A 
             2、字符输入函数getchar  (一次性只能输出一个字符)
  • 字符串处理函数     
              1、strlen函数(测量一个字符串的字符串长度,不包括结尾标识符’\0'不是测量字符数量 ,一个中文占3个字符串长度)  注意:char s1 ={‘m’,’j’};缺少结尾标示符\0,要经常注意这个问题
             2、strcpy函数()将右边的字符串复制到到左边的字符串

              3、strcat函数将右边的字符串添加到到左边的字符串 注意:要注意左边的长度要足够

              4、strcmp函数比较左右两边字符串的长度
                    两个字符串从左至右逐个字符比较(按照ASKII码大小比较),直到字符不相同或者遇见’\0’为止。如果全部字符都相同,返回0.如果不相同,则返回两个字符串中的第一个不相同字符ASC码的差
              5、strlwr函数所有字母小写
             6、strupr函数所有字母大写


  • 类型说明符(long short signed unsigned)
int 4字节
short 2字节
long 8字节
long long 8字节
long int a = 1000000000;long a =100000000;//这两种写法都是一样的 long int =longprintf("%ld",b);//如果是long类型打印的时候输出操作符为%ldlong long c = 1000000000;printf("%lld\n",c);



  • 位运算
1、 & 按位与
对应的二进位都为1 结果才为1,否则结果为0
例如:5 & 3 结果为1
0 1 0 1 (5)
0 0 1 1 (3)
0 0 0 1 (1)
printf("%d\n",5&3);//最后输出1 ,说明计算正确


2、| 按位或
对应的二进位有一个为1就为1,否则为0
例如:5 | 3 结果为7
0 1 0 1 (5)
0 0 1 1 (3)
0 1 1 1 (7)
   printf("%d\n",5|3);//最后输出7,说明计算正确

3、^ 按位异或
对应的二进位不相同就为1,否则为0
自己^自己 结果为0 比如8^8
交换 9^5^6 == 9^6^5
任何数值跟0进行异或,结果还是原来的数值 ,9^0=9
   a^b^a = =b
例如:5 | 3 结果为7
0 1 0 1 (5)
0 0 1 1 (3)
0 1 1 0 (6)


4、~ 按位取反

对整数a的各二进位进行取反,符号位也取反(0110


5、<<左移

把整数a的各二进位全部左移n位,高位丢弃,低位补0左移n位其实就是乘以2n次方

由于左移是丢弃最高位,0补最低位,所以符号位也会被丢弃,左移出来的结果值可能会改变正负性

例如:9<<1 ->9*2 ==18

9<<2 -> 9*2*2 =36

9<<n ->9*2的n次方


6、<<右移

把整数a的各二进位全部右移n位,保持符号位不变。右移n位其实就是除以2n次方

为正数时,符号位为0,最高位补0

为负数时,符号位为1,最高位是补0或是补1取决于编译系统的规定


习题

*在不用引入其他变量的情况下,使用位异或^运算符实现两个变量值的互换

int a=10;int b=9;a = a^b; //a=10^9b = a^b; //b = 10^9^9=10a = a^b;  // a= 10^9^10 = 9

*使用位与&运算符变量的奇偶性

int a=15;// 15:1111int b =14;//14:1110 //规律 :偶数最后一位肯定是0,奇数最后一位肯定是1/**15 :11111    0001-----------      0001 =18   10001   0001----------     0000 = 0*/if(a&1==0)    printf("偶数");else  printf("奇数");


*编写一个函数,用来输出整数在内存中的二进制形式

int main(){    printBinary(3);    return 0;}void printBinary(int num){ int num=3;    int temp = (sizeof(num)<<3) - 1;//计算一下一共多少位,以防止编译器    for(int i=temp;i>=0;i--)    {        int temp = num>>i &1;        printf("%d",temp);            }}


0 0
原创粉丝点击