C语言入门——分支和循环语句

目录

一、分支(选择)语句

1、if...else语句

悬空else语句

2、switch语句

二、循环语句

1、while语句

2、for语句

3、do...while语句

三、循环练习

1、计算n的阶乘

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

3、在一个有序数组中查找具体的某个数字n

4、演示多个字符从两端移动,向中间汇聚

5、模拟用户登录

6、猜数字游戏


一、分支(选择)语句

1、if...else语句

语法:

if(表达式)
  语句;

if(表达式)
  语句1;
else
  语句2;

//多分支
if(表达式1)
  语句1;
else if(表达式2)
  语句2;
else
  语句3;

例:

int main()
{
    int age=0;
    scanf("%d\n",age);
    if(age<18)
       printf("少年\n");
    else if(age>=18&&age<26)
       printf("青年\n");
    else if(age>=26&&age<40)
       printf("中年\n");
    else if(age>=40&&age<60)
       printf("壮年\n");
    else
       printf("老年\n");
}

悬空else语句

#include<stdio.h.
int main()
{
    int a=0;
    int b=2;
    if(a==1)
       if(b==2)
          printf("hhhh\n");
    else
       printf("hhhhhhhh\n");
    return 0;
}
//最后什么都不打印,因为else和最近的if匹配
//不要这么写代码 !!!!

2、switch语句

switch语句常常用于多分支的情况。·    

 ●语法:

switch(整型表达式)
{
     语句项;
}

//语句项
case 整型常量表达式:
   语句;

●switch语句允许嵌套使用

●break语句:跳出循环

●default语句:默认选项

 例:

int main()
{
    int day=0;
    scanf("%d",&day);
    switch(day)
    {
       case 1:
          printf("星期一\n");
          break;
       case 2:
          printf("星期二\n");
          break;
       case 3:
          printf("星期三\n");
          break;
       case 4:
          printf("星期四\n");
          break;
       case 5:
          printf("星期五\n");
          break;
       case 6:
          printf("星期六\n");
          break;
       case 7:
          printf("星期天\n");
          break;
    }
    return 0;
}

//根据逻辑需求来写break
int main()
{
    int day=0;
    scanf("%d",&day);
    switch(day)
    {
      case 1:
      case 2:
      case 3:
      case 4:
      case 5:
         printf("工作日\n");
         break;
      case 6:
      case 7:
         printf("休息日\n");
         break;
    }
    return 0;
}

二、循环语句

1、while语句

●语法:

while(表达式)
    循环语句;

●break语句:

用于永久的终止循环

●continue语句:

跳过本次循环continue后面的代码,直接去判断部分,看是否进行下一次循环

 例:

//例1:打印数字1~10
int main()
{
    int i=1;
    while(i<=10)
    {
        printf("%d ",i);
        i++;
    }
    return 0;
}
//例2
int main()
{
    int ch=0;
    while((ch=getchar())!=EOF)     //当输入的字符不等于EOF(文件结束标志)时进入循环。结束循环可以ctrl+z
    {
        putchar(ch);        //输出字符
    }
    return 0;
}

2、for语句

●语法:

for(表达式1;表达式2;表达式3)
    循环语句;

表达式1为初始化部分,用于初始化循环变量。可以省略。

表达式2为条件判断部分,用于判断循环什么时候终止。判断部分恒为真会陷入死循环。

表达式3为调整部分,用于循环条件的调整。可以省略。

●循环控制变量

不可在for循环体内修改循环变量,防止for循环失去控制。建议for语句的循环控制变量的取值采用“前闭后开区间”写法。

例:

int main()
{
    int i=0;
    for(i=1;i<=10;i++)
    {
       printf("%d",i);
    }
    return 0;
}
//变种1
int main()
{
    int x,y;
    for(x=0,y=0;x<2&&y<5;++x,y++)
    {
        printf("hhhhhh\n");
    }
    return 0;
}
//笔试例题:循环进行了几次?
int main()
{
    int i=0;
    int k=0;
    for(i=0,k=0;k=0;i++,k++)   //判断部分为k=0,即恒为假,因此循环0次。
    {
       k++;
    }
    return 0;
}

3、do...while语句

●语法:

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

 ●特点:循环至少执行一次

 例:

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

三、循环练习

1、计算n的阶乘

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

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

