2023.4.6 分支和循环

一、分支和循环

C语言是结构化的。顺序,循环,选择

;//是语句-空语句

1,分支语句

  1. if语句else和最近的if匹配)

a.单分支

if(表达式)//表达式计算结果如果为真(非0),语句则被执行

     语句;

int age = 20;

   if (age < 18)

     printf("未成年\n");

b.双分支

if(表达式)     //if语句只能执行一次

         语句1

else

          语句2

int age = 20;

   if (age < 18)

      printf("未成年\n");

   else

      printf("成年\n");

  

c.多分支

if(表达式)

语句1

else if(表达式2

        语句2

else

        语句3

int main(void)

{

   int age = 188;

   if (age < 18)

      printf("未成年\n");

   else if (age >= 18 && age < 28)

      printf("青年\n");

   else if (age >= 28 && age < 50)

      printf("壮年\n");

   else if (age >= 50 && age < 90)

      printf("老年\n");

   else

      printf("老老\n");

    return 0;

}

如果条件成立,要执行多条语句,怎样使用代码块?

int main(void)

{

   int age = 1;

   if (age < 18)

   {

      printf("未成年\n");

     printf("不能练练\n");

   }

   else

   {

          printf("老老\n");

   } 

    return 0;

}

d.悬空else

//else和最近的if匹配

int main(void)

{

   int a = 0;

   int b = 2;

   if (a == 1)//先看这里a=0,所有下面语句为假,不输出打印

      if (b == 2)

         printf("hehe\n");

       else

         printf("haha\n");

    return 0;

}

这里的{ }就是一个代码块

//加一个代码块就可以实现第一个if和最后的else配对

int main(void)

{

   int a = 0;

   int b = 2;

   if (a == 1)

   {

      if (b == 2)

         printf("hehe\n");

   }

      else

         printf("haha\n");

   return 0;

}

e. if书写语句的对比

问:能否打印出hehe

int num = 4;     

   if (num = 5)//=是赋值,==是判断相不相等

   {

      printf("hehe\n");

   }

    return 0;

答:可以,因为赋值了num=5

最优解写if ( 5 == num)

  1. 练习:写一个代码输出1~100之间的奇数

1for语句循环

int i;

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

             {

                if ( i % 2 ==1)

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

      }

2while语句循环

  1.   int i = 1;

             while (i <= 100)

             {

                   if (i % 2 == 1)  或者   if (i % 2 != 0)

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

                 i++;  

      }

b. int i = 1;

         while (i <= 100)

   {

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

         i+=2;

   }

  1. switch语句{用来实现多分支

  好习惯:在每个switch语句后加default子句,

           甚至在后面加一个break

Switch(整型表达式)//int

{

              语句项;//case语句

                    case 整型常量表达式://冒号

                      语句;

}

A#include<stdio.h>

int main(void)

{

   int day = 0;

   scanf_s("%d", &day);//3

   switch(day)

   {

   case 1:

      printf("星期1\n");

      break;//中止,跳出switch语句.case后的break不一定要有

   case 2:

      printf("星期2\n");

      break;

   case 3:

      printf("星期3\n");

      break;

   case 4:

      printf("星期4\n");

      break;

   case 5:

      printf("星期5\n");

      break;

   case 6:

      printf("星期6\n");

      break;

   case 7:

      printf("星期天\n");

      break;

   }

     return 0;

}

B#include<stdio.h>

int main(void)

{

   int day = 0;

   scanf_s("%d", &day);//3

   switch(day)

   {

default://默认的意思

      printf("输入错误\n");         defaulthcase没有顺序之分

      break;                        //上下都可以放

   case 1: 

   case 2: 

   case 3: 

   case 4: 

   case 5:

      printf("工作日\n");

      break;   

   case 6:    

   case 7:

      printf("休息日\n");

      break;

default://默认的意思

      printf("输入错误\n");

      break;

   }

     return 0;

}

Ccase 1: 

      if (n == 1)

      printf("hehe\n");

D#include<stdio.h> //逐级向下计算

int main(void)

{

   int n= 1;

   int m= 2;

   switch(n)

   {

   case 1:  m++;

   case 2:  n++; 

   case 3: 

      switch (n)//switch允许嵌套使用

      {

      case 1:n++;

      case 2:m++; n++; break;

      }

   case 4:  m++; 

   default://默认的意思

      break;

   }

   printf("m=%d,n=%d\n",m,n);//m=5,n=3

     return 0;

}

#include<stdio.h>

int main(void)

{

   int ch = 0;

   int ret = 0;

   char password[20] = { 0 };

   printf("请输入密码>:");

   scanf_s("%s", &password);//输入密码,存放在password数组中

   //缓冲区还剩一个'\n'

   //读取一下'\n'

   while ((ch = getchar()) != '\n')

   {

      ;//输入密码有间隔空格时

   }

   getchar();

   printf("请确认(Y/N)>:");//数组名可看作地址

   ret = getchar();//passwordgetchar是输入函数

   if (ret == 'Y')

   {

      printf("确认成功\n");

   }

   else

   {

      printf("放弃确认\n");

   }

   return 0;

}

2.

练习#2023.4.6

  1. n的阶乘

AFor循环

#include<stdio.h>

int main(void)

{

int i ,n;

int ret = 1;//ret不能为0.因为如果为0,后面的结果都是0了。

scanf_s("%d", &n);//可以自己输入值的意思

for (i = 1; i <= n; i++)

   {

      ret *= i;

}

   printf("ret=%d\n", ret);  //for语句的外面

   return 0;

}

Bwhile循环

#include<stdio.h>

int main(void)

{

   int n;

   scanf_s("%d", &n);

   int ret = 1;

   int i = 1;

   while (i <= n)

   {

      ret *= i;

      i++;

   }

   printf("ret=%d\n", ret);

      return 0;

}

  1. 计算1+2+3+4+5+6+7+8+9+10=

  #include<stdio.h>

int main(void)

{

   int i = 0;

   int n = 0;

   scanf_s("%d", &n);

   int ret = 1;

int sum = 0;

   for(n=1;n<10;n++)

   {

         ret = 1;

         for (i = 1; i <= n; i++)

      {

      ret *= i;

      }

   }

   printf("sum=%d", sum);

   return 0;

}

可优化为:

#include<stdio.h>

int main(void)

{

   int n = 0;

   scanf_s("%d", &n);

   int ret = 1;

   int sum = 0;

   for(n=1;n<=3;n++)

   {

      ret *= n;

      sum = sum + ret;

   }

   printf("sum=%d", sum);

   return 0;

}

个人理解:

n=1时,ret=ret*n=1*1=1

        sum=sum+ret=0+1=1

n=2时,ret=ret*n=1*2=2

        sum=sum+ret=1+2=3

n=3时,ret=ret*n=2*3=6

        sum=sum+ret=3+6=9

所以1+2+3!=9

  1. 在一个有序数组中查找具体的某个数字n。编写int bincearch(int x,int v[],int n);功能:在v[0]<=v[1]<=v[2]<=……<=v[n-1]的数组中查找x

#折半查找算法/二分查找算法:找一半去掉一半

#include<stdio.h>

int main(void)

{

   int arr[] = { 0,1,2,3,4,5,6,7,8,9,10 };

   int k = 7;//可以在这里直接改数值,也可以scanf_s("%d",&k)

               //然后在输出项目中输入数字

   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)

      {

         right = mid - 1;

      }

      else if (arr[mid] < k)

      {

         left = mid + 1;

      }

      else

      {

         printf("找到了,下标是:%d\n", mid);

         break;

      }

   }

   if (left > right)

   {

      printf("找不到\n");

   }

   return 0;

}

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

