IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言基本知识概念与编程技巧(5) -> 正文阅读

[C++知识库]C语言基本知识概念与编程技巧(5)

本章主要讲述C语言的控制语句

循环能重复执行行为,让程序更加强大,可以灵活便捷的控制程序,并且,重复计算是使用计算机的主要原因。

C语言提供了以下几种循环类型。

①while循环

在while循环中,当给定条件为真时,重复执行语句或语句组。它会在执行循环主体之前测试条件。while循环是一种不确定循环,即在测试表达式为假之前,预先不知道要执行多少次循环。

如下例结构。

double money = 123.45; //最初钱数123.45

while(money < 200) 
{
   money = money + 2.33; //当钱数低于200时,每次获得1.23
}

while后括号内为循环执行条件,当循环条件为真时,这时执行循环。条件为 false 时,退出循环,跳过循环主体(花括号内),程序流将继续执行紧接着 while 循环的下一条语句。

②for循环

for?循环允许您编写一个执行指定次数的循环控制结构。for循环属于计数循环,这类循环在执行循环之前就知道要重复执行多少次。

如下例结构。

for (int money = 123; money < 200; money++) //最初有钱123,当钱数小于200时每次加一
{
   printf("money:%d\n",money); //输出每次增加后的钱数
}

for循环后面的圆括号中有3个表达式,分别用两个分号隔开,被称为控制表达式。for 循环括号内第一个分号前的表达式相当于在循环前定义变量,若前面已经定义,可以只写一个分号,称为初始化。两个分号间的第二部分是判断语句(测试条件),如果为真,则执行循环主体,如果为假,则不执行循环主体,且控制流会跳转到紧接着 for 循环的下一条语句。第三部分的表达式可以用来更新循环使用的变量,同样也可只留一个分号。接着,条件再次被判断,如果为真,则执行循环,这个过程会不断重复(循环主体,然后增加步值,再然后重新判断条件),在条件变为假时,for 循环终止。

③do...while循环

不像?for?和?while?循环,它们是在循环的每次迭代之前测试循环条件,满足条件才能进入循环体,所以有可能根本不执行循环体中的内容这种循环类型被称为入口条件循环。在 C 语言中,do...while?循环是在循环的每次迭代之后检查它的条件,这保证了至少执行了循环体中的内容一次,被称作出口条件循环。

int apple = 1;

do
{
   printf("Apple:%d",apple);
   apple++;

}while(apple < 10); //苹果数量小于10时,实现数量的自增

前三个为程序控制流,后面则介绍分支结构,即C语言的判断语句

④if语句

if语句即分支语句(选择语句),相当于一个交叉点,程序要在两条分支中选择一条执行,通用形式如下。如果括号内的关系表达式为真,则执行语句,否则跳过它。和循环的最大区别,if语句满足条件只执行一次,循环可多次执行。

if (money>food) 
{
    food++;
}

⑤if else语句

if else语句可以在两条语句之间做选择,如下所示

if (money != 0)
{
    printf("Poor"); //为真执行此句
}
else
{
    printf("Rich"); //为假执行它
}

?⑥多重选择else if

else if用来扩展if else,相当于一种变式,用于在多个中选择,避免嵌套if else增加代码量,可以清晰看出各项选择,如下。

if (money < 20)
{
    level = 1;
}
else if (money < 50) //若还使用更多选择,可继续增加else if
{
    level = 2;
}
else (money < 100)
{
    level = 3;
}

⑦循环辅助continue和break

三种循环都可以使用continue语句,而switch语句不能使用。执行到该句时,会跳过本次迭代的剩余部分,并开始下一轮迭代,并且continue语句若存在多层循环中,只影响本层迭代。for循环中,continue语句跳过循环体余下部分后,下一步先执行括号内第三块变量更新,然后才执行测试表达式。do while循环直接跳到while后的条件测试。

for (i = 0;i < 10;i++)
{
    if (i == 4)
        continue; //i为4时跳过后续代码,重新迭代;若此句为break,循环结束
    printf("%d",i);
}

break语句用于终止循环或switch语句的一个case。当程序执行到?break语句时,会终止包含它的那层循环,程序流将继续执行紧接着循环的下一条语句。

⑧多重选择switch和break

二选一可使用if else语句,而当涉及到在多个选项中选择,测试一个变量等于多个值时的情况,一般会使用switch语句解决,每个值称为一个case标签,且被测试的变量会对每个switch case进行检查。通过输入switch后括号内的表达式值,从上到下依次扫描,直到发现一个匹配的值为止,然后程序跳转至那一行,直到遇到break语句为止。若没有匹配的标签,可写default标签行跳转至该行,否则程序继续执行switch后面的语句。格式如下

