循环结构、双重循环


一、循环结构的两大元素

循环结构重要思想:一遍一遍的反复做
1.两大元素:循环条件\循环体
当满足循环条件时,则重复执行循环体,直至不满足循环条件,则结束循环
循环条件:什么时候开始,什么时候结束
如:1+2+3+…+100
循环体:做加法
循环条件:1开始,100结束(循环条件变化)

二、while循环

1.表现形式
循环开始初值
while(循环结束条件)
{
循环体
循环条件变化
}

//1+2+3+...+100累加和
#include<stdio.h>

int main(){
	int i,sum=0;
	i=1;
	while(i<=100)
	{
		sum=sum+i;
		i++;
	}
	printf("%d",sum);
} 
//1+3+5+...+99累加和
#include<stdio.h>
int main(){
	int i,sum=0;
	i=1;
	while(i<=99)
	{
	if(i%2==1)
	sum=sum+i;
	i++; 
	}
	printf("%d",sum);
} 
//统计从键盘输入一行字符的个数 
#include<stdio.h>
int main(){
	int n=0;
	char ch;
	ch=getchar();
	while(ch!='\n')
	{
		n++; 
		ch=getchar();
	}
	printf("输入了%d字符",n);
} 

三、do…while循环

1.表现形式
循环开始初值
do
{
循环体
循环条件变化
}while(循环结束条件)

//1+2+3+...+100
#include<stdio.h>

int main(){
	int i,sum=0;
	i=1;
	do
	{
		sum=sum+i;
		i++;
	}while(i<=100);
	printf("%d",sum);
} 
//统计从键盘输入一行字符的个数 
#include<stdio.h>
int main(){
	int n=0;
	char ch;
	ch=getchar();
	do
	{
		n++; 
		ch=getchar();
	}	while(ch!='\n');
	printf("输入了%d字符",n);
} 

四、for循环

1.表现形式
for(循环开始初值;循环结束条件;循环条件变化)
{
循环体
}

//1+2+3+...+100
#include<stdio.h>
int main(){
	int i,sum=0;
	i=1;
	for(i=1;i<=100;i++)
	{
		sum=sum+i;
	}
	printf("%d",sum);
} 
//统计从键盘输入一行字符的个数 
#include<stdio.h>
int main(){
	int n=0;
	char ch;
	for(ch=getchar();ch!='\n';ch=getchar())
	{
		n++; 
	}
	printf("输入了%d字符",n);
} 

五、双重循环

1.表现形式

for(;;)
{
	for(;;)
	{...}
	...
}

2.例

//输出乘法口诀表
#include<stdio.h>
int main()
{
	int i,j;

	for(i=1;i<=9;i++)
	{
		for(j=1;j<=i;j++)
		{
			printf("%d*%d=%d  ",i,j,i*j);
		}
		
		printf("\n");
	} 
			return 0;
} 

六、break语句

1.break:跳出循环
遇到break,整个循环结构提前结束,跳出循环,执行循环结构以外的语句

2.例

//判断一个数是否是素数(只能被1和它本身整除)

#include<stdio.h>
int main(){
	int num,a;
	printf("输入一个整数:");
	scanf("%d",&num);
	
	for(a=2;a<=num-1;a++)
	{
		if(num%a==0)
		break;
	}
	if(a<num)
		printf("%d不是素数",num);
	else
		printf("%d是素数",num);
	return 0;
}

//输出100以内的所有素数,每行输出7个 
#include<stdio.h>
int main(){
	int num,a,n=0;
	for(num=2;num<=100;num++){
	
	for(a=2;a<=sqrt(num);a++)
	{
		if(num%a==0)
		{
			break;
		}
	}
	if(a>sqrt(num)){
	
		printf("%d  ",num);
		n++;
		if(n%7==0)
			printf("\n");
		}
	}
}

3.注意
break能够for,while.do…while,switch
break只能跳出一行

七、continue语句

1.结束本次循环
本次循环终止,但不跳出整个循环,继续开始下一次循环

2.例

//输出20以内3的倍数

#include<stdio.h>
int main()
{
	int num;
	for(num=1;num<=20;num++)
	{
		if(num%3!=0)
			continue;
			
			printf("%d ",num); 
	}
 } 

八、总结

相同点:初值、结束值、条件变化、循环体都有
不同点:外观、初值、结束值、条件变化、循环体写的位置不同
本质:do…while(至少执行依次循环体)
while和for都有可能一次循环体都不执行
循环次数明确时用for

九、练习题

//输出100以内偶数和。
//
//提示:可用求余运算符,一个数除以2的余数为零,就是偶数。
//
//          命令为 if(x%2==0)

#include<stdio.h>

int main(){
	int num,sum=0;

	for(num=1;num<=100;num++)
	{
		if(num%2==0)
		sum=sum+num;
	}
	printf("%d",sum);
} 
//输出100以3的倍数每行输入7个
#include<stdio.h>
int main()
{
	int num,n=0;
	for(num=1;num<=100;num++)
	{
		if(num%3==0)
		{
			printf("%d ",num);
			n++;
		 } 
		 if(n%7==0)
		 printf("\n");
	}
}
//求出所有的水仙花数,并打印出来(总共4个数)
//提示:所谓水仙花数,就是一个3位数,百位数的立方+十位数的立方+个位数的立方和是数本身。
//153就是水仙花数.13+53+33=153.

#include<stdio.h>
int main(){
	int num,ge,shi,bai;
	for(num=100;num<=999;num++)
	{
		ge=num%10;
		shi=num/10%10;
		bai=num/100;
		if((ge*ge*ge+shi*shi*shi+bai*bai*bai)==num){
			printf("%d ",num);
		}
	}
}
//输出从1980年到2020所有的闰年,每行显示5个年份,并计算出有多少个闰年。
//提示:判断闰年条件——能被4整除同时不能被100整除或者能被400整除
#include <stdio.h>
int main(){
	int year,sum=0;
	for(year=1980;year<=2020;year++){
		if(((year%4==0)&&(year%100!=0))||(year%400==0)){
			printf("%d ",year);
			sum++;
			if(sum%5==0)
			printf("\n");
		}
	}
} 

//输出100以内能被3整除且个位数为6的所有整数 
#include<stdio.h>
int main(){
	int num,i;
	for(num=0;num<=100;num++){
		i=num%10;
		if(num%3==0&&i==6)
		printf("%d ",num);
	}
	
}
//从键盘输入的字符中统计数字、大写字母、小写字母和其他符号的个数,用换行符结束循环 

#include<stdio.h>

int main(){
	char ch;
	int space=0,num=0,zm=0,other=0;
	ch=getchar();
	while(ch!='\n'){
		if(ch==' ')
			space++;
		else if(ch>='0'&&ch<='9')
			num++;
		else if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
			zm++;
		else
			other++;
	ch=getchar();
	}
	printf("空格:%d 数字:%d 字母:%d 其他:%d ",space,num,zm,other);
}

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值