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(调整部分))
{
循环语句;}
一句话总结区别
continue 语义完全相同:跳过本次循环剩余代码,直奔循环条件判断;
while 版本 i++ 写在循环体内部、continue 之后:遇到 continue 就执行不到 i++,变量不再自增 → 死循环;
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;}