【C语言基础】分支和循环语句

​​​​​​目录


一、分支语句 

1.  if语句

        如果表达式的结果为真,则语句执行。C 语言把任何非零非空的值假定为 true,把或 null 假定为 false。并且else是和它离的最近的if匹配的。

        以下是一个简单的if用法的例子:

#include <stdio.h>
int main()
{
    int a = 0;
    int b = 2;
    if(a == 1)
        if(b == 2)
            printf("hehe\n");
    else
        printf("haha\n");
    return 0;
}

2.  switch语句

        switch语句也是一种分支语句。 常常用于多分支的情况。其注意点如下:

  • switch ( )内的是一个常量表达式,必须是一个整型或枚举类型。
  • case后的值必须与 switch 中的变量具有相同的数据类型,且必须是一个常量或字面量。
  • 当被测试的变量等于 case 中的常量时,case 后跟的语句将被执行,直到遇到 break 语句为止。
  • 当遇到 break 语句时,switch 终止,控制流将跳转到 switch 语句后的下一行。
  • 不是每一个 case 都需要包含 break。如果 case 语句不包含 break,控制流将会继续后续的 case,直到遇到 break 为止。
  • 一个 switch 语句可以有一个可选的 default case,上面所有 case 都不为真时执行default case。 

示例如下:

#include <stdio.h>

int main()
{
    int a;
    printf("input integer number: ");
    scanf("%d",&a);
    switch(a)
    {
        case 1:printf("Monday\n");
        break;
        case 2:printf("Tuesday\n");
        break;
        case 3:printf("Wednesday\n");
        break;
        case 4:printf("Thursday\n");
        break;
        case 5:printf("Friday\n");
        break;
        case 6:printf("Saturday\n");
        break;
        case 7:printf("Sunday\n");
        break;
        default:printf("error\n");
    }
}

3.  三元运算符

        一般形式是:

                Exp1 ? Exp2 : Exp3;

        表达式的值是由 Exp1 决定的。如果 Exp1 为真,则 Exp2 的值为整个表达式的值。否则 Exp3 的值即为整个表达式的值。

        以下例子用来演示:

#include<stdio.h>
 
int main()
{
    int num;
 
    printf("输入一个数字 : ");
    scanf("%d",&num);
 
    (num%2==0)?printf("偶数"):printf("奇数");
}



二、循环语句



1.  while循环

        给定的条件为真, while 循环语句会重复执行目标语句。直到条件为假,循环体会一直执行,如果条件一直为真,则进入死循环。

代码如下(示例):

#include <stdio.h>
 
int main ()
{
   int a = 10;
   while( a < 20 )
   {
      printf("a 的值: %d\n", a);
      a++;
   }
   return 0;
}

2.  for循环

        for 循环是一个可以执行指定次数的循环控制结构。

代码如下(示例):

#include <stdio.h>
 
int main ()
{
   for( int a = 10; a < 20; a++ )
   {
      printf("a 的值: %d\n", a);
   }
   return 0;
}

3.  do...while循环

        do...while 循环是在循环的尾部检查它的条件。do...while 循环与 while 循环类似,但是 do...while 循环会确保至少执行一次循环。

        代码如下(示例):

#include <stdio.h>
int main()
{
 int i = 10;
 do
 {
 printf("%d\n", i);
 }while(i<10);
 return 0;
}



三、实例

1.计算10的阶乘

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

2. 计算 1!+2!+3!+……+10!

#include <stdio.h>
int factor(int n){
    int result=1;
    for (int i=1;i<=n;i++){
        result*=i;
    }
    return result;
}

int sum_factor(int m){
    int sum=0;
    for(int j=1;j<=m;j++){
        sum+=factor(j);
    }
    return sum ;
}

int main()
{
    printf("%d",sum_factor(10));
    return 0;
}

3. 在一个有序数组中查找具体的某个数字n(二分查找)。

#include <stdio.h>

