分支循环语句(1)

1.if语句
(1)if(表达式) 语句1
else 语句2
(2)if(表达式1)语句1
else if(表达式2)语句2
else 语句3
注意:如果条件成立,要执行多条语句,应该使用代码块{}
(在程序中,默认else 与离他最近的if所匹配,除非用代码块隔开)
 
eg.
#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;
}
结果:无
 
最优if的书写形式:
if(条件)
{
return a;
}
else
{ return b;
}
 
int num =1;
if(5==num) //num=5是赋值,容易出错,num==5为判断
{
printf("hehe\n");
}
2.switch
用于多分支语句
#include<stdio.h>
int main()
{
int day =0;
scanf("%d",&day);
switch(day)
{
case 1:
printf(“星期一”);
break;
case 2:
printf(“星期一”);
break;
case 3:
printf(“星期一”);
break;
case 4:
printf(“星期一”);
break;
default:
printf("输入错误\n");
break;
}
return 0;
}
注意:
switch(整型表达式)
{
语句项:
}
语句项:
case 整型常量表达式
语句;
注意别忘记了break
switch允许嵌套使用
 
3.循环语句
 
while循环
while(表达式为真)
循环语句;
 
打印1-10
#include<stdio.h>
int main()
{
int i=1;
while(i<11)
{
//if(i==4)
//break;或者continue;
printf("%d",i);
i++;
}
return 0;
}
 
当其中遇到break ,continue
break:遇到后,便不再循坏,直接跳出,永久终止
continue:终止本次循环,本次循环后的代码不会执行,直接跳转到while的判断部分,进行下一次循坏的入口判断
 
补充:getchar/putchar
#include<stdio.h>
int main()
{
int ch =getchar();//输入
putchar(ch);//输出
printf("%d",ch);//输出,二者作用相同,前者更加便捷
return 0;
}
 
 
for循环
for(表达式1;表达式2;表达式3)
循环语句;
 
打印1-10的数字
#include int main()
{
int i = 0;
//for(i=1/*初始化*/; i<=10/*判断部分*/; i++/*调整部分*/)
for(i=1; i<=10; i++)
{ printf("%d ", i);
}
return 0;
}
 
for循环,while循环的break,continue区别:
#include<stdio.h>
int main()
{
int i = 0;
for(i=1; i<=10; i++)
{
if(i == 5)
break; //直接跳出循环
printf("%d ",i);
}
return 0; }
结果:1,2,3,4
 
#include<stdio.h>
int main()
{
int i = 0;
//初始化,判断,调整
for(i=1; i<=10; i++)
{
if(i == 5)
continue;//跳转继续循环
printf("%d ",i);
}
return 0;
}
结果:1,2,3,4,6,7,8,9,10
 
for语句的循环控制变量
1. 不可在for 循环体内修改循环变量,防止 for 循环失去控制。
2. 建议for语句的循环控制变量的取值采用“前闭后开区间”写法。
int i = 0;
//前闭后开的写法
for(i=0; i<10; i++)
{}
 
//两边都是闭区间
for(i=0; i<=9; i++) {}
 
 
for循环的变换运用
#include <stdio.h>
int main()
{ //变种1
for(;;)
{
printf("hehe\n");
return 0;
}
结果:死循环
// 1.for循环的初始化,调整,判断都是可以省略
//2.但是判断部分被省略,判断条件就恒为正
//3.不是非常熟练就不要省略
 
//变种2
int x, y;
   for (x = 0, y = 0; x<2 && y<5; ++x, y++)  
{  
     printf("hehe\n");
  }
return 0;
 
 
//请问循环要循环多少次?
#include<stdio.h>
int main()
{
int i = 0;
int k = 0;
for(i =0,k=0; k=0; i++,k++)  
     k++;
return 0;
}
结果:0次
k=0是赋值,判断为0,为假,不循环
 
 
4.do....while
do
循环语句;
while(表达式);
 
#include<stdio.h>
int main()
{
int i = 10;
do
{
printf("%d\n", i);
i++;
}
while(i<=10);
return 0;
}
 
do while循环中的break和continue
 
#include <stdio.h>
int main()
{
int i = 10;
do
{  
 if(5 == i)  
         break;
printf("%d\n", i);
i++;
}while(i<10);
return 0;
}
结果:1,2,3,4
 
#include<stdio.h>
int main()
{
int i = 10;
do
{  
     if(5 == i)  
         continue;
printf("%d\n", i);
i++;
}while(i<10);
return 0;
}
结果:1,2,3,4
 
习题:
1.n的阶乘(1*2*3*4...*n)
#include<stdio.h>
int main()
{
int i=1;
int s=1;
int n=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
s=s*i;
}
printf("n的阶乘%d",s);
return 0;
}
 
