类型名称说明char字符类型存放字符的ASCII码int整型存放有符号整数short短整型存放有符号整数long长整型存放有符号整数longlong存放有符号整数float单精度浮点型存放精度不高的小数double双精度浮点型存放精度较高的小数
根据存放类型的不同,可以大致分为字符型,整型和浮点型
类型大小范围说明
int4-2^31~2^31-1
short2-2^15~2^15
short(int)短整型
long4-2^31~2^31-1long(int)长整型,规定范围不得低于int
longlong8-2^63~2^63-1不低于long类型
类型大小范围说明char1-128~1270~127每个数字代表一个字符,但是不是所有的字符都是可打印字符
类型大小范围说明float4-3.4e38~3.4e38单精度浮点型,精确到小数点6~7位double8-1.7e308~1.7e308双精度浮点型,精确到小数点后面16~17位
//定义变量的格式类型变量名;inta;有一些名字拿去做其他作用,比如int代表整型,这些就称之为关键字
每个变量名由若干个单词组成,除了第一个单词之外,其余单词首字母全部大写.单词可以是缩写。比如mciSendString
格式占位符作用%d有符号10进制整型%c字符类型%f单精度浮点型%lf双精度浮点型%s字符数组类型%o无符号8进制整型%x无符号16进制整型
C语言的分支结构主要有if和switch
if(条件){//语句1}else{//语句2;}//如果条件满足执行语句1,如果条件不满足执行语句2if(条件1){语句1;}elseif(条件2){语句2;}…else{语句n;}
switch(变量){case情况1:语句1;breakcase情况2:语句2;break;//...default:break;}
比如游戏的操作和贴图,这些都是要多次执行的,就会用到循环
while(条件){语句;//循环{}中语句称之为循环体}//执行顺序先判断条件条件满足执行循环体,不满足直接退出当条件满足的时候执行循环体,执行之后再去判断条件,条件不满足的时候退出
//打印ASCII码表中的所有字符inti=0;while(i<128){printf("%c\t",i++);}//同一个代码可以有多种不同的写法熟练使用其中一个循环就好了
for(初始化1;条件2;自增自减3){循环体4;}//为了描述方便给每个语句都加了一个编号//执行顺序先执行初始化语句1,然后判断条件2,条件成立执行循环体4,不成立跳出循环.//循环体执行完毕之后,执行自增语句3然后判断条件开始下一轮循环//简记1243243243for循环类似while循环同样是先判断然后执行循环体的,不过for的语法比较简单并且相对于while更不易写错,所以可以先从for循环开始熟悉
do{//循环体;}while(条件);//;不能少//dowhile循环的特点是先执行循环体然后判断条件,如果条件成立进行下一轮循环//dowhile的循环体必定会执行一次dowhile循环条件放在后面,先执行然后判断,如果条件不成立会退出,不然会继续循环
跳转语句使用方式作用说明goto跳转到程序的任意位置使用不当会造成代码的可读性差,可维护性差,基本上不用breakbreak;跳出最近的一个循环或者switch如果是循环中的switch中的break只能跳出switch,如果是多层循环只能跳出最近的一个循环continuecontinue;跳过当前的一轮循环,进入下一轮循环只能和在循环中使用.跳过当前循环,进入下一轮循环returnreturn返回值;或者return;跳出当前函数主函数中的return会跳出主函数(跳出主函数也就意味着程序结束),其余函数的return是跳出当前的函数.可以跳出多层循环
常用写法
exit(0);//里面的数字0表示正常退出,其余数字表示异常退出,不影响代码在任意地方使用均会跳出整个程序
//存放3个成绩 //方式1单独定义变量 intgrade1,grade2,grade3; //方式2使用数组 intgrade[3]; intarr[16];//定义一个数组数组中可以存放16个int类型数据如果你想要定义的时候就给里面的元素赋值的话,可以定义的时候直接用=
intarr[16]={1,2,33,2,4,5,6,1,6,7,7,7,8}; //定义的时候给数组元素赋值 //数组元素个数是16,但是后面只有13个值,那么多余的就用0赋值 //如果定义的时候给数组元素赋值,可以省略掉数组大小,用后面赋值的个数作为数组的大小 //intarr[]={1,2,3,4,5};//此处数组大小是5 //定义数组之后相当于同时定义了多个变量,如果要使用这些变量,就用数组名加下标的形式去单独访问其中的元素 //[]下标运算符 arr[2]=12; //表示给数组中第二个元素赋值(下标从0开始计算)for(inti=0;i<16;++i){printf("%d\t",arr[i]);}
//一维数组元素地址打印测试 intarr[12]={1,2,3,4}; for(inti=0;i<12;++i) { printf("%p\t",&arr[i]); }和一维数组类似,二维数组初始化可以直接在定义的时候赋值
intdouArr1[3][4]={{1,2,3,4},{2,2,3,4}}; //每一行单独赋值 intdouArr2[3][4]={1,2,3,4}; //先存第一行,然后第二行以此类推 intdouArr3[][4]={1,2,3,4}; //省略行根据后面赋值判断有多少行如果是定义的时候赋值,二维数组定义的时候可以省略掉行(不推荐省略)
//一维数组元素地址打印测试intarr[12]={1,2,3,4};for(inti=0;i<12;++i){printf("%p\t",&arr[i]);}//二维数组元素地址打印测试intdouArr[3][4]={1,2,3,4};for(inti=0;i<3;++i){for(intj=0;j<4;++j){printf("%p\t",&douArr[i][j]);//打印地址}printf("\n");}//%p用于打印地址的格式占位符打印的是16进制形式分析打印结果,发现这些元素地址都是相邻的.类似一维数组,实质上二维数组的元素存放方式也是一个个相邻存放的,一行存完之后存下一行,从内存角度看,多维数组和一维数组其实没有什么太大的区别,使用的话,可以用如下方式
for(inti=0;i<12;++i) { printf("%d\t",douArr[0][i]); }基本上二维数组以上的多维数组就用的很少了,规则和二维数组类似,所以掌握了二维数组,多维数组也是一样操作.
调用方式函数名(参数)
变量要先定义然后才能使用,但是变量定义位置会影响到使用的范围
变量的作用域不一样的话,名字可以相同,使用的时候依据就近原则(最近定义的那个变量).
问题1如果要传递一个数组进去,那么形参和实参要怎么写问题2如果想要在函数里面修改实参的值能不能做到
函数实参实参写法函数形参备注intxxintx基本数据类型直接写就行intarr[128]arrintarr[]一维数组传参的时候数组大小是不写的,需要另外传递进去intdouArr[3][4]douArrintdouArr[][4]二维数组传递参数实参直接写数组名,形参省略行号,但是列不能省略