在while循环中打印1-10,代码如下
int main()
{
int i = 1;//初始化
while(i <= 10)//判断部分
{
printf("%d",i);
i++;//调整部分
}
return 0;
}
while循环中的初始化部分与判断部分和调整部分相离太远,而在for循环中语法如下:
语法
for(表达式1;表达式2;表达式3)
{
循环语句;
}
表达式1为初始化部分;表达式2为条件判断部分;表达式3为调整部分
for循环在屏幕上打印1-10
int main()
{
int i=0;
for(i=1;i<=10;i++)
{
//初始化;判断;调整
printf("%d",i);
}
return 0;
}
我们可以发现在while循环中依然存在循环的三个必须条件,但是由于风格的问题使得三个部分很可能偏离较远,这样查找修改就不够集中和方便。所以,for循环的风格更胜一筹。 for循环使用的频率也最高。
for循环中的break
int main()
{
int i=0;
for(i=1;i<=10;i++)
{
if(i==5)
break;
printf("%d",i);//1234
}
return 0;
}
break的作用与while循环一样,也是跳出整个循环。
for循环中的continue
int main()
{
int i=0;
for(i=1;i<=10;i++)
{
if(i==5)
continue;
printf("%d",i);//1234 678910
}
return 0;
}
在i=5时,continue,continue的作用跳过continue下面的语句,所以continue跳过了i=5时的打印,跳过后继续i++,所以有了后面的打印。
对于写for循环的建议
1.不要在调整循环体内修改循环变量的值,防止循环体失去控制
2.建议for语句的循环控制变量的取值采用“前闭后开区间”写法。
int i = 0;
//前闭后开的写法
for(i=0; i<10; i++)
{
}
//两边都是闭区间
for(i=0; i<=9; i++)
{
}
int main()
{
int arr[10]={
0};
int i=0;
for(i=0;i<10;i++)
{
printf("%d",arr[i]);
}
//两边都是闭区间
/*for(i=0;i<=9;i++)
{
printf("%d",arr[i]);
}*/
return 0;
}
一些for循环的变种
判断部分的省略 - 判断部分恒为真
int main()
{
for(;;)
{
printf("haha");//陷入死循环
}
return 0;
}
这是判断部分恒为真,所以陷入死循环
下面再看一个代码
int main()
{
int i=0;
int j=0;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
printf("haha\n");//9个haha
}
}
return 0;
}
上面嵌套循环,当我们将i=0;j=0;初始化部分省略
int main()
{
int i=0;
int j=0;
for(;i<3;i++)
{
for(;j<3;j++)
{
printf("haha\n");//3个haha
}
}
return 0;
}
这里只执行了i=0时的三个haha,当i=1时,此时j=3,j不小于3,进不去循环,以此类推,后面都进不去循环
笔试题
请问循环要循环多少次?
int main()
{
int i=0;
int k=0;
for(i=0,k=0;k=0;i++,k++)
k++;
return 0;
}
答案是0次,注意判断区域是赋值号,判断为假,所以循环进不去。
do
循环语句;
whlie(表达式);
do语句的特点
循环至少执行一次,使用的场景有限,所以不是经常使用。
do while循环打印1-10:
int main()
{
int i=1;
do
{
printf("%d ",i);
i++;
}while(i<=10);
}
do while循环中的break和continue
int main()
{
int i=1;
do
{
if(i==5)
{
break;
}
printf("%d ",i);
i++;
}while(i<=10);
}
打印1 2 3 4,i==5时,break跳出循环
int main()
{
int i=1;
do
{
if(i==5)
{
continue;
}
printf("%d ",i);
i++;
}while(i<=10);
}
continue跳过之后的语句,跳过了i++,所以打印了1 2 3 4 后陷入了死循环
1.计算n的阶乘
//计算n的阶乘
#include
int main()
{
int n = 0;
scanf("%d", &n);
int temp = 1;
for (int i = 1; i <= n; i++)
{
temp = temp * i;
}
printf("%d", temp);
return 0;
}
2.计算1!+……+10!
方法一:
//计算1!+……+10!
//方法一:
#include
int main()
{
int n = 0;
int temp = 1;
int sum = 0;
for (n=1;n<=10; n++)
{
temp = 1;//计算n的阶乘之前,把temp置为1
for (int i = 1; i <= n; i++)
{
temp = temp * i;
}
sum = sum + temp;
}
printf("%d", sum);
return 0;
}
方法二:
#include
int main()
{
int temp = 1;
int sum = 0;
for (int n = 1; n <= 3; n++)
{
temp = temp * n;
//1*1 1*1*2 1*1*2*3//
sum = sum + temp;
}
printf("%d", sum);
return 0;
}
#include
int main()
{
int arr[] = {
1,2,3,4,5,6,7,8,9,10 };
int k = 7;//要查找的数字
//在arr这个有序的数组中查找k(7)的值
int sz = sizeof(arr) / sizeof(arr[0]);
int left = 0;
int right = sz - 1;
while (left<=right)
{
int mid = (left + right) / 2;
if (arr[mid] < k)
{
left = mid + 1;
}
else if (arr[mid] > k)
{
right = mid - 1;
}
else
{
printf("找到了,下标为:%d\n", arr[mid]);
break;
}
}
if (left > right)
{
printf("找不到\n");
}
return 0;
编写代码,演示多个字符从两端移动,向中间汇聚。
#include
#include
#include
int main()
{
char arr1[] = "welcome to bit!!!!!!";
char arr2[] = "####################";
int left = 0;
int right = strlen(arr1) - 1;
while (left <= right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s\n",arr2);
Sleep(1000);//睡眠一秒
system("cls");//清空屏幕
left++;
right--;
}
return 0;
}
编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则提示登录成功,如果三次均输入错误,则退出程序。
#include
#include
int main()
{
int i = 0;
//假设正确密码"123456"
char password[20] = {
0 };
for (i = 0; i < 3; i++)
{
printf("请输入密码:>");
scanf("%s", password);
//if(password=="123456")//err-字符串比较不能使用==,需要使用strcmp
if (strcmp(password, "123456") == 0)//比较成功返回0
{
printf("登陆成功\n");
}
else
{
printf("密码错误,重新输入!\n");
}
}
if (i == 3)
{
printf("三次密码均错误,退出程序\n");
}
return 0;
}
6.猜数字游戏
//猜数字游戏
//1.自动产生一个1-100之间的随机数
//2.猜数字
// a.猜对了,就恭喜你,游戏结束
// b.你猜错了,会告诉你猜大了,还是猜小了,继续猜,知道猜对
//3.游戏一个一直玩,除非退出游戏
#include
#include
void menu()
{
printf("***************************\n");
printf("******** 1.play *********\n");
printf("******** 0.exit *********\n");
printf("***************************\n");
}
void game()
{
//猜数字游戏的实现
//1.生成随机数
//rand函数返回了一个0-32767之间的数字
//一个时间对应一个时间戳
int ret = rand()%100+1;//%100的余数是0-99,然后+1,就是0-100
//printf("%d\n", ret);
//2.猜数字
int guess = 0;
while (1)
{
printf("请猜数字:>");
scanf("%d", &guess);
if (guess < ret)
{
printf("猜小了\n");
}
else if (guess > ret)
{
printf("猜大了\n");
}
else
{
printf("恭喜你猜对了\n");
break;
}
}
}
int main()
{
int input = 0;
srand((unsigned int)time(NULL));
do
{
menu();//打印菜单
printf("请选择:>");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("选择错误,重新选择");
break;
}
} while(input);
return 0;
}