C语言控制结构

简介:

C语言流程控制

一、流程控制结构

(1)顺序结构:按书写顺序执行每一条语句。

(2)选择结构:对给定的条件进行判断,根据判断结果决定执行哪一段代码。

(3)循环结构:在给定条件成立的情况下,反复执行某一段代码。

二、选择结构-if

(一)if简单使用

1) 第一种结构:

a) 如果条件为真,就执行后面的语句,否则不执行。

if(条件)

{

语句1;

语句2;

····

}

2) 第二种结构:

a) 如果条件成立就执行语句1,否则执行语句2。

if(条件)

{

语句1;

}

else

{

语句2;

}

3) 第三种结构:

a) 先判断条件1,若成立则执行语句1,其它不执行;若条件1不成立,则检查条件2···,【注意】如果条件3成立,则说明前面的都不成立。所有的语句块只有一个会被执行。

if(条件1)

{

语句1;

}

else if(条件2)

{

语句2;

}

else (条件3)

{

语句3;

}

4) 第四种结构:

a) 在这种情况下,当条件成立,只执行语句1,语句2不属于次条件结构,但不推荐此种写法。

If(条件)

语句1;

语句2;

(二)if使用注意

①. 比较大小时,可以把常量值放在左边,变量值放在右边以避免错误。因为if(a==0)也容易被写成if(a=0),而这种情况,编译器并不会报错,推荐使用if(0==a)这种写法。

②. 注意赋值运算符,不要把=写成是==。

③. If(条件)后面不要加分号,这代表是一个空语句,后面的代码块将成为一个独立的代码块。如if(条件);{.....}//需要多加注意

④. 注意作用域的问题,如果要在if后面定义新的变量,则一定要使用大括号。

if(10>6)

{

Int a;//a的作用域在代码块结束后失效

}

Printf(“a=%d”,a);//编译器报错,找不到标识符

if(10>6)

Int a; //这种情况下报错,a的作用域不明确

Printf(“a=%d”,a); //编译器报错,找不到标识符

⑤. If(0){...}随便挑一个数值也可以做条件

(三)If结构练习

问题:输入一个整数seore代表分数,根据分数输出等级(A-E)。

A 90-100 B80-89 C70-79 D60-69 E0-60

代码:


#include<stdio.h>

int main()

{

//定义变量存储分数值

int score;

//提示输入

printf("请输入分值:\n");

//接受输入

scanf("%d",&score);

//判断等级

if(score>=90&&score<=100)

printf("A\n");

else if(score>=80)

printf("B\n");

else if(score>=70)

printf("C\n");

else if(score>=60)

printf("D\n");

else

printf("E\n");

return 0;

}

三、选择结构-switch

(一)switch结构

Switch(值) //通常是变量

{

Case 数值1:

语句1;

Break;

Case 数值2:

语句2;

Break;

Case 数值3:

语句3;

Break;

Default :

语句4;

Break;

}

解说:该结构把数值与数值1进行比较,若相等,则执行后面的所有语句,直到遇见break语句跳出整个循环,若前面的条件都不满足,则最终会执行default后面的语句。如果不写break语句,则后面的语句会接连执行,直到遇到break语句或者是全部语句执行完毕,只要前面的条件成立,则后面的判断就直接被忽略。

(二)Switch使用注意

Char c=‘A’;

Switch(c)

{

Case ‘A’:

语句1;

Break;

Case 65://不能这样写,因为‘A’的ASCII值就是65,会报错

语句2;

Break;

Case 数值3:

Int a=10;

//a的作用域不明确报错,c语言检查变量的作用域根据{}决定,这里可以加{}

Break;

Default :

语句4;

Break;

}

注意:如果要在case后面的语句中定义变量,则必须使用大括号包住。

(三)switch结构练习

问题:输入一个整数seore代表分数,根据分数输出等级(A-E)。

A 90-100 B80-89 C70-79 D60-69 E0-60

代码:


#include<stdio.h>

int main()

