拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

C语言循环精讲:while与for深度对比

C语言循环精讲:while与for深度对比

C语言学习记录

日期: 8.12

📖今日知识点 ——while

while(表达式)

循环语句;

💻练习代码

#include<stdio.h>

//while

//int main()

//{

// int i = 1;

// while(i <= 10)

// {

// if (i == 5)

// //break;//在while循环中,break用于永久的终止循环

// continue;//在while循环中,continue的作用是跳过本次循环continue后边的代码,直接去判断部分,看是否进行下一次循环

// printf("%d ", i);

// i++;

// }

// return 0;

//}

//getchar——获取第一个字符

//EOF - end of file - 文件结束标志

//int main()

//{

// int ch = getchar();

// //printf(“%c\n”,ch);

// putchar(ch);//输出一个字符

// return 0;

//}

//无循环:只读一次 → 只拿到第一个字符

//while 循环:不断重复读取,缓冲区有多少字符就读取、输出多少个

//int main()

//{

// int ch = 0;

// //ctr+z 回车 —— getchar就结束了

// while((ch=getchar()) != EOF)

// {

// putchar(ch);

// }

// return 0;

//}

//

//int main()

//{

// char password[20] = {0};

// printf(“请输入密码:>”);

// scanf(“%s”,password);//这里不用&是因为password本身是数组,数组的数组名本来就是个地址

// //清理缓冲区

// //getchar();//只清理一个

// int tem = 0;

// while ((tem = getchar()) != ‘\n’)

// {

// ;

// }

// printf(“请确认密码(Y/N):>”);

// int ch = getchar();

// if(ch == ‘Y’)

// {

// printf(“确认成功”);

// }

// else

// {

// printf(“确认失败”);

// }

// return 0;

//}

//只打印数字不打印字符

//int main()

//{

// int ch = 0;

// while ((ch = getchar()) != EOF)

// {

// if (ch < ‘0’ || ch > ‘9’)

// continue;

// putchar(ch);

// }

// return 0;

//}

int main()

{

int a = 1;//初始化 while(a <= 10)//判断部分 { printf("%d ",a); a++;//调整部分 } return 0;

}

📖今日知识点 ——for

for(表达式1(初始化);表达式2(判断部分);表达式3(调整部分))

{

循环语句;

}

一句话总结区别

  1. continue 语义完全相同:跳过本次循环剩余代码,直奔循环条件判断;

  2. while 版本 i++ 写在循环体内部、continue 之后:遇到 continue 就执行不到 i++,变量不再自增 → 死循环;

  3. for 版本 i++ 属于循环表达式,不在循环体内部:哪怕 continue 跳过循环体,i++ 依旧会执行,数值正常增长。

for()里的初始化、判断部分、调整部分可以省略,但是判断部分省略容易死循环,不建议省略。

💻练习代码

//for循环

//int main()

//{

// int i = 0;

// for (i = 1;i <= 10;i++)

// {

// if (i == 5)

// //break;//在for循环中break用于永久的终止循环

// continue;//在while循环中,continue的作用是跳过本次循环continue后边的代码,直接去判断部分,看是否进行下一次循环

// printf("%d ",i);

// }

//}

//建议:1.不可在for循环体内修改循环变量,防止for循环失去控制

//循环体内修改循环变量

//int main()

//{

// int i = 0;

// for (i = 1;i <= 10;i++)

// {

// printf("%d ",i);

// int j = 0;

// for(j = 0;j < 10;i++)

// {

// printf(“hehe\n”);//死循环

// }

// }

// return 0;

//}

//2.建议for语句的循环控制变量的取值采用“前闭后开区间”写法

//int main()

//{

// int arr[10] = {0};

// int i = 0;

// for (i = 0;i < 10;i++)//i = 0闭区间,i < 10k开区间。不建议写成i<=9

// {

// printf("%d ",arr[i]);

// }

// return 0;

//}

//int main()

//{

// for(;😉

// {

// printf(“hehe\n”);

// }

// return 0;

//}

//外层每走 1 次完整循环,内层循环要从头到尾跑完一整轮

//3*3=9

//int main()

//{

// int i = 0;

// int j = 0;

// for (i = 0; i < 3;i++)

// {

// for (j = 0; j < 3;j++)

// {

// printf(“hehe\n”);

// }

// }

// return 0;

//}

//当省略初始化部分时只打印三次

//因为第一轮外层循环i=0时的内循环正常打印3次hehe(j=3),第二轮外层循环时i=1时的内循环此时j=3(因为j没有初始化),j<3内循环结束

