浅谈C语言中的循环结构
2021-09-10程良萍刘星辰
程良萍 刘星辰
摘要:在C语言程序设计中顺序、选择、循环三大基本结构之一的循环结构由于其具有较高的方便性和灵活性因而被广泛应用于程序设计中。循环结构是指在C语言程序设计中需要反复执行而设计的程序结构,由循环体中的某个条件来判断是否继续执行某个功能。C语言中的循环结构包含三种循环语句:while循环语句、do-while循环语句和for循环语句。本文对循环语句的执行过程进行了探讨、分析和举例,同时针对执行过程的特殊要求引入了break语句和continue语句来实现程序运行的高效性,为C语言程序设计的应用提供了借鉴思路。
关键词:C语言程序设计;while循环语句;do-while循环语句;for循环语句
引言
C语言是一门计算机语言,使用者可以通过它和计算机交流,让计算机完成想做的事情[1]。计算机软件编程通过C语言,能够使编程工作更为便捷,提升编程工作的效率[2]。计算机语言就是指人与计算机之间通讯的语言,是人与计算机之间传递信息的媒介。计算机系统最大的特征就是指令通过一种语言的形式传达给机器,使之进行各种工作,C语言就是这种特殊语言中的一种,由字符和语法规则组成计算机能够接受的语言。
1.循环结构中的三种循环语句
1.1 while循环语句
While循环的一般使用格式如下:
图1为while循环的执行过程。在一般使用格式中,“表达式”是循环条件,“语句”是循环体。上述格式的含义为:计算表达式的值,当值为真(非0),执行循环体语句。当值为假(0)时,跳出循环体,执行循环体后面的语句。while后面括号里面的表达式为逻辑值、关系表达式或逻辑表达式,只要表达式的值为真(非0),即可继续循环。由于while循环取决于表达式条件的值,因此,while语句用于满足条件时的循环结构[3],也可用于循环次数不固定或循环次数未知的情况。一旦循环执行完毕(当条件的结果为假时),程序就执行循环后面的代码。表达式括号后面一般不能加“;”,加了会导致循环为空,不会执行循环体。在循环体中要有能改变条件表达式中的语句,如果条件表达式变量不发生改变,那么循环就永远不会结束,从而变成死循环。
1.2 do- while循环语句以及与while的联系与区别
do-while与while相似,只是在结构中有点不同。一般格式如下:
图2为do-while循环的执行过程循环体语句可以是简单语句、复合语句和空语句。do-while的执行步骤一般是:先执行一次循环体语句,然后判斷while括号中的条件表达式的值,若为真(非0),继续执行循环体语句;若为假(0)则退出循环,while循环条件表达式后面必须带“;”,不可省略。与while循环的联系:在使用while语句设计循环结构时遵循的规则对do-while语句也成立,在循环体内部都必须要有改变条件(即逻辑表达式的变量)的语句,否则将造成死循环。一般来讲while循环能解决的问题,do-whie也可以解决,只需要在解决问题的时候,考虑好循环第一次运行的条件即可。
与while循环的区别:while循环需要先进行判断才能进行循环体,而do-while则先执行循环体再对条件变量进行判断,也就是说do-while循环至少会进行一次循环体的运行。
1.3 for循环语句
在C语言中有一种循环不但可以用于循环次数已经确定的情况,也可以用于循环次数不确定的而只给出循环结束条件的情况,这个强大的循环就是for循环结构。for循环语句是C语言所提供的功能更强、使用更广泛的一种循环语句。其语法格式如下:
for循环结构中表达式和语句的作用如下:
表达式1:相当于对条件变量进行初始化,该表达式只在进入循环时,执行一次,在后续的循环过程中不再执行。表达式2:相当于循环结构中的条件判断,一般是关系或逻辑表达式,但也可以是数值表达式和字符表达式,只要这个判断体能进行真假判断即可。表达式3:相当于循环体中对条件变量进行改变即修改计数器(循环变量),使循环变量进行变化,从而使循环程序最终达到退出的条件。每执行一次循环体,就会执行一次该表达式改变循环变量。每个表达式都需要用“;”进行隔开,不能省略。从流程图3中可以看出for循环先进行表达式1,然后用表达式2对循环变量进行判断,若判断为真就进入循环体进行循环语句,再进行表达式3,若判断为假,则直接退出循环进行for循环后面的语句。进行了一次循环后直接从表达式2开始判断从而进入下一次的循环。在for循环中一般可以将表达式1进行省略,写到代码的其他地方,但是“;”不能省略,表达式3也是可以在()中进行省略,将表达式3写到循环体语句中。表达式2语句的位置也可以是空,如果表达式2语句的位置为空的话,表示循环条件永远为真,如果是这样的话,在循环体中就要配合break语句使用,否则for循环语句将无法退出循环[4]。
2.循环结构中的特殊结构和特殊语句
2.1 双循环
双循环又称为循环的嵌套,即在一个循环语句中又有一个完整的循环结构的形式。常见的嵌套式一般为:while循环嵌套,do-while循环嵌套,for循环嵌套,for循环与while循环相互嵌套,while与do-while循环相互嵌套,do-while循环中嵌套for循环。在双循环中一般都是使用for循环的嵌套,流程为,先进行第一个for语句中的表达式1,然后进行表达式2进行判断,为真就进行循环体语句第二个for循环就在循环体语句中,然后进行表达式4,再进行表达式5,这也是为了进行判断,为真就进入第二个for循环的循环体语句,然后执行表达式6,等第二个for循环退出后再执行第一个表达式3,循环上述步骤,直到退出第一个for循环。其语法格式如下:
2.2 break和continue语句
在执行循环语句时,总是需要等条件变量不符合条件时才会退出循环体,如果想中途就退出循环,就可以使用break语句,因为break语句可以不顾循环条件表达式检验的结果。比如,当一个小孩正在打游戏,父母叫他不要打了,可小孩不听,这时父母就会采取一些措施让他强行停下来,这就是break语句[5]。break的功能说明有:1.改变程序的控制力2.如果已执行break语句就不会在执行break后面的语句3.通常与循环中的条件语句一起使用,若条件真,则跳出循环4。某些时候需要创建一个死循环结构这时就可用break来退出循环。
continue语句则是与break语句有一定的区别,continue的作用是跳过循环体后面剩余的语句,结束本次循环,转而进入下一次的循环,不像break那样直接退出循环,一般用来加快循环。所以continue不能强制退出死循环。continue语句只能作用于循环结构不能在其他结构中,通常也是和if语句连用。
3.案例分析
3.1 字符串复制
【问题描述】编写一个字符串复制函数strCopy(),将字符串1中的字符复制到另一个字符串2中,在主函数中调用函数strCopy()并输出复制后的结果。例如,当字符串1为“This is a C program”,则字符串2为“This is a C program”。代码如下:
#include<stdio.h>
void strCopy(char str[]);
int main()
{
char s[100],cop[100],t;
gets(s);
strCopy(s);
return 0;
}
void strCopy(char str[])
{
int i,j;
char str2[100];
j=0;
i=0;
while(str[i]!=’\0’)
{
str2[j]=str[i];
j++;
i++;
}
str2[j]=’\0’;
puts(str2);
}
在此代码中,循环体放入了函数strCopy()中,用了while循环,先对()中的条件语句进行判断,判断字符串1此时的元素是否为‘\0’,因为字符串以‘\0’为结束,判断为真后,进入循环体,将此时的元素赋值给字符串2,并让字符串2的下标加1,再让字符串1的下标加1然后再进行条件语句判断从而进入下一次循环,直到字符串元素为‘\0’退出循环,再让字符串2以‘\0’结束,通过主函数输出出来。此代码就比较直观地表现了while循环的用法。
3.2 九九乘法表
【问题描述】在刚上小学的时候,数学老师就会教我们背诵九九乘法表,九九乘法表也是我们后面学习数学的基础,那时候每次数学课都会看到这个九九乘法表,让我们烂熟于心,但是运用c语言能不能实现九九乘法表呢?答案是可以的。具体代码如下:
#include<stdio.h>
int main()
{
int a[10],i,s,d;
for(i=0;i<9;)
{
i++;
a[i]=i;
for(s=0;s!=a[i];)
{
s++;
d=a[i]*s;
printf(“%d*%d=%d “,a[i],s,d);
}
printf(“\n”);
}
return 0;
}
此代码运用了循环的嵌套俗称双循环,先让i=0,然后进行判断i是否小于9,真就进行循环体,进入循环体先让i自身加1,并存储在数组a[i]中,然后发生循环的嵌套,再进行第二个for循环让s=0,判断s是否不等于这时的a[i],真则进入循环,让s自身加1,再让d等于s乘a[i],并在第二个for循环中输出,当不符合第二个for循环的条件语句后,再进行换行,进入下一次循环,比如:第一次i=1,a[i]=1,则s=1,所以输出为1*1=1;然后进入下一次循环,i=2,a[i]=2,s再次等于1,输出为2*1=2;这时并没有退出第二个for循环,s再进行加1,变为2,所以再输出2*2=4。这个过程循环进行直到输出9*9=81,在个代码中for循环()中的第3个表达式都省略了,为的是更好的进行循环变量的改变,运行结果如图4。
3.3 正数和
【问题描述】从键盘上输入数据,只求所有输入的正数之和,如果输入负数则不累加其和,直到输入0为止。具体代码如下:
#include<stdio.h>
int main()
{
float n,sum=0;
int i=0;
do
{
scanf(“%f”,&n);
if(n<0) continue;
if(n==0) break;
i++;
sum=sum+n;
}while(l)
printf(“你输入了%d个正数,所有正数之和为:%2f\n”,i,sum);
}
这个代码运用了do-while循环,continue和break语句,通过题目要求可以看出只进行正数的相加,当输入负数时则不相加,于是需要进行下一次的循环,这是continue就起到了这个作用,为了当输入0时就退出循环,于是通过if(n==0) break;语句就完成了这个功能,break语句就让循环强行退出,这也體现了这个循环体并不需要特别设置条件变量进行判断,于是while()中就是一个空语句。
4.结束语
所谓循环是指使用一定条件对同一个程序段重复执行若干次,所解决的问题需要执行的若干次基本操作都应该相同或相似。循环的执行需要满足一定的条件,利用此条件可以终止循环,C语言就提供了while,do-while,for这3种循环结构。如何学习循环结构呢?首先,循环结构与选择、顺序结构不同,在实际的问题解决中很少会按照循环的思想考虑如何解决一个问题。因而在学习循环结构的时候,要多分析一些循环的源程序,总结其编写的规律。同时要记住一些常见的算法,如累加、连乘、判断素数、最大公约数、费式数列等,还有枚举、递推的方法。以后出现同样的问题,尽量使用已经具备的算法解决。
参考文献:
[1]韦鹏程,李静,C语言程序设计[M].北京:中国林业出版社,2019.
[2]王华,计算机软件编程中的C语言设计和应用[J].信息与电脑,2020,2:68-70.
[3]戚龙,C语言程序设计中的循环语句应用算法研究[J].计算机产品与流通,2020,7:200-201.
[4]戚龙,C语言程序设计中for循环语句应用算法研究[J].计算机产品与流通,2020,8:11-12.
[5]高茂婵,吕雪,彭星星,孙新杰,浅谈C语言中循环结构程序设计[J].软件设计与开发,2020,16:58-60.
重庆第二师范学院 400065