{

//定义变量存储分数值

int score;

//提示输入

printf("请输入分值:\n");

//接受输入

scanf("%d",&score);

//判断等级

switch(score/10)

{

case 10:

case 9:

printf("A\n");

case 8:

printf("B\n");

break;

case 7:

printf("C\n");

break;

case 6:

printf("D\n");

break;

default:

printf("E\n");

break;

}

return 0;

}

【对比】if与switch:

1. If语句能够完成的功能,switch有时并不能够完成,如判断if(a>100)

2. 在有些情况下,if语句和switch语句可以互换

3. Switch语句能完成的功能,if语句都可以完成

四、循环结构-while

(一)简单使用

While(条件)

{

语句;

}

解说:先判断条件是否成立,成立则执行,执行完代码后再次判断条件是否成立(判断条件-》执行代码块-》判断条件-》执行代码块···)1.首先确定循环执行的操作,2.在确定约束条件,即需要循环多少次,3.定义一个变量来记录循环的次数。

提示:在while循环体内使用if...break(跳出整个循环)或if...continue语句(跳出本次循环,继续下一次循环判断)。

While结构的运行原理:

①. 如果一开始条件不成立,则永远不会执行循环体。

②. 如果条件成立,则执行一次循环体,执行完毕后再次判断条件是否成立。

③. Break:直接退出整个循环。

④. Continue:结束当前循环体,进行下一轮循环判断。

(二)使用注意

1) While(1){.....}是一个死循环

2) While(a<10);{...}在条件后面加逗号表示循环体是一个空语句,而非{}部分

3) While条件语句后推荐使用{},否则只有第一条语句时循环体

4) 最简单的死循环 while(1);//永远执行空语句,让程序崩溃

(三)While练习

问题:编程实现,提示输入一个正整数n,计算1+2+3+...n的值。

代码:


#include<stdio.h>

int main()

{

//定义变量保存用户输入的整数

int n;

while(n<=0)

{

//提示输入

printf("请输入一个正整数:\n");

//接受输入

scanf("%d",&n);

}

int sum=0;

int number=0;//默认被加的数值

while(number<n)

{

number++;

sum=sum+number;

}

printf("计算结果为:%d\n",sum);

return 0;

}

五、循环结构-do while

Do

{

语句

}while(条件)

特点:do while循环至少会执行一次循环体

六、循环结构-for

(一)基本使用

for(语句1,条件,语句2)

{

循环体

}

语句1:一般为初始化语句

语句2:一般为增量语句(执行完循环体后再执行的语句)

For循环原理:

1) For循环一开始就会执行语句1(整个for循环只会执行一次)

2) 判断条件是否成立,若成立,则执行一次循环体,然后执行语句2,再次判断条件是否成立,若条件不成立则结束循环

3) 顺序为:(语句1-》判断条件-》循环体—》语句2-》判断条件-》循环体···)

【对比】for和while:

在性能上,for循环稍胜一筹,因为while循环只能使用外部的变量,而for循环可以对变量进行及时回收。

(二)for使用注意

①. 不要随便在for语句后面写上分号,如for();{....}

②. 定义变量的作用域不明确错误

for(int i=0;i<5;i++)

Int a=10; //编译器报错,变量作用域不明确

③. For语句中最简单的死循环for(;;);

④. 需要注意变量定义的作用域

Int a=10;

For(int i=0,int a=9;i<5;i++)

{

Int a=10;

Printf(“a=%d\n”,a);//这里打印的a的值是多少?

}

(三)For循环嵌套

用以输出特定格式的内容,如QQ好友列表等,提升可扩展性。

For(in i=0;i<5;i++)

{

//外面的循环控制行数

Printf(“好友列表%d\n”,i);

//内部的循环控制列数

For(int j=1;j<=6;j++)

{

Printf(“好友%d\n”,j);

}

}

(四)For练习

使用for循环输出九九乘法表。//先控制行数,在控制列数

代码:


#include<stdio.h>

int main()

{

for(int i=1;i<=9;i++)

{

for(int j=1;j<=i;j++)

{

printf("%dx%d=%d\t",i,j,i*j);

}

printf("\n");

}

return 0;

}


