首页 > 编程语言 >初始C语言——结构化算法的结构

初始C语言——结构化算法的结构

时间:2024-06-10 14:04:15浏览次数:23  
标签:语句 结构化 执行 sum 算法 C语言 while 循环 else

C语言程序是一种程序化程序,也就是说,可以用C语言程序来解决的问题,都可以分解成相互独立的几个部分,每个部分都可以通过简单的语句或结构来实现。一般而言,对于结构化的程序,一个完整的算法可以用“顺序结构”,“分支结构”和“循环结构”的有机组合来表示。

(一)----------顺序结构

也就是一种简单的线性结构,很好理解,执行顺序从上到下执行,也就是A—B—C。(指令A,指令B,指令C可以是一条指令。也可以是多条指令。

(二)----------分支结构(也可以叫判断结构)

特点:程序在执行时,对算法表现出来的某些功能,在程序中不一定都会执行,而是根据条件的不同选择执行不同的功能。

实现分支结构的主要包括“if结构”和“switch结构”

(1)——  if 结构

if结构是常用的一种分支结构,该结构最多只能构成一个二叉结构,即对任何判断条件,该结构只提供两种不同的选择,程序会根据判断条件的不同,选择其中一个执行。

if 结构包括 if 语句,if……else 语句和 if 语句的嵌套

2.1.1    if语句

if语句是最简单的一种但分支结构,其一般形式为:

if(<表达式>)

     <语句A>

<语句A>一般为条件表达式或逻辑表达式。

if语句的结构功能是:先判断<表达式>的逻辑的值,若该逻辑为“真”(在C语言中,0为假,非零数为真),则执行<语句A>,否则,什么也不执行。

注意:if语句中的<语句A>一般情况下都是以复合语句的形式出现,这个时候,就需要用一个花括号把其全部括起来,花括号是“{}”。但是如果只有一条语句,则不需要。

/*for  example,按从小到大的顺序保存变量*/

#include<stdio.h>

int main()

{

	float a, b, t;

	printf("请输入a和b的值:");

		scanf(" %f %f",&a,&b);

			if (a > b)

			{

				t = a;

				a = b;

				b = t;

			}

	printf("a=%f,b=%f\n", a, b);

	return 0;

}

程序运行结果为:  

请输入a和b的值:3.6  3.2

a=3.200000,b=3.600000

2.1.2   if……else 语句

if……else 语句是一种二叉分支结构,其一般形式为:

if(<表达式>)

      <语句A>

else

      <语句B>

if……else 语句的功能:先判断<表达式>的真假,若为真,则执行<语句A>,为假则执行<语句B>

其余的语法和if语句差不多,如果有多条语句则用花括号全部括起来,还有一点,if(<表达式>)和 else 后面不用加分号。

2.1.3   if语句的嵌套

if 语句的嵌套是指在 if 和 else 的分支下又可以包含另一个 if 语句或  if……else 语句。

if 语句的嵌套位置是灵活的,嵌套的层次原则上可以是任意深度。嵌套的形式有两种——规则嵌套和任意嵌套

规则嵌套:

其基本形式为:

if(<表达式1>)

    <语句1>

else if(<表达式2>)

             <语句2>

        else if(<表达式3>)

                ……

                else if(<表达式n>)

                             <语句n>

                        else

                              <语句n+1>

任意嵌套:

任意嵌套是在 if……else 结构中的任一执行框中插入 if 结构或 if……else结构。

重点:在 if……else 语句的嵌套中,要注意 if 和 else 的匹配关系。C语言规定,else 总是与离他最近的上一个 if 配对。

(2)——switch结构

switch语句是一种多路分支开关语句,其语句的一般形式为:
 

switch(<表达式>)

{

    case<常量表达式1>:语句序列1;

    case<常量表达式2>:语句序列2;

    …

    case<常量表达式n>:语句序列n;

    default:语句序列(n+1);

}

常量表达式:常量表达式的值必须是整形、字符型或者枚举型。(字符本质上是整形,因为字符存储的时候存的是它的ASCII值)

switch语句的语法规则:先计算 <表达式> 的值,再从上到下判断与哪一个 <常量表达式> 的值相同,如果 <表达式> 的值等于<常量表达式 i >的值,则从语句序列 i 开始执行,直到语句序列(n+1)为止;如果 <表达式> 的值不等于任何一个<常量表达式>的值,则执行 default 后面的语句序列。(default可以省略,但不建议,因为它的作用是对不正确的情况做出提示。)

break 语句在 switch 语句中的作用:在C语言中,break语句具有特定的含义,起中断和跳出的作用。

如果要求满足第 i 个条件后,只执行 <语句序列 i>,则应该在 <语句序列 i> 后加上一条分支语句 break,构成互相独立的 switch 条件分支。

如果多个 case 后面的语句系列表达式是相同的,则可以省略。并且并不是每一个 case 语句后面都要加上 break 语句,这个根据作用来选择。

/* for example  判断是休息日还是工作日*/

#include<stdio.h>
int main()
{
	int n = 0;
	printf("请输入一个1到7的整数:");
	scanf("%d", &n);
	switch (n)
	{
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:printf("这天为工作日");
		break;
	case 6:
	case 7:printf("这天为休息日");
		break;
	default:printf("输入错误");

    }

    return 0;
}

程序运行结果为:

请输入一个1到7的整数:5

这天为工作日

(三)----------循环结构

C语言提供了三种循环结构语句——for语句、while语句和do…while语句。

(1)——for循环语句

for语句是C语言循环语句中的一种基本形式,它的循环次数是通过一个循环变量来控制的。

3.1.1    包含3个重要组成部分:

(1)初始化循环控制变量

(2)测试循环条件

(3)更新循环控制变量的值

3.1.2    for语句的一般形式为:

for(<初始表达式>;<条件表达式>;<循环变量表达式>)

{

        <循环语句>

}

/* for example 简单几何级数的和*/

#include<stdio.h>
int main()
{
	int i, sum;
	sum = 0;
	for (i = 0; i <= 100; i++)
		sum = sum + i;
	printf("1+2+…+100=%d\n", sum);
	return 0;
}

程序运行结果为:

1+2+3+…+100=5050

3.1.3    for 语句的执行步骤:

(1)计算<初始表达式>的值。

(2) 判断<条件表达式>的值,若该表达式为真,则执行<循环语句>;若为假,则退出循环,执行循环结构外的语句。

(3)计算<循环变量表达式>的值。

(4)转到步骤(2)

3.1.4    for 语句有几个特性:

(1)<初始表达式>可以省略,但必须保留“ ; ”,同时,在for循环之前必须给循环控制变量赋值。(最好不要省略,不然容易产生bug)

形式为:

<初始表达式>

for ( ; <条件表达式> ; <循环变量表达式>)

{       

        <循环语句>

}

(2)<条件表达式>一般不可以省略,否则为无限循环。相当于条件总为真,程序会一直不停的执行,直到“数据溢出“。

(3)<循环变量表达式>亦可以省略,但在循环语句中必须有语句来修改循环变量。也就是相当于给他换了一个位置,可以使条件表达式的值在某一刻为假,使程序能正常结束循环。

比如:

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

{

        sum=sum+i;

        i++;//改变了循环变量

}

(4)3个表达式均可省略,即for(;;),为无限循环,程序中要避免这种情况的发生。

(5)for循环可以嵌套,执行时是先执行最里层的循环,再执行外一层的循环。

(5)条件表达式可以是关系表达式、数值表达式,只要表达式的值不等于零,就执行循环体语句。

(2)——while循环语句

它的一般形式为:

while(<条件表达式>) 

{

        <循环语句>

        <循环变量表达式>

}

/* for example 简单几何级数的和*/

#include<stdio.h>
int main()
{
	int i = 0, sum = 0;
	while (i < =100)
	{
		sum = sum + i;
		i++;
	}
	printf("sum=%d\n", sum);
	return 0;
}

程序执行结果为:

sum=5050

while 语句执行有以下两个步骤:

(1)计算<条件表达式>的值,为真,执行花括号里的循环体;为假,跳出循环。

(2)重复步骤(1)

由于while循环语句是先计算<循环变量表达式>,后决定是否执行<循环语句>,因此,<循环语句>有可能一次也没有执行。

(3)——do…while循环语句

do…while语句是一种用于产生循环动作的语句,它的一般形式为:

do

{

<循环语句>

}while(<条件表达式>);

/*for example 简单几何级数的和*/

#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;
}

程序运行结果为:

sum=5050

do…while 语句的执行有下面两个步骤:

(1)执行<循环语句>

(2)计算条件表达式,若为真,则执行步骤一;若为假,则退出循环语句结构,执行下一条语句。

一般情况下,一定要有可以使<条件表达式>的值为“假”的语句,否则将进入死循环而发生错误。

for 循环、while 循环和 do…while 循环之间的区别和关系总结:

(1)for 循环一般适用于循环次数已知的情况,while 循环适用于循环次数不确定的情况,do…while 循环适用于至少需要执行一次循环体的情况

(2)for 循环和 while 循环都是先判断<条件表达式>再执行<循环语句>,而 do…while 循环语句则是直接执行<循环语句>,所以其最大的区别就是,do…while 循环中的<循环语句>至少会执行一次,而 for 循环和 while 循环中的<循环语句>可能一次也不被执行。

标签:语句,结构化,执行,sum,算法,C语言,while,循环,else
From: https://blog.csdn.net/2401_85438845/article/details/139562059

相关文章