C语言是【结构化的】程序设计语言
1.顺序结构
2.分支(选择)结构 if switch
3.循环结构 while for do while goto
1.什么叫语句?
C语言可分为以下五类
1.表达式语句2.函数调用语句3.控制语句4.复合语句5.空语句
我们主要讲以下 控制语句
控制语句用于控制程序的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成,C语言有九种控制语句。可分为以下三类:
1. 条件判断语句也叫分支语句:if语句、switch语句;
2. 循环执行语句:do while语句、while语句、for语句;
3. 转向语句:break语句、goto语句、continue语句、return语句。
2.分支语句(选择结构)
2.1 if语句
语法结构:
/
if(表达式) 语句1; //多语句时要用{} 不然只执行一行代码 else 语句2; //多分支 if(表达式1) 语句1; else if(表达式2) 语句2; else 语句3;
注意if里的 数据判断等不等为== 【判断语句里 建议把常量放在左边!】
int num = 1; if(5 == num) { printf("hehe\n"); }
/
多种情况的话要利用 ||或 &&并
C语言中0表示假非零表示真
例题,下列代码输出结果为?
#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; }
答案是,什么都不输出!
else总是跟离得最近的if一起构成if else
所以事实上这个是这样的
#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; }
综上所述,代码风格很重要,好的代码风格自己和别人看着都舒服
1. 判断一个数是否为奇数 2. 输出1-100之间的奇数
2.2 switch语句
常常用于多分支的情况,写成 if...else if ...else if 的形式太复杂
switch(整型表达式) 一定要为整形 { 语句项; }
2.21 在switch语句中的 break
在switch语句中,我们没办法直接实现分支,搭配break使用才能实现真正的分支
#include <stdio.h> int main() { int day = 0; 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; } return 0; }
2.2.2 default子句
如果所有case语句都不符合要求,就要多设置一个入口处理数据就要用default
default位置可以放在任何位置但是一般都放在最以后(先处理正常的,再处理其他的)
switch里记得每个判断都要加break哦~
switch语句可以嵌套的(判断以下代码运行结果)
#include <stdio.h> int main() { int n = 1; int m = 2; switch (n) { case 1: m++; case 2: n++; case 3: switch (n) { //switch允许嵌套使用 case 1: n++; case 2: m++; n++; break; } case 4: m++; break; default: break; } printf("m = %d, n = %d\n", m, n); return 0; } 答案是m = 5, n = 3
3. 循环语句
while for do while
3.1 while
这个循环书写方式跟if很像括号里都放判断条件,为真进行语句,然后再返回判断直到为假后退出
比如:在屏幕上打印1-10的数字
#include <stdio.h> int main() { int i = 1; while(i<=10) //判断,直至条件不成立 { printf("%d ", i); i = i+1; } return 0; }
3.1.1 while语句中的break和continue
在循环中只要遇到break,就停止后期的所有的循环,直接终止循环
当我们想在遇到某一句代码时 退出 循环就用break
while中的break是用于永久终止循环的
#include <stdio.h> int main() { int i = 1; while(i<=10) { if(i == 5) break; //条件满足时提前结束循环 printf("%d ", i); i = i+1; } return 0; }
当我们想在遇到某一句代码时想 跳过 此次循环时用continue (continue后面的代码不执行)
continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,
而直接跳转到while语句的判断部分。进行下一次循环的入口判断。
getchar和putchar 只读取或输出一个字符返回值为ASCⅡ码对应的整形读取错误时返回EOF(-1)
#include <stdio.h> int main() { int ch = 0; //getchar返回值为整形! while ((ch = getchar()) != EOF) //oj题上有多组数入就要用这个方式 putchar(ch); return 0; }
按Ctrl+z 回车可以返回一个EOF (end of file)
有时候一下没法,多按几次
scanf跟getchar都是从缓存区里取东西人手动从键盘输入东西进缓存
第一次输入确认回车=\n是不会被scanf拿走的还是停留在缓存区里但是后面的getchar遇到会拿走\n
所以为了避免这种麻烦就用while多组输入来代替
文件的末尾是EOF数组的末尾是\n
3.2 for
前面了解了while循环
int i = 0; //变量初始化 while (i <= 10) //判断 { printf("%d", i); i++; //调整 }
由上代码可看出while的元素很分散而且每变其中一个整个循环都会改变,所以不够稳定
因此产生了for循环
for(表达式1; 表达式2; 表达式3) { 循环语句; }
表达式1 表达式1为初始化部分,用于初始化循环变量的。
表达式2 表达式2为条件判断部分,用于判断循环时候终止。
表达式3 表达式3为调整部分,用于循环条件的调整。
(跟前面while里的可以对应)
3.2.1for循环里也有break和continue的说法跟上面的while里的是一样的
但是for里的continue是退出此次循环来到判断部分,而while循环里是来到判断部分
3.2.2 for语句的循环控制变量
建议: 1. 不可在for 循环体内(代码块内)修改循环变量,防止 for 循环失去控制。
2. 建议for语句的循环控制变量的取值采用“前闭后开区间”写法。
for循环中的初始化部分,判断部分,调整部分是 可以省略 的,但是不建议初学时省略,容易导致问题,【判断省略掉了的话认为判断恒为真】
使用多余一个变量控制循环
int x, y; for (x = 0, y = 0; x<2 && y<5; ++x, y++) { printf("hehe\n"); }