目录
相关文章
|
2月前
|
网络协议 编译器 Linux
【C语言】结构体内存对齐:热门面试话题
【C语言】结构体内存对齐:热门面试话题
107 0
|
1月前
|
存储 搜索推荐 算法
【数据结构】树型结构详解 + 堆的实现(c语言)(附源码)
本文介绍了树和二叉树的基本概念及结构,重点讲解了堆这一重要的数据结构。堆是一种特殊的完全二叉树,常用于实现优先队列和高效的排序算法(如堆排序)。文章详细描述了堆的性质、存储方式及其实现方法,包括插入、删除和取堆顶数据等操作的具体实现。通过这些内容,读者可以全面了解堆的原理和应用。
81 16
|
6月前
|
C语言
【C语言基础篇】结构控制(中)循环结构
【C语言基础篇】结构控制(中)循环结构
|
2月前
|
编译器 C语言 Python
C语言结构
C语言结构
19 0
|
3月前
|
存储 编译器 程序员
C语言程序的基本结构
C语言程序的基本结构包括:1)预处理指令,如 `#include` 和 `#define`;2)主函数 `main()`,程序从这里开始执行;3)函数声明与定义,执行特定任务的代码块;4)变量声明与初始化,用于存储数据;5)语句和表达式,构成程序基本执行单位;6)注释,解释代码功能。示例代码展示了这些组成部分的应用。
128 10
|
3月前
|
C语言
C语言程序设计核心详解 第四章&&第五章 选择结构程序设计&&循环结构程序设计
本章节介绍了C语言中的选择结构,包括关系表达式、逻辑表达式及其运算符的优先级,并通过示例详细解释了 `if` 语句的不同形式和 `switch` 语句的使用方法。此外,还概述了循环结构,包括 `while`、`do-while` 和 `for` 循环,并解释了 `break` 和 `continue` 控制语句的功能。最后,提供了两道例题以加深理解。
105 7
|
3月前
|
存储 算法 C语言
数据结构基础详解(C语言): 二叉树的遍历_线索二叉树_树的存储结构_树与森林详解
本文从二叉树遍历入手,详细介绍了先序、中序和后序遍历方法,并探讨了如何构建二叉树及线索二叉树的概念。接着,文章讲解了树和森林的存储结构,特别是如何将树与森林转换为二叉树形式,以便利用二叉树的遍历方法。最后,讨论了树和森林的遍历算法,包括先根、后根和层次遍历。通过这些内容,读者可以全面了解二叉树及其相关概念。
|
3月前
|
C语言
C语言程序设计核心详解 第三章:顺序结构,printf(),scanf()详解
本章介绍顺序结构的基本框架及C语言的标准输入输出。程序从`main()`开始依次执行,框架包括输入、计算和输出三部分。重点讲解了`printf()`与`scanf()`函数:`printf()`用于格式化输出,支持多种占位符;`scanf()`用于格式化输入,需注意普通字符与占位符的区别。此外还介绍了`putchar()`和`getchar()`函数,分别用于输出和接收单个字符。
|
3月前
|
存储 机器学习/深度学习 C语言
数据结构基础详解(C语言): 树与二叉树的基本类型与存储结构详解
本文介绍了树和二叉树的基本概念及性质。树是由节点组成的层次结构,其中节点的度为其分支数量,树的度为树中最大节点度数。二叉树是一种特殊的树,其节点最多有两个子节点,具有多种性质,如叶子节点数与度为2的节点数之间的关系。此外,还介绍了二叉树的不同形态,包括满二叉树、完全二叉树、二叉排序树和平衡二叉树,并探讨了二叉树的顺序存储和链式存储结构。
|
4月前
|
C语言
C语言------选择结构
这篇文章是C语言选择结构的入门实训,包括多个练习题及其源代码,旨在帮助读者熟练掌握条件语句和选择结构程序设计方法,并熟悉switch语句和程序调试过程。
C语言------选择结构