int main()
{
    int allsum=0,sum=1;
    for(int i=1;i<=10;i++)
    {
        sum=1;
        for(int j=1;j<=i;j++)
        {
            sum*=j;
        }
        allsum+=sum;
    }
    return 0;
}
//函数实现
int F(int n)
{
    int sum=1;
    for(int i=1;i<=n;i++)
    {
        sum*=i;
    }
}
int main()
{ 
    int allsum=0;
    for(int j=1;j<=10;j++)
    {
        allsum+=F(j);   
    }
    printf("%d",allsum);  
    return 0;
}
//

3、在一个有序数组中查找具体的某个数字n

编写int binsearch(int x,int v[],int n);功能时在v[0]<=v[1]<=c[2]<=...<=v[n-1]的数组中查找x

int binsearch(int k,int v[],int n)
{
    if(k>v[n]||k<v[0])  return -1;
    for(int i=0;i<=n;i++)
    {
        if(v[i]==k)  return i;
    }
    return -1;
}
int main()
{
   int x,v[]={1,2,3,4,5,6,7,8,9};
   printf("%d",binsearch(7,v,9));
   return 0;
}
//二分查找法
int main()
{
   int arr[]={1,2,3,4,5,6,7,8,9};
   int k=7;   //要查找的数字
   int sz=sizeof(arr)/sizeof(arr[0]);   //数组的元素个数
   int left=0;
   int right=sz-1;
   while(left<right)
   {
       int mid=(left+right)/2;
       if(arr[mid]<k)
       {
          left=mid+1;
       }
       else if(arr[mid]>k)
       {
          right= mid-1; 
       }
       else
       {
          printf("找到了,下标是:%d\n",mid);
          break;
       }
   }
   if(left>right)
   {
      printf("找不到\n");
   }
   return 0;
}

4、演示多个字符从两端移动,向中间汇聚

//welcome to bit!!!
//w###############!
//we#############!!
//wel###########!!!
//...
//welcome to bit!!!
//需要每次从【welcome to bit!!!】两端取出一个字符
#include<string.h>
//#include<windows.h>
int main()
{
    char arr1[]="welcome to bit!!!";
    char arr2[]="#################";
    int left=0;
    int right=strlen(arr1)-1;
    while(left<=right)
    {
        arr2[left]=arr1[left];
        arr2[right]=arr1[right];
        printf("%s\n",arr2);
        //sleep(1000);     //可以实现动态效果
        //system("cls");
        left++;
        right--;
    }
    return 0;
}

5、模拟用户登录

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

#include<string.h>
int main()
{
    int i=0;
    char pasword[20]={0};
    for(i=0;i<3;i++)
    {
       printf("请输入密码:");
       scanf("%s\n",&password);
       //if(password=="123456")     //错误写法,两个字符串的比较应该用strcmp()函数
       if(strcmp(password,"123456")==0)
       {
         printf("输入正确,欢迎登陆!\n");
         break;
       }
       else
         printf("输入错误!")
    }
    if(i==3)
    {
       printf("你的输入错误次数已经超过3次,请退出程序!");
    }
    return 0;
}

6、猜数字游戏

游戏会自动产生一个1~100之间的随机数,我们需要猜数字。如果猜对了,就会恭喜你,游戏结束;如果猜错了,会告诉你猜大了还是猜小了,继续猜测,直到猜对。游戏可以一直玩,除非退出游戏。

void menu()
{
     printf("**********************\n");
     printf("*****   1.play   *****\n");
     printf("*****   0.exit   *****\n");
     printf("**********************\n");
}

//猜数字游戏的实现
void game()
{
     //生成随机数
     int ret=rand()%100+1;
     //printf("%d\n",ret);
     //猜数字
     int guess;
     while(1)
     {
          printf("请猜数字:");
          scanf("%d",&guess);
          if(ret>guess)
          {
              printf("猜小了\n");
          }
          else if(guess>ret)
          {
              printf("猜大了\n");
          }
          else
          {
              printf("恭喜你猜对了!\n");
              break;
          }
     }
}
int main()
{
    int input=0;
    srand((unsigned int)time(NULL));
    do
    {
       menu();  //打印菜单
       printf("请选择:");
       scanf("%d",&input);
       switch(input)
       {
          case 0:
             printf("退出游戏!\n");
             break;
          case 1:
             game();
             break;
          default:
             printf("选择错误,请选择0或1!\n");
             break;
       }
    }while(input);
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

趣多多代言人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值