循环结构:当条件满足的时候,程序会重复的执行某一个代码段,这就是循环结构。
构成循环结构要素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);
利用while来计算用户输入的字符个数:
int count=0 ;
char ‘ch’;
printf("请输入字符");
scanf("%c",&ch);
while (ch!='\n'){
count=count+1
scanf("%c",&ch)(继续取下一个字符);
}
printf("你输入的个数是:%d\n",count);
应用控制方向:w上 s下 a左 d右 q退出;
char direction;
int flog = 1;
printf("请控制小人移动w.上 s.下 a.左 d.右"\n);
while (flog){
scanf("%c",&direction);
witch(direction){
case w
case W
printf("上");
break;
case s
case S
printf("下");
break;
case a
case A
printf("左");
break;
case d
case D
printf("右");
break;
case q
case Q
printf("程序正在退出...");
printf("程序已退出。");
flog = 0;
break;
default :
break;
}
}
随机产生m-n之间的随机数:
用arc4random_uniform(n-m+1)+m 例如要产生10到50中间的随机数就是(50-10+1)+10 就会产生了;因为括号里是41就会产生0到40的数然后分别加上10就是10到50了
疯狂猜字游戏的程序实现:
#include <stdio.h>
#include <stdlib.h>
int main(){
int inputNum = 0,randomNum = 0;(保存用户输入的数,和电脑随机产生的数)
int flag = 1,;
int m = 1 ,n = 1000;(保存随机数产生的区间)
int nowCount = 1;(保存当前输入的次数 用于提示用户)
int totalCount = 10;(保存用户输入的总数)
int oldCount = 0;(用于保存上一次用户输入的数)
randomNum = arc4random_uniform (n-m+1)+m;(电脑随机产生了m到n这个区间的数)
while (flag){ (用flag的目的是让while变成死循环 因为flag=1怎么都是真 一直会执行)
printf( 请输入一个[%d ,%d]中的数\n,m,n);
scanf("%d",&inputNum)
if(nowCount<=totalCount){
if(inputNum>randomNum){
printf(" 当前你是第:%d次猜,还有:%d次机会\n ,上一次猜的数是:%d ,本次猜的数是:%d\n ,你猜大了\n",nowCount,totalCount-nowCount,oldNum,inputNum);
}else if(inputNum<randomNum){
printf("当前你是第:%d次猜,还有:%d次机会\n ,上一次猜的数是:%d ,本次猜的数是:%d\n ,你猜小了\n",nowCount,totalCount-nowCount,oldNum,inputNum)
}else {
printf(" 当前你是第:%d次猜,还有:%d次机会\n ,上一次猜的数是:%d ,本次猜的数是:%d\n ,你猜对了\n",nowCount,totalCount-nowCount,oldNum,inputNum)
}flag = 0;
nowCount++;
oldNum = inputNum;(把上次的值输送给oldNum)
}else{
printf("你的智商不适合玩这个游戏\n")
flag = 0;
}
return 0 ;
}
}
do while循环语句:直到型循环指先执行循环体,然后判断条件直到条件为假;
int main (){
int i = 1,sum = 0;
do{
sum +=i;
i++;
while (i<=100);(注意while后面记得加分号)
printf("sum=:%d",sum);
return 0;
}
}
do while 和while的区别
do while不管条件真还是假 至少它会执行一次;
while 如果条件为假 则不会执行;
for循环:格式是 for(表达式1;表达式2;表达式3){};
比如:
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的乘积;因此打印的时候像下面那么写;
for (i = 1 ,i <= 9, i++){
for (j = 1, j<=i,j++){
printf ("%d*%d = %d",j,i,j*i);
printf("\n");
}
}
break的用法:
计算r=1至 r=10 的圆面积直到 圆面积大于100时停止;
for (int i = 1,i<=10,i++){
float area = 0.0f;
area = 3.14f*r*r;
if(area>100){
printf("%d,%f\n",r,area)
break;
}
}
用在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<stdio.h>
int main()
{
int count = 0;
int i;
for (i = 1; i <=100; i++)
{
if(i % 7 ==0)
count++;
}
printf("%d",count);
return 0;
} |
|