分支语句和循环语句
分支语句(选择结构)
- if语句
- switch语句
if语句
==:判断
=:赋值
-------------------------------------------------1---------------------------------------------------------
if (条件)
{
语句;
......
}
-------------------------------------------------2---------------------------------------------------------
if (条件)
{
语句1;
.....
}
else
{
语句2; //注意if和else后面没有冒号
......
}
-------------------------------------------------3---------------------------------------------------------
//多分支
if(条件1)
{
语句1;
}
else if(条件2)
{
语句2;
}
else
{
语句3;
}
------------------------------------------------------------------------------------------------------------
#include <stdio.h>
int main()
{
int age=20;
if (age<18)
{
printf("未成年\n");
printf("nonono\n");
} //包含多条语句时要使用大括号
else if(age>=18 && age<28) //此处不能写为18<=age<28
printf("青年\n");
else
print("123");
return 0;
}
---------------------------------------------悬空else问题----------------------------------------------------
#include <stdio.h>
int main()
{
int a=1;
int b=2;
if (a<0)
if(b<0)
printf("nonono\n");
else
printf("yes\n");
return 0;
} //此时什么都不输出,因为else会和最近的未匹配的if匹配
#include <stdio.h>
int main()
{
int a=1;
int b=2;
if (a<0)
{ if(b<0)
printf("nonono\n");
}
else
printf("yes\n");
return 0;
} //此时输出yes
书写形式对比
if(条件)
{
return x;
}
return y;
//满足条件返回x,不满足返回y
if(条件)
{
return x;
}
else
{
return y;
}
输出1-100的奇数
#include <stdio.h>
int main()
{
int i = 0;
for(i=0;i<100;i++)
if(1==i%2)
printf("%d ",i);
return 0;
}
------------------------------------------------------------------------------------------------------------
#include <stdio.h>
int main()
{
int i = 0;
while(i<100)
{ if(1==i%2)
{
printf("%d ",i);
}
i++; //注意此处i++要在if判断外
}
return 0;
}
switch语句
switch语句常用于多分支的情况
switch(整型表达式) //类型必须是整型
{
case 整型常量表达式: //可以是表达式,但运算结果必须是 整型常量
语句项;
//break;
//整型表达式是几,就从case 几 进入
语句项;
......
}
------------------------------------------------------------------------------------------------------------
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d",&day);
switch(day)
{
case 1: //注意case和数字之间要有空格
printf("星期1\n");
break; //注意要有break; 用于跳出switch语句。不然会继续执行后面的代码
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;
}
------------------------------------------------------------------------------------------------------------
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d",&day);
switch(day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日\n"); //输入1-5,都会输出”工作日“
break;
case 6:
case 7:
printf("休息日\n");
break;
default: //处理无法匹配的数字
//printf("输入错误!"); //case和default的前后顺序没有严格要求
break; //每个switch语句只能出现一个default子句
}
return 0;
}
循环语句
- while语句
- do-while语句
- for语句
while循环
while(条件) //注意此处没有冒号
{
循环语句; //循环执行,直到条件为假
......;
}
在屏幕上打印1-10
#include <stdio.h>
int main()
{
int i=1;
while(i<11)
{
printf("%d\n",i);
i++;
}
return 0;
}
break:一旦执行,终止此次循环,跳出循环
while(i<11)
{
if(i==6)
break; //此处跳出整个while循环
printf("%d\n",i);
i++;
}
continue:一旦执行,终止此次循环,并返回循环开头,继续执行
int i=0;
while(i<11)
{
if(i==6)
continue; //跳过本次循环,跳回while循环开头,然后继续执行-->此处陷入死循环
printf("%d\n",i);
i++;
}
getchar()、putchar()
getchar()定义:用于接收键盘输入的字符。
int ch=getchar();
putchar()定义:输出字符。
putchar(ch);
举例
#include <stdio.h>
int main()
{
int ch = 0; //注意getchar要放在while的判断条件处,来实现循环输入;不能放在while循环前
while((ch=getchar())!=EOF) //EOF(end of file,值为-1):即ctrl+z
{
putchar(ch);
}
return 0;
}
使用putchar()之前需要清空缓存区:
while((ch=getchar()) != '\n')//循环检查缓冲区,知道读走缓冲区的最后一个字符'\n'
{
;//不用进行任何操作,只需函数去读取缓冲区内容即可
}
注意:scanf()函数只会读取空格前面的内容,遇到空格就终止读取。
for循环
for(表达式;表达式;表达式)//表达式1为初始化部分;表达式2为条件判断部分;表达式3是调整部分
{
循环语句;
......
}
//while循环的缺陷:三个部分分布较分散
在屏幕上打印1-10
#include <stdio.h>
int main()
{
int i=1;//创建变量
for(i=1;i<11;i++)//定义、判断、调整
{
printf("%d ",i);
}
return 0;
}
break和continue:与while循环大致相同,但是for里面的continue拥有调整机会,while里面的continue可能会跳过调整语句。
注意:
1.不可在for循环体内改变循环变量。
2.建议采取左闭右开的区间写法
do...while循环
至少循环一次
do
{
循环语句;
......
}
while(表达式);//这里的表达式只写条件判断语句
在屏幕上打印1-10
#include <stdio.h>
int main()
{
int i = 1;
do //do后面接多条语句的时候要加大括号
{
printf("%d ",i);
i++;
}
while(i<11);
return 0;
}
break和continue:与while循环相同,且continue后没有调整机会,可能陷入死循环
练习题
1.计算n的阶乘
#include <stdio.h>
int main()
{
int n = 0;
int s = 1;
int i = 0;
int jc = 0;
scanf("%d",&n);
for(i=n;i>0;i--)
{
s=s*i;
}
printf("%d阶乘为:%d",n,s);
return 0;
}
2.计算1!+2!+...+n!
#include <stdio.h>
int main()
{
int i = 0;
int j = 0;
int s = 1;
int n = 0;
int sum = 0;
printf("请输入一个整数:");
scanf("%d", &n);
for (i = n; i > 0; i--)
{
s = 1; // 重置 s 为 1
for (j = i; j > 0; j--)
{
s = s * j; // 计算阶乘
}
sum = sum + s; // 累加阶乘的和
}
printf("阶乘的和为:%d\n", sum);
return 0;
}
改进版:
#include <stdio.h>
int main()
{
int i = 0;
int j = 0;
int s = 1;
int n = 0;
int sum=0;
scanf("%d",&n);
for(i=1;i<n+1;i++)
{
s=s*i; //利用前一个已经计算好的阶乘结果
sum=sum+s;
}
printf("阶乘的和为:%d",sum);
return 0;
}
3.二分查找
二分法
计算复杂度:
$$
log_2N
$$
#include <stdio.h>
int main()
{
int arr[]={1,2,3,4,5,6,7,8,9,10};
int sz = sizeof(arr)/sizeof(arr[0]);//数组的元素个数
int left = 0;//区间最左边的角标
int right = sz-1;//区间最右边的角标
int k = 7;//要查找的数字是7
while(left<=right) //注意执行循环的条件,此条件代表区间里有数可以找
{
int mid = (left+right)/2;
if(arr[mid]>k)
{
right = mid-1;
}
else if(arr[mid]<k)
{
left = mid+1;
}
else if(arr[mid]==k)
{
printf("find!number=:%d",mid);
break;//跳出循环
}
}
if(left>right)
{
printf("can not find!");
}
return 0;
}
标签:语句,case,int,笔记,C语言,break,while,printf
From: https://www.cnblogs.com/arongsec/p/17557728.html