学习来源 b站--作者:小甲鱼--【C语言】C语言视频教程(孤独自学 - up主)
关键字
autobreakcasecharconst continuedefaultdo double else enum extern float for goto if int long register return short signed static sizof struct switch typedef union unsigned void volatile while
数据类型
基本数据类型、构造数据类型(数组类型、结构体类型)、指针类型、空类型
常量与变量
在程序执行过程中,其值不发生改变的量称为常量,其值可变的量称为变量。
在程序执行过程中,其值不发生改变的量称为常量
符号常量:#define 标识符 常量
#define是一条预处理命令(预处理命令都以"#"开头),称为宏定义命令。一经定义,以后在程序中所有出现该标识符的地方均代之以该常量值。习惯上符号常量的标识符用大写字母,变量标识符用小写字母,以示区别。
其值可以改变的量称为变量
一个变量应该有一个名字,在内存中占据一定的存储单元。变量定义必须放在变量使用之前。一般放在函数体的开头部分。
整型常量
在C语言中,使用的整常数有八进制、十六进制和十进制三种。如果使用的数超过了下面的范围,就必须用长整型数来表示。
十进制整常数,十进制整常数没有前缀。其数码为0~9。无符号整常数的范围为0~65535,有符号数为-32768~+32767。
八进制整常数,八进制整常数必须以0开头,即以0作为八进制数的前缀。数码取值为0~7。八进制数通常是无符号数。表示范围为0~0177777。
十六进制整常数,十六进制整常数的前缀为0X或0x。其数码取值为0~9,A~F或a~f。表示范围为0X0~0XFFFF或0x0~0xFFFF。
整型变量
1) 基本型:类型说明符为int,在内存中占4个字节。
2) 短整量:类型说明符为short int或short。所占字节和取值范围均与基本型相同。
3) 长整型:类型说明符为long int或long,在内存中占4个字节。
4) 无符号型:类型说明符为unsigned。
实型常量(实型常量也称为实数或者浮点数)
十进制数形式,由数码0~ 9和小数点组成(注:必须有小数点。)
指数形式,由十进制数,加阶码标志“e”或“E”以及阶码(只能为整数,可以带符号)组成。
一般形式:a E n(a为十进制数,n为十进制整数)
标准C允许浮点数使用后缀。后缀为“f”或“F”即表示该数为浮点数。如356f和356.是等价的。
小数部分占的位(bit)数愈多,数的有效数字愈多,精度愈高。
实型变量的分类
单精度(float型)、双精度(double型)和长双精度(long double型)
字符型数据
字符常量
1) 字符常量只能用单引号括起来,不能用双引号或其它括号。
2) 字符常量只能是单个字符,不能是字符串。
3) 字符可以是字符集中任意字符。但数字被定义为字符型之后就不能参与数值运算。
字符变量
字符变量用来存储字符常量,即单个字符。(形式:char a,b;)
输出时,%c输出对应字符,%d输出对应ascii码
转义字符
ascii码表
字符串常量
字符串常量占的内存字节数等于字符串中字节数加1。增加的一个字节中存放字符"" (ASCII码为0)。这是字符串结束的标志。
各类型数据之间的混合运算
类型自动转换
强制类型转换(其一般形式为:(类型说明符) (表达式))
无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量的数据长度进行的临时性转换,而不改变数据说明时对该变量定义的类型。
运算符与之间的优先级
如果赋值运算符两边的数据类型不相同,系统将自动进行类型转换
实型赋予整型,舍去小数部分。
整型赋予实型,数值不变,但将以浮点形式存放,即增加小数部分(小数部分的值为0)。
字符型赋予整型,由于字符型为一个字节,而整型为二个字节,故将字符的ASCII码值放到整型量的低八位中,高八位为0。整型赋予字符型,只把低八位赋予字符量。
逗号:a = 表达式1,表达式2。其求值过程是分别求两个表达式的值,并以表达式2的值作为整个逗号表达式的值。
一维数组
int t[15] = {0,1,2,3,4,5,6,7,8,9}
数组名就是就是数组一个元素的地址
动态赋值:scanf(“%d”,&t[0])
冒泡
for(i = 0; i< n-1; i++) { for(j = 0; j < n-i-1; j++) { if(a[j]>a[j+1]){ temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; } } }
二维数组
a[3][4] = {{1,2,3,5},{4,5,6,9},{2,5,6,3}};
a[3][4] = {1,2,3,5,4,5,6,9,2,5,6,3};
a[3][4] = {{1},{4},{2}};
可省略第一个[]里的数(多维也适用)
宏省略:
#if(0)
***
#endif
***
二维数组行列交换
#include <stdio.h>int main(void) { int a[2][3] = {{1,2,3},{4,5,6}}; int b[3][2], i ,j; printf("array a:
"); for(i = 0; i <= 1; i++) { for(j = 0; j <= 2;j++) { printf("]",a[i][j]); b[j][i] = a[i][j]; } printf("
"); } printf("array b:
"); for(i = 0; i <= 2; i++) { for(j = 0; j <= 1; j++) { printf("]",b[i][j]); } printf("
"); } return 0;}
结果:
数组求最大值
#include<stdio.h>int main(){int i, j, row = 0, colum = 0, max;int a[3][4] = {{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};max = a[0][0];for(i = 0;i <= 2; i++){ for(j = 0; j <= 3; j++) { if(a[i][j] > max) { max = a[i][j]; row = i; colum = j; } }}printf("max = %d, row = %d, colum = %d",max,row,colum);return 0;}
结果:
计算平均成绩
#include <stdio.h>void main(){ int i, j, s=0, average, v[3]; int a[5][3] = { {80,75,92}, {61,65,71}, {59,63,70}, {85,87,90}, {76,77,85} }; for(i=0; i < 3; i++) //表示科目 { for(j=0;j<5;j++) //表示学生 { s = s + a[j][i]; } v[i] = s / 5; s = 0; } average = (v[0] + v[1] + v[2]) / 3; printf("math:%d
languag:%d
Foxpro:%d
", v[0], v[1], v[2]); printf("total:%d
", average);}
结果: