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语言的第二天:判断与循环 -> 正文阅读

[C++知识库]学习C语言的第二天:判断与循环

生活中我们会面临 各种各样的选择,用计算机解决问题的过程也是如此,需要进行判断和选择的情况是很多的。

目录

(一)判断:

? ? ? ? ? ?if语句:

1. if语句的三种形式:

2. if语句---单分支语句:

3. if...else语句---双分支结构?:

4. if...else if...else语句---多分支结构:?

5. if语句的嵌套:?

switch语句:

1. C语言中的switch语句:

2. switch语句的一般形式:

3. 执行流程:

4. 在使用switch语句时应注意以下几点:

5.实例:

6.嵌套switch语句:

(二)循环

? ? ? ? ? ?while循环:

?do...while循环:

?while与do...while语句的比较:

1. while语句:

2. do...while语句:?

3. 比较:

?for循环:

?break语句:

?continue语句:

?几种循环的比较:

?循环的嵌套:


(一)判断:

? ? ? ? ? ?if语句:

1. if语句的三种形式:

形式结构
if语句单分支结构
if...else语句双分支结构
if...else if...else语句

多分支结构

2. if语句---单分支语句:

  • 语法格式:

if(表达式)

??{

?????语句块

?}

/*如果表达式的值为真,则执行语句块,如果不为真,则跳过语句块。*/

  • 实例:如何判断一个数为正数?
#include <stdio.h>
int main()
/*int main有返回值,int main返回int类型的数据*/

  int a; 
 /*定义一个整数变量a*/

  scanf("%d",&a);
/*&是取地址,scanf读取变量的时候,参数需要的是变量的实际内存地址,%d是占位符,占的就是a的位*/

  if(a>0)
  {
    printf("%d是正数.\n",a);
/*"\n"是转义字符,表示换行*/

  }
}

3. if...else语句---双分支结构?:

  • 语法格式:

if(表达式)

{

? ?语句块1

}

else

{

? ?语句块2

}

/*如果表达式的值为真,则执行语句块1,如果不为真,则跳过语句块1,执行语句块2。*/

  • 实例 :
#include <stdio.h>
 
int main ()
{
   /* 局部变量定义 */
   int a = 100;
 
   /* 检查布尔条件 */
   if( a < 20 )
   {
       /* 如果条件为真,则输出下面的语句 */
       printf("a 小于 20\n" );
   }
   else
   {
       /* 如果条件为假,则输出下面的语句 */
       printf("a 大于 20\n" );
   }
   printf("a 的值是 %d\n", a);
 
   return 0;
}

4. if...else if...else语句---多分支结构:?

  • 用于对多个条件进行判断,从而进行多种不同的处理。
  • 语法格式:

if(表达式1)? {? 语句块1? }

else if(表达式2){? 语句块2? }

else if(表达式3){? 语句块3? }

...

else if(表达式n)? {? 语句块3? }

else? {? 语句块m? }

  • 实例:
#include <stdio.h>
 
int main ()
{
   /* 局部变量定义 */
   int a = 100;
 
   /* 检查布尔条件 */
   if( a == 10 )
   {
       /* 如果 if 条件为真,则输出下面的语句 */
       printf("a 的值是 10\n" );
   }
   else if( a == 20 )
   {
       /* 如果 else if 条件为真,则输出下面的语句 */
       printf("a 的值是 20\n" );
   }
   else if( a == 30 )
   {
       /* 如果 else if 条件为真,则输出下面的语句 */
       printf("a 的值是 30\n" );
   }
   else
   {
       /* 如果上面条件都不为真,则输出下面的语句 */
       printf("没有匹配的值\n" );
   }
   printf("a 的准确值是 %d\n", a );
 
   return 0;
}

5. if语句的嵌套:?

  • if语句的嵌套是指在if语句中又包含一个或多个if语句。
  • 临近原则:else和if成对出现,并且总是与最近的未配对的if配对。
  • 如果使用嵌套语句的话,在if后面使用{ }将要执行的语句括起来,避免代码程序混乱。
  • 在if语句中嵌入if..else语句

