黑马程序员-----C语言学习之循环结构

本文详细介绍了循环结构的概念,包括其要素与不同类型的循环(如 while 循环、do-while 循环和 for 循环)。通过实例,展示了如何使用循环结构进行简单的数学计算、字符计数和随机数生成。此外,还介绍了 break 和 continue 的用法,以及 for 循环的嵌套应用。最后,提供了九九乘法表的打印方法作为综合实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

循环结构的概念:

                                    当条件满足的时候,程序会重复的执行某一个代码段,这就是循环结构;


构成循环结构要素:1>循环控制条件
                                    2>循环体
                                    3>能够让循环结束的语句(递增、递减、真、假)

while循环的格式当型循环指的是先判断条件 在执行循环体;
  while(表达式){
     语句块; 
     
   }


例题 计算1+2+3+3.....+n的和;
//第一步定义变量i条件控制变量,sum存储和,n用户输入的值;
int i=1 ,n= 0  sum=0;
//第二步提示用户输入一个数n;
printf("请输入一个数"\n);
//第三步接收用户输入的数存入到n;
scanf("%d",&n);
//第四步设置while循环;
while (i<=n){


   sum=sum+i;
   i++;
 }
  printf("1+2+3...+%d=%d\n",n,sum);


//还可以改进写为 假设计算1到100的和
                  int i = 0,num = 0;
                 while(i++ < 100)num += i;//(后面因为只有num += i这一句话所以可以省略大括号)
                 printf("%d",sum);

利用while来计算用户输入的字符个数

#include 

int main(int argc, const char * argv[]) {
    
    //定义变量
    char direction;
    printf("请控制小人移动: w.上  s.下  a.左  d.右  q.退出\n");
    //写一个死循环
    int flag = 1;
    while (flag) {
    
    
    //     让玩家输入方法,如果玩家不输入方向系统会一直等待
        scanf("%c",&direction);
    
    //     w 上    s 下   a 左   d 右  q退出
        // W       S     A      D
        switch (direction) {
            case 'w':
            case 'W':
                printf("上\n");
                break;
            case 's':
            case 'S':
                printf("下\n");
                break;
            case 'a':
            case 'A':
                printf("左\n");
                break;
            case 'd':
            case 'D':
                printf("右\n");
                break;
            case 'q':
            case 'Q':
                printf("程序正在退出...\n");
                printf("程序已经退出.\n");
                flag = 0;
                break;
            default:
                break;
        }
        
        
    }
    
    
    
    return 0;
}

随机产生m-n之间的随机数
用arc4random_uniform(n-m+1)+m  例如要产生10到50中间的随机数就是(50-10+1)+10 就会产生了;因为括号里是41就会产生0到40的数然后分别加上10就是10到50了

 疯狂猜字游戏的程序实现:

#include 

int main(int argc, const char * argv[]) {
    
    //定义变量
    char direction;
    printf("请控制小人移动: w.上  s.下  a.左  d.右  q.退出\n");
    //写一个死循环
    int flag = 1;
    while (flag) {
    
    
    //     让玩家输入方法,如果玩家不输入方向系统会一直等待
        scanf("%c",&direction);
    
    //     w 上    s 下   a 左   d 右  q退出
        // W       S     A      D
        switch (direction) {
            case 'w':
            case 'W':
                printf("上\n");
                break;
            case 's':
            case 'S':
                printf("下\n");
                break;
            case 'a':
            case 'A':
                printf("左\n");
                break;
            case 'd':
            case 'D':
                printf("右\n");
                break;
            case 'q':
            case 'Q':
                printf("程序正在退出...\n");
                printf("程序已经退出.\n");
                flag = 0;
                break;
            default:
                break;
        }
        
        
    }
    
    
    
    return 0;
}

do while循环语句:直到型循环指先执行循环体,然后判断条件直到条件为假;

do while 和while的区别 
do while不管条件真还是假 至少它会执行一次;

while 如果条件为假 则不会执行;


for循环:格式是 for(表达式1;表达式2;表达式3){};
比如:  
for (int i = 0;i<3;i++){printf("%d",i)} 
这里 i<3是循环控制条件 printf("%d",i)是循环体  i++是让循环体结束的语句;


这里 还有其他几种表达方式也是一样的:
//第一种形式:
int i = 0 ;
for (;i<3;i++){
  printf("%d",i)
} //(就是将初始化的语句放到for循环外面);