int binary_search(int arr[],int toFInd,int size){
    int left=0;
    int right=size-1;
    while(left<=right){
        int mid=(left+right)/2;
        if(toFInd<arr[mid]){
            right=mid-1;
        }
        else if(toFInd>arr[mid]){
            left=mid+1;
        }
        else{
            return mid;
        }
    }
    return -1;
}
int main()
{
    int arr[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
    printf("%d\n",binary_search(arr,15,sizeof (arr)/sizeof (arr[0])));
    return 0;
}

4. 编写代码,演示多个字符从两端移动,向中间汇聚。

#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <stdlib.h>
int main()
{
    char str1[]="wellcome to xian";
    char str2[]="****************";
    int left=0;
    int right=strlen(str1)-1;       //求字符串的长度
    printf("%s\n",str2);
    while(left<=right){
        str2[left]=str1[left];
        str2[right]=str1[right];
        left++;
        right--;
        system("cls");              //清屏的操作
        printf("%s\n",str2);
        Sleep(500);                 //以毫秒为单位
    }
    return 0;
}

5. 编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则 提示登录成,如果三次均输入错误,则退出程序。

#include <stdio.h>
#include <string.h>
int main()
{
    int i=1;
    char password[1024]={0};
    printf("请输入密码:\n");
    while(i<=3){
        scanf("%s",password);
        //if(password=="123456"){
        //如果是字符串,不能使用==比较
        //此处产生了数组到指针的隐式类型转换,实际上是在比较指针
        //正确的方法是使用strcmp。如果两个字符串相等,返回0,不相等返回非零的值。
        if(strcmp(password,"123456")==0){
            printf("登录成功\n");
            break ;
        }else if(i<3){
            printf("请重新输入\n");
            i++;
        }else{
            i++;
        }
    }
    if(i==4){
        printf("登录失败\n");
    }
    return 0;
}

6.写代码将三个整数数按从大到小输出。

#include<stdio.h>
int main()
{
    int a = 0;
    int b = 0;
    int c = 0;
    int d = 0;
    printf("请输入三个数:");
        scanf("%d%d%d", &a,&b,&c);
        if (a < b)
        {
            d = a;
            a = b;
            b = d;
        }
        if (a < c)
        {
            d = a;
            a = c;
            c = d;
        }
        if (b < c)
        {
            d = b;
            b = c;
            c = d;
        }
        printf("从大到小输出结果为:%d %d %d\n", a, b, c);
        return 0;
}

7.写一个代码打印1-100之间所有3的倍数的数字

#include <stdio.h>


int main()
{
    for(int i=1;i<=100;i++){
        if(i%3==0){
            printf("%d ",i);
        }
    }
    return 0;
}

8.给定两个数,求这两个数的最大公约数

#include <stdio.h>
int gcd(int a,int b){
    int c=a % b;
    while(c){
        a=b;
        b=c;
        c=a%b;
    }
    return b;
}


int main()
{
    int a=0;
    int b=0;
    printf("请输入两个整数:");
    scanf("%d %d",&a,&b);
    printf("最大公约数是:%d\n",gcd(a,b));
    return 0;
}

9.打印1000年到2000年之间的闰年

#include <stdio.h>


int main()
{
    for(int i=1000;i<=2000;i++){
        if(i%100==0){
            if(i%400==0){
                printf("%d ",i);
            }
        }else if(i%4==0){
            printf("%d ",i);
        }


    }
    return 0;
}

10.打印100~200之间的素数

#include <stdio.h>


int prime(int a){
    for(int j=2;j<a;j++){
        if(a%j==0){
            break;
            return 0;
        }
    }
}
int main()
{
//    int a=0;
//    scanf("%d",&a);
//    printf("%d\n",prime(a));for(int i=100;i<=200;i++){
        if(prime(i)){
            printf("%d\n",prime(i));
        }
    }
    return 0;
}

 11.数一下 1到 100 的所有整数中出现多少个数字9

#include <stdio.h>


int main()
{
    int j=0;
    for(int i=1;i<=100;i++){
        if(i%10==9)
            j++;
        if(i/10==9) //  i/10当都为整数时,结果也为整数(向下取整),有一个为浮点型时,结果为浮点型
            j++;
    }
    printf("9的个数为%d\n",j);
    return 0;
}

12.完成猜数字游戏

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
    //time(0)得到一个时间戳(从1970.01.01开始)
    srand((unsigned int) time(0));
    int toGuess=rand()%100+1;
    int num=0;
    while(1){
        printf("请输入一个数字:");
        scanf("%d",&num);
        if(toGuess<num){
            printf("高了\n");
        }else if(toGuess>num){
            printf("低了\n");
        }else{
            printf("猜对了\n");
            break;
        }
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值