个人博客网址:https://ljsblog.com
分支和循环(二)
C语言程序结构:
- 顺序结构
- 选择(分支)结构
- 循环结构
顺序结构:自上向下依次执行的程序,没有分支,没有循环
选择(分支)结构:用于判断给定的条件,根据判断的结果来控制程序的流程
循环结构:循环结构是指在程序中需要反复执行某个功能而设置的一种程序结构。它由循环体中的条件,判断继续执行某个功能还是退出循环。
语句
C语言中由一个分号;隔开的就是一条语句。例:
printf("boke");
1+2;
C语言中表示真假
0表示假,非0表示真
分支语句
1.if语句
语法结构:
如果条件表达式的结果为真,则语句执行
单分支if语句:
if (条件表达式)
{
语句组1;
}
双分支if语句:
if (条件表达式)
{
语句组1;
}
else
{
语句组2;
}
多分支选择结构:
if (表达式1)
{
语句组1;
}
else if (表达式2)
{
语句组2;
}
else if (表达式3)
{
语句组3;
}
...
else
{
语句组n;
}
注:else和离它最近的未匹配的if的匹配
例:
#include <stdio.h>
int main()
{
int a=0,b=0;
if(a==1)
if(b==0)
printf("1\n");
else
printf("2");
return 0;
}
//最终结果是什么也没打印
2.switch case语句
语法结构:
switch(表达式)//注:表达式必须是整形
{
case 整型数值1:
语句 1;
break;
//break用来跳出 switch 语句
//break可加可不加,视情况而定
case 整型数值2:
语句 2;
break;
......
case 整型数值n:
语句 n;
break;
default:
语句 n+1;
break;
}
循环语句
1.while语句
//语法结构
while(表达式) //while语句在表达式为假(或0)之前重复执行
{
循环体语句;
}
2.do-while语句
//语法结构
do
{
循环体语句;
}while(表达式); //do-while语句在表达式为假(或0)之前重复执行
3.for语句
//语法结构
for(初始化表达式;判断表达式;更新表达式) //for语句在判断表达式为假(或0)之前重复执行
{
循环体语句;
}
while,do-while,for的区别
- while语句先判断后执行,循环体可能不执行。
- do-while语句先执行后判断,循环体至少执行一次。
- for语句先判断后执行,相比while更简洁。
break和continue的区别
break的用法:
1.用来跳出switch case 语句,例子见switch case语句语法结构。
2.当 break 关键字用于循环时,会终止循环而执行整个循环语句后面的代码,例子见下。
例:
#include <stdio.h>
int main()
{
int i=1;
while(i<=10)
{
if(i==5)
{
break;
}
printf("%d ",i);
i++;
}
return 0;
}
//打印结果为1 2 3 4
continue的用法:
continue 语句的作用是跳过循环体中剩余的语句而强制进入下一次循环。
例:
//错误示范
#include <stdio.h>
int main()
{
int i=1;
while(i<=10)
{
if(i==5)
{
continue;
}
printf("%d ",i);
i++;
}
return 0;
}
//结果打印完1 2 3 4 后陷入死循环
//正确示范
#include <stdio.h>
int main()
{
int i=0;
while(i<10)
{
i++;
if(i==5)
{
continue;
}
printf("%d ",i);
}
return 0;
}
//结果1 2 3 4 6 7 8 9 10
例子
在有序数组中找数字
#include <stdio.h>
int main()
{
int a[]={1,2,3,4,5,6,7,8,9};
int right=sizeof(a)/sizeof(a[0])-1;
int left=0,mid=0,b;
scanf("%d",&b);
while(left<=right)
{
mid=(left+right)/2;
if(b>a[mid])
{
left=mid+1;
}
else if(b<a[mid])
{
right=mid-1;
}
else
{
printf("下标为%d\n",mid);
break;
}
}
if(left>right)
{
printf("没找到\n");
}
return 0;
}
/*
输入6
结果为
下标为5
*/
求101-200间的素数
#include <stdio.h>
#include <math.h>
int main()
{
int i=0,j=0,count=0;
for(i=101;i<=200;i+=2)
//用i+=2而不是用i++
//原因:是因为素数肯定不是偶数,所以用i+=2效率会更高
{
for(j=2;j<=sqrt(i);j++)
//sqrt()是开平方,需要调用math.h
//用j<=sqrt(i)而不是用j<i
//原因:若i=a*b,则a和b中至少有一个数字小于等于开平方i,所以用j<sqrt(i)效率会更高
{
if(i%j==0)
{
break;
}
}
if(j>sqrt(i))
{
printf("%d\n",i);
count++;
}
}
printf("素数的个数为%d\n",count);
return 0;
}
/*结果为
101
103
107
109
113
127
131
137
139
149
151
157
163
167
173
179
181
191
193
197
199
素数的个数为21
*/
九九乘法表
//九九乘法表
#include <stdio.h>
int main()
{
int i=1,j=1;
for(i=1;i<=9;i++)
{
for(j=1;j<=i;j++)
{
printf("%d*%d=%-2d ",j,i,j*i);
}
printf("\n");
}
return 0;
}
/*结果为
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
*/