2.分支与循环语句
前言
提示:C语言笔记用作对自己学习的总结以及以后方便查阅遗忘知识。
以后也会查缺补漏。
什么是语句?
在C语言中由一个分号(;)隔开的就是一条语句。
1.分支语句
1.1、分支语句(选择结构)
格式:
(1)没有else部分:
if(表达式) 语句1;
(2)有else部分:
if(表达式)
语句1;
else
语句2;
(3)else嵌套多个if:
if(表达式1)
语句1;
else if(表达式2)
语句2;
else if(表达式3)
语句3;
else
语句4;
表达式结果为真,则语句执行。
(0表示假,非0表示真)
注:通常情况下else是与距离自身最近的else匹配。
if 1
if 2
else
此时else是与if2匹配
如果是
if 1
{
if 2
}
else
此时else是与if2匹配
例子
if(condition)
{
return x;
}
returny;
条件成立则返回x,否则返回y
1.2、多分支语句(switch语句)
格式:
switch(整型表达式)
{
case 表达式结果1:
语句1;
break;
case 表达式结果2:
语句2;
break;
case 表达式结果3:
语句3;
break;
case 表达式结果4:
语句4;
break;
default:
语句5;
break;
}
注意:
(1).switch()中()里面的表达式必须是整形的,不能为小数或者其他类型的。
(2).break是指跳出{}包含的语句,且break以后的语句不会执行。
比如
switch()
{
case 1:
case 2:
break;
}
此时如果从case 1开始执行的话,同时会执行case 2,
然后才会执行break,跳出这个switch语句。
(3). default表示除了case语句中有的选项之外的所有选项。
(4).case和default是没有顺序之分的,也可以放在上面,
建议放在最下面。
2、循环语句
有
- while语句
- for语句
- do while语句
2.1 while语句
格式:
while(表达式)
{
语句;
}
continue作用:
比如while语句里面,在continue后面的语句不会执行,而是直接跳转到while语句的判断部分,进行下一次循环的入口判断.
注意:在while里面使用continue可能会导致死循环
2.2 for语句
格式:
for(表达式1;表达式2;表达式3)
{
循环语句;
}
表达式1:初始化部分
表达式2:条件判断部分
表达式3:调整部分
for循环建议:
- 不可以在for循环体内修改循环变量,防止for循环失去控制
- 建议for语句的循环控制变量的取值采用前闭后开区间的写法,例如for(i=0;i<10;)。
(建议但不是必须)
for( ; ; )
在这个for语句中,不加任何表达式,执行的是一个死循环
for(k=0;k=0;k++)
当表达式2为0时,即判断为假,直接结束,循环0次
2.3 do while语句
格式:
do
循环语句;
while(表达式);
while表达式为真就循环,为假就结束循环了。
实际应用
1.折半查找算法(二分查找算法)
说明:找中间元素,去掉一半
2.辗转相除法
说明:
求m与n的最大公约数
若m>n
m%n=r -->r为m除以n的模
(1)m n r
(1)n r m%n
反复执行(2)直到r为0,则此时n就是m和n的最大公约数
int main()
{
int m = 0;
int n = 0;
int r = 0;
scanf("%d%d", &m, &n);
while (m%n)
{
r = m%n;
m = n;
n = r;
}
printf("%d\n", n);
return 0;
}
3.计算闰年
闰年:
(1)能被4整除不能被100整除的年份
(2)能被400整除的年份
需求:找出1900—2020年之间的闰年,并计算一共有多少个闰年
#include<stdio.h>
int main()
{
int count = 0;
int n = 0;
for (n = 1900; n <= 2020; n++)
{
if ((n % 4 == 0 && n % 100 != 0) || n % 400 == 0)
printf("%d\n", n);
count++;
}
printf("一共有%d个闰年\n", count);
return 0;
}
4.素数的判断方法
素数:只能被1和自身整除的自然数。(1不是素数)
需求:找出1—100里面的素数
#include<stdio.h>
int main()
{
int i = 0;
int j = 0;
for (i = 1; i <= 100; i++)
{
for (j =2; j < i; j++)
{
if (i%j == 0)
break;
if (j = i)
{
printf("%d\n", i);
}
}
}
return 0;
}
5.九九乘法表
1 * 1=1
1 * 2=2 2 * 2=4
1 * 3=3 2 * 3=6 3 * 3=9
…
#include<stdio.h>
int main()
{
int i = 0;
int n = 0;
int sum = 0;
while (n<9)
{
n++;
for (i = 1; i <= n; i++)
{
sum = i*n;
printf("%d*%d=%-2d", i, n, sum);
printf(" ");
}
printf("\n");
}
return 0;
}
注:%2d表示两位右对齐
%-2d表示两位左对齐
总结
(1).getchar() 表示输入
puchar() 表示输出
例如:
int ch=getchar();
putchar(ch);
printf("%c\n",ch);
return 0;
(2).在scanf("%d",&x)里面如果输入1234 ABCD的话,输出结果为1234,不会有ABCD,即scanf只会读取空格前面的值。
(3).
(4).
(5).
(6).
(7).
(8).
(9).