目录
1.绪论
本节学习内容:
分支语句
- if
- switch
循环语句
- while
- for
- do while
2.if else语句
语法结构:
第一钟:
if(表达式)
语句1;
第二种:
if(表达式)
语句1;
else
语句2;
第三种:
if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;
代码例子-->用if else语句写出年龄分段如下:
age<18为少年
age在18到26为青年
age在26到40为中年
age在40岁以上为老年
int main()
{
int age = 0;
scanf("%d",&age);
if (age < 18)
printf("少年");
else if (age >= 18 && age < 26)
printf("青年");
else if (age >= 26 && age < 40)
printf("中年");
else
printf("老年");
return 0;
}
代码执行如下图:
注:else与最近的if语句为一组!!!
3.switch语句
语法结构:
switch(表达式)
{
case :语句;(break;)
case :语句;(break;)
}
代码例子-->判断星期几
当没有break时:
int main()
{
int day = 0;
scanf("%d",&day);
switch (day)
{
case 1:printf("星期一\n");
case 2:printf("星期二\n");
case 3:printf("星期三\n");
case 4:printf("星期四\n");
case 5:printf("星期五\n");
case 6:printf("星期六\n");
case 7:printf("星期天\n");
}
return 0;
}
代码运行如图:
当有break时:
代码运行如图:
所以我们可以看出break的作用-->在switch语句中,跳出该语句
现在我们想想怎么让代码1-5输出工作日,6-7为休息日呢?
我们可以将代码改成如下所示:
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;
}
return 0;
}
那现在我们来讲讲switch中其他情况的语句--->default
比如上代码当我们输入8,9......等不符合的时候就不会输出什么,但我们想让他输出“输入错误”改怎么写?
我们可以修改如下:
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:printf("工作日\n"); break;
case 6:
case 7:printf("休息日\n"); break;
default:printf("输入错误"); break;
}
4.while循环
语法结构:
while(表达式)
语句;
代码练习-->在屏幕上打印1-10,但是要求当i=5的时候代码跳出
int main()
{
int i = 0;
while (i <=10)
{
printf("%d\n", i);
i++;
if (i == 5)
break;
}
return 0;
}
所以我们可以看出break的作用-->在while循环中,终止循环
那我们想想如果把break换成continue并且把if语句放在i++前面,那么会发生什么?
代码执行如图所示:
那是为什么呢?当i=5的时候我们没有跳出循环没有执行i++,所以i一直为死循环
因此,我们可以发现,continue的作用-->跳过本次循环
现在我们来分析下下面的代码
int ch = 0;
while ((ch = getchar() )!= EOF)
{
putchar(ch);
}
return 0;
代码运行如下:
那么我们怎么让这个代码停下来呢?ctrl+z-->读取结束
getchar返回的是该字符的ASCII码值,如果遇到错误或文件结束则返回EOF(end of file)--->-1,是文件结束标志。getchar的返回类型为int型!!!!
代码例子-->密码的输入与确认
char password = { 0 };
printf("请输入密码:");
scanf("%s", &password);
printf("请确认密码(Y/N)");
int ch = getchar();
if (ch =='Y')
printf("确认成功");
else
printf("确认失败");
return 0;
我们会发现我们还没有输入Y,他就会直接输出确认失败。这是为什么呢?
假如我们输入12345\n,那么scanf会把12345拿走,那么getchar就会把剩下的\n拿走,所以就会直接走else。
那么怎么解决这个问题?-->清除缓冲区的\n
在getchar前面再加个getchar();
那么当我们密码输入12345 abcde时会出现什么呢?
我们会发现会出现和之前一样的错误,这又是为什么呢?
scanf会把空格前面的12345拿走,而getchar只能消耗一个字符。
因此我们要清理缓冲区!!代码修改如下:
char password = { 0 };
printf("请输入密码:");
scanf("%s", &password);
printf("请确认密码(Y/N)");
int x=0;
while ((x = getchar()) != '\n')
{
;
}
int ch = getchar();
if (ch == 'Y')
printf("确认成功");
else
printf("确认失败");
return 0;
5.for循环
语法结构:
for(表达式1;表达式2;表达式3)
语句;
for (int i = 0; i < 10; i++)
{
if (i == 5)
continue;
printf("%d ", i);
}
代码运行结果为0 1 2 3 4 6 7 8 9
从上我们可以发现continue的作用->跳过该次循环
建议--->采用左闭右开的方式写for循环
eg:for(i=0;i<10;i++)
下面我们来判断以下这个代码循环多少次?
int main()
{
int i=0;
int k=0;
for(i=0,k=0;k=0;k++,i++)
k++;
return 0;
}
答案是0次.
因为这里的判断语句是k=0,意思是将0赋值给k,所以为假,因此循环次数为0次。
6.do while循环
语句结构:
do
循环语句;
while(表达式);
特点:循环体至少执行一次!!!
今日代码练习题--->求n!
int main()
{
int n = 0;
int x = 1;
scanf("%d", &n);
for (int i = 1; i <=n; i++)
{
x *= i;
}
printf("%d", x);
return 0;
}
代码练习题-->1!+2!+.....+n!
int main()
{
int sum = 0;
int n = 0;
int x = 1;
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
x *= i;
sum = sum + x;
}
printf("%d", sum);
return 0;
}
代码练习题-->按序查找一个数
int main()
{
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int k = 7;
int n = sizeof(arr) / sizeof(arr[0]);
int left = 0;
int right = n - 1;
int mid = 0;
while (left <= right)
{
mid = (left + right) / 2;
if (arr[mid] < k)
{
left = mid + 1;
}
else if (arr[mid]>k)
right = mid - 1;
else
{
printf("%d", arr[mid]);
break;
}
}
if (left > right)
printf("没找到!");
getchar();
getchar();
return 0;
}
代码练习题-->如何实现该结果:
#include<windows.h>
int main()
{
char arr1[] = { "welcome to bit!!!!!!" };
char arr2[] = { "####################" };
int left = 0;
int right = sizeof(arr1)-1;
while (left <= right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s\n", arr2);
Sleep(1000);//睡眠一秒
left++;
right--;
}
return 0;
}
其中Sleep函数需要引入头文件windows.h!!
那么本节学习就结束啦!!!
这里还是一个正在学习的小白,如果代码或者理解有问题还希望多多包涵并且私信我>_<。