C语言
- 知识基础
- 控制语句
- 函数
- 输入输出
- 指针和数组
- 用户自定义数据类型
- 文件操作
一、结构化编程
早期编程语言由汇编语言升级而来,编程风格比较随意,程序运行跳转只要符合语法可以任意跳转,使得代码阅读和维护变得十分困难,所以提出结构化编程的设计理念,所有程序必须符合规定的基本结构(顺序结构、选择结构、循环结构)。
顺序结构:最常见、最简单的结构,只需要将C语句按执行顺序依次写下即可,执行顺序是自上而下;例:
#include<stdio.h>
int main(){
int a;
a = 13;
printf("%d\n", a);
return 0;
}
代码规范化:
- 空行,在定义变量,声明等语句之后空行,与执行代码分开;在函数与函数之间空行;这样让你的程序布局更加合理、清晰;
- 空格,在关键字、运算符等需要突出的部分留出空格,应当紧凑的部分适当删掉空格否则显得冗长,例如
for(int i; i <= n; i++) { }
- 缩进,缩进要清晰,成对的括号应当对齐;
- 代码行,一行只书写一个C语句;
- 注释,对于自定义的结构,应该注释其大体功能,便于代码阅读。
//单行注释
/*
多行注释
多行注释
*/
控制语句被用来实现以下两种结构!!!
二、选择结构
1. if 选择结构
一般形式:
if(表达式) 语句1
if(表达式) 语句1 else 语句2
if(表达式1) 语句1 else if(表达式2) 语句2 else if... else 语句n
(特殊的嵌套)
表达式:可以是bool
或int
型,根据表达式结果的不同选择执行不同的分支;
语句:分支语句只能有一条(复合语句也是一条),注意用大括号的使用;这一条分支语句可以是任何的C语句,这也就支持了选择结构的嵌套。
对于多个if
和else
,else
的匹配符合就近原则。
#include<stdio.h>
int mian(){
int a = 0;
if(a == 0){//求表达式“a==0”的值为true
printf("False");//本程序中表达式结果为真,执行if后的语句,输出“False”
} else {
printf("True");//没有选择的分支会被忽略
}
if(a){//求表达式“a”的值为0,等同于bool的false
printf("False");//本程序中表达式false,本分支会被忽略
} else {
printf("True");//不执行语句1,就会转到else后的语句执行,程序输出“True”
}
return 0;
}
三目运算符 ? :
就等价于if else
,同样支持嵌套;
2.多分支选择结构
一般形式:
switch(表达式){
case 常量1 : 语句1
case 常量2 : 语句2
case 常量... : 语句...
case 常量n : 语句n
default : 语句n+1
}
表达式:C语言规定switch
语句选择的表达式值数据类型只能为int
或char
;
常量:均为整型数据;
语句:一个case
分支后面可以跟上不止一条C语句,这些C语句会顺序执行,且这里的顺序执行有 “穿透效果” ,需要使用break
关键字加;
构成的控制语句及时跳出分支选择当中。
#include<stdio.h>
int main(){
char ch = 'b';
int n = 0;
switch(a){
case 'a' : n++;
case 'b' : n++;//选中分支,n==1
case 'c' : n++;//穿透 n==2
case 'd' : n++;//n==3
break;//跳出了分支选择
default : n=0;//不会被执行
}
printf("%d", n);//输出结果为 3
return 0;
}
选择结构的重点在于控制程序跳转方向的表达式的值,由于多层嵌套的存在,让程序分析变得复杂,我们一定要养成良好的习惯和尽量优化、简化自己的判断条件,嵌套深度保持在三层以下。
三、 循环结构
1.while 循环
一般形式:
do 语句 while(表达式);
while(表达式) 语句
这两种结构的循环体(循环结构中的语句称为循环体)一致,只是表达式判断的顺序不同引起不同,while
在前首先执行表达式判断,循环体可能不被执行;while
在后,循环体至少会被执行一次,才会进行表达式判断;
对于循环体,必须是一条语句(复合语句也是一条语句)构成;
对于表达式,有两种情况,必须符合二者其一:
- 循环体中的语句会改变表达式中的变量,使表达式结果发生改变;
- 循环体中包含
break;
语句分支,且执行中会被选择;
如果以上两种情况都不满足,程序将进入死循环,我们的程序将产生错误不能正常运行。
2.for 循环
一般形式:
for(表达式1;表达式2;表达式3) 语句4
for
循环中三个表达式作用是参与循环控制,虽然不参与循环控制也可以写入,但会导致可读性差,代码混乱,所以一般不会这样做。
表达式1:循环变量赋初值,这里可以有多个表达式,用逗号隔开;
表达式2:循环条件,循环控制的关键语句,等价于while
语句中的表达式;
表达式3:循环变量增量,理论上循环体都可以全部写入,用逗号隔开;
以上三个表达式中1、3可以缺省,则与while
形式完全等价
for(表达式1;表达式2;表达式3) 语句
等价于
表达式1;
while (表达式2){
语句
表达式3;
}
3. 改变循环状态
在特定情况之下,我们并不需要对所有的情况全部进行循环,只需要达到某种状态就符合要求可以结束循环?或者我们通过判断在当前情况下不需要执行循环体操作,但仍然希望继续循环,怎么实现?
break;
continue;
这两条控制语句的主要作用就是提前终止循环和提前结束本次循环,需要注意的是它们作用的对象是最近的大括号内的循环语句,在多层循环嵌套中只跳出本层!(break
还用于跳出多分支选择语句)。
return 参数;
goto
以上两条语句也属于控制语句,可以实现程序的转向。
合理使用四条转向语句,不能随意破坏程序的结构化。
四、控制语句的嵌套
以上我们总结了基本控制语句的一般形式和基本用法,C语言之所以能够灵活的实现各种算法,功能,有赖于这些结构的嵌套使用;
关键点:选择结构、循环结构执行语句都为单条,一般为复合语句;
复合语句:作为一条语句
{
语句1
语句2
...
}
关键点:判断条件的表达式,其值可以是bool
或int
型。
练习
编程语言练习 / C语言