// int right = sizeof(arr1)/sizeof(arr1[0])-2;

  Char arr1[]=”abc”;

   [a b c \0]

0 1 2  3

要求c的下标是用4-2得到c的下标2

#include<stdio.h>

#include<string.h>

#include<windows.h>

#include<stdlib.h>

int main(void)

{

   char arr1[] = "welcome to bit!!!!!!";//是字符串

   char arr2[] = "####################";

   int left = 0;

   //int right = sizeof(arr1)/sizeof(arr1[0])-2;

   int right = strlen(arr1)-1;

   while (left<=right)

   {

      arr2[left] = arr1[left];

      arr2[right] = arr1[right];

      printf("%s\n", arr2);

Sleep(1000);//休息1000毫秒  //输出项目时会停留几秒然后输出下一个

                          //引用sleep函数要加头文件

                           //#include<windows.h>

      system("cls");//system是执行系统命令的一个函数

                    //要引头文件#include<stdlib.h>

                    //cls是清空屏幕

right--;

left++; 

}

   return 0;

}

输出结果为:

w##################!

we################!!

wel##############!!!

welc############!!!!

welco##########!!!!!

welcom########!!!!!!

welcome######t!!!!!!

welcome ####it!!!!!!

welcome t##bit!!!!!!

welcome to bit!!!!!!

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值