一、循环结构的两大元素
循环结构重要思想:一遍一遍的反复做
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);
}