C语言 分支语句与循环语句(二)

1.while循环

//打印1到10
#include<stdio.h>

int main(){
  int i = 1; // i => index
  while(i<=10){  //循环条件 成立执行循环体
   printf("%d\n",i);
   i++;}
   return 0;
 }

while语句中的break和continue

#include<stdio.h>
//continue演示
int main(){
  //买了五个包子
  int num = 1;
  while(num <= 5){
   if(num ==3){
       printf("有虫子!!!\n");
       num++;
       continue;
       }
     printf("正在吃第 %d 个包子\n",num);
     num++;
   }
   return 0;
}   

如果遇到continue就会直接结束这次循环,先进入下次循环(先判定循环条件)。

#include<stdio.h>
//break演示
int main(){
 int num = 1;
 while(num <= 5){
     if(num == 3){
       printf("有半个虫子!!!\n");
       break;
       }
     printf("正在吃第 %d 个包子\n",num);
     num++;
   }
   return 0;
 }

如果遇到break,循环直接结束。

#include<stdio.h>

int main(){
   char ch = '\0';
   while((ch = getchar()) ! = EOF){  
   // getchar从键盘上读取一个字符 赋值给ch
   //EOF=> end of file文件结束标记~
       if(ch<'0' || ch > '9')
          continue;
          putchar(ch); //一次打印一个
        }
      return 0;
  }

2.for循环

for和while本质上是等价的,任何你使用while实现的逻辑一定可以写成for。
语法

for(cond1;cond2;cond3)
    循环语句;
 cond1=>初始化部分
 cond2=>条件判断部分
 cond3=>调整部分
//for循环示例 打印1-10
#include<stdio.h>

int main(){
  for(int i = 1; i <= 10; i++){
   printf("%d\n",i);
   }
   return 0;
}   
//把循环的三个要素,集中在一起放置了
//不会漏了哪个要素

for的执行过程
1.执行表达式1,创建变量i,并进行 i=1 的初始化。
2.执行表达式2 ,判断循环条件是否成立。(是不是为真/非0)
a)条件成立 执行循环体。
b)不成立 直接结束循环体。
3.当循环结束之后,执行表达式3,更新I的值。
4.再次执行表达式2,后面就一次循环执行了。

continue 和break也能搭配for来使用。

//continu示例
#include<stdio.h>

int main(){
  for(int i = 1; i <= 5 ; i++){
     if(i == 3){
     printf("吃到一个虫子!\n");
     continue;
     }
     printf("吃 %d 个包子\n",i);
   }
   return 0;
}   
//break示例
#include<stdio.h>

int main(){
   for(int i = 1; i <= 5; i++){
       if(i == 3){
       printf("吃到半个虫子!!!\n");
       break;
       }
      printf("正在吃 %d 个包子\n",i);
    }
   return 0;
}   

**注意: 大多数区间,都是采用前闭后开的方式来表示的 **

//for循环变种

int i = 1//作用于不同
for(;;){ 
  if(i > 10){
       break;
       }
  printf("%d\n",i);
  i++;
}   

练习题:

//循环会执行几次
#include<stdio.h>

int main(){
   int i = 0;
   int k = 0;
   for(i = 0 , k = 0; k = 0; i++,k++){
      printf("hha\n");
      k++;
    }
    return 0;
}    
      

因为中间条件k = 0 为赋值语句 ,所以一次都不会执行。

3.do while循环

while和for是最常见的循环,do while循环比较少见

语法

do 
   循环语句;
while(表达式);   

示例:

//打印1到10
#include<stdio.h>

int main(){
  int i = 1; 
 do{
    printf("%d\n",i);
    i++;
    }
 while(i <= 10); 
 return 0;
} 

练习题:

  1. 计算 n的阶乘。
  2. 计算 1!+2!+3!+……+10!
  3. .在一个有序数组中查找具体的某个数字n。 编写int binsearch(int x, int v[], int n); 功能:在v[0] <=v[1]<=v[2]<= ….<=v[n-1]的数组中查找x.
  4. 编写代码,演示多个字符从两端移动,向中间汇聚。
  5. 编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则 提示登录成,如果三次均输入错误,则退出程序

答案:
1.

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main(){
  int n = 1 ;
  printf("请输入一个整数\n");
  scanf("%d",&n);

  int result = 1;
  for(int i = 1 ;i <= n; i++){
    result = result * i;
    }
    printf("结果为%d\n",result);
   return 0;
 }
