循环是C语言的三种基本结构之一,在很多问题中都需要用到循环控制,如1~100之间不能够被7整除的数的和,如果不使用循环的话,我们只能先把1~100不能被7整除的数找出来,然后再求出它们之和,但如果使用循环的话,可以让程序语句从1开始循环,只要是不能够被7整除的数都将被输出并计算累加和,执行完最后一次循环操作后,就能够得到最终结果,这个时候就使用循环语句就很有必要。
1、循环语句结构
循环语句分为四种:while,do...while,for,goto(goto语句不推荐使用,本文不做具体讲述)。每种语句的语句结构不太一样,但都可以在满足限制条件(即表达式)的情况下进行循环,如果满足循环的限制条件,循环将一直进行下去,即死循环(永真循环,如while(1)),但程序并不会报错,但会耗费大量内存,而因此每个循环语句都要有退出循环的条件。
(1)while语句
while语句用来实现“当”循环,即限制条件在前,在while语句之前对循环变量进行初始化,基本结构为:
while(限制条件,如i<100)
{
循环体
如:sum+=i;
i++;
}
循环体如果包含一句以上语句需要用“{ }”,否则循环的范围只包括while()后的第一句。
(2)do...while语句
do...while用来表示“直到”型循环,与while的区别在于,do...while的限制条件在后,执行语句在前,即不管是否满足循环条件要求,do...while语句至少都会执行一次,在循环语句之前对循环变量进行初始化,基本结构为:
do
{
循环体
}
while(限制条件,如i<100);(注意do...while循环中,while()后有“;”)
(3)for语句
for语句也属于“当”循环,和while语句可以进行互换,但while语句使用更为方便简单,也是循环中用得最多的语句,语句基本结构为:
for(变量初始化;限制条件1;执行语句2)
{
执行语句1
}
for循环可以再循环体内在对变量进行初始化,语句的执行顺序为:先对变量进行初始化➡️判断限制条件➡️执行语句1➡️执行语句2
2、循环实例
下面可以通过几个实例来对循环语句进行应用和区分循环语句应用的异同点:
实例一:求1~100的累加和
a.使用while循环
#include <stdio.h>
int main(int argc,constchar * argv[]) {
int i=1,sum=0;
while (i<=100) {
sum=sum+i;
i++;
}
printf("1+2+3+...+100=%d\n",sum);
}
b.使用do...while循环
#include <stdio.h>
int main(int argc,constchar * argv[]) {
int i=1,sum=0;
do
{
sum=sum+i;
i++;
}
while(i<=100);
printf("1+2+3+...+100=%d\n",sum);
}
c.使用for循环
#include <stdio.h>
int main(int argc,constchar * argv[]) {
int sum=0;
for(int i=1;i<=100;i++)
sum=sum+i;
printf("1+2+3+...+100=%d\n",sum);
}
三种语句最后的输出结果都是5050,可以看到for循环代码量最少,而且书写格式更规范,可以避免遗漏变量初始化等问题。当然循环中可以嵌套条件语句,也可以嵌套循环语句。
3.循环的嵌套使用
循环中嵌套循环语句可以解决判断较多,多次使用循环的问题,但是要注意在使用嵌套语句时使用break和continue语句:
(1).break语句为从循环体内跳出循环体,提前结束循环;
(2).continue语句为跳过循环体中本次尚未执行的语句,接着进行下一次循环;
我们看两个实例:
实例1.求1~100之内不能被7整除的数(循环中嵌套条件语句)
#include <stdio.h>
int main(int argc, const char * argv[]) {
int num;
int sum =0;
//使用for循环对不能被7整除的数进行累加
for (num=1;num<=100 ; num++)
{
if (num%7==0)
//循环过程中如果碰到能被7整除的数就跳出本次循环,使用continue
continue;
sum=sum+num;
}
printf("1-100之间不能够被7整除的数的和为%d\n",sum);
}
实例2.输如10个数,对这10个数进行排序(即冒泡排序),本例为循环嵌套循环的实际应用。
#include <stdio.h>
int main()
{
int num[10]={};
int i;
int len=sizeof(num)/sizeof(int);
for (i=0; i<10; i++)
{
printf("请输入数组的第%d个数据\n",i+1);
// 输入数组元素
scanf("%d",&num[i]);
}
//打印数组元素
for(i=0;i<len;i++)
{
printf("%d ",num[i]);
}
printf("\n");
int c;
//外循环每次都比较出len-d中的最大数
for(int d=0;d<len-1;d++)
{
/*定义p=1为了num[1]与num[0]比较,第一轮比较len-1次,
第二轮比较len-2次,第三轮比较len-3次,因此此处for的循环限制条件可写为:len-d
*/
for(int p=1;p<len-d;p++)
//如果后一个数小于前一个数,交换位置,把大的数往后排
if(num[p]<num[p-1])
{
c=num[p-1];
num[p-1]=num[p];
num[p]=c;
}
}
//打印排序后的数组位置
for(i=0;i<10;i++)
{
printf("%d ",num[i]);
}
return 0;
}
循环在实际编程中使用的场景较多,需通过多次练习掌握。
|
|