1、分支语句
(1)if分支
(一)
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
float score = 0;
printf("请输入分数:");
scanf("%f", &score);
if (score < 60)
{
printf("不及格\n");
}
else if (score <= 70)
{
printf("普通\n");
}
else if (score <= 80)
{
printf("一般\n");
}
else if (score <= 90)
{
printf("良好\n");
}
else
{
printf("优秀\n");
}
return 0;
}
(二)定义常量来表示分数区间的阈值,可以使代码更具可读性和可维护性。同时,添加了输入错误处理,可以避免无效的输入导致程序崩溃。
在 stdio.h 头文件之前,使用预处理指令 #define 定义了几个常量:
——FAIL_THRESHOLD:不及格的分数阈值为 60。
——PASS_THRESHOLD:及格的分数阈值为 70。
——GOOD_THRESHOLD:一般的分数阈值为 80。
——EXCELLENT_THRESHOLD:良好的分数阈值为 90。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#define FAIL_THRESHOLD 60
#define PASS_THRESHOLD 70
#define GOOD_THRESHOLD 80
#define EXCELLENT_THRESHOLD 90
int main()
{
float score = 0;
printf("请输入分数:");
if (scanf("%f", &score) != 1)
{ printf("输入错误,请输入一个合法的浮点数。\n");
return 1;
}
if (score < FAIL_THRESHOLD) {
printf("不及格\n");
}
else if (score <= PASS_THRESHOLD) {
printf("普通\n");
}
else if (score <= GOOD_THRESHOLD) {
printf("一般\n");
}
else if (score <= EXCELLENT_THRESHOLD) {
printf("良好\n");
}
else {
printf("优秀\n");
}
return 0;
}
(2)else悬空(打印内容为空,因为else与最近的if匹配,可通过{}改变匹配的if)
在代码中a的值为0,因此不满足外部条件语句if (a == 1)
,所以内部的条件语句if(b == 2)
会被跳过。所以不会执行任何的printf
语句。因此,执行结果为空,没有任何输出。程序正常结束并返回0。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int a=0;
int b=2;
if(a==1)
if(b==2)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
(3)分支语句switch,case--接整型常量表达式
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int day = 0;
printf("请输入值:");
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;
default:
printf("s输入错误!!!\n");
break;
}
return 0;
}
(4)循环语句while、for、do while
1)结果:①1~10;②1~5;③1~4 死循环
while循环中:break用于永久终止循环;continue跳过本次循环(congtinue后的代码),进到判断部分,看是否进行下一次循环
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int i = 1;
/*
① while (i <= 10)
{
printf("%d\n", i);
i++;
}*/
/*
② while (i <= 10)
{
if (i == 5)
break; //打印结果为:1,2,3,4
printf("%d\n", i);
i++;
}*/
/*
③ while (i <= 10)
{
if (i == 5)
continue; //打印结果为:1,2,3,4 死循环
printf("%d ", i);
i++;
}*/
return 0;
}
2)在循环条件中,(ch = getchar()) != EOF
这个条件语句会读取输入的字符,并将其赋值给变量ch。如果读取的字符不是文件结束符EOF,循环会继续执行,将该字符输出到标准输出。当输入文件结束时,即按下CTRL+Z(在Windows系统中)或CTRL+D(在Linux或Mac系统中),循环条件不满足,程序结束。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int ch = 0;
while ((ch = getchar()) != EOF)
{
putchar(ch);
}
return 0;
}
3)写一个程序,用于输入密码,并确认密码是否正确
字符数组 password 的输入并没有使用 &
运算符是因为在 C 语言中,数组名本身就可以表示数组在内存中的地址。因此,当使用sacnf函数读取字符数组时,不需要使用 &
运算符来获取地址。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
char password[20] = { 0 };
printf("请输入密码:");
scanf("%s", password);
printf("请确认密码(Y/N):");
/*getchar(); //处理缓冲区的‘\n’(只读)
int ch = getchar();
if (ch == 'Y')
{
printf("确认成功\n");
}
else
{
printf("确认失败\n");
}
return 0;
}*/
int tmp = 0;
while ((tmp = getchar()) != '\n') //清理缓冲区的字符,scanf读取到空格会停止
{
;
}
int ch = getchar();
if (ch == 'Y')
{
printf("确认成功\n");
}
else
{
printf("确认失败\n");
}
return 0;
}
4)从键盘读取字符,并判断该字符是否为数字(0-9),如果是数字,则将其输出到屏幕上
定义一个整型变量 ch,并将其初始化为0。
使用 getchar 函数读取用户输入的一个字符,直到遇到文件结束符 EOF。
判断字符是否为数字。如果不是数字,跳过本次循环,继续下一次循环。如果是数字,将该数字字符输出到屏幕上。
#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;
}