03-C语言编码规范和变量
目录:
一、C语言的编程规范
1 语句可以分开放在任意位置
2 空格可以让代码更清晰
3 缩进可以让代码更直观
4 空行可以更好划分逻辑
5 命名使用驼峰标识getName或下划线get_name
二、变量
1 概述:大多数程序会进行大量计算,在计算过程中需要临时保存数据,存储数据的方法没,称之为变量。
2 数据类型,对应内存区域,其值可变,变量有相应的类型和值。
3 变量类型分字符型char、整形int、浮点型float/double、指针、结构、联合等。
4 每次使用前要声明其类型,且声明一次。
int number1;//声明变量,并开辟int类型的内存空间
number1 = 10;//赋值,可以多次赋值,但只保存最后那个值
5 声明一个变量,在使用之前,它是有可能有值,但是是变化的,应该给它初始化。
6 声明变量格式:变量类型 变量名 = 初始值;
7 输出变量值 %d int、%f float、%lf double、%c char
练习:求两个数的差、积、商
三、浮点数据类型float
1 float类型代表浮点数(小数)数值的表示方式
2 输出函数输出内容的时候占位符为%f
3 %.2f 只显示两位有效数字
四、变量名命名规则
1 必须是标识符,函数,宏,实体名也必须使用标识符
2 只能以字母或下划线开头
3 包含字母,下划线或数字
4 大小写敏感
5 不能以关键字冲突
6 标识符理论上,长度无限制,但会被编译器截断
7 标识符最好见名之意
五、变量作用域与生命周期
1 变量作用域,表示一个变量在代码范围内是可以使用的。通常使用{}符号来表示代码范围。
在上一级代码中定义的变量,可以在下一级代码块中使用。下一级代码块中定义的变量,不可以在上一级代码块中使用。
下一级代码块中,如果声明了和上一级名称类型一样的变量,会遵循就近原则。
局部变量:定义在函数中的变量叫局部变量。
全局变量:定义在函数外的变量叫全局变量。
全局变量可以供多个函数使用,而局部变量只可以供当前函数使用。
当全局变量与局部变量重名,依然遵循就近原则。
参数也有作用域,是函数的内部。
2 变量生命周期
当变量存时,就会开辟一块内存空间。
当变量补存在是,就会消除相应的内存空间。
当修饰局部变量的时候加auto(默认),声明变量时,会创建内存空间,当变量超出作用域,就会消除相应的内存空间。
当修饰局部变量的时候加上static,静态局部变量,此时变量的生命周期就会变长,直到程序结束为止。
虽然静态变量的生命周期变长,但作用域依然在函数内部。
auto不可以修饰全局变量,static可以修饰全局变量,加上static只能在本文件中使用,不加在多个文件中都可以使用。
1 #include <stdio.h> 2 int i = 10; 3 void func(){ 4 int i = 10;//auto 自动变量 5 static int j = 20;//静态变量,生命周期到程序的结束 6 i++; 7 j++; 8 printf("func i:%d\n",i); 9 printf("func j:%d\n",j); 10 } 11 int main(int argc, const char * argv[]) 12 { 13 func();//i=11 执行完后销毁了变量i的内存空间 14 func();//i=11 15 // int i = 15; 16 // { 17 // //int i = 11; 18 // printf("block i:%d\n",i); 19 // } 20 // printf("i2:%d\n",i); 21 return 0; 22 }
小结:
作用域:使用代码的范围
生命周期:变量在内存中是否存在
作业:
1 输出个人信息:姓名 年龄 性别 期望薪资 税资*13%
#include <stdio.h>
int main()
{
char name[] = {"ymx"};
int age = 22;
char sex[] = {"男"};
int xinzi = 6000;
int shuizi = 6000 * 0.13;
printf("我的名字是:%s,年龄是:%d,性别:%s,薪资:%d,税资:%d\n",name,age,sex,xinzi,shuizi);
return 0;
}
2 求圆的面积和周长?半径:3.0 π:3.14
#include <stdio.h>
int main()
{
float banjing = 3.0;
float pi = 3.14;
float mianji = pi * banjing * banjing;
float zhouchang = 2 * pi * banjing;
printf("圆面积是:%f,周长是:%f\n",mianji,zhouchang);
return 0;
}
3 求矩形的面积和周长?长:18 宽:15
#include <stdio.h>
int main()
{
int chang = 18;
int kuan = 15;
int mj = chang * kuan;
int zc = 2 * (chang + kuan);
printf("矩形的面积:%d,周长%d\n",mj,zc);
return 0;
}
4.练习:使用程序来模拟放球、取球的问题。
提示:栈,先进后出,后进先出
有网兜存球 -> 数组
放球操作 -> 函数
取球操作 -> 函数
标识 -> 索引
兜满不能放 -> 函数
兜空不能取 -> 函数
得到的是什么球 -> 返回值
测试:123(4满)321(0空)
1 #include <stdio.h> 2 3 //stack网兜 i索引 show显示 isFull isEmpty push放 pop取 4 //ball球 getBall获取球 5 //保存球 网兜 6 7 int stack[3] = {0};//保存球到数组中 8 int i = 0;//索引 9 //判断是否放满 10 int isFull(){ 11 if (i == 3) { 12 return 1;//放满了 13 }else{ 14 return 0;//还可以放 15 } 16 } 17 //放球 18 void push(int ball){ 19 if (!isFull()) { 20 stack[i] = ball; 21 i++; 22 printf("%d号球放好了!\n",i); 23 }else{ 24 printf("已经放满了!\n"); 25 } 26 } 27 //判断是否取完 28 int isEmpty(){ 29 if (i == 0) { 30 return 1;//取完了 31 }else{ 32 return 0;//还没取完 33 } 34 } 35 //取球 36 void pop(){ 37 int getBall = 0; 38 if (!isEmpty()) { 39 i--; 40 getBall = stack[i]; 41 stack[i] = 0; 42 printf("取球成功!取出%d号球\n",getBall); 43 }else{ 44 printf("已经取完了\n"); 45 } 46 } 47 //显示网兜状态 48 void show(){ 49 printf("查看网兜存放状态\n"); 50 for (int i = 0; i < 3; i++) { 51 printf("stack[%d]:%d\n",i,stack[i]); 52 } 53 } 54 int main() 55 { 56 push(1);//放入一号球 57 push(2);//放入二号球 58 push(3);//放入三号球 59 push(4);//放入四号球(只能放3个放不进去了) 60 show();//查看网兜状态 61 printf("i:%d\n",i); 62 pop();//取出3号球 63 show(); 64 pop();//取出2号球 65 show(); 66 pop();//取出1号球 67 show(); 68 pop();//取不出来了 69 return 0; 70 }