C语言中的小知识1~20

  1. 打印字符       
    char ch=‘A';
    printf("%c\n",ch);
  2. %d: 打印整形上的十进制数据

  3. %p: 以地址的形式打印

  4. %X: 打印16进制数字

  5. 打印双精度浮点数

    double d=3.14;
    printf("%lf\n,d);//注意:lf
  6. 计算机中的单位:bit--比特位;byte--字节;kb; mb--兆b; gb; tb; pb.
    一个字节8个比特位      1kb=1024byte      1mb=1024kb...
     

    //32位机器
    printf("%d\n",sizeof(char));//1
    printf("%d\n",sizeof(short));//2
    printf("%d\n",sizeof(int));//4
    printf("%d\n",sizeof(long));//4
    printf("%d\n",sizeof(long long));//8
    printf("%d\n",sizeof(float));//4
    printf("%d\n",sizeof(double));//8
    

  7. short age=20; //含义:向内存申请2个字节用来存放20

  8. 变量:
    全局变量:定义在代码块{....}之外的变量,在哪都可见
    局部变量:定义在代码块{....}之内的变量,只能在自己所在{...}中可见
    注:
        当局部变量和全局变量同名时,局部变量优先;
        局部变量和全局变量建议名字不要相同,容易产生误会--bug。
        C语言规定:变量要定义在当前代码块的最前面;
        定义的变量仅可在自己的代码块内使用,当然也包括自己所在代码块中的嵌套的代码块,如

    {
        int a=10;
        {
            ...//这里面也可使用变量a
        }
        ...//可使用变量a
    }

  9. 交换两个整形变量,但不能引入第三个变量

    //1.这种算法会出现溢出情况(不建议)
    int a=3;
    int b=5;
    a=a+b;//8
    b=a-b;//3
    a=a-b;//5
    
    //2.按二进制位异或(完美算法)
    int a=3;//011
    int b=5;//101
    a=a^b;//110
    b=a^b;//011  ->3
    a=a^b;//101  ->5

  10. 找出只出现一次的数
    题面:给定一个非空数组,除了某个元素只出现一次以外,其余每个元素均出现两次,找出             来那个只出现一次的那个元素
    样例:int arr[ ]={1,2,3,4,5,1,2,3,4};该数组中只有5出现了一次,其他均出现两次
     

    //法一:效率慢
    int arr[]={1,2,3,4,5,1,2,3,4};
    int i=0;
    int sz=sizeof(arr)/sizeof(arr[0]);
    for(i=0;i<sz;i++)
    {
        //统计arr[i]在数组里面出现的次数
        int count=0;
        int j=0;
        for(j=0;j<sz;j++)
        {
            if(arr[i]==arr[j];
                count++;
        }
        if(count==1)
        {
            printf("单身狗:%d\n,arr[i]);
            break;
        }
    }
    
    
    //法二:巧解,用按位异或。a^a=0;0^a=a
    int i = 0;
    int ret = 0;
    int sz = sizeof(arr) / sizeof(arr[0]);
    for (i = 0; i < sz; i++)
    	ret = ret ^ arr[i];
    printf("%d\n", ret);

  11. 写个关机程序
    运行程序,你的电脑在1分钟后关机,如果输入我是猪,就取消关机
     

    #include<stdio.h>
    #include<limits.h>
    #include<string.h>
    int main()
    {
    	char input[20] = { 0 };
    	system("shutdown -s -t 60");
    again:
    	printf("请注意你的电脑将在一分钟内关机,如果输入:我是猪,就取消关机\n");
    	scanf("%s", input);
    	if (strcmp(input, "我是猪") == 0)
    		system("shutdown -a");
    	else
    		goto again;
    }

  12. 常量
    字面常量:如常数5,4
    const 修饰的常变量
    #define定义的标识符常量:如#define MAX 10
    枚举常量enum

  13. 字符串

    char arr1[] = "abc";//末尾隐藏一个'\0'
    char arr2[] = { 'a','b','c','\0' };//等价于char arr2[] = { 'a','b','c',0 };
    
    #include<stdio.h>
    #include<string.h>
    int main()
    {
    	char arr1[] = "abc";
    	char arr2[] = { 'a','b','c' };
    	printf("%d\n", strlen(arr1));
    	printf("%d\n", strlen(arr2));
    }

    结果:

  14. 转义字符
     \\ : 用于表示一个反斜杠,防止它被解释为一个转义序列
    \?:在书写多个问好时使用,防止他们被解释为三字母词
    \':用于表示一个字符常量’,如打印‘,printf("%s\n","\'");
    \":用于表示字符串内部的双引号,如printf("%s\n","\"");

    printf("%d\n",strlen("C:\test\32\test.c"));//13

    解释:\t算一个,\32是一个8进制数 ,算一个 

    printf("%c\n",'\32');//结果:->

         \ddd:  ddd表示1~3个八进制的数字
         \xdd:   dd表示2个十六进制的数字 

printf("%c\n",'\x61');//结果:a     

           解释:61->  6*16+1=97,  97ASC码所对应的是a

      15.函数:

                 

  16.数组:一组相同类型的元素组合
      
       

   17.位操作符(左移<<, 右移>>,按位与&,按位或|,按位异或^, 按位取反~)
       注:这里的位都是指二进制位

#include<stdio.h>
#include<string.h>
int main()
{
	int a = 1;//整形1占4个字节-32个比特位  00000000 00000000 00000000 00000001=1
	int b = a << 2;//                      00000000 00000000 00000000 00000100=4
	printf("%d\n", b);//结果:4//不管b怎样,a不变
}
#include<stdio.h>
#include<string.h>
int main()
{
	int a = 3;         //011
	int b = 5;         //101
	int c = a & b;     //001
	printf("%d\n", c); //结果:1
}

  18.sizeof  和逻辑反操作!

int a=10;
printf("%d\n",!a): //0
int a=10;
printf("%d\n",sizeof(a));    //结果:4
printf("%d\n",sizeof(int));  //结果:4

19.强制类型转换
     语法: 括号里面放类型

int a=(int)3.14; //double被强转成int类型

20.常见关键字
 auto(自动定义):局部变量前都有auto,只不过局部变量斗士自动变量,所以我们把它省略了    如auto int a=10;

 register--- register int a=20;//建议把变量a放入寄存器中

int --定义的整型变量是有符号的,等价于signed int

typedef (类型重定义):typedef   unsigned int   u_int  //u_int 是unsigned int 的别名

                                        unsigned int a=19;<=>u_int a=19;

static

       

       

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值