循环语句(while&for)

时间:2022-10-04 19:58:24

循环语句

while 语法结构

while (表达式) 循环语句:

//continue
#include <stdio.h>


int main()
{
int i = 1;
while (i<=10)
{
if (i == 5)
continue;//继续(跳过本次循环下面的代码)
printf("%d\n", i);//1,2,3,4,6,7,8,9,10
i++;
}
return 0;
}

break再while循环中的作用: 停止后期循环中所有的循环,直接终止循环 continue介绍: 跳过本次循环下面的代码,继续执行下一次循环

getchar -- 获取键盘输入的字符

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

int main()
{
//int ch = getchar();//getchar输入字符
//putchar(ch);//putchar输出字符
int ch = 0;
//ctrl + z会获取EOF 结束 --> -1
while ((ch = getchar()) != EOF)//EOF = end of file结束文件
{
putchar(ch);
}
return 0;
}

缓冲区

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

int main()
{
int ret = 0;
int ch = 0;
char password[20] = { 0 };
printf("请输入密码:");
scanf("%s", password);//键盘输入密码,并存放在password数组中
//缓冲区还剩余个'\n'
//读取一下\n
//getchar();
while ((ch = getchar()) != '\n')//清空缓冲区中的数据
{
;
}
printf("请确认(Y/N)");
ret = getchar();
if (ret == 'Y')
{
printf("确认");
}
else
{
printf("放弃");
}
return 0;
}

代码2

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

int main()
{
int ch = 0;
while ((ch = getchar()) != EOF)
{
if (ch < '0' || ch>'9')//只会输出数字字符,其他字符不会输出
continue;
putchar(ch);
}

return 0;
}

for循环(重要)

语法:for(表达式1;表达式2;表达式3) { 循环语句; }

举例:在屏幕上打印1-10的数字

#include <stdio.h>

int main()
{
for (int i = 1; i <= 10; i++)
{
printf("%d\n", i);
}
return 0;
}

建议: 1.不可在for循环体内修改循环变量,防止for循环失去控制 2.建议for语句的循环控制变量的取值采用“前闭后开区间”写法

for循环的变种

变种1

for循环的初始化,调整,判断都可以省略 但是: for循环的判断部分如果被省略,则判断条件恒为真 如果不是非常熟练,建议大家不要随便省略

#include <stdio.h>

int main()
{
for (;;)
{
printf("hehe\n");
}
return 0;
}

变种2

#include <stdio.h>

int main()
{
int x, y;
for (x = 0, y = 10; x < 2 && y>5; ++x, y++)
{
printf("hehe\n");
}
return 0;
}

do...while循环

语法: do 循环语句: while(表达式);

int main()
{
//1-10
int i = 1;
do
{
printf("%d\n", i);
i++;
}
while (i <= 10);
return 0;
}

\

练习 1. n的阶乘

int main()
{
//n的阶乘
int j = 1;
int n = 0;
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
j = j *i;
}
printf("%d\n", j);
return 0;
}
  1. 3的阶乘的和
#include <stdio.h>

int main()
{
int n = 0;
int ret = 1;
int sum = 0;
for (n=1;n<=3;n++)
{
ret = ret * n;
sum = sum + ret;
}
printf("sum = %d\n", sum);
return 0;
}

例题:二分查找

#include <stdio.h>

int main()
{

int arr[] = { 1,2,3,4,5,6,7,8,9,10 };//创建一个数组
int 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)//
{
right = mid - 1;
}
else if (arr[mid] < k)
{
left = mid + 1;
}
else
{
printf("找到了,下标是:%d\n", mid);
break;
}
}
if (left > right)
{
printf("找不到\n");
}
return 0;
}

练习习题

#include <stdio.h>
#include <string.h>
#include <windows.h>//引入Sleep函数的头文件
#include <stdlib.h>//引入system函数的头文件
int main()
{
//welcome to bit!!!!!
//w#################!
//we###############!!
// ...
//###################
char arr1[] = "welcome to bit!!!!!" ;//{welcome to bit!!!!!\0}
char arr2[] = "###################" ;
int left = 0;
//int right = sizeof(arr1) / sizeof(arr1[0]) - 2;//计算数组下标个数
int right = strlen(arr1) - 1;//计算数组下标个数
while (left<=right)//循环条件
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s\n", arr2);
//休息一秒
Sleep(1000);
system("cls");//执行系统命令的一个函数 - cls - 清空屏幕
left++;
right--;
}
return 0;
}

登录三次

int main()
{
int i = 0;
char password[20] = { 0 };
for (i = 0; i <= 3; i++)
{
printf("请输入密码:");
scanf("%s",password);
if (strcmp(password ,"123456")==0)//== 不能用来比较两个字符串是否相等,应该用一个库函数 - strcmp
{
printf("登陆成功!\n");
break;
}
else
{
printf("密码错误\n");
}
}
if (i > 3)
{
printf("三次密码均错误,退出程序!\n");
}
return 0;
}