C语言循坏结构程序设计相关知识【C语言学习笔记】

C/C++
248
0
0
2022-11-30

循环结构:while for break continue

循环:指做重复的事

while循环结构

while(循环条件:返回01的表达式){
    //循环体
}
循环条件为真,就执行循环体,循环条件为假,跳出循环体。
#include<stdio.h>
int main(){
    int i =1;  //循环次数 
    while(i<=20){
    //循环体 
    printf("helloword\n");
    i++;
    }
    return 0;
}

例:1+2+3+4+...+100

#include<stdio.h>
int main(){
    int sum=0; //空瓶子 
    int i=1;
    while(i<=100){
    sum=sum+i;
    i++;
    }
    printf("%d",sum);
    return 0;
}

img

注意:循环体中如果只有一句话或一个整体,{}可以省略。

do...while循环

do{
    //循环体
}while(循环条件);
#include<stdio.h>
int main(){
    int sum=;
    int i=;
    do{
    sum=sumi;
    i++;
    }while(i<=100);
    printf("%d",sum);
    return 0;
}

注意:while和do...while是等价的。

while和do...while的区别:

while语句是先进性循环条件的判断,再执行循环体。

do...while先无条件执行一次循环体,再进行循环条件的判断。

#include<stdio.h>
int main(){
   int i=1;
   int a=10;
   while(i<1){//1<1---->0
    a=20;
    i++;
   }
   printf("a=%d",a);
   return 0;
}

练习过程详解:

#include<stdio.h> 
int main(){
   int s=0,i=1;
   while(s<=10){     //1.S=0,i=1,0<=10(ok)--->s=1,i=2;
       s=s+i*i;     //2.s=1,i=2,1<=10(ok)--->s=5,i=3;
       i++;          //3.s=5,i=3,5<=10(ok)--->s=14,i=4;
   }             //4.s=14,i=4,14<=10(false)break; 
   printf("%d\n",--i);
    return 0;
}

for语句

一般形式:

for(初始值;循环条件;循环增(减)量){
    //循环体
}

例题:1+2+3+....+100

注意:while和for等价的

如果明确了循环的范围,使用for语句。 如果循环范围不明确,使用while语句。
#include<stdio.h>
int main(){
    int sum;
    int i;
    for(sum=0,i=1;i<=100;++i)
    {
        sum=sum+i;//sum+=i
    }
    printf("%d",sum);
    return 0;
}

for循环的几种形式:

1.初值表达式可以为空,但;不能省略。

for(;i<=100;++i)

2.条件语句可以为空,如果条件语句为空,此循环会无限的执行下去(死循环)。

for(;;++i)

3.循环增量也可以省略,如果省略,程序有可能会无限执行下去。

for(;i<=100;)

4.初值,循环条件,循环增量可以同时省略。

for(;;)相当于while(1){}

5.初值表达式可以是多个表达式。

for(sum=0,i=1,;i<=100)

6.在C99中,初值表达式可以定义变量,C89不可以。

for(int i=1;i<=100;)

相关例题:

img

#include<stdio.h>
int main(){
    int b,s,g;
    for(int i=100;i<=500;i++){
        b=i/100;
        s=i%100/100;
        g=i%10;//个位 g=i%10
        if(i==b*b*b+s*s*s+g*g*g)
        printf("%d是水仙花数\n",i); 
    }
    return 0;
}

求斐波那契数列(Fi-bo-na-cci)的前30项。

斐波那契数列指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……这个数列从第3项开始,每一项都等于前两项之和。 在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)
#include<stdio.h>
int main(){
    int f1=1;
    int f2=1;
    int f3,f4;
    printf("%d\n",f1);
    printf("%d\n",f2);
    for(int i=3;i<=30;i++){
        f3=f1+f2;
        printf("%d\n",f3);
        f1=f2;
        f2=f3;
    }
    return 0;
}

break关键字和continue关键字

break关键字:在循环结构中,遇到break关键字跳出整个循环。

#include<stdio.h>
int main(){                //1.i=1,1<=10(ok)--->1%3==0(F),1,i=2 
    for(int i=1;i<=10;i++){        //2.i=2,2<=10(ok)--->2%3==0(F),2,i=3 
        if(i%3==0)break;    //3.i=3,3<=10(ok)--->3%3==0(ok)
        printf("%d\n",i);
    }
    return 0;
}