2.计算1!+2!+....10!
法1.
#include<stdio.h>
int main()
{
int i=1;
int n=0;
int sum=0;
int s=1;
for(n=1;n<=10;n++)
{
s=1;
for(i=1 ;i<=n;i++)
{
s=s*i;
}//n的阶乘
sum=sum+s;
}
printf("阶乘和%d",sum);
return 0;
}
 
法2.
#include<stdio.h>
int main()
{
int i=1;
int n=0;
int sum=0;
int s=1;
for(n=1;n<=10;n++)
{
s=s*n;
sum=sum+s;
}
printf("阶乘和%d",sum);
return 0;
}
 
3. 在一个有序数组中查找具体的某个数字n。 编写int binsearch(int x, int v[], int n); 功能:在v[0] <=v[1]<=v[2]<= ….<=v[n-1]的数组中查找x
 
#include<stdio.h>
int main()
{
int arr[ ]={1,2,3,4,5,6,7,8,9,10};
int k=7;
//在arr有序数组中找到7
int i=0;
int sz= sizeof(arr)/sizeof(arr[0]);//知道个数
for(i=0; i<sz; i++)
{
if(k==arr[i])
{
printf("找到了,下标为:%d\n",i);
break;
}
}
if(i== sz)
printf("找不到\n");
return 0;
}
 
折半查找算法(二分查找法)
最坏查找次数:log2(下标) n
 
题3:
#include<stdio.h>
int main()
{
int arr[] = {1,2,3,4,5,6,7,8,9,10};
int left = 0;
int right = sizeof(arr)/sizeof(arr[0])-1;
int key = 7;
int mid = 0;
while(left<=right)
{
mid = (left+right)/2;
if(arr[mid]>key)
{
right = mid-1;
}
else if(arr[mid] < key)
{
left = mid+1;
}
else {
printf("找到了,下标是%d\n", mid);
break;
}
if(left >right)
{
printf("找不到\n");}
return 0;
}
 
4. 编写代码,演示多个字符从两端移动,向中间汇聚
#include<stdio.h>
#include<string>
#include<window.h>
//include<stdlib.h>
int main()
{
char arr1[] = "welcome to bit...";
char arr2[] = "#################";
int left = 0;
int right = strlen(arr1)-1; //字符串有一个‘\0’无法用前一题的方法计算数组的个数
//while循环实现
while(left<=right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s\n", arr2);
Sleep(1000);//休息一秒
//systerm("cls");//执行系统命令--cls--清空屏幕
left++;
right--;
}
return 0;
}
 
5. 编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则 提示登录成,如果三次均输入错误,则退出程序
 
#include<stdio.h>
int main()
{
int i=0;
char password[20]={0};
for(i=0;i<3;i++)
{
printf("请输入密码:");
scanf("%s",password);
if(strcmp(password,"123456")==0)\\== 不能用来比较两个字符串是否相等,应该用一个库函数--strcmp
{
printf("登陆成功\n");
break;
}
else
{
printf("密码错误");
}
}
if(i == 3)
printf("三次密码均错误,退出程序\n");
return 0;
}

posted @ 2020-12-01 20:34  木鱼脑壳  阅读(42)  评论(0)    收藏  举报