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>=&&score<=) printf("A\n"); else if(score>=) printf("B\n"); else if(score>=) printf("C\n"); else if(score>=) printf("D\n"); else printf("E\n"); return ; }
三、选择结构-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/) { case : case : printf("A\n"); case : printf("B\n"); break; case : printf("C\n"); break; case : printf("D\n"); break; default: printf("E\n"); break; } return ; }
【对比】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<=) { //提示输入 printf("请输入一个正整数:\n"); //接受输入 scanf("%d",&n); } int sum=; int number=;//默认被加的数值 while(number<n) { number++; sum=sum+number; } printf("计算结果为:%d\n",sum); return ; }
五、循环结构-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=;i<=;i++) { for(int j=;j<=i;j++) { printf("%dx%d=%d\t",i,j,i*j); } printf("\n"); } return ; }
C语言控制结构的更多相关文章
- 关于自学C语言开始时应该注意的问题分享—未完待续......
---恢复内容开始--- 自学C语言编程总结 第1章C语言概述 1. 如果用户将主函数的返回值类型定义为了void,则不需要返回任何值: 2. C语言的基本结构包括主函数和程序体两部分 ...
- 【理论积累】C语言基础理论知识【第一版】
第一个程序 #include <stdio.h> int main(){ printf("Hello World"); } 变量与常量 变量类型:整型[int].字符型 ...
- 【Shell编程】Shell基本语法
Shell 语法 Shell程序设计作为一种脚本语言,在Linux系统中有广泛的应用,本文记录了关于Shell程序设计的基础语法知识和常用命令,方便查询,熟练使用shell也需要经常实践,这对于完 ...
- 《Linux基础知识及命令》系列分享专栏
<Linux基础知识及命令>系列分享专栏 本专题详细为大家讲解了Linux入门基础知识,思路清晰,简单易懂.本专题非常适合刚刚学习Linux的小白来学习,通过学习该专题会让你由入门达到中级 ...
- TCL语言笔记:TCL中的控制结构命令
一.引言 控制结构允许程序根据不同的状态.条件和参数来选择不同的处理和执行路径,从而使代码具有更强的灵活性.健壮性和可读性. Tcl 提供了 if.if/else.if/elseif.foreach. ...
- Go语言学习笔记(三) [控制结构、内建函数]
日期:2014年7月21日 一.控制结构 1.Go中,只有几个控制结构,它没有do或者while循环,有for,灵活的switch语句和if,在switch中可以接受像for那样可选的初始化语 ...
- C语言程序设计(六) 循环控制结构
第六章 循环控制结构 循环结构:需要重复执行的操作 被重复执行的语句序列称为循环体 计数控制的循环 条件控制的循环 当型循环结构 直到型循环结构 for while do-while while(循环 ...
- C语言程序设计(五) 选择控制结构
第五章 选择控制结构 分治策略:任务分解细化 程序设计语言:为了让计算机执行由高级语言编写的程序指令,必须把这些指令从高级语言形式转换成计算机能理解的机器语言形式,这种转换是由编译器来完成的 算法:为 ...
- Python语言程序设计基础(4)—— 程序的控制结构
PM2.5 pm = eval(input()) if pm>=75: print("空气存在污染") else : print("空气没有污染") pr ...
随机推荐
- tensorflow中的kernel/Adam 变量的来源
原因是使用Adam优化函数时,Adam函数会创建一个Adam变量,目的是保存你使用tensorflow创建的graph中的每个可训练参数的动量, words/_word_embeddings:0 bi ...
- h5手势密码开发(使用jq)
直接上代码: 目录结构: 本次开用到的技术jq,以及引入的jq插件jquery.gesture.password.min.js index.html <!DOCTYPE html> < ...
- linux 环境变量设置方法总结(PATH / LD_LIBRARY_PATH)
PATH和LD_LIBRARY_PATH本质都是变量,所谓变量的意思就是由别人赋值产生的,直觉往往会让我们添加和减少这个变量本身的某些路径,实际上这是不正确的.正确的做法是我们要去修改赋予这个变量数值 ...
- Laravel中使用自己的类库三种方式
虽然Composer使得我们可以重用很多现有的类库(例如packagist.org中的),但是我们仍然可能用到一些不兼容composer的包或者类库.另外在某一项目中,我们也可能会创建某一类库,而且可 ...
- 《剑指offer》写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
弱菜刷题还是刷中文题好了,没必要和英文过不去,现在的重点是基本代码能力的恢复. [题目] 剑指offer 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. [思路] 直觉 ...
- ubuntu14.0安装ITK的步骤
(1) sudo apt-get install cmake (2) sudo apt-get install cmake-curses-gui (3)下载安装包InsightToolkit-4.11 ...
- ionic获取ios唯一设备id的解决方案
经常有朋友来问这个问题. 每次都去解释这个问题也浪费不少时间, 所以还是开一篇文章, 把这个问题说清楚吧. 先纠正一个误区吧: 有同学可以通过ionic natvie的device插件获取. 我们在文 ...
- django model 条件过滤 queryset.filter(**condtions) 用法
1.下述代码查询model对应数据库中日期等于2018-05-22的数据: queryset = model.objects.all() condtions: {'date': '2018-05-22 ...
- org.apache.maven.archiver.MavenArchiver.getManifest错误
eclipse导入新的maven项目时,pom.xml第一行报错: org.apache.maven.archiver.MavenArchiver.getManifest(org.apache.mav ...
- 002.etcd使用场景
引用链接: https://blog.csdn.net/linuxheik/article/details/77853119 https://www.cnblogs.com/doscho/p/6221 ...