? ? ? ?语法格式:

if(表达式1)
{
?? ?if(表达式2) 语句1
?? ?[else 语句2]?
}?

  • ?if子句中嵌入if...else语句

? ? ? ? a)语法格式:

if(表达式1)
{
?? ?if(表达式2) 语句1
?? ?[else 语句2]?
}?
else 语句3?

? ? ? ?b)实例:

#include <stdio.h>
int main()
{
	int x,y;
	printf("please input x:");
	scanf("%d",&x);
	if(x!=0){
		if(x<0)
           y=-1;
		else 
           y=1;
	}
	else 
       y=0;
printf("x=%d,y=%d\n",x,y);
return 0;
}
  • 在else子句中嵌入if...else语句

? ? ? ?a)语法格式:

if(表达式1) {语句1 }?
else?
{
?? ?if(表达式2) 语句2?
?? ?[else 语句3]?
}?

? ? ? b)实例:?

#include <stdio.h>
int main()
{
	int x,y;
	printf("please input x:");
	scanf("%d",&x);
	if(x<0)
	   y=-1;
	else
	   if(x==0) y=0;
	   else y=1;
printf("x=%d,y=%d\n",x,y);
return 0;
}
  • ?在if子句和else子句中分别嵌入if...else语句

? ? ? ? ?语法格式:

if(表达式1)?
{
?? ?if(表达式2) 语句1?
?? ?[else 语句2]?
}?
else
{
?? ?if(表达式3) 语句3
?? ?[else 语句4]?
?}

switch语句:

1. C语言中的switch语句:

  • 在实际问题中常常需要用到多分支的选择,例如:在学生成绩分类中分为:优秀,良好,中等,及格。又例如在人口统计分类中分为:老,中,青,少,儿童。
  • 当问题分支较多时,使用if语句来实现将会使程序冗长且可读性低。
  • switch语句是多分支条件判断语句,它能够根据表达式的值从多个分支中选择一个执行的分支。

2. switch语句的一般形式:

switch(表达式)
{
?? ?case 常量表达式1: 语句块1;break;
?? ?case 常量表达式2: 语句块2;break;
?? ?......
?? ?case 常量表达式n: 语句块n;break;
?? ?default: 语句块n+1?
?}?

3. 执行流程:

  • 首先计算表达式的值?
  • 与各个case后的常量表达式的值比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。
  • 如表达式的值与所有case后常量表达式均不相同,则执行default后的语句。

4. 在使用switch语句时应注意以下几点:

  • 表达式的值为整数,字符,枚举类型。
  • 常量表达式的值必须互不相同,否则会出现分支矛盾的现象。
  • case后面的常量表达式只起标号作用,而不起条件判断作用,即“只是开始执行处的入口标号“。一般情况下需用break语句跳出switch语句。
  • 语句块可以是一条语句,或复合语句,可以不用花括号{}。
  • 各个case和default出现的先后次序,并不影响执行结果,习惯上将default子句放在switch的末尾。
  • 多个case标号可共用一组执行语句。

