代码规范
- 变量命名(有意义,规范 例如:first_time、FirstTime)
- 空格,空行,换行
- 常量写在==等符号左边防止有错仍然运行例如:(5 == num)写成(num = 5)
C语言语句分为五类:
- 表达式语句
- 函数调用语句
- 控制语句
- 复合语句
- 空语句
控制语句 用于控制程序执行的流程,以实现程序的各种结构方式
- 条件判断: if switch
- 循环: do...while ,while,for
- 转向 :break,go...to,continue,return
分支语句
if...else语句
如果表达式的结果为真,则语句执行。0表示假,非0表示真。
#include "stdio.h"
int main(){
int age = 19;
scanf("%d",&age);
if(age < 18){ //条件为真打印
printf("少年\n");
} else if(age >= 18 && age < 28){
printf("青年\n");
} else if (age >= 28 && age < 60){
printf("中年\n");
} else{
printf("老年\n");
}
return 0;
}
悬空else
代码不打印内容,因为a为0不为1条件为假不进入代码块,else看似和第一个if匹配,实则和最近的if匹配也就是b==2的if,所以要加大括号规范编码
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1)
if(b == 2)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
switch语句
常用于多分支的情况,整型表达式(常量 字符);switch允许嵌套,其中的break只能跳出自己的switch语句。
switch(整型表达式)
{
语句项;//case表达式
}
#include "stdio.h"
int main(){
int day = 0;
scanf("%d",&day);
switch (day) {
case 1:
printf("星期一\n");
break;
case 2:
printf("星期二\n");
break;
case 3:
printf("星期三\n");
break;
case 4:
printf("星期四\n");
break;
case 5:
printf("星期五\n");
break;
case 6:
printf("星期六\n");
break;
case 7:
printf("星期日\n");
break;
default:
printf("输入有误\n");
}
return 0;
}
循环语句
while循环
while循环中的:break用于永久的终止循环,continue用于跳过本次循环后面的代码(也就是本次循环中continue后边的代码不会再执行),直接去判断部分,进行下一次循环
while(表达式)
循环语句;
#include "stdio.h"
int main(){
char ch = '\n';
while ((ch = getwchar()) != EOF){
if (ch < '0' || ch > '9'){
continue;
}
putchar(ch);
}
}
for循环
for(表达式1; 表达式2; 表达式3)
循环语句;
表达式1:初始化 、表达式2:条件判断部分 、 表达式3:调整部分
#include "stdio.h"
int main(){
int i = 0;
for (int i = 0; i < 10; ++i) {
if (i == 5){
continue;
}
printf("%d\n",i);
}
return 0;
}
在while循环中存在循环的三个必须条件,但是由于风格的问题使得三个部分很可能偏离较远,这样查找修改就不够集中和方便。所以,for循环的风格更胜一筹;for循环使用的频率也最高。
- 不可在for 循环体内修改循环变量,防止 for 循环失去控制。
- 建议for语句的循环控制变量的取值采用“前闭后开区间”写法。(例如:i=0;i<10;i++)
do...while循环
至少执行一次
do
循环语句;
while(表达式);
#include "stdio.h"
int main(){
int i = 0;
do {
printf("%d\n",i);
if(i == 5){
break;
}
i++;
} while (i <= 10);
return 0;
}
练习:
1.计算 n的阶乘。
int main(){
int n = 0;
int i = 1;
int ret = 1;
scanf("%d",&n);
for (int i = n; i > 0; i--) {
ret = ret * i;
}
printf("%d\n",ret);
return 0;
}
2.在一个有序数组中查找具体的某个数字n。(二分查找法)
#include "stdio.h"
//二分查找
int main(){
int arr[] = {1,2,3,4,5,6,7,8,9};
int k = 7;
int sz = sizeof(arr)/sizeof(arr[0]);
int right = sz-1;
int left = 0;
while (left <= right){
int mid = (left + right) / 2;
if(arr[mid] < k){
left = mid +1;
}else if(arr[mid] > k){
right = mid-1;
} else{
printf("下标是: %d\n",mid);
break;
}
}
if(left > right){
printf("找不到");
}
return 0;
}