continue关键字:在循环结构中,遇到continue关键字跳出本次循环。

#include<stdio.h>
int main(){                //1.i=1,1<=10(ok)--->1%2==0(F),1,i=2 
    for(int i=1;i<=10;i++){        //2.i=2,2<=10(ok)--->2%2==0(ok),i=3 
        if(i%2==0)continue;    //3.i=3,3<=10(ok)--->3%2==0(F),3,i=4 
        printf("%d\n",i);    //4.i=4,4<=10(ok)--->4&2==0(ok),i=5
    }
    return 0;
}

典型例题

1.要求输出100-300之间不能被3整除的数。

#include<stdio.h>
int main(){
    for(int i=100;i<=300;i++){
        if(i%3!=0)
        //if(!%3==0)continue; 
        printf("%d\n",i);
    }
    return 0;
}

2.输出以下4*5的矩阵。

img

#include<stdio.h>
int main(){
    int i,j;
    for(i=1;i<=4;i++){
        for(j=1;j<=5;j++){
            printf("%5d",i*j);
        }
        printf("\n");
    }
    return 0;
}
双重循环:先满足外条件进入内循环,一直内循环到不满足内条件然后继续循环外条件。

img

3.输入俩个正整数m和n,求其最大公约数和最小公倍数。

最大公约数:最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个。 最小公倍数:两个或多个整数公有的倍数叫做它们的公倍数,其中除0以外最小的一个公倍数就叫做这几个整数的最小公倍数。 最小公倍数=m*n/最大公约数
#include<stdio.h>
int main(){
    unsigned int m,n;
    scanf("%d%d",&m,&n);
    int min;
    if(m>n)min=n; 
    else min=m;
    int i;
    for(i=min;i>0;i++){
        if(m%i==0&&n%i==0){
            printf("最大公约数:%d\n",i);break;
        }
    }
    printf("最小公倍数:%d\n",m*n/i);
    return 0;
}

4.利用公式求pi的近似值,直到发现某项的绝对值小于10e-6为止。

#include<stdio.h>
#include<math.h>
int main(){
    double sum=0;//pi/4 
    double a=1;//分子 
    double b=1;//分母 
    double term=a/b;//分数的每一项  
    while(fabs(term)>=1e-8) {  //fans-->绝对值 
        sum =sum+term;a=-a;
            b=b+2;term=a/b;
    }
    sum =4*sum;
    printf("%.12f",sum);
    return 0;
}

5.

#include<stdio.h>
int main(){
    float a1=2;float b1=1;
    float a2=3;float b2=2;
    float f1,f2;
    float sum=(a1/b1)+(a2/b2);
    for(int i=3;i<=20;i++){
        f1=a1+a2;f2=b1+b2;
        sum=sum+(f1/f2);
        a1=a2;a2=f1;
        b1=b2;b2=f2;
    }
    printf("%f",sum);
    return 0;
}
#include<stdio.h>
int main(){
    double a=2,b=1,c;
    double sum=0;
    for(int i=1;i<=20;i++){
        sum = sum+a/b;
        c=a;
        a=a+b;
        b=c;
    }
    printf("%f",sum);
    return 0;
}

6.输入一个大于3的数,判断此是否为素数(质数)

素数:质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
#include<stdio.h>
int main(){
    int n,i;
    scanf("%d",&n);
    for(i=2;i<=(n-1);i++){
        if(n%i==0)break;
    }
    if(n==i)printf("Yes!");
    else printf("No!");
    return 0;
}

7.求100-300之间的全部素数。

#include<stdio.h>                 /*函数头:输入输出头文件*/
int main(){
    int a,b,c=0;                  /*定义变量的数据类型为整型并为c赋值*/ 
    for(a=100;a<=300;a++)         /*用循环使a的值增加*/
    {
        for(b=2;b<a;b++)          /*用循环使a分别除以2到它本身的数*/
        {
            if(a%b==0)            /*判断a是否是素数*/ 
                break;            /*否,跳出内循环*/ 
            else 
                if(b==a-1)        /*是,判断a是否不能被2到它本身减1整除*/
                    c=1;          /*是,给c赋1*/
        }
        if(c==1)                  /*判断c是否等于1*/
        {
            printf("%d\n",a);     /*是,输出素数并给c赋0*/
            c=0;
        }
    }
    return 0;
}