switch(表达式)
{
?? ?case 常量表达式1:?
?? ?case 常量表达式2:?
?? ?case 常量表达式3: 语句1;break;
?? ?case 常量表达式4: 语句2;break;
?? ?......

5.实例:

#include <stdio.h>
 
int main ()
{
   /* 局部变量定义 */
   char grade = 'B';
 
   switch(grade)
   {
   case 'A' :
      printf("很棒!\n" );
      break;
   case 'B' :
   case 'C' :
      printf("做得好\n" );
      break;
   case 'D' :
      printf("您通过了\n" );
      break;
   case 'F' :
      printf("最好再试一下\n" );
      break;
   default :
      printf("无效的成绩\n" );
   }
   printf("您的成绩是 %c\n", grade );
 
   return 0;
}

6.嵌套switch语句:

  • 即可以在一个switch语句内使用另一个switch语句。即使内部和外部switch的case常量包含共同的值,也没有矛盾。
  • 语法格式:
switch(表达式1) {
   case 常量表达式1: 
      语句1;
      switch(表达式2) {
         case 常量表达式2:
            语句2;
            break;
         case 常量表达式3: 
      }
      break;
   case 常量表达式4: 
}
  • 实例:
#include <stdio.h>
 
int main ()
{
   /* 局部变量定义 */
   int a = 100;
   int b = 200;
 
   switch(a) {
      case 100: 
         printf("这是外部 switch 的一部分\n");
         switch(b) {
            case 200:
               printf("这是内部 switch 的一部分\n");
         }
   }
   printf("a 的准确值是 %d\n", a );
   printf("b 的准确值是 %d\n", b );
 
   return 0;
}

(二)循环

? ? ? ? ? ?while循环:

  • 语法格式:

while(表达式)

{

? ? ? 语句

}

/*“语句”就是循环体。循环体可以是一个简单的语句,可以是复合语句(用花括号括起来的若干语句)。表达式的值为“真”时,就执行循环体语句;为“假”时,就不执行循环语句,退出循环。*/

  • ?实例:
    #include <stdio.h>
     
    int main ()
    {
       /* 局部变量定义 */
       int a = 10;
    
       /* while 循环执行 */
       while( a < 20 )
       {
          printf("a 的值: %d\n", a);
          a++;
       }
     
       return 0;
    }

?do...while循环:

  • 语法格式:

do

{

? ? 语句

}while(表达式);

/*do...while语句的特点是,先无条件地执行循环体,然后判断循环条件是否成立。*/

  • 实例:用do...while语句循环求1+2+3+...+100
#include <stdio.h>
 
int main()
{
   int i=1,sum=0;
   do
   {
       sum=sum+i;
       i++;
   }while(i<=100);
   printf("sum=%d\n",sum);
   return 0;
}

?while与do...while语句的比较:

1. while语句:

  • 含有while的实例:
#include <stdio.h>
int main()
{
	int i,sum=0;
	printf("please enter i,i=?");
	while(i<=10)
	{
		sum=sum+i;
		i++;
	} 
	printf("sum=%d\n",sum);
	return 0; 
}
  • 上述代码当i=1时结果如下图所示:

  • ?上述代码当i=11时结果如下图所示:

2. do...while语句:?

  • 含有do...while的实例:
#include <stdio.h>
int main()
{
	int i,sum=0;
	printf("please enter i,i=?");
	scanf("%d",&i);
	do
	{
		sum=sum+i;
		i++;
	}while(i<=10);
	printf("sum=%d\n",sum);
	return 0; 
}
  • ?上述代码当i=1时结果如下图所示:

  • 上述代码当i=11时结果如下图所示:

3. 比较:

? ? 当while后面的表达式的第一次的值为“真”时,两种循环得到的结果相同;否则,二者结果不相同(指二者具有相同的循环体的情况)。

?for循环:

  • 语法格式:

for(表达式1;表达式2;表达式3)

? ? ?语句

/*表达式1只求解了一次。表达式2是循环的条件,它决定了是否重复执行循环体语句。如果重复执行的话,不仅语句重复执行,而且表达式3也重复执行。如果表达式2为真,那么就会重复执行表达式3和语句,直到表达式2为假,才退出循环。*/

  • 实例:用for语句求1+2+3+...+100
#include <stdio.h>
int main()
{
	int i=1;sum=0;
	for(i=1;i<=100;i++)
	    sum=sum+i;   //实现迭代
	    printf("%d\n",sum);
	return 0;
}
  • ?for语句的各种形式:??

? ? ? ? a)for语句的一般形式中的“表达式1”可以省略,此时应在for语句之前给循环变量赋初值。注意,省略表达式1时,其后的分号不能省略。如:

i=1;

for(? ;i<=100;i++)

sum=sum+i;

? ? ? ?b)如果表达式2省略,即不判断循环条件,循环无终止地进行下去。也就是认为表达式2始终为真。

for(i=1;? ;i++)

? ? ?sum=sum+i;?

? ? ? ?c)表达式3也可以省略,但应另外设法保证循环正常结束。如:

for(i=1;i<=100;? )

{

? ?sum=sum+i;

? ?i++;

}?

