类型名称说明char字符类型存放字符的ASCII码int整型存放有符号整数short短整型存放有符号整数long长整型存放有符号整数long long存放有符号整数float单精度浮点型存放精度不高的小数double双精度浮点型存放精度较高的小数数组
根据存放类型的不一样,能够大体分为字符型,整型和浮点型微信
类型大小范围说明函数
int4-231~231-1测试
short2-215~215设计
short(int) 短整型code
long4-231~231-1long (int) 长整型,规定范围不得低于intblog
long long8-263~263-1不低于long类型递归
类型大小范围说明char1-1281270127每一个数字表明一个字符,可是不是全部的字符都是可打印字符游戏
类型大小范围说明float4-3.4e383.4e38**单精度浮点型,精确到小数点67位double8-1.7e3081.7e308**双精度浮点型,精确到小数点后面1617位图片
//定义变量的格式 类型 变量名; int a;
有一些名字拿去作其余做用,好比int 表明整型,这些就称之为关键字
每一个变量名由若干个单词组成,除了第一个单词以外,其他单词首字母所有大写.单词能够是缩写。好比 mciSendString
格式占位符做用%d有符号10进制整型%c字符类型%f单精度浮点型%lf双精度浮点型%s字符数组类型%o无符号8进制整型%x无符号16进制整型
C语言的分支结构主要有if和switch
if(条件) { //语句1 } else { //语句2; } //若是条件知足 执行语句1,若是条件不知足 执行语句2
if(条件1){ 语句1; } else if(条件2) { 语句2; } … else { 语句n; }
switch(变量) { case 状况1: 语句1; break case 状况2: 语句2; break; //... default: break; }
sw itch的case后面只能接整型或者字符型的常量表达式,不能够是小数或者字符
sw itch每一个case后面都有一个break
default语句若是不须要能够不要
对比
好比游戏的操做和贴图,这些都是要屡次执行的,就会用到循环
while(条件) { 语句; //循环{}中语句称之为循环体 } //执行顺序 先判断条件 条件知足执行循环体,不知足直接退出
当条件知足的时候执行循环体,执行以后再去判断条件,条件不知足的时候退出
//打印ASCII码表中的全部字符 int i=0; while(i<128) { printf("%c\t",i++); } //同一个代码能够有多种不一样的写法 熟练使用其中一个循环就行了
w hile循环不要加分号
w hile循环体只有一句的时候能够省略{} 可是不要省略
若是条件知足则会一直进行循环,不知足就会退出循环,因此w hile可能一次都不执行
for循环
for(初始化1;条件2;自增自减3) { 循环体4; } //为了描述方便 给每一个语句都加了一个编号 //执行顺序 先执行初始化语句1,而后判断条件2,条件成立执行循环体4,不成立跳出循环. //循环体执行完毕以后,执行自增语句3 而后判断条件 开始下一轮循环 //简记 1243 243 243
for循环相似w hile循环 一样是先判断而后执行循环体的,不过for的语法比较简单而且相对于w hile更不易写错,因此能够先从for循环开始熟悉
for循环中的两个分号必不可少,其他的部分均可以不要,可是分号必不可少
for循环外面不要加分号!!!! 画重点 if w hile for通常都不要加分号
do while循环
do { //循环体; }while(条件); //;不能少 //do while循环的特色是先执行循环体而后判断条件,若是条件成立进行下一轮循环 //do while的循环体一定会执行一次
do w hile循环条件放在后面,先执行而后判断,若是条件不成立会退出,否则会继续循环
特别说明
跳转语句使用方式做用说明goto跳转到程序的任意位置使用不当会形成代码的可读性差,可维护性差,基本上不用breakbreak;跳出最近的一个循环或者switch若是是循环中的sw itch中的break只能跳出sw itch,若是是多层循环只能跳出最近的一个循环continuecontinue;跳过当前的一轮循环,进入下一轮循环只能和在循环中使用.跳过当前循环,进入下一轮循环returnreturn 返回值;或者return;跳出当前函数主函数中的return会跳出主函数(跳出主函数也就意味着程序结束),其他函数的return是跳出当前的函数.能够跳出多层循环
exit做用 跳出整个程序,是stdlib.h里面的函数,使用的时候须要加上
经常使用写法
exit(0); //里面的数字0表示正常退出,其他数字表示异常退出,不影响代码
在任意地方使用均会跳出整个程序
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dzN3NXey-1570415333052)(D:\微信公众号\Typora\素材\潭州vip\数组.png)]
存放多个相同类型的元素,若是有多个相同类型的元素须要存放,那么可使用数组。
//存放3个成绩 //方式1 单独定义变量 int grade1,grade2,grade3; //方式2 使用数组 int grade[3];
int arr[16];//定义一个数组 数组中能够存放16个int类型数据
若是你想要定义的时候就给里面的元素赋值的话,能够定义的时候直接用=
int arr[16]={1,2,33,2,4,5,6,1,6,7,7,7,8}; //定义的时候给数组元素赋值 //数组元素个数是16,可是后面只有13个值,那么多余的就用0赋值 //若是定义的时候给数组元素赋值,能够省略掉数组大小,用后面赋值的个数做为数组的大小 //int arr[]={1,2,3,4,5}; //此处数组大小是5
//定义数组以后 至关于同时定义了多个变量,若是要使用这些变量,就用数组名加下标的形式去单独访问其中的元素 // [ ] 下标运算符 arr[2]=12; //表示给数组中第二个元素赋值(下标从0开始计算)
for(int i=0;i<16;++i) { printf("%d\t",arr[i]); }
若是要定义几组数据就要用到二维数组,好比说地图,好比说一个学校有20个班级,每一个班级40个学生,这种用一维数组也能够存,不过用二维数组更加方便
定义格式 类型 数组名[ 行 ] [ 列 ] 使用方式 数组名i (使用时候注意,行列都是从0开始的)
//一维数组元素地址打印测试 int arr[12]={1,2,3,4}; for(int i=0;i<12;++i) { printf("%p\t",&arr[i]); }
和一维数组相似,二维数组初始化能够直接在定义的时候赋值
int douArr1[3][4]={{1,2,3,4},{2,2,3,4}}; //每一行单独赋值 int douArr2[3][4]={1,2,3,4}; //先存第一行,而后第二行 以此类推 int douArr3[][4]={1,2,3,4}; //省略行 根据后面赋值判断有多少行
若是是定义的时候赋值,二维数组定义的时候能够省略掉行(不推荐省略)
//一维数组元素地址打印测试 int arr[12]={1,2,3,4}; for(int i=0;i<12;++i) { printf("%p\t",&arr[i]); } //二维数组元素地址打印测试 int douArr[3][4]={1,2,3,4}; for(int i=0;i<3;++i) { for(int j=0;j<4;++j) { printf("%p\t",&douArr[i][j]);//打印地址 } printf("\n"); } //%p用于打印地址的格式占位符 打印的是16进制形式
分析打印结果,发现这些元素地址都是相邻的. 相似一维数组,实质上二维数组的元素存放方式也是一个个相邻存放的,一行存完以后存下一行,从内存角度看,多维数组和一维数组其实没有什么太大的区别,使用的话,能够用以下方式
for(int i=0;i<12;++i) { printf("%d\t",douArr[0][i]); }
基本上二维数组以上的多维数组就用的不多了,规则和二维数组相似,因此掌握了二维数组,多维数组也是同样操做.
用双引号括起来的一串内容是字符串,字符串通常用字符数组存储
char str[20]="hello w orld";//定义字符数组存放一个字符串
字符串末尾都有一个'\0',表示的字符串的结尾,所以在进行和字符串相关的操做,都会用到'\0'
对于一些常常会使用到的(屡次 重复使用)的代码能够将它封装成一个函数,C语言程序的基本组成单位就是函数.
调用方式 函数名(参数)
int fun(int ,int); //函数声明 int main() { fun(3,4); //函数调用 getchar(); return 0; } int fun(int x,int y) //函数定义 { return x>y?x:y; }
int fun(int ,int); //函数声明 形参 int main() { fun(3,4); //函数调用 实参 getchar(); return 0; } int fun(int x,int y) //函数定义 形参 { return x>y?x:y; }
变量要先定义而后才能使用,可是 变量定义位置会影响到使用的范围
在函数或者{}里面定义的变量,出了{}就不能继续使用
在函数外部定义的变量,定义以后整个程序中均可以使用
变量的做用域不同的话,名字能够相同,使用的时候依据就近原则(最近定义的那个变量).
问题1 若是要传递一个数组进去,那么形参和实参要怎么写 问题2 若是想要在函数里面修改实参的值 能不能作到
函数实参实参写法函数形参备注int xxint x基本数据类型直接写就行int arr[128]arrint arr[]一维数组传参的时候数组大小是不写的,须要另外传递进去int douArr[3] [4]douArrint douArr[] [4]二维数组传递参数实参直接写数组名,形参省略行号,可是列不能省略
形参名和实参名能够不同,这里只是做为示例,不是意味着须要名字相同
函数直接或者间接调用本身叫作递归,循环均可以用递归实现
递归只是一种解决问题的方式,关键在于找到递归公式
//示例 求阶乘 //思考 n!=1*2*3*4*.....*(n-1)*n //能够获得递归公式 n!=n*(n-1) //当n==1的时候 n!=1 int Fn(int n) //求n的阶乘 { if(n>1) { return Fn(n-1)*n; } else { return 1; } }