//第三轮也一样,所以只打印3次hehe

//int main()

//{

// int i = 0;

// int j = 0;

// for (; i < 3;i++)

// {

// for (; j < 3;j++)

// {

// printf(“hehe\n”);

// }

// }

// return 0;

//}

int main()

{

int i = 0; int k = 0; for (i = 0,k = 0;k=0;i++,k++)//这里判断部分k = 0;k被赋值为0,为假,循环一次都进不去! { k++; } return 0;

}

📖今日知识点 ——do while

do

循环语句;

while(表达式);

do while的特点:循环体至少执行一次

💻练习代码

#include<stdio.h>

//输出数字12345678910

//int main()

//{

// int i = 1;

// do

// {

// if (i == 5)

// //break;

// continue;

// printf("%d ",i);

// i++;

// }

// while(i<=10);

// return 0;

//}

//计算n的阶乘

//int main()

//{

// int i = 0;

// int n = 0;

// int ret = 1;//乘积初始值必须写1,不能写0

// scanf(“%d”,&n);

// for(i = 1;i <= n;i++)

// {

// ret=i;//等于ret = reti,n=5时,i取12345,第一次循环,ret=11,第二次ret=12,第三次ret=23…64,24*5=120

// }

// printf(“%d\n”,ret);

// return 0;

//}

//计算1!+2!+3!+…+10!

//int main()

//{

// int i = 0;

// int n = 0;

// int ret = 1;//乘积初始值必须写1,不能写0

// int sum = 0;

// //3! = 321=3*2!

// //2!=2*1

//

//// for (n = 1;n <= 3;n++)

//// {

//// ret = 1;//计算n的阶乘之前,把ret初始化为1

//// for(i = 1;i <= n;i++)

//// {

//// ret *=i;

//// }

//// sum += ret;

//// }

//

// for (n = 1;n <= 3;n++)

// {

// ret *= n;

// sum += ret;

// }

// printf(“%d\n”,sum);//9

// return 0;

//}

//在一个有序数组中查找具体的某个数字n

//int main()

//{

// int arr[] = {1,2,3,4,5,6,7,8,9,10};

// int k = 7;//要查找的数字

// //在arr这个有序的数组中查找k(7)的值

// int az = sizeof(arr) / sizeof(arr[0]);//数组元素的个数

// int left = 0;

// int right = az -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”,mid);

// break;

//

// }

// }

// if (left > right)

// {

// printf(“找不到了\n”);

// }

// return 0;

//}

//编写代码,演示多个字符从两端移动,向中间汇聚

//welcome to here!!!

//####################

//w##################!

//we################!!

//wel##############!!!

//…

//welcome to here!!!

//#include<string.h>

//#include<windows.h>

//int main()

//{

// char arr1[] = “welcome to here!!!”;

// 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–;

// }

// printf(“%s\n”,arr2);

// return 0;

//}

//编写代码实现,模拟用户登录情景,并且只能登录三次(只允许输入三次密码,如果密码正确则提示成功,如果三次均输入错误,则退出程

#include<string.h>

int main()

{

int i = 0; //假设正确密码是字符串“123456” char password[20] = { 0 }; for (i = 0;i < 3;i++) { printf("请输入密码:>"); scanf("%s",password); //if (password == "123456");//error 两个字符号比较,不能使用==,应该使用strcmp if(strcmp(password,"123456") == 0)//strcmp()函数返回为0 { printf("登录成功\n"); break; } else { printf("密码错误,重新输入!\n"); } } if (i == 3) printf("三次密码均错误,退出程序\n"); return 0;

}

猜数字游戏:

#include<stdio.h>

//1.自动产生一个1~100之间的随机数字

//2.猜数字

//a.猜对了就恭喜你,游戏结束

//b.猜错了会告诉是猜大了还是猜小了,继续猜,知道猜对

//3.游戏可以一直玩,除非退出游戏

#include<stdlib.h>

#include<time.h>

void menu()

{

printf("**************************\n"); printf("********* 1.paly ********\n"); printf("********* 0.exit ********\n"); printf("**************************\n");

}

void game()

{

//猜数字游戏的实现 //1.生成随机数 //rand函数返回了一个0~32767之间的数字 //时间——变化——时间戳 int ret = rand() % 100 + 1;//%100的余数0~99,然后加1,范围就是1~100 //printf("%d\n",ret); //2.猜数字 int guess = 0; while(1)//这里的 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("选择错误,重新选择\n"); break; } } while(input); return 0;

}

返回列表