- 打印字符
char ch=‘A'; printf("%c\n",ch);
-
%d: 打印整形上的十进制数据
-
%p: 以地址的形式打印
-
%X: 打印16进制数字
-
打印双精度浮点数
double d=3.14; printf("%lf\n,d);//注意:lf
-
计算机中的单位: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
-
short age=20; //含义:向内存申请2个字节用来存放20
-
变量:
全局变量:定义在代码块{....}之外的变量,在哪都可见
局部变量:定义在代码块{....}之内的变量,只能在自己所在{...}中可见
注:
当局部变量和全局变量同名时,局部变量优先;
局部变量和全局变量建议名字不要相同,容易产生误会--bug。
C语言规定:变量要定义在当前代码块的最前面;
定义的变量仅可在自己的代码块内使用,当然也包括自己所在代码块中的嵌套的代码块,如{ int a=10; { ...//这里面也可使用变量a } ...//可使用变量a }
-
交换两个整形变量,但不能引入第三个变量
//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
-
找出只出现一次的数
题面:给定一个非空数组,除了某个元素只出现一次以外,其余每个元素均出现两次,找出 来那个只出现一次的那个元素
样例: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);
-
写个关机程序
运行程序,你的电脑在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; }
-
常量
字面常量:如常数5,4
const 修饰的常变量
#define定义的标识符常量:如#define MAX 10
枚举常量enum -
字符串
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)); }
结果:
-
转义字符
\\ : 用于表示一个反斜杠,防止它被解释为一个转义序列
\?:在书写多个问好时使用,防止他们被解释为三字母词
\':用于表示一个字符常量’,如打印‘,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