基本数据类型:
整型:
| 无符号 | usnsigned short | unsigned int | unsigned long | unsigned long long | unsigned char |
| 有符号 | [signed] short | [signed] int | [signed] long | long long | [signed] char |
| 长度(32位编译器) | 16位 | 32位 | 32位 | 64位 | 8位 |
| 长度(64位编译器) | 16位 | 32位 | 32位 | 64位 | 64位 |
浮点型:
| float | double | long double | |
| 长度(32位编译器) | 32位 | 64位 | 96位 |
| 长度(64位编译器) | 32位 | 64位 | 128位 |
#includeint main() { printf("int:%dn",sizeof(int)); printf("short:%dn",sizeof(short)); printf("long:%dn",sizeof(long)); printf("long long:%dn",sizeof(long long)); printf("char:%dn",sizeof(char)); printf("float:%dn",sizeof(float)); printf("double:%dn",sizeof(double)); printf("long double:%dn",sizeof(long double)); printf("pointer:%dn",sizeof(char *)); return 0; }
运算符:
%的两个操作数只能是整数,运算结果的符号和左操作数的符号相同。
如: 3 %2 = 1 3 % (-2) = 1 (-3) % 2= - 1 (-3) % (-2) = -1
运算符优先级
优先级较高的运算符先进行运算,同级运算符安装运算符的结合性进行运算。
结合性:当一个操作数左右两边的运算符优先级相同时,运算的顺序:从左向右或从右向左
短路求值:
&&:先求左侧运算对象的值,只有当左侧运算对象的值为真时才继续求右侧运算对象的值。
||:先求左侧运算对象的值,当且仅当左侧运算对象的值为假时才对右侧运算对象求值。
位运算符
&:两个位都为1时结果才为1;
|:两个位都为0时结果才为0;
~:按位取反
^:两个位相同时结果为0,不同时结果为1。
>>:向右移位
<<:向左移位
除了~是单目运算符,运算顺序为自右向左,其它的位运算符都是双目运算符,运算顺序为自左向右。
优先级(数字越大,优先级越低):
| 优先级 | 运算符 |
| 2 | ~ |
| 5 | <<,>> |
| 8 | & |
| 9 | ^ |
| 10 | | |
数据的输入输出
数据的输入
语法:
#includeint scanf( const char *format, ... );
scanf()函数根据由format(格式)指定的格式从stdin(标准输入)读取,并保存数据到其它参数。
format(格式)字符串由控制字符,空白字符和非空白字符组成. 控制字符以一个%符号开始,如下:
控制字符 说明 %c 把输入解释成字符 %d 把输入解释成有符号十进制整数 %i 把输入解释成整数 %e, %f, %g 把输入解释成浮点数 %o 把输入解释成无符号八进制整数 %s 把输入解释成字符串,从第1个非空白字符开始,到下一个空白之前的所有字符都是输入 %x,%X 把输入解释成无符号十六进制 %p 把输入解释成指针 %u 把输入解释成无符号整数
scanf()控制字符中的修饰符
| * | 抑制符,指定输入项读入后不赋给变量:%*nd,n个数字读入后不赋给变量 |
| 数字m | 输入数字的最大宽度,遇到空格或不可转换字符结束 |
| h、l或L | %hd 和 %hi 表明把对应值存储为short int类型 l或L表示long l 修饰d,i,u,o,x,e,f,g表明把对应输入存储为long或unsigned long或double L修饰e,f,g表示输入被存储为long double; |
scanf()的返回值:返回成功读取的项数。当scanf()检查到文件结尾((WIndows)"Ctrl Z"或"(Linux)Ctrl D")时,会返回EOF。
数据的输出
语法:
#includeint printf( const char *format, ... );
printf()函数根据format(格式)给出的格式打印输出到STDOUT(标准输出)。
控制字符 说明 %c 字符 %d 带符号整数 %i 带符号整数 %e 科学计数法, 使用小写"e" %E 科学计数法, 使用大写"E" %f 浮点数 %g 使用%e或%f中较短的一个 %G 使用%E或%f中较短的一个 %o 八进制 %s 一串字符 %u 无符号整数 %x 无符号十六进制数, 用小写字母 %X 无符号十六进制数, 用大写字母 %p 一个指针 %% 一个'%'符号
修饰符:
| [-]m | 最小输出数据域宽,左补空格,带负号则右补空格 |
| .n | 对浮点数,指定小数点后位数(四舍五入) 对字符串,指定实际输出位数 |
| + | 在有符号的正数前显示+ |
| 0 | 输出数值时指定左边不使用的空位置自动填充0 |
| # | 在八进制或十六进制前显示前导0,0x |
| l(小写L) | 输出类型为long或double |
程序结构和控制语句
程序结构:顺序结构、分支结构、循环结构
控制语句
条件判断语句
if语句
if(条件)
{
...
}
if(条件)
{
...
}
else
{
...
}
if(条件1)
{
...
}
else if(条件2)
{
...
}
else if(条件n)
{
...
}
else
{
...
}
switch语句
switch(表达式)
{
case 常量表达式1:
语句序列1;
case 常量表达式2:
语句序列2;
...
case 常量表达式n:
语句序列n;
default:
语句序列;
}
循环语句
for语句
for(表达式1;表达式2;表达式3)
{
语句序列;
}
表达式1:给循环变量赋初值
表达式2:循环条件
表达式3:修改循环变量的值
执行流程:
1.执行表达式1
2.执行表达式2,条件成立进入第3步,不成立结束循环
3.执行循环体
4.执行表达式3
5.回到第2步
while、do while语句
while(表达式)
{
语句...
}
do
{
语句...
}while(表达式);
执行while语句时,先判断表达式的值再执行循环体;
执行do while()语句,先执行循环体再判断表达式的值。
转向语句
break语句
只能用在switch或循环语句中,其作用是跳出switch语句或跳出本层循环,转去执行后面的语句。
用法:
break;
continue语句
continue语句只能用在循环体中,用于结束本次循环,转入下一次循环条件的判断与执行。
用法:
continue;
goto语句
goto语句用来改变程序流向,转去执行语句标号所标识的语句。
next:
printf("==============n"};
goto next;
数组
数组由数据类型相同的一系列元素组成。数组通过下标访问数组中元素。每个元素有n个下标的
数组称为n维数组。
数组的定义:
数据类型 数组名[常量表达式1][常量表达式2]...;
int arr[2][3];
声明了一个2行3列的二维数组。
数组的默认值
局部数组的元素的值不确定;
static数组元素默认为0;
全局数组元素默认值为0;
局部数组的部分元素初始化,其余元素默认为0;
数组必须逐个元素引用。
字符串
字符串指以' '结尾的一组字符。
可以用下面的方式声明字符串:
char ch[]={'s','t','r','i','n','g',' '};
char ch2[]={"string"};
char ch3[]="string";
z字符串的输入输出
输入:
char ch[10];
scanf("%s",ch);
输入时遇到空字符结束。
输出:
char ch[]="string";
printf("%s",ch);
常用字符串处理函数
strcpy()
#includechar *strcpy( char *dest, const char *src );
功能:复制src中的字符串到dest,包括' ',返回dest的地址。
strcat()
#includechar *strcat( char *str1, const char *str2 );
功能:将str2复制到str1末端,返回str1的地址。
strcmp()
#includeint strcmp( const char *str1, const char *str2 );
功能:按照ASCII码顺序比较字符串str1和str2的大小,返回值:
str1=str2,返回0
str1>str2,返回值>0
str1 strlen() 功能:返回str中' '之前的字符个数。 对一组数据中相邻的两个数进行比较,如果前一个数大于后一个数,则交换顺序,直到对于所有相邻的两个数字,前一个数字都小于或等于后一个数字。 对N个数字进行排序,需要进行N-1轮在第n(n<=N-1)轮,需要进行N-n-1次比较。 函数声明: 函数的声明: 函数的调用形式如下: #include
冒泡排序
#define NUM 10
int arr[NUM]={1,3,5,7,9,2,4,6,8,10};
int tmp;
for(int i=0;i
函数
函数的定义和声明
函数类型 函数名(形式参数列表);
返回值数据类型 函数名称(形式参数列表)
{
语句;
}
函数名称(实际参数列表);



