循环结构:(
C语言三种基本结构顺序结构 选择结构 循环结构 之一)
1.三种循环语句
while
一般形式为
while(表达式)
语句
一般表达式是循环条件 ,语句是循环体
eg1: 求1-100 的和
例程:分别使用while与do while
int main(int argc,char *argv[])
{
int sum = 0;
int i = 1;
/*
while(i <= 100)
{
sum += i;
i++;
}
*/
do
{
sum +=i++;
}while(i < 101);
printf("sum = %d\n",sum);
return 0;
}
注意:
1) 循环体用花括号括起来;
2) while语句后面的表达式一般是关系表达式或者是逻辑表达式,但是也可以是其他表达式,只要其值为真就可以了。
while(a)
while(a && b)
while(1);//死循环
3) whlie 语句后面不能再有分号
while(i <= 100); // 错误
{
……
}
eg2:从键盘输入一个数字,判断他是几位数
例程:
int main(int argc,char *argv[])
{
int num;
int count = 0;
scanf("%d",&num);
if(num == 0)
count = 1;
while(num != 0)
{
num = num / 10;
count++;
}
printf("count = %d\n",count);
return 0;
}
do-while
一般形式为:
do
循环体
while(循环语句);
如果第一次进入循环的条件就不满足,那么while循环和do-while循环的结果可能不相同
这两种循环的区别
while循环是先判断再执行
do-while循环是先执行再判断
eg3:从键盘输入字符,判断在\n之前有多少个字符
例程:
int main(int argc,char *argv[])
{
char ch;
int num = 0;
/*
do
{
ch = getchar();
num++;
}while(ch != '\n');
printf("num = %d\n",num-1);
*/
while((ch =getchar() )!= '\n')
{
num++;
}
printf("num = %d\n",num);
return 0;
}
for
一般形式为;
for(expression1;expression2;expression3)
语句;
执行过程:
1) 求解表达式1;
2) 求解表达式2,如果其值为真,就执行for语句执行的内嵌语句(循环体),然后执行下面三步,若其值为假,
则结束循环,转到第五步;
3) 求解表达式3;
4) 转到第2步继续执行;
5) 结束循环,执行for语句后面的语句
最简单的形式
for(i = 1;i <= 100;i++)
sum += i;
printf("sumn = %d\n",sum);
注意:
1) for循环中的表达式1,表达式2,表达式3都是可选项,也就是可以省略,但是; 不能省略;
2) 省略了表达式1,表示不对循环变量赋初值;
i = 1;
for(;i <= 100;i++)
sum += i;
4) 省略了表达式3,则表示不多循环变量进行操作;
5) 表达式1可以是逗号表达式
for(i = 1,sum = 0; i <= 100; sum += i,i++);
eg4:打印9 * 9 乘法表
例程:
break;
break 可以用来从循环体中跳出循环体,即提前结束循环,接着执行循环下面的语句;
注意:
1) break不能和循环语句和switch语句以外的语句连用;
2) break 对if-else 不起作用
3) break语句只能向外跳出一层
eg6: 请输出1000以内的所有素数
例程:
int main(int argc,char *argv[])
{
int i,j;
int num = 0;
for(j = 2;j <= 1000;j++)
{
for(i = 2; i <= j/2;i++)
{
if(j % i == 0)
break;
}
if(i == (j/2 + 1))
{
printf("%d\t",j);
num++;
if(num % 10 == 0)
putchar('\n');
}
}
return 0;
}
continue;
用来结束本次循环(即跳过循环体中尚未执行的部分),接着执行循环是否执行的判断
eg7: 输出100以内的不能被3整除的数
例程:
int main(int argc,char *argv[])
{
int i;
for(i = 1;i <= 100;i++)
{
/*
if(i % 3 != 0)
printf("%d\t",i);
*/
if(i % 3 == 0)
continue;
printf("%d\t",i);
}
return 0;
}
goto;
goto语句是一种无条件转移语句
使用格式
goto 语句标号(标识符)
这个标识符加上一个:一起出现在程序中某处,执行goto语句后,程序会跳转到标号处并执行其后的语句
最大公约数和最小公倍数
1) 穷举法
例程:
int main(int argc,char *argv[])
{
int a,b;
int max;
scanf("%d%d",&a,&b);
int i,j;
if(a > b)
i = b;
else
i = a;
for(j = a; j>= 1;j--)
{
if(a % j == 0 && b % j == 0)
{
max = j;
break;
}
}
printf("max = %d,min = %d\n",max,a*b/max);
return 0;
}
2) 相减法
例程:
int main(int argc,char *argv[])
{
int a,b;
int m,n;
scanf("%d%d",&a,&b);
m = a;
n = b;
while(1)
{
if(b > a)
b = b - a;
else
a = a - b;
if(a == b)
break;
例程:
int main(int argc,char *argv[])
{
int a,b;
int m,n;
scanf("%d%d",&a,&b);
m = a;
n = b;
int c;
if(a < b)
{
c = a;
a = b;
b = c;
}
while(1)
{
c = a % b;
if(c == 0)
break;
else
{
a = b;
b = c;
}
}
printf("max = %d, min = %d\n",b,m*n/b);
return 0;
}
1.三种循环语句
while
一般形式为
while(表达式)
语句
一般表达式是循环条件 ,语句是循环体
eg1: 求1-100 的和
例程:分别使用while与do while
int main(int argc,char *argv[])
{
int sum = 0;
int i = 1;
/*
while(i <= 100)
{
sum += i;
i++;
}
*/
do
{
sum +=i++;
}while(i < 101);
printf("sum = %d\n",sum);
return 0;
}
注意:
1) 循环体用花括号括起来;
2) while语句后面的表达式一般是关系表达式或者是逻辑表达式,但是也可以是其他表达式,只要其值为真就可以了。
while(a)
while(a && b)
while(1);//死循环
3) whlie 语句后面不能再有分号
while(i <= 100); // 错误
{
……
}
eg2:从键盘输入一个数字,判断他是几位数
例程:
int main(int argc,char *argv[])
{
int num;
int count = 0;
scanf("%d",&num);
if(num == 0)
count = 1;
while(num != 0)
{
num = num / 10;
count++;
}
printf("count = %d\n",count);
return 0;
}
do-while
一般形式为:
do
循环体
while(循环语句);
如果第一次进入循环的条件就不满足,那么while循环和do-while循环的结果可能不相同
这两种循环的区别
while循环是先判断再执行
do-while循环是先执行再判断
eg3:从键盘输入字符,判断在\n之前有多少个字符
例程:
int main(int argc,char *argv[])
{
char ch;
int num = 0;
/*
do
{
ch = getchar();
num++;
}while(ch != '\n');
printf("num = %d\n",num-1);
*/
while((ch =getchar() )!= '\n')
{
num++;
}
printf("num = %d\n",num);
return 0;
}
for
一般形式为;
for(expression1;expression2;expression3)
语句;
执行过程:
1) 求解表达式1;
2) 求解表达式2,如果其值为真,就执行for语句执行的内嵌语句(循环体),然后执行下面三步,若其值为假,
则结束循环,转到第五步;
3) 求解表达式3;
4) 转到第2步继续执行;
5) 结束循环,执行for语句后面的语句
最简单的形式
for(i = 1;i <= 100;i++)
sum += i;
printf("sumn = %d\n",sum);
注意:
1) for循环中的表达式1,表达式2,表达式3都是可选项,也就是可以省略,但是; 不能省略;
2) 省略了表达式1,表示不对循环变量赋初值;
i = 1;
for(;i <= 100;i++)
sum += i;
printf("sumn = %d\n",sum);
3) 省略了表达式2,默认就是真,如果不做其他处理会造成死循环
for(;;) - > for(;1;)4) 省略了表达式3,则表示不多循环变量进行操作;
5) 表达式1可以是逗号表达式
for(i = 1,sum = 0; i <= 100; sum += i,i++);
eg4:打印9 * 9 乘法表
例程:
int main(int argc,char *argv[])
{
int i,j;
for(i = 1;i <= 9;i++)
{
for(j = 1;j <= i;j++)
{
printf("%d * %d = %d\t",j,i,i*j);
}
printf("\n");
}
return 0;
}
2.
三种循环辅助控制性语句
break;
break 可以用来从循环体中跳出循环体,即提前结束循环,接着执行循环下面的语句;
注意:
1) break不能和循环语句和switch语句以外的语句连用;
2) break 对if-else 不起作用
3) break语句只能向外跳出一层
eg6: 请输出1000以内的所有素数
例程:
int main(int argc,char *argv[])
{
int i,j;
int num = 0;
for(j = 2;j <= 1000;j++)
{
for(i = 2; i <= j/2;i++)
{
if(j % i == 0)
break;
}
if(i == (j/2 + 1))
{
printf("%d\t",j);
num++;
if(num % 10 == 0)
putchar('\n');
}
}
return 0;
}
continue;
用来结束本次循环(即跳过循环体中尚未执行的部分),接着执行循环是否执行的判断
eg7: 输出100以内的不能被3整除的数
例程:
int main(int argc,char *argv[])
{
int i;
for(i = 1;i <= 100;i++)
{
/*
if(i % 3 != 0)
printf("%d\t",i);
*/
if(i % 3 == 0)
continue;
printf("%d\t",i);
}
return 0;
}
goto;
goto语句是一种无条件转移语句
使用格式
goto 语句标号(标识符)
这个标识符加上一个:一起出现在程序中某处,执行goto语句后,程序会跳转到标号处并执行其后的语句
最大公约数和最小公倍数
1) 穷举法
例程:
int main(int argc,char *argv[])
{
int a,b;
int max;
scanf("%d%d",&a,&b);
int i,j;
if(a > b)
i = b;
else
i = a;
for(j = a; j>= 1;j--)
{
if(a % j == 0 && b % j == 0)
{
max = j;
break;
}
}
printf("max = %d,min = %d\n",max,a*b/max);
return 0;
}
2) 相减法
例程:
int main(int argc,char *argv[])
{
int a,b;
int m,n;
scanf("%d%d",&a,&b);
m = a;
n = b;
while(1)
{
if(b > a)
b = b - a;
else
a = a - b;
if(a == b)
break;
}
printf("max = %d,min = %d\n",a,m*n/a);
return 0;
}
3) 辗转相除法(欧几里得算法)例程:
int main(int argc,char *argv[])
{
int a,b;
int m,n;
scanf("%d%d",&a,&b);
m = a;
n = b;
int c;
if(a < b)
{
c = a;
a = b;
b = c;
}
while(1)
{
c = a % b;
if(c == 0)
break;
else
{
a = b;
b = c;
}
}
printf("max = %d, min = %d\n",b,m*n/b);
return 0;
}