hello,各位我来复习C语言了,别管就是大一没学导致现在要狠补!!!
一 数据类型
1.1 基本数据类型
int char float double short long unsighed
1.2 数据类型
字符型数据
C语言32个关键字
ASCII码表
ASCII值 | 控制字符 | ASCII值 | 字符 | ASCII值 | 字符 | ASCII值 | 字符 |
0 | NUT | 32 | (space) | 64 | @ | 96 | 、 |
1 | SOH | 33 | ! | 65 | A | 97 | a |
2 | STX | 34 | " | 66 | B | 98 | b |
3 | ETX | 35 | # | 67 | C | 99 | c |
4 | EOT | 36 | $ | 68 | D | 100 | d |
5 | ENQ | 37 | % | 69 | E | 101 | e |
6 | ACK | 38 | & | 70 | F | 102 | f |
7 | BEL | 39 | , | 71 | G | 103 | g |
8 | BS | 40 | ( | 72 | H | 104 | h |
9 | HT | 41 | ) | 73 | I | 105 | i |
10 | LF | 42 | * | 74 | J | 106 | j |
11 | VT | 43 | + | 75 | K | 107 | k |
12 | FF | 44 | , | 76 | L | 108 | l |
13 | CR | 45 | - | 77 | M | 109 | m |
14 | SO | 46 | . | 78 | N | 110 | n |
15 | SI | 47 | / | 79 | O | 111 | o |
16 | DLE | 48 | 0 | 80 | P | 112 | p |
17 | DCI | 49 | 1 | 81 | Q | 113 | q |
18 | DC2 | 50 | 2 | 82 | R | 114 | r |
19 | DC3 | 51 | 3 | 83 | S | 115 | s |
20 | DC4 | 52 | 4 | 84 | T | 116 | t |
21 | NAK | 53 | 5 | 85 | U | 117 | u |
22 | SYN | 54 | 6 | 86 | V | 118 | v |
23 | TB | 55 | 7 | 87 | W | 119 | w |
24 | CAN | 56 | 8 | 88 | X | 120 | x |
25 | EM | 57 | 9 | 89 | Y | 121 | y |
26 | SUB | 58 | : | 90 | Z | 122 | z |
27 | ESC | 59 | ; | 91 | [ | 123 | { |
28 | FS | 60 | < | 92 | / | 124 | | |
29 | GS | 61 | = | 93 | ] | 125 | } |
30 | RS | 62 | > | 94 | ^ | 126 | ` |
31 | US | 63 | ? | 95 | _ | 127 | DEL |
ASCII 码大致由以下两部分组成:
- ASCII 非打印控制字符: ASCII 表上的数字 0-31 分配给了控制字符,用于控制像打印机等一些外围设备。
- ASCII 打印字符:数字 32-126 分配给了能在键盘上找到的字符,当查看或打印文档时就会出现。数字 127 代表 Del 命令。
浮点型
单精度浮点型float 和双精度浮点型 float
数据类型 | 占用空间 | 有效数字范围 |
float | 4字节 | 31位有效数字 |
double | 8字节 | 63~64位有效数字 |
运算符
运算符类型 | 作用 |
算术运算符 | 用于处理四则运算 |
赋值运算符 | 用于将表达式的值赋给变量 |
比较运算符 | 用于表达式的比较,并返回一个真值或假值 |
逻辑运算符 | 用于根据表达式的值返回真值或假值 |
位运算符 | 用于处理数据的位运算 |
sizeof运算符 | 用于求字节数长度 |
算术运算符
运算符 | 术语 | 示例 | 结果 |
+ | 正号 | +3 | 3 |
- | 负号 | -3 | -3 |
+ | 加 | 10 + 5 | 15 |
- | 减 | 10 - 5 | 5 |
* | 乘 | 10 * 5 | 50 |
/ | 除 | 10 / 5 | 2 |
% | 取模(取余) | 10 % 3 | 1 |
++ | 前自增 | a=2; b=++a; | a=3; b=3; |
++ | 后自增 | a=2; b=a++; | a=3; b=2; |
-- | 前自减 | a=2; b=--a; | a=1; b=1; |
-- | 后自减 | a=2; b=a--; | a=1; b=2; |
赋值运算符
运算符 | 术语 | 示例 | 结果 |
= | 赋值 | a=2; b=3; | a=2; b=3; |
+= | 加等于 | a=0; a+=2; | a=2; |
-= | 减等于 | a=5; a-=3; | a=2; |
*= | 乘等于 | a=2; a*=2; | a=4; |
/= | 除等于 | a=4; a/=2; | a=2; |
%= | 模等于 | a=3; a%2; | a=1; |
比较运算符
运算符 | 术语 | 示例 | 结果 |
== | 相等于 | 4 == 3 | 0 |
!= | 不等于 | 4 != 3 | 1 |
< | 小于 | 4 < 3 | 0 |
> | 大于 | 4 > 3 | 1 |
<= | 小于等于 | 4 <= 3 | 0 |
>= | 大于等于 | 4 >= 1 | 1 |
逻辑运算符
运算符 | 术语 | 示例 | 结果 |
! | 非 | !a | 如果a为假,则!a为真; 如果a为真,则!a为假。 |
&& | 与 | a && b | 如果a和b都为真,则结果为真,否则为假。 |
|| | 或 | a || b | 如果a和b有一个为真,则结果为真,二者都为假时,结果为假。 |
运算符的优先级
优先级 | 运算符 | 名称或含义 | 使用形式 | 结合方向 | 说明 |
1 | [] | 数组下标 | 数组名[常量表达式] | 左到右 | -- |
() | 圆括号 | (表达式)/函数名(形参表) | -- | ||
. | 成员选择(对象) | 对象.成员名 | -- | ||
-> | 成员选择(指针) | 对象指针->成员名 | -- | ||
2 | - | 负号运算符 | -表达式 | 右到左 | 单目运算符 |
~ | 按位取反运算符 | ~表达式 | |||
++ | 自增运算符 | ++变量名/变量名++ | |||
-- | 自减运算符 | --变量名/变量名-- | |||
* | 取值运算符 | *指针变量 | |||
& | 取地址运算符 | &变量名 | |||
! | 逻辑非运算符 | !表达式 | |||
(类型) | 强制类型转换 | (数据类型)表达式 | -- | ||
sizeof | 长度运算符 | sizeof(表达式) | -- | ||
3 | / | 除 | 表达式/表达式 | 左到右 | 双目运算符 |
* | 乘 | 表达式*表达式 | |||
% | 余数(取模) | 整型表达式%整型表达式 | |||
4 | + | 加 | 表达式+表达式 | 左到右 | 双目运算符 |
- | 减 | 表达式-表达式 | |||
5 | << | 左移 | 变量<<表达式 | 左到右 | 双目运算符 |
>> | 右移 | 变量>>表达式 | |||
6 | > | 大于 | 表达式>表达式 | 左到右 | 双目运算符 |
>= | 大于等于 | 表达式>=表达式 | |||
< | 小于 | 表达式<表达式 | |||
<= | 小于等于 | 表达式<=表达式 | |||
7 | == | 等于 | 表达式==表达式 | 左到右 | 双目运算符 |
!= | 不等于 | 表达式!= 表达式 | |||
8 | & | 按位与 | 表达式&表达式 | 左到右 | 双目运算符 |
9 | ^ | 按位异或 | 表达式^表达式 | 左到右 | 双目运算符 |
10 | | | 按位或 | 表达式|表达式 | 左到右 | 双目运算符 |
11 | && | 逻辑与 | 表达式&&表达式 | 左到右 | 双目运算符 |
12 | || | 逻辑或 | 表达式||表达式 | 左到右 | 双目运算符 |
13 | ?: | 条件运算符 | 表达式1? 表达式2: 表达式3 | 右到左 | 三目运算符 |
14 | = | 赋值运算符 | 变量=表达式 | 右到左 | -- |
/= | 除后赋值 | 变量/=表达式 | -- | ||
*= | 乘后赋值 | 变量*=表达式 | -- | ||
%= | 取模后赋值 | 变量%=表达式 | -- | ||
+= | 加后赋值 | 变量+=表达式 | -- | ||
-= | 减后赋值 | 变量-=表达式 | -- | ||
<<= | 左移后赋值 | 变量<<=表达式 | -- | ||
>>= | 右移后赋值 | 变量>>=表达式 | -- | ||
&= | 按位与后赋值 | 变量&=表达式 | -- | ||
^= | 按位异或后赋值 | 变量^=表达式 | -- | ||
|= | 按位或后赋值 | 变量|=表达式 | -- | ||
15 | , | 逗号运算符 | 表达式,表达式,… | 左到右 | -- |
不同类型数据的转换与运算
转换的方法有两种:
- 自动转换(隐式转换):遵循一定的规则,由编译系统自动完成。
- 强制类型转换:把表达式的运算结果强制转换成所需的数据类型 类型转换的原则:占用内存字节数少(值域小)的类型,向占用内存字节数多(值域大)的类型转换,以保证精度不降低。
- 强制类型转换:把表达式的运算结果强制转换成所需的数据类型 类型转换的原则:占用内存字节数少(值域小)的类型,向占用内存字节数多(值域大)的类型转换,以保证精度不降低。
二 基本语句
2.1表达式语句
C程序设计语言的表达式语句由表达式加上分号“;”组成。
分别由以下几种类:算术表达式、赋值表达式、逗号表达式、关系表达式、逻辑表达式 等...
其一般形式为:
表达式;
执行表达式语句就是计算表达式的值。
2.2 空语句
- 空语句是什么也不执行的语句,一般由分号“;”或大括号"{ }"组成。
- 在程序中空语句可用来作空循环体。
- 一般推荐使用大括号"{ }"来表示空语句,这样更直观
2.3 复合语句
- 把多个语句用括号{}括起来组成的一个语句称复合语句。 在程序中应把复合语句看成是单条语句,而不是多条语句
- 复合语句内的各条语句都必须以分号“;”结尾;此外,在括号“}”外不能加分号。
printf语句
打印格式 | 对应数据类型 | 含义 |
%d | int | 接受整数值并将它表示为有符号的十进制整数 |
%hd | short int | 短整数 |
%hu | unsigned short | 无符号短整数 |
%o | unsigned int | 无符号8进制整数 |
%u | unsigned int | 无符号10进制整数 |
%x,%X | unsigned int | 无符号16进制整数,x对应的是abcdef,X对应的是ABCDEF |
%f | float | 单精度浮点数 |
%lf | double | 双精度浮点数 |
%e,%E | double | 科学计数法表示的数,此处"e"的大小写代表在输出时用的"e"的大小写 |
%c | char | 字符型。可以把输入的数字按照ASCII码相应转换为对应的字符 |
%s | char * | 字符串。输出字符串中的字符直至字符串中的空字符(字符串以'\0‘结尾,这个'\0'即空字符) |
%p | void * | 以16进制形式输出指针 |
%% | % | 输出一个百分号 |
printf附加函数
字符 | 含义 |
l(字母l) | 附加在d,u,x,o前面,表示长整数 |
- | 左对齐 |
m(代表一个整数) | 数据最小宽度 |
0(数字0) | 将输出的前面补上0直到占满指定列宽为止不可以搭配使用- |
m.n(代表一个整数) | m指域宽,即对应的输出项在输出设备上所占的字符数。n指精度,用于说明输出的实型数的小数位数。对数值型的来说,未指定n时,隐含的精度为n=6位。 |
四 选择结构程序设计
4.1 if 语句
4.2 switch语句
4.3 嵌套条件判断语句
4.4三目运算符/三元运算符/条件运算符
五 循环结构设计
5.1 for循环
5.2do_while 循环和 while 循环
5.3 continue 语句和break语句
5.3.1 break语句
在switch条件语句和循环语句中都可以使用break语句:
- 当它出现在switch条件语句中时,作用是终止某个case并跳出switch结构。
- 当它出现在循环语句中,作用是跳出当前内循环语句,执行后面的代码。
当它出现在嵌套循环语句中,跳出最近的内循环语句,执行后面的代码
#include <stdio.h>
int main()
{
int i=0;
// 死循环
while(1)
{
printf("%d\n",i);
i++;
if(i == 10)
{
//如果满足条件跳出循环
break;
}
}
return 0;
}
5.3.2 continue语句
在循环语句中,如果希望立即终止本次循环,并执行下一次循环,此时就需要continue语句
#include<stdio.h>
int main()
{
int i=0;
while(i<=100)
{
//打印所有的偶数
if(i % 2 !=0)
{
i++;
continue;
}
printf("%d\n",i);
i++;
}
return 0;
}
5.4 循环的嵌套
int main(){
int i,j,k; //分别代表时针分针秒针
for(i=0;i<24;i++)
{
for(j=0;j<60;j++){
for(k=0;k<60;k++){
printf("%d : %d :%d\n",i,j,k);
Sleep(960); //系统延迟 //头文件是#include<Windows.h>
system("cls");//清屏 //头文件是#include<stdlib.h>
}
}
}
}
// 打印九九乘法口诀
int main14()
{
// 外层控制行 内层控制列
int i,j;
for(i=1;i<=9;i++){
for(j=1;j<=i;j++){
printf("%d*%d=%d\t",j,i,i*j);
}
printf("\n");
}
return 0;
}
六 数组的定义和引用
数组的定义:在程序设计中,为了方便处理数据把具有相同类型的若干变量按有序形式组织起来——称为数组。
数组就是在内存中连续的相同类型的变量空间。同一个数组所有的成员都是相同的数据类型,同时所有的成员在内存中的地址是连续的。
int main()
{
//在定义数组时直接为数组赋值
//int arr[10]={1,2,3,4,5,6,7,8,9,10};
//int arr[10]={1,2,3,4,5};// 如果数组在定义时候为部分元素赋值,其余部分值为0
// int arr[10]={1};
int arr[]={1,2,3,4,5,6,7,8,9,10};
// printf("%d\n",arr[0]);
// printf("%d\n",arr[1]);
// printf("%d\n",arr[2]);
// printf("%d\n",arr[3]);
int i;
for(i=0;i<10;i++){
printf("%d\n",arr[i]);
}
return 0;
}
6.1 一维数组的定义
- 数组名字符合标识符的书写规定(数字、英文字母、下划线)
- 数组名不能与其它变量名相同,同一作用域内是唯一的
- 方括号[]中常量表达式表示数组元素的个数
- 定义数组时[]内最好是常量,使用数组时[]内即可是常量,也可以是变量
-
冒泡排序#include<stdio.h> #define SIZE 10 int main(){ // C语言不支持动态数组 数组必须在编译时定义长度 // int size; // scanf("%d",&size); // int arr[size]; // int arr[10]={1,2,3,4,5,6,7,8,9,10}; int arr[SIZE]; arr[3]=50; printf("%d\n",arr[3]); // 不能为数组名字赋值 return 0; }
// 冒泡排序 int main(void) { int arr[10]={9,1,2,5,4,6,8,10,7,3}; int temp; int i,j; for(i=0;i<10-1;i++){ // 每次内层循环可以确定一个有效的值 for(j=0;j<10-i-1;j++) { // 在条件判断中如果是小于号是降序 // 如果是大于号是升序 if(arr[j]>arr[j+1]) { temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } } for(i=0;i<10;i++) { printf("%d\n",arr[i]); } }
二维数组的定义和使用
int main() { // 要求求出四名学生三门功课成绩和各个学科的总成绩 int arr[4][3] = { {88,89,99}, {36,66,56}, {60,56,66}, {88,88,88} }; // 求出每名学生的总成绩 int sum=0; int i,j; for(i=0;i<4;i++) { for(j=0;j<3;j++) { sum+=arr[i][j]; } printf("第%d名学生的总成绩为:%d\n",i+1,sum); sum=0;//重新初始化 } sum=0; // 求出每个学科的总成绩 // 将行和列颠倒 for(i=0;i<3;i++) { for(j=0;j<4;j++) { sum+=arr[j][i]; } printf("第%d门学科的总成绩为: %d\n",i+1,sum); sum=0; } return 0; }
6.2 字符串和字符数组
数字0(和字符‘\0’等价)结尾的char数组就是一个字符串,但如果char数组没有以数字0结尾,那么就不是一个字符串,只是普通字符数组,所以字符串是一种特殊的char的数组。
-