循环结构的概念:
当条件满足的时候,程序会重复的执行某一个代码段,这就是循环结构;
构成循环结构要素:1>循环控制条件
2>循环体
3>能够让循环结束的语句(递增、递减、真、假)
while循环的格式当型循环指的是先判断条件 在执行循环体;
while(表达式){
语句块;
}
例题 计算1+2+3+3.....+n的和;
//第一步定义变量i条件控制变量,sum存储和,n用户输入的值;
int i=1 ,n= 0 sum=0;
//第二步提示用户输入一个数n;
printf("请输入一个数"\n);
//第三步接收用户输入的数存入到n;
scanf("%d",&n);
//第四步设置while循环;
while (i<=n){
sum=sum+i;
i++;
}
printf("1+2+3...+%d=%d\n",n,sum);
//还可以改进写为 假设计算1到100的和
int i = 0,num = 0;
while(i++ < 100)num += i;//(后面因为只有num += i这一句话所以可以省略大括号)
printf("%d",sum);
#include
int main(int argc, const char * argv[]) {
//定义变量
char direction;
printf("请控制小人移动: w.上 s.下 a.左 d.右 q.退出\n");
//写一个死循环
int flag = 1;
while (flag) {
// 让玩家输入方法,如果玩家不输入方向系统会一直等待
scanf("%c",&direction);
// w 上 s 下 a 左 d 右 q退出
// W S A D
switch (direction) {
case 'w':
case 'W':
printf("上\n");
break;
case 's':
case 'S':
printf("下\n");
break;
case 'a':
case 'A':
printf("左\n");
break;
case 'd':
case 'D':
printf("右\n");
break;
case 'q':
case 'Q':
printf("程序正在退出...\n");
printf("程序已经退出.\n");
flag = 0;
break;
default:
break;
}
}
return 0;
}
随机产生m-n之间的随机数:
用arc4random_uniform(n-m+1)+m 例如要产生10到50中间的随机数就是(50-10+1)+10 就会产生了;因为括号里是41就会产生0到40的数然后分别加上10就是10到50了
疯狂猜字游戏的程序实现:
#include
int main(int argc, const char * argv[]) {
//定义变量
char direction;
printf("请控制小人移动: w.上 s.下 a.左 d.右 q.退出\n");
//写一个死循环
int flag = 1;
while (flag) {
// 让玩家输入方法,如果玩家不输入方向系统会一直等待
scanf("%c",&direction);
// w 上 s 下 a 左 d 右 q退出
// W S A D
switch (direction) {
case 'w':
case 'W':
printf("上\n");
break;
case 's':
case 'S':
printf("下\n");
break;
case 'a':
case 'A':
printf("左\n");
break;
case 'd':
case 'D':
printf("右\n");
break;
case 'q':
case 'Q':
printf("程序正在退出...\n");
printf("程序已经退出.\n");
flag = 0;
break;
default:
break;
}
}
return 0;
}
do while循环语句:直到型循环指先执行循环体,然后判断条件直到条件为假;
do while 和while的区别
do while不管条件真还是假 至少它会执行一次;
while 如果条件为假 则不会执行;
比如:
for (int i = 0;i<3;i++){printf("%d",i)}
这里 i<3是循环控制条件 printf("%d",i)是循环体 i++是让循环体结束的语句;
这里 还有其他几种表达方式也是一样的:
//第一种形式:
int i = 0 ;
for (;i<3;i++){
printf("%d",i)
} //(就是将初始化的语句放到for循环外面);
//第二种形式:
for (int i = 0;i<3;){
i++ ;
printf("%d",i)
}// (将i++也就是表达式3的语句放到大括号里面);
//第三种形式:
int = 0 ;
for(;;){
if (i<3;{
i++ ;
printf("%d",i);
}else {
break;
}
}//(利用break结束for循环)
//第四种形式:
for (;;){
printf("我会一直循环%d",)
}//(会是个死循环)
for的嵌套:我们一般这么理解 里层的for控制列数 外层的for控制层数;
利用for循环的嵌套打印出五行无列的星:
for (int j = 0 ; j<5;j++){
for (int i = 0 ;i<5 ;i++){ *
//(如果你想要打印出来三角形** 只需要在内层的for循环内让i<=j就可以了 意思就是让行数等于列数; )
***
printf("*\t");
}
printf("\n");//(表示每一行星都另外起一行)
}//(最外层的for是将里层的for打印一行星 打印五次 , 里层的for是打印一行)
如果想让第一行写1第二行写2第三行写3
1
2 2
3 3 3
4 4 4 4
5 5 5 5 5 打印这个图形只需要将j 和 i的初始值改为1 然后在里层的for循环内将原来打印的星改为printf("%d",i)。
如果想打印一个倒三角的星:只需要将里层循环的i<5改为 i<5-i就可以了;
* * * * *
* * * *
* * *
* *
*
如果要打印一个正三角形 第一行是一个星 第二行三个 第三行五个 一次下去有六行;该怎么实现 ;
//第一步 控制行数:用外层的for
for(int i = 1,i<=6,i++){
//第二步控制好左边的空格用第一个里层for循环
for (int j = 0, j<=6-i,j++){
printf"(" ")//(这里面表示打印出来空格 中间是有空格的)
}
//第三步控制每一行中星的个数 因为它是由规律的 个数用另外一个参数表示k<2*i-1 里层第二个for循环
for (int k = 0 ,k<2*i-1,k++){
printf("*\t")//(\t的意思是中间会有间距)
}
printf(""\n)//(表示每一行都按enter)
}
面试题经常考之九九乘法表的打印方法:
思路:两层for循环 外层for循环控制行 里层for循环控制列数;因为是正三角 所以里面的j<=i 行数等于列数就可以了
而看每一列可以知道 第一列可以知道是j的值 第二列是i的值;第三列是i和j的乘积;因此打印的时候像下面那么写;
#include
#include
int main(void)
{ int i ,j ;
for (i =1 ;i <= 9; i++){
for (j = 1; j<=i;j++){
printf ("%d*%d = %d ",j,i,j*i);
}
printf("\n");
}
return 0;
}
break的用法:
//计算r=1至 r=10 的圆面积直到 圆面积大于100时停止;
#include
#include
int main()
{ int i ;
for (i =1 ;i <= 10; i++){
float area =0.0f;
area = 3.14f*i*i;
if (area>100){
printf ("%d,%.2f\n",i,area);
break ;
}
}
return 0;
}
用在for循环中 它的作用是结束当前循环或者叫跳出当前循环;
for (int i = 0 ,i<10 ,i++){
if(i==5){
break;
}
printf("%d\t",i)
}
因为在for循环里面使用了break 所以在控制台会显示0 1 2 3 4 后面的数都不会输出和显示;因为break结束了当前的循环,它之后的语句也不会执行了;
但是 如果再break结束的当前循环外面还有一个for循环 他不会影响到因为它只结束当前的循环;
continue的用法:它的作用是加速循环
在上述例子中 如果把上面的break换成continue 那么它的结果是会显示 1 2 3 4 6 7 8 9 10 它只是5没有了 它的作用是结束当前的这次循环 继续下次循环
用法如下 :
把100到200之间不能被3整除的数列出来:
分析:不能被3整除那么 证明这个数i%3 != 0 那么只要将i%3 = 0 的部分去掉就可以实现了 ;
for (int i = 100,i<=200,i++){
if(i%3 == 0){
continue;(表示能整除的时候就跳过接着下一个数)
}
printf("%d\n",i)
}
求1到100中所有7的倍数的个数;
#include
int main()
{
int count = 0;
int i;
for (i = 1; i <=100; i++)
{
if(i % 7 ==0)
count++;
}
printf("%d",count);
return 0;
}