C语言学习笔记(二)—— 分支语句和循环语句

C语言是结构化的程序设计语言——顺序结构、选择结构、循环结构;

分支语句:if、switch

循环语句:for、while、do while

goto 语句

一、语句

C语言语句共有如下五类:

3 + 5;  //表达式语句
printf("hehe");  //函数调用语句
;  //空语句
{语句1;语句2;...}// 复合语句
// 控制语句 —— 用于控制程序的执行流程,以实现程序的各种结构方式;

控制语句可分为如下三类:

  1. 条件判断:if、switch
  2. 循环执行:while、do while、for
  3. 转向语句:break、goto、continue、return

二、if 语句

if (表达式1)

{语句1;} —— 表达式1为真执行

elseif (表达式2)

{语句2;}

else

{语句3;}   // if、elseif、else默认只能管后面一条语句,因此最好加上大括号;

// 如果存在多个if,else又没有打括号的情况,else与离它最近的if匹配;

推荐书籍:《高质量C++编程指南》;

代码规范:表达式如果是判断相等,少写一个等号就变成赋值,此时表达式恒为真,且不容易被查出,好习惯是“常数 == 变量”这种形式,如果少了一个等号,编译器会直接报错,减少bug流出;

三、switch 语句

switch(整型表达式)

{

case 整型常量表达式:  // 程序从“整型表达式 == 整型常量表达式”开始执行一直到}为止

        语句;  // 如果想只执行对应语句,需要在语句的后面加break

// case决定入口,break决定出口,如果没有就到}

default:  //如果整型表达式和整型常量表达式没有匹配上,就运行default后面的语句

        语句; // default没有规定一定要放在最后面

}

四、while 循环

while(表达式)  // 表达式为真执行循环语句;

        循环语句;  // 循环语句遇到break立即停止整个循环,遇到continue不运行之后的代码,直接执行下一次循环;

3.1 while循环在输入/输出中的应用

int getchar()从标准输入(键盘)中读取一个字符,返回ASC II码的值,如果读取失败【ctrl+z会读取失败】返回EOF(-1)【end of file】; putchar(int)与之对应为将int对应的ASC II码的字符输出到标准输出流(屏幕)上;

int main()
{
char password [20] = {0};
scanf("%s", password);
printf("确认否,Y/N");
char input = 0;
scanf("%c", input);
if ('Y' == input)
    printf("确认成功");
else
    printf("确认失败");
// 此代码有bug,系统不会二次等待输入Y/N
//而是会从输入缓冲区读取password后面的‘\n’确认永远失败
//改进方法为在读取input之前加入
//while(getchar() != '\n'){;}
return 0;
}

五、for 循环

for(循环变量初始化;循环判断条件;循环变量的调整)  // 优点就是把这三个放在一起,不容易出错
{循环语句;}
// continue和break与while()中使用的相同

建议:1)不可在循环体内修改循环变量,防止循环失控;

推荐书籍:《明解C语言——入门篇》

// for 循环的变种
for (;;) {循环体;}  // 此语句为死循环
// 初始化和调整省略就是什么都不做,如果是判断省略了就是判断恒为真

六、do while 循环

do
    循环语句;
while (表达式);
// continue 和 break 用法与其它循环一致;
// 先执行再判断,使用场景有限,不经常使用。

扩展:

  1. 左值 == 内存空间;右值 == 内存空间存的内容;
  2. 想要有缓冲用Sleep(时间ms)程序会等待(时间ms)后继续运行;
  3. system(“命令”)函数可以执行系统命令,如system(“cls”)清屏;
  4. 字符串比较相等用strcmp(字符串A,字符串B)返回0那么A==B,返回>0的数字表示A>B,返回<0的数字表示A<B;
  5. 字符串长度建议用strlen()函数,会自动去掉最后'\0'的长度;
  6. rand()函数在使用之前需要调用void srand(unsigned int)初始化随机生成器,其中unsigned int传入time()返回的时间戳比较合适,即srand(time(NULL))。注意srand一次只要调用一次,即初始化一次就行。

七、goto 语句

goto语句最好的用场景是跳出深层嵌套循环,不用多个break,直接跳到想去的地方;

int main()
{
标识符:
...
goto 标识符;  //运行到这里以后跳到标识符那里,从标识符那里开始运行
return 0;
}

注意:goto语句是不能跨函数的;

// goto应用示例
#include <stdlib.h>  // system()
#include <string.h>  // strcmp()
int main()
{
char input[20] = {0};
system("shutdown -s -t 60"); //执行系统命令关机,设置,时间,60秒
again:
printf("请注意你的电脑将在一分钟内关闭,如果输入\"我不关机\",则取消关机");
scanf("%s\n", input);  //数组名就是地址,因此在这里input不用取地址
if (strcmp(input == "我不关机") == 0)
    system("shutdown -a");
else
    goto again;
return 0;
}

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值