C语言之循环结构

循环结构
1.三种循环语句
while
一般形式为
while(表达式)
语句
一般表达式是循环条件 ,语句是循环体

eg1: 求1-100 的和

     #include
     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:从键盘输入一个数字,判断他是几位数   

                    #include
                    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;
        }

从键盘输入一个数字,判断这个数字里面0-9分别出现了几次
do-while
一般形式为:
do
循环体
while(循环语句);

如果第一次进入循环的条件就不满足,那么while循环和do-while循环的结果可能不相同

这两种循环的区别
while循环是先判断再执行
do-while循环是先执行再判断

eg3:从键盘输入字符,判断在\n之前有多少个字符

#include
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 乘法表

#include
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: 从键盘输入一个数字,判断这个数是不是素数,如果是,输出YES,否则输出NO

        

#include
                int main(int argc,char *argv[])
                {
                 int num;
                     scanf("%d",&num);
            int i;
            for(i = 2; i <= num/2;i++)
            {
        if(num % i == 0)
        {
    printf("NO\n");
    break;
        }
            }
                if(i == (num/2 + 1))
            {
        printf("YES\n");
                    }
            return 0;
                }


continue;
用来结束本次循环(即跳过循环体中尚未执行的部分),接着执行循环是否执行的判断
eg8: 输出100以内的不能被3整除的数


goto;
goto语句是一种无条件转移语句
使用格式
goto 语句标号(标识符)
这个标识符加上一个:一起出现在程序中某处,执行goto语句后,程序会跳转到标号处并执行其后的语句
eg: 使用goto求1-100的和

求最大公约数和最小公倍数有
1) 穷举法
2) 相减法

3) 辗转相除法(欧几里得算法)

这里举一个列子

            #include
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 = 1;j <= i;j++)
{
if(a % j == 0 && b % j == 0)
{
max = j;
}
}
*/
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;
}

你可能感兴趣的:(C语言之循环结构)