? ? ? ?d)可以省略表达式1和表达式3,只有表达式2,即只给循环条件。在这种情况下,完全等同于while语句。可见for语句比while语句功能强,除了可以给出循环条件外,还可以赋初值,使循环变量自动增值等。如:

i=1;

for(? ;i<=100;? )

{

? ? ?sum=sum+i;

? ? ?i++;

}

? ? ? ? e)3个表达式都可省略,即不设初值,不判断条件(认为表达式2为真值),循环变量不增值。无终止地执行循环体。例如:

for(? ;? ;? ;);?

? ? ? ? f)表达式1可以是设置循环变量初值的赋值表达式,也可以是与循环变量无关的其他表达式。表达式1和表达式3可以是一个简单的表达式,也可以是逗号表达式,即包含一个以上的简单表达式,中间用逗号间隔。如:

for(i=1,sum=0;i<=100;i++)

? ? ?sum=sum+i;?

? ? ? ?g)表达式2?一般是关系表达式(如i<=100)或逻辑表达式(如a<b&&x<y),但也可以是整数表达式或字符表达式,只要其值为非0,就执行循环体。如:

for(x=10;x;x--)

? ? ?sum=sum+x;

?break语句:

  • 作用:break语句可以使流程跳出switch结构,还可以用来从循环体内跳出循环体,即提前结束循环,接着执行循环下面的语句。
  • 注意:break语句只能用于循环语句和switch语句之中,而不能单独使用。
  • 语法格式:

break;

  • 实例:
#include <stdio.h>
 
int main ()
{
   /* 局部变量定义 */
   int a = 10;

   /* while 循环执行 */
   while( a < 20 )
   {
      printf("a 的值: %d\n", a);
      a++;
      if( a > 15)
      {
         /* 使用 break 语句终止循环 */
          break;
      }
   }
 
   return 0;
}

?continue语句:

  • 作用:结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定。
  • continue语句只结束本次循环,而非终止整个循环。break语句结束整个循环,不再判断执行循环的条件是否成立。
  • 实例:把100~200范围内不能被3整除的数输出
#include <stdio.h>
int main()
{
	int n;
	for(n=100;n<=200;n++)
	{
		if(n%3==0)
		continue;
		printf("%d",n);
	}
	printf("\n");
	return 0;
 } 

?几种循环的比较:

  • 3种循环都可以用来处理同一问题,一般情况下它们可以互相代替。
  • 用while和do...while循环时,循环变量初始化的操作应在while和do...while语句之前完成。而for语句可以在表达式1中实现循环变量的初始化。
  • 在while和do...while循环中,只在while后面的括号内指定循环条件,因此为了使循环能正常结束,应在循环体中包含使循环趋于结束的语句(如i++,或i=i+1等)。for循环可以在表达式3中包含是循环趋于结束的操作,甚至可以将循环体中的操作全部放到表达式3中。因此for语句的功能更强,凡用while循环完成的,用for循环都能实现。
  • while循环,do...while循环循环和for循环都可以用break语句跳出循环,用continue语句结束本次循环。

?循环的嵌套:

  • 循环的嵌套是指一个循环体内又包含另一个完整的循环结构。3种循环(while循环,do...while循环循环和for循环)可以互相嵌套。
  • while循环中嵌套while循环语句的语法:

while()

{? ...

? while(...)

? {...}

? ...

}

  • while循环中嵌套do...while循环语句的语法:

while(...)

{? ...

? do

? {...}while(...);

? ...

}

  • do...while循环中嵌套do...while循环语句的语法:

do

{? ...

? do

? {...}while(...);

? ...

}while();

  • do...while循环中嵌套for循环语句的语法:

do

{? ...

? for( ; ; )

? {...}

}while(...);

  • for循环中嵌套for循环语句的语法:

for( ; ;)

{

? for( ; ;)

? {...}

}

  • for循环中嵌套while循环语句的语法:

for( ; ;)

{? ...

? while(...)

? {...}

? ...

}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-10-31 11:35:34  更:2022-10-31 11:40:00 
 
开发: 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年5日历 -2024/5/19 6:40:47-

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