#include<stdio.h>

int main(){
   //表示最终的阶乘求和结果
    int sum = 0;
    for(int i = 1; i <= 10; i++){
    //在这个循环里头进行相加操作.
       int factor = 1;//表示i的阶乘的值
       for(int j = 1; j <= 10 ; j++){
         //通过这个循环求i!
         factor *= j;
         }
         //经过上面的循环 就把i!求出来了,放到factor变量中
         sum += factor;
    }
    printf("sum = %d\n",sum);
    return 0;
    }
 
#include<stdio.h>

int factor(int n){ //用于求n的阶乘
  int result = 1;
  for(int i = 1 ; i <= 10 ; i++){
    result *= i ;
    }
    return result;
}
int main(){
   int sum = 0;
   for (int i = 1; i <= 10; i++){
      sum += factor(i) ;
      }
      printf("sum =%d\n",sum);      return 0;
   }
  

(ctrl+鼠标左键,跳转到某个函数/变量的定义,alt+<-,就可以回来了)

#include<stdio.h>

int main(){
  // 查找变量在数组的位置
  int num = 0;
  printf("请输入要查找的数字:");
  scanf("%d",&num);
  
  int i = 0
  int arr[] = {1, 2, 3, 4, 5, 6, 7};
  for(;i < 7; i++){
       if(num == arr[i]){
       printf("该num所处的下标是:%d\n",i);
       break;
        }
      }
    if( i>=7 ){
    printf("找不到了");
    }
        return 0;
}

二分查找法// 有序数组 重要!!!

#include<stdio.h>

int main(){
   int num = 0;
   printf("请输入要查找的数字:\n");
   scanf("%d",&num);
   int arr[] = {1, 2, 3, 4, 5, 6, 7};
   //待查找区间就是[left,right]
   int left = 0;
   int right = 6; 
   //只要待查找区间不是空区间,就是继续循环查找
   while(left <= right){
     //确定中间元素的下标
     int mid = (left + right) / 2;
     //c中整数除以整数等于整数 5/2=2
     if(num < arr[mid]){
        //继续往左侧区间查找,
        right = mid - 1;
        }
        else if(num > arr[mid]){
        //继续往右侧区间查找
        left = mid + 1;
        }
        else{
        printf("找到了!num的下标就是:%d\n",mid);
        break;
        }
    }
    if(left > right){
    printf("没找到元素!");
    }
    return 0;
}    

有\0才能称为一个字符串
C语言中字符串以’\0’结尾

#include<stdio.h>
#include<string.h>
#include<Windows.h>

int main(){
 char str1[] = "hello world";
 char str2[] = "###########";
 //每次循环都让str2修改
 int left = 0;
 int right = strlen(str1) - 1;
 while(left <= right){
     str2[left] = str1[left];
     str2[right] = str1[right];
     left++;
     right--;
     system("cls");//每次打印完一次清屏一次
     printf("%s\n",str2);
     Sleep(500);//让程序休眠500ms
     }
     return 0 ;
  }
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include <string.h>

int main(){
 int i = 0 ;
 for(; i < 3 ; i++){
   printf("请输入密码:");
   char password[1024] = { 0 };
   //scanf 输入的是整数或者浮点数,需要&
   //如果是字符串,不需要&
   scanf("%s",password);
   //C中 不能使用 == 比较两个字符串内容相等
   if(strcmp(password ,"1234")== 0){
       printf("密码正确!\n");
       break;
       }
       else{
       printf("密码错误\n");
       }
  }
  if(i >= 3){
   printf("您已错误三次,程序直接退出!\n");
   }
  return 0;
}     

4.goto语句

goto语句表示“无条件跳转”,遇到goto就直接跳转到对应的位置的代码。
goto非常不建议使用!!!会对代码的可读性可维护性造成毁灭的打击!!

//关机小程序~
//程序一运行提示10min之后关机。
//输入指定指令取消关机
#define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main(){

  system("shutdown -s -t 600");
AGAIN:
  printf("您的电脑将在1min之后关机,输入 我是猪 取消关机:\n");
  char input[1024] = { 0 };
  scanf("%s",input);
  if(strcmp(input , "我是猪") == 0){
      system("shutdown -a");
      printf("真乖~关机取消了");
   }else{
      goto AGAIN;//Again 是一个标签
   }
   return 0;
}  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值