C语言-循环-B站视频——笔记。
C语言是一门结构化的程序设计语言
1、顺序结构;
2、选择结构;
3、循环结构。
1、分支语句与循环语句
1)分支语句(选择结构)
if
switch
2)循环语句
while
for
do while
语句:C语言中由一个分号;隔开的就是一条语句。
(1)if语句
#include
int main()
{
int age = 30 ;
if (age < 18)
printf("未成年人\n");
else
printf("成年人\n");
return 0;
}
练习:
1、判断一个数是否为奇数。
解:取模。
//1、判断一个数是否为奇数。
// 解:取模。
#include
int main()
{
//判断一个数是否为奇数
int num = 3 ;
if (num/2 == 1 )
printf("该数为奇数\n");
else
printf("该数为偶数\n");
return 0;
}
2、输出1-100之间的奇数。
//2、输出1-100之间的奇数。
#include
int main()
{
//输出1 - 100之间的奇数。
int i = 1;
while (i <= 100)
{
if (i % 2 == 1)//或者if(i%2 !=0)
printf("%d\t", i);
i++;
}
return 0;
}
或者
#include
int main()
{
//输出1 - 100之间的奇数。
int i = 1;
while (i <= 100)
{
printf("%d\t", i);
i+=2;//等价于 i=i+2;
}
return 0;
}
(2)switch 语句——情景语句
switch语句也是一种分支语句。常常用于多分支的情况。
switch语句结构:
switch(整型表达式)
{
case 整型常量表达式:
语句1;
break;
语句2;
break;;
.........
default:
break;
}
例子:
#include
int main()
{
int day = 0;
scanf("%d",&day);
switch (day)
{
case 1:
printf("星期一\n");
break;
case 2:
printf("星期二\n");
break;
case 3:
printf("星期三\n");
break;
case 4:
printf("星期四\n");
break;
case 5:
printf("星期五\n");
break;
case 6:
printf("星期六\n");
break;
case 7:
printf("星期天\n");
break;
}
return 0;
}
完整代码风格:
#include
int main()
{
int day = 0;
scanf("%d",&day);
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日\n");
break;
case 6:
case 7:
printf("休息日\n");
break;
default:
printf("输入错误!\n");
break;
}
return 0;
}
理解:
#include
int main()
{
int n = 1;
int m = 2;
switch (n)
{
case 1:m++;
case 2:n++;
case 3:
switch (n)
{//switch允许嵌套使用。
case 1:m++;
case 2:m++; n++;
break;
}
case 4:m++;
break;
default:
printf("输入错误!\n");
break;
}
printf("m = %d,n = %d\n",m,n);
return 0;
}
2、循环语句
for;while;do while;
(1)while 循环
while 语法结构
while(表达式)
循环语句:
#include
int main()
{
int i = 1;
while (i<=10)
{//break(从此处跳出);continue(循环执行continue之前的语句);
printf("%d\n", i);
i++;
}
return 0;
}
总结:break在while循环中的作用:
其实在循环中只要遇到break,就停止后期的所有循环,直至终值循环。
所以:while中的break是用于永久终止循环的。
总结: continue在while循环中的作用就是︰
continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,
而是直接跳转到while语句的判断部分。进行下一次循环的入口判断。
例1:
#include
int main()
{
int ch = getchar();
putchar(ch);
printf("%c\n", ch);
return 0;
}
例2:
#include
int main()
{
int ch = 0;
//ctrl + z //结束
//EOF - end of file -> -1 文件结束标志
while ((ch = getchar()) != EOF)
{
putchar(ch);
}
return 0;
}
例子1:
#include
int main()
{
int ret = 0;
int ch = 0;
char password[20] = {0};
printf("请输入密码:>");
scanf("%s", password);//输入密码,并存放在password数组中。
//缓冲区还剩余一个“\n”;
// 读取一下“\n”。
while ((ch=getchar()) != "\n")
{
;
}
//getchar();
printf("请确认(Y/N):>");
ret = getchar();//Y/N
if (ret == "Y")
{
printf("确认成功\n");
}
else
{
printf("放弃确认\n");
}
return 0;
}
(2)for循环。
语法:
for(初始化;条件;累加)
循环语句:
例子1:打印1-10的数字。
//打印1-10的数字。
#include
int main()
{
int i = 0;
//初始化;条件(判断);调整
for (i = 1; i <= 10; i++)
{
printf("%d\n", i);
}
return 0;
}
for语句的循环控制变量一些建议︰
1.不可在for循环体内修改循环变量,防止for 循环失去控制。
2.建议for语句的循环控制变量的取值采用“前闭后开区间”写法。
for循环的一些变种:
1、for循环的初始化、调整、判断,均可省略。
for循环的 判断部分如果被省略,那么判断条件就是:恒为正。
2、如果不是非常熟练,建议大家不要随便省略。
例子2:请问循环要循环多少次?
//请问循环要循环多少次?
#include
int main()
{
int i = 0;
int k = 0;
for (i=0,k=0;k=0;i++,k++)
k++;
return 0;
}
答:零次。
(3)do while 循环。
语法:
do
循环语句;
while(表达式);
练习
1.计算n的阶乘。
2.计算1!+2!+3!+......+10!
3.在一个有序数组中查找具体的某个数字n。编写int binsearch(int x, int v[], int n);功自<=v[1]<=v[2]<= ....<=v[n-1]的数组中查找x.
4.编写代码,演示多个字符从两端移动,向中间汇聚。
5.编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如!提示登录成,如果三次均输入错误,则退出程序。
练习1:
//1.计算n的阶乘。
#define _CRT_SECURE_NO_WARNINGS 1
#include
int main()
{
int i = 0;
int n = 0;
int ret = 1;
scanf("%d", &n);
for (i=1;i<=n;i++)
{
ret = ret * i;
}
printf("ret = %d\n", ret);
return 0;
}
练习2:
//2.计算1!+2!+3!+......+10!
#include
int main()
{
int i = 0;
int n = 0;
int ret = 1;
int sum = 0;
for (n=1;n <=10;n++)
{
ret = ret * n;
sum = sum + ret;
}
printf("sum = %d\n", sum);
return 0;
}
练习3:
例子1:
//3.在一个有序数组中查找具体的某个数字n。编写int binsearch(int x, int v[], int n);
//功自<=v[1]<=v[2]<= ....<=v[n-1]的数组中查找x.
#define _CRT_SECURE_NO_WARNINGS 1
#include
int main()
{
int arr[] = {1,2,3,4,5,6,7,8,9,10};
int k = 7;
//写一个代码,在arr数组(有序的)中找到7。
int i = 0;
int sz = sizeof(arr)/sizeof(arr[0]);
for (i=0;i
例子2:二分法查找数字。
#include
int main()
{ //二分法查找
int arr[] = {1,2,3,4,5,6,7,8,9,10};
int k = 11;
//写一个代码,在arr数组(有序的)中找到7。
int left = 0;
int sz = sizeof(arr)/sizeof(arr[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",mid);
break;
}
}
if (left > right)
{
printf("找不到了。");
}
return 0;
}
练习4:
//4.编写代码,演示多个字符从两端移动,向中间汇聚。
#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
#include
#include
int main()
{
char arr1[] = "Welcome to bit!!!!!!";
char arr2[] = "####################";
int left = 0;
//int right = sizeof(arr1)/sizeof(arr1[0])-2;//err
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;
}
练习5:
//5.编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如!提示登录成,如果三次均输入错误,则退出程序。
#define _CRT_SECURE_NO_WARNINGS 1
#include
int main()
{
int i = 0;
char password[20] = { 0 };
for (i = 0; i < 3; i++)
{
printf("请输入密码:>");
scanf("%s",password);
//等号==不能用来比较两个字符串是否相等,应该使用一个库函数——strcmp
if (strcmp(password,"123456") == 0)
{
printf("登录成功!\n");
break;
}
else
{
printf("密码错误\n");
}
}
if (i == 3)
{
printf("三次密码均错误,退出程序。\n");
}
return 0;
}
作业:
(1)
//打印1-100之间的所有3的倍数的数字。
#include
int main()
{
int i=0;
for(i=1;i<=100;i++)
{
if(i%3==0)//取模
printf("%d\n",i);
}
return 0;
}
(2)
//两数之间的最大公约数。
#include
int main()//辗转相除法。
{
int m,n;
int r = 0;
scanf("%d%d",&m,&n);
while(r=m%n)
{
m=n;
n=r;
}
printf("%d\n",n);
return 0;
}
(3)
//1000-2000年之间的闰年。
#include
int main()//辗转相除法。
{
int year;
int count = 0;
for(year=1000;year<=2000;year++)
{//判断year是否为闰年
//1、能被4整除并且不能被100整除
//2、能被400整除的是闰年
if((year%4==0&&year%100!=0)||(year%400==0))
{
printf("%d ",year);
count++;
}
}
printf("\ncount = %d\n",count);
return 0;
}
(4)
//打印100-200之间的素数
#include
#include
int main()
{
int i=0;
int count = 0;
for(i=101;i<=200;i+=2)//排除偶数。
{//判断i是否为素数
//素数判断的规则
//1、试除法
//产生2->i-1个
int j=0;
for(j=2;jsqrt(i))
{
count++;
printf("%d ",i);
}
}
printf("\ncount=%d\n",count);
return 0;
}
// int main()
//{
// int i=0;
// int count = 0;
// for(i=100;i<=200;i++)
// {//判断i是否为素数
// //素数判断的规则
// //1、试除法
// //产生2->i-1个
// int j=0;
// for(j=2;j
(5)
//数包含9的个数
#include
int main()
{
int i=0;
int count=0;
for(i=1;i<=100;i++)
{
if(i%10==9)//余数=9。
count++;
if(i/10==9)//商=9;
count++;
}
printf("count=%d",count);
return 0;
}
(6)
//分数求和
//计算1/1-1/2+1/3-1/4+1/5......+1/99-1/100。
#include
int main()
{
int i=0;
int flat=1;
double sum=0.0;
for(i=1;i<=100;i++)
{
sum+=flat*1.0/i;
flat=-flat;
}
printf("%lf\n",sum);
return 0;
}
// int i=0;
// double sum=0.0;
// for(i=1;i<=100;i++)
// {
// sum+=1.0/i;
// }
// printf("%lf\n",sum);
(7)
//求10个数的最大值。
#include
int main()
{
int arr[]={-1,-2,-3,-4,-5,-6,-7,-8,-9,-10};
int max=arr[0];//最大值。
int i=0;
int sz=sizeof(arr)/sizeof(arr[0]);//求个数。
for(i=0;i
(8)
//九九乘法口诀。
#include
int main()
{
int i=1;
int j=1;
for(i=1;i<10;i++)
{确定打印9行
for(j=1;j<=i;j++)
{//打印一行
printf("%d*%d=%-2d ",j,i,i*j);
}
printf("\n");
}
return 0;
}
(9)
//猜数字游戏
//1、电脑会生成一个随机数
//2、猜数字
#include
#include
#include
void menu()
{//菜单
printf("************************\n");
printf("*****1.play 0.exit*****\n");
printf("************************\n");
}
void game()
{//1、生成一个个随机数
int ret = 0;
int guess=0;//接受猜的数字
//拿时间戳来设置随机数的生成起始点
//时间戳:当计算机的时间-计算机的起始时间(1970.1.1.0:0:0)=(xxxx)秒
//time_t time(time_t * timer)
ret = rand()%100+1;//生成1-100之间随机数
//printf("%d\n",ret);
//2、猜数字
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));//NULL为空指针。
do
{
menu();
printf("请选择>:");
scanf("%d",&input);
switch(input)
{
case 1:
game();//猜数字游戏
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("选择错误\n");
break;
}
} while(input);//input=0,退出游戏。
return 0;
}
(10_1)
//goto 语句的应用
#include
#include
#include
int main()
{
char input[20]= {0};
//shutdown -s -t 60
//system()-执行系统命令的
system("shutdown -s -t 60");
again:
printf("请注意,你的电脑在1分钟内关机,如果输入:我是猪..就取消关机\n请输入>:");
scanf("%s",input);
if(strcmp(input,"我是猪")== 0)//比较两个字符串-strcmp O)
{
system("shutdown -a");
}
else
{
goto again;
}
return 0;
}
(10_2)
//你是猪
#include
#include
#include
int main()
{
char input[20]= {0};
//shutdown -s -t 60
//system()-执行系统命令的
system("shutdown -s -t 60");
while(1)
{
printf("请注意,你的电脑在1分钟内关机,如果输入:我是猪..就取消关机\n请输入>:");
scanf("%s",input);
if(strcmp(input,"我是猪")== 0)//比较两个字符串-strcmp O)
{
system("shutdown -a");
break;
}
}
return 0;
}
结束。