switch(month)
    {
        case 1:
            printf("您所输入的是一月共31天\n");
            break;
        case 2:
            if(flag == 1) 
                printf("您所输入的是二月共29天\n");
            else
                printf("您所输入的是二月共28天\n"); 
            break;
        case 3:
            printf("您所输入的是三月共31天\n");
            break;
        case 4:
            printf("您所输入的是四月共30天\n");
            break;
        ...... //后面省略,同理
    }


//下面代码等价且更为简洁,并且包括default标签行
/*
多重标签用法如下,多个case连接,由于没有关联break语句,所以程序流直接执行下一条语句
所以,多个case连接,这些标签都指向同个语句,除非遇到break语句进行重定向
*/
switch(month)
{
	case 4: case 6: case 9: case 11: printf("%d月有%d天。", month, 30); 		
        break;
	case 2: printf("%d月有%d天。", month, 27+flag); 
        break;
	default: printf("%d月有%d天。", month, 31);
}
//flag写个判断闰年用于是否加一

遇到break语句,switch终止,控制流将跳转到switch语句后的下一行。虽然case不强制需要包含break,但如果 case 语句不包含break,控制流将会继续后续的 case,直至执行到switch语句末尾为止。所以最好每个case都加上一个break,在每一case语句之后增加break语句,使每一次执行之后均可跳出switch语句,从而避免输出不应有的结果。

对switch语句来说default?case是可选的,出现在switch的结尾。default case可用于在上面所有 case 都不为真时执行一个任务,此语句为可选。

⑨goto语句

C语言中的goto语句允许把控制无条件转移到同一函数内的被标记的语句,但此语句一般不建议使用,因为它使得程序的控制流难以跟踪,使程序难以理解和难以修改。任何使用 goto 语句的程序可以改写成不需要使用 goto 语句的写法,利用if else语句或者循环语句以及continue与break来替代,所以如无必要,尽量不使用此语句。

goto a; //后面为标签名,命名遵循变量命名规则

a: b = 2; //跳转至此标签冒号后的语句

1.循环测试条件括号后面不接分号,只有一条完整的表达式语句才需要接分号,否则此循环的循环体被判断为空语句。

2.循环中若只有单条语句可不用花括号括起,多条语句的复合语句(块)必须用花括号括起。

3.for循环的循环头括号内第一块和第三块可以写入多个表达式,其中用逗号分隔。逗号序列点隔开的表达式从左至右分步执行。整个逗号表达式的值是逗号右侧表达式的值。

4,for循环对比while循环的优势在于,可以将变量初始化和更新直接写在头括号内,减小代码量,第二是便于在循环中索引计数。

5.一般情况下,入口条件循环用的比较多,因为大多数情况测试条件需要在执行循环之前测试,使不满足测试条件时就直接跳过整个循环,且这样使程序的可读性更高。

6.在C 语言中允许在一个循环内使用另一个循环,被称作嵌套循环,也可以在任何类型的循环内嵌套其他任何类型的循环。内层循环在每次外层循环迭代时都执行完所有的循环,可以通过外层循环控制内层循环。

7.若程序中有多个if else,其else与离他最近的if匹配,若含花括号分隔代码块,则遵循正常的缩进匹配逻辑。为了防止逻辑混乱并提高代码的可读性,建议即使只有单条语句也最好使用花括号括起来。

8.switch后括号内一般为指定的一个整数类型常量(包括char型)、枚举类型或者整型常量表达式,与case标签的数据类型相同,且并不能使用变量。

9.由于switch的限制,在某些特定情况也只能选择if else语句。如果根据浮点类型的变量或表达式来选择,就无法使用switch。在涉及变量的范围决定程序流时,依然由于switch的麻烦性,并不适合使用它。

10.在C语言中,一般不使用goto语句,大部分时候goto最适合用于从一组嵌套循环中跳出,,因为break只能跳出当前循环。

11.在判断语句中,如果要测试两个条件,应使用逻辑运算符把两个完整的测试表达式组合起来。

12.for循环当条件表达式不存在时,它被假设为真,由于构成循环的三个表达式中任何一个都不是必需的,您可以将某些条件表达式留空来构成一个无限循环。C 程序员偏向于使用 for(;;) 结构来表示一个无限循环。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-29 12:49:03  更:2021-10-29 12:51:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:40:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码