1,循环语句
有时候我们需要连续重复相同/类似的代码很多遍,就需要用到循环语句
循环 -》 就是连续去做重复的事情
在c语言中,有三种循环语句 while do while for
还有一条语句可以实现循环的效果 : goto
2,while语句
语法:
while(表达式)
循环体语句块
当while()中的表达式成立,就会执行循环体语句块,执行完语句块之后,再次判断表达式是否成立
如果成立,再次执行循环体语句块,执行完语句块之后,再次判断表达式是否成立
如果成立,再次执行循环体语句块,执行完语句块之后,再次判断表达式是否成立
.......
直到某一次判断表达式不成立,结束该while语句
如果表达式永远成立,我们称之为“死循环”
表达式:任意的合法的c语言表达式都可以
while语句的循环体建议用 {} 括起来(如果不括起来,循环体语句就只有一条),
while的首字母w和 左括号{ 和右括号}在一条线上,{}里面的语句块要用 tab键往右缩进
练习:
求 [100,200]范围内所有偶数之和
3, do ... while语句
语法:
do
{
循环体语句块
}while(表达式); //必须要有分号
先无条件的执行循环语句一次
判断表达式是否成立,如果成立,则再次执行语句块,执行完之后,再次判断表达式是否成立
如果成立,则再次执行语句块,执行完之后,再次判断表达式是否成立
如果成立,则再次执行语句块,执行完之后,再次判断表达式是否成立
...
直到某一次判断表达式不成立,结束该do while语句
练习:
1,求一个整数的 n次方
2,输入一个正整数,逆序输出这个整数的每一位
12345 -> 5 4 3 2 1
0 -> 0
3,输入一个正整数,求它的阶乘
n = 1*2*3...*n
累乘
int j = 1;//保存阶乘
int i = 1;//用来循环
int n;
scanf("%d",&n);
while(i<=n)
{
j *= i;
i++;
}
4,求两个正整数的最大公约数
被这两个数能同时整除,并且是最大的那一个
穷举法:把所有可能的情况一一列举出来,进行分析判断,找出符合要求的那一个
int n,m;
scanf("%d%d",&n,&m);
m,n的最大公约数,怎么穷举?
1,先确定范围 [1,min(n,m)]
2,再循环判断是否为公约数,保留最大的那个
5,输入一个正整数n,判断是否为质数/素数?
质数:只能被1和它本身整除
思路:
统计 [2,n-1]范围内能被n整除的个数 《-穷举
int n;
scanf("%d",&n);
int i=2;
int count = 0;
while(i<n)
{
if(n%i == 0)//能被整除
{
count++;
break;
}
}
if(count == 0)
{
是质数
}
else
{
不是质数
}
4, for语句
语法:
for(表达式1;表达式2;表达式3) //注意:是分号,不是逗号
循环体语句块
先运行一次表达式1,再判断表达式2是否成立,如果成立,就执行语句块,然后执行表达式3,
再判断表达式2是否成立,如果成立,就执行语句块,然后执行表达式3,
再判断表达式2是否成立,如果成立,就执行语句块,然后执行表达式3,
......
直到表达式2不成立
表达式1,2,3都可以省略,-》空语句,但是两个分号不能省略
如果表达式2省略,表示一直成立
例子:
求 [100,200]范围内所有偶数之和
int i;
int sum = 0;
for(i=100;i<=200;i+=2;)
{
sum += i;
}
int i=100;
int sum = 0;//必须要置0
while(i<=200)
{
sum += i;//累加, sum的初始值必须为0
i+=2;
}
练习:
请大家把之前用 while循环实现的功能,全部改为 for循环
练习:
1,输出所有的水仙花数
水仙花数是一个三位数,并且它个位,十位,百位的立方和等于它本身
int i;
int a,b,c;//分别保存i的个十百位
for(i=100;i<1000;i++)
{
a = i%10;
b = i/10%10;
c = i/100;
if(a*a*a+b*b*b+c*c*c == i)
{
printf("%d\n",i);
}
}
2,求表达式 a+aa+aaa+.... + aa..aaa(n个a) 的值
a,n由键盘输入 a的范围 [0,9]
如:
a 3 n 5
求 3 + 33 + 333 + 3333 + 33333 的值
第 1 2 3 4 5 项
求第i项(i个a),用s(i)表示
i=1 3
i=2 33
i=3 333
....
s(0) = 0
s(i) = s(i-1)*10+a i>0
int si = 0;//表示第i项
int sn = 0;//表示前i项之和
for(i=1;i<=n;i++)
{
si = si*10 + a;
sn += si;
}
5,两个关键字
break 和 continue
之前讲过 break语句放在 switch语句的 case子句中,用来结束 switch语句的
break还可以放在循环语句中(while\do while\for),作用是跳出/结束当前循环语句
例子:
int data = 0;
while(data < 20)//打印 [0,19]
{
printf("%d\n",data++);
}
int data = 0;
while(data < 20)//打印 [0,9]
{
if(data == 10)
break;
printf("%d\n",data++);
}
....
continue 只能放在循环语句中,作用是跳出这一次循环(这一次的循环体语句不再继续执行)
6,多重循环
顾名思义就是循环语句里面又有循环语句
例子:
int i,j;
for(i=0;i<10;i++)
{
for(j=0;j<=i;j++)
{
printf("%d ",j);
}
printf("\n");
}
->
for(j=0;j<=0;j++)
{
printf("%d ",j);
}
printf("\n");
for(j=0;j<=1;j++)
{
printf("%d ",j);
}
printf("\n");
for(j=0;j<=2;j++)
{
printf("%d ",j);
}
printf("\n");
...
for(j=0;j<=9;j++)
{
printf("%d ",j);
}
printf("\n");
0
0 1
0 1 2
0 1 2 3
....
0 1 2 3 4 5 6 7 8 9
练习:输出[100,200]范围内所有的质数
int n;
int i=2;
int count = 0;//记录 [2,n-1]范围�
ikun-realman
- 粉丝: 1
- 资源: 9
最新资源
- 数据格式异常如何解决.md
- ConcurrentModificationException解决办法.md
- UnsupportedEncodingException解决办法.md
- NAError(解决方案).md
- java.Arrays.md
- MalformedURLException解决办法.md
- java.Collections.md
- 资源占用异常如何解决.md
- SQLException解决办法.md
- 权限拒绝异常如何解决.md
- NaNError(解决方案).md
- InfError(解决方案).md
- java.包装类.md
- 操作超时异常如何解决.md
- java.集合框架.md
- TimeoutException解决办法.md
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