产品导航网站源码舆情监控系统
一、编程规范
词法符号
1) 关键字
- 具有特殊意义的字符串(32个关键字) 数据类型: char short int long double float enum void存储类型 : auto static register extern const volatile (修饰符)结构体、共用体 struc union控制语句: if else switch case default while for do goto求字节长度 : sizeof符号: signed unsigned取别名: typedef辅助控制语句: return break continue
2) 标识符
- 程序中不能出现仅靠大小写区分的相似的标识符
- 所有宏定义、枚举常数、常量(只读变量)全用大写字母命名,用下划线分割单词
3) 运算符
- 算术运算符(+、-、/、%)
- 赋值运算符
- 关系运算符(比较运算符)
- 逻辑运算符
- 位运算符(&按位与 |按位或 ^按位异或)
- 三元运算符(表达式?表达式1:表达式2)
4) 标点符号
变量、常量命名规则
变量
- 在整个程序的运行过程中,没有变化且不能变化的,我们称之为常量。
- 在程序运行期间,可以改变并且有可能会改变的,我们称之为变量。
- 局部变量 : 在函数内部定义的变量 ; 局部变量没有初始化的时候,值为随机值 ;作用域 : 只作用于当前模块 ;
- 全局变量 : 在函数外部定义的变量 ; 全局变量没有初始化初值为0 ;作用域为全局
- 程序运行时,变量会由数据类型决定占据的存储空间大小
- 一般形式:<存储类型><数据类型><变量名>;
存储类型:
auto : 自动存储,一般都默认为自动存储,可以省略不写 ;static : 静态存储作用 :1. 修饰局部变量延长生命周期;2. 修饰未被初始化的局部变量初值为 03. 限制作用域:修饰全局变量或者函数的时候只允许本文件访问 ;register : 寄存器存储,运行速率快,但是寄存器数量有限extern : 外部存储,一般用作外部说明 ; - 变量名命名规则:
1) 变量名的开头必须是字母或下划线,不能是数字。实际编程中最常用的是以字母开头,而以下划线开头的变量名是系统专用的。
2) 变量名中的字母是区分大小写的。
3) 变量名不能为C语言的关键字!
4) 变量名中不能有空格。(变量名是字母、数字、下划线的组合)
常量
- 整型常量 :23 023 0x23
- 字符/字符串常量:一个字符由单引号,多个用双引号( ‘A’ 、‘3’、“ABC”、“123”)
- 浮点常量:2.5 2.6
- 指数常量:234.56 == 2.3456e+2 0.000023 == 2.3e-5
- 标识常量:宏定义、宏替换(一般用大写表示)
#define MAX 200
二、运算符的使用
算术运算符
- + - * / %(取余数) ++(自增) --(自减)
关系运算符
- > < == >= <= !=
- a >10 && a < 100 :表示10-100这个范围
逻辑运算符
- &&(与) ||(或) !(非)
- 短路法则:如果有多个表达式,第一个为真,后面的表达式就不再判断
- 逻辑运算的结果只有 真 和 假(0为假,非0为真)
位运算
- ~ :对位进行取反
- & :位与(有0出0)
- | :位或(有1出1)
- ^ :异或(不同出1)
- << :左移位(值相当于乘2)
- >> :右移位(值相当于除2)
赋值运算符
- += -= *= /= %= |= ^= >>= <<=
- eg :a += b ===== a = a+b
条件运算符
- 表达式1 ?表达式2 :表达式3
- 1成立,则执行2,否则执行3
逗号运算符
- (表达式1,表达式2,表达式3........,表达式n)
- 结果为表达式n的值,但是前面的表达式会执行
三、输入输出函数
格式输出printf
int printf(const char *format, ...);格式控制串 输出表
格式控制串:%[修饰符]格式符 控制输出的格式普通字符: 原样的输出格式符:%d ---> 十进制整数%o ---> 八进制%x ---> 十六进制%u ---> 无符号的十进制%c ---> 单个字符%s ---> 字符串%f ---> 浮点数%e ---> 指数%g ---> %f 和 %e 较短的一种%% --->输出%修饰符:m: 输出的域宽,数据长度 < m ,左边补空格,否则实际输出;.n:实数: 小数点的位数字符串:实际输出的位数-: 左对齐+: 在指定有符号前面显示正号l:ld \ lu \ lx \ lo 精度为longlf \ le \ lg 精度为double
格式输入scanf
int scanf(const char *format, ...);
功能:从终端读取
参数: 格式控制串 和地址表
返回值:成功返回输入的个数;
在输入字符的时候会产生垃圾字符;
处理垃圾字符: 1、加空格eg:scanf("%c %c", &ch1, &ch2);scanf("%c ", &ch1);scanf("%c", %ch2);2、抑制符eg:scanf("%c%*c", &ch1);scanf("%c", %ch2);输入: A B --》正常得到结果;3、getchar()scanf("%c", &ch1);getchar(); //将一个空格或者回车获取掉scanf("%c", %ch2);
eg:
scanf("%4d%2d%2d", &year, &mon, &day);
输入:
20230712
结果:year = 2023 mon = 07 day = 12
字符输入输出getchar putchar
函数原型:
int getchar(void);
功能:从终端读取一个字符;
返回值:返回读取到的字符函数原型:
int putchar(int c);
功能:将一个字符输出到终端;
参数:要输出的子字符
返回值:返回输出的字符
字符串输入输出gets puts
char *gets(char *s);
{
功能:读取一个字符串,将字符串读取到s指向的空间;
参数: s为一个指针变量,指向一片空间的首地址
返回值:返回s
注意:输入的字符串长度应该小于s指向的空间大小;
}函数原型:
int puts(const char *s);
功能:
将s指向的字符串输出到终端
返回值:输出的字符个数
puts自带换行功能;
换行:
printf("\n");
putchar('\n');
puts("");
puts("hello")
char buf[32] = "hello";
puts(buf);
四、控制语句
if....else
if(表达式)
{语句块;
}
表示:表达式成立就执行语句块;
//--------------------------------------------------
if(表达式)
{语句块1;
}
else
{语句块2;
}
表示: 如果表达式成立就执行语句块1,否则就执行语句块2;
else 总是与最近的一个if相结合;
//--------------------------------------------------
if(表达式1){语句块1;
}else if(表达式2){语句块2;
}else if(表达式3){语句块3;
}
....
else{
语句块n; //以上都不成立执行语句块n;
}
//------------------------------------------------
if(表达式1){if(表达式2){.....if(表达式n){语句块n; //所有表达式都成立}else{语句块n-1; //表达式n不成立,其他表达式都成立}}else{语句块2;//表达式1成立,表达式2不成立;}
}else{语句块1;//表达式1不成立
}
switch
switch(表达式){case 常量表达式1:语句块1;break;case 常量表达式2:语句块2;break;......case 常量表达式n:语句块n;break;default://表达式和以上常量表达式都不相等执行下面语句语句块 n+1;
}
goto
eg:
AA:
语句块;
......
goto AA;
while
while(表达式){循环体;
}
表达式成立,执行循环体;
do.....while
do{循环体;
}while(表达式);
先执行循环体,再判断表达式;
for
for(表达1;表达式2; 表达式3)
{循环体;
}
for循环顺序:执行表达式1;判断表达式2;表达式2成立 执行循环体,不成立结束;执行表达式三;判断表达式2 ,成立执行循环体,不成立结束;for循环中的表达式可以省略,但是 ';'不能省略;如果表达式2省略,相当于死循环;
辅助控制语句
break: 跳出当前循环(用在switch中跳出switch)
continue:结束本次循环继续下一次循环
return:结束当前函数,也作为函数的返回值;