//第二种形式:
for (int i = 0;i<3;){
    i++  ;
    printf("%d",i)
}// (将i++也就是表达式3的语句放到大括号里面);

 
//第三种形式:
int = 0 ;
for(;;){
  if (i<3;{
    i++  ;
    printf("%d",i);  
  }else {
    break;
  }
}//(利用break结束for循环)


//第四种形式:
for (;;){
     printf("我会一直循环%d",)
}//(会是个死循环)

for的嵌套:我们一般这么理解 里层的for控制列数  外层的for控制层数;


利用for循环的嵌套打印出五行无列的星


for (int j = 0 ; j<5;j++){


    for (int i = 0 ;i<5 ;i++){                               *
                                 //(如果你想要打印出来三角形**  只需要在内层的for循环内让i<=j就可以了 意思就是让行数等于列数; )
                                                             ***
            printf("*\t");
         }
         printf("\n");//(表示每一行星都另外起一行)
      


    }//(最外层的for是将里层的for打印一行星 打印五次 , 里层的for是打印一行)


  如果想让第一行写1第二行写2第三行写3    
                                           
   1
   2 2
   3 3 3
   4 4 4 4
   5 5 5 5 5 打印这个图形只需要将j 和 i的初始值改为1 然后在里层的for循环内将原来打印的星改为printf("%d",i)。
 
 如果想打印一个倒三角的星:只需要将里层循环的i<5改为 i<5-i就可以了
* * * * *
* * * * 
* * *
* *
*

如果要打印一个正三角形 第一行是一个星 第二行三个 第三行五个 一次下去有六行;该怎么实现 ;
 
//第一步 控制行数:用外层的for
 for(int i = 1,i<=6,i++){
//第二步控制好左边的空格用第一个里层for循环 
    for (int j = 0, j<=6-i,j++){


      printf"(" ")//(这里面表示打印出来空格 中间是有空格的)
        }
//第三步控制每一行中星的个数 因为它是由规律的 个数用另外一个参数表示k<2*i-1 里层第二个for循环
   for (int k = 0 ,k<2*i-1,k++){
          printf("*\t")//(\t的意思是中间会有间距)
        }


 printf(""\n)//(表示每一行都按enter)


}




面试题经常考之九九乘法表的打印方法
思路:两层for循环 外层for循环控制行 里层for循环控制列数;因为是正三角 所以里面的j<=i 行数等于列数就可以了 
      而看每一列可以知道 第一列可以知道是j的值 第二列是i的值;第三列是i和j的乘积;因此打印的时候像下面那么写;
#include 
#include 


int main(void)
{ int i ,j ;
  for (i =1 ;i <= 9; i++){


     for (j = 1; j<=i;j++){
    printf ("%d*%d = %d ",j,i,j*i);


      }
      printf("\n");
   }


    return 0;
}






break的用法

//计算r=1至 r=10 的圆面积直到 圆面积大于100时停止;
#include 
#include 
int main()
{ int i ;
  for (i =1 ;i <= 10; i++){
     float area =0.0f;
     area = 3.14f*i*i;
     if (area>100){
    printf ("%d,%.2f\n",i,area);
     break ;
      }
   }
    return 0;
}

用在for循环中 它的作用是结束当前循环或者叫跳出当前循环;
 for (int i = 0 ,i<10 ,i++){
     if(i==5){
        break;
      }
         printf("%d\t",i)
}

因为在for循环里面使用了break 所以在控制台会显示0 1 2 3 4 后面的数都不会输出和显示;因为break结束了当前的循环,它之后的语句也不会执行了;
但是 如果再break结束的当前循环外面还有一个for循环 他不会影响到因为它只结束当前的循环;    

continue的用法:它的作用是加速循环

在上述例子中 如果把上面的break换成continue 那么它的结果是会显示 1 2 3 4 6 7 8 9 10 它只是5没有了 它的作用是结束当前的这次循环 继续下次循环

用法如下

把100到200之间不能被3整除的数列出来:
分析:不能被3整除那么 证明这个数i%3 != 0  那么只要将i%3 = 0 的部分去掉就可以实现了 ;


for (int i = 100,i<=200,i++){


     if(i%3 == 0){
        continue;(表示能整除的时候就跳过接着下一个数)
        }


    printf("%d\n",i)
  }

求1到100中所有7的倍数的个数
#include
int main()
{
    int count = 0;
    int i;
    for (i = 1; i <=100; i++)
    {
        if(i % 7 ==0)
            count++;
     }
     printf("%d",count);
     return 0;
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值