C语言是一门结构化的程序设计语言
1、顺序结构
2、选择结构
3、循环结构
一、语句
C语言中 由一个分号隔开的就是一条语句
;//该是语句——具体为空语句
分支语句:
if
switch
循环语句:
for
while
do while
goto语句:
1、分支语句(选择结构)
if语句的语法结构:
第一种:如表达式为真,if语句才可以执行
if(表达式)
语句;
第二种:如表达式为真执行语句1,为假执行语句2
if(表达式)
语句1;
else
语句2;
第三种:按顺序
表达式1成立——执行语句1,不成立,——是否表达式2成立,成立——执行语句2 不成立——执行语句3
//多分支
if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;
eg:结果为刚成年
#include <stdio.h>
#include <string.h>
int main()
{
int age=18;
if(age<18)
printf("未成年");
else if(age==18)
printf("刚成年");
else
printf("成年");
return 0;
}
eg:使用了逻辑与&&
#include <stdio.h>
#include <string.h>
int main()
{
int age=18;
if(age<18)
printf("未成年");
else if(age>=18 && age<28)
printf("青年");
else
printf("成年");
return 0;
}
如果条件成立,要执行多条语句,应使用代码块(一对{}就是一个代码块)
if(表达式)
{
语句列表1;
}
else
{
语句列表2;
}
return 0;
eg:
#include <stdio.h>
#include <string.h>
int main()
{
int age=17;
if(age<18)
{
printf("未成年\n");
printf("需要管教");
}
else if(age>=18 && age<28)
printf("青年");
return 0;
}
输出:
未成年
需要管教
if书写形式导致结果不同
悬空else(else和离它最近的if匹配)
#include <stdio.h>
#include <string.h>
int main()
{
int a=0;
int b=2;
if(a==1)
if(b==2)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
输出结果为 空
对比上下两图,else是第2个if对应,与第一个if无关
1、下述语句就是相当于if...else...的语句
//遇到一个return就停了
if (condition){
return x;
}
return y;
2、
int main()
{
int num=4;
if(num=5) //结果会输出 num=5是赋值(=),
所以不影响hehe输出;而==才是判断相等
{
printf("hehe\n");
}
return 0;
}
那就写为:
涉及到判断变量是否等于常量,一般把常量写在前面 不容易出错
int num=4;
if(5==num) //错写为5=num会报错,5是常量
{
printf("hehe\n");
练习:
输出1-100之前的奇数:
使用了while嵌套if语句:
#include <stdio.h>
#include <string.h>
int main()
{
int b=0;
while(b<100)
{
b++;
if(1==b%2)
printf("%d\n",b);
}
return 0;
}
int b=0;
while(b<=100)
{
if(1==b%2)
printf("%d\n",b);
b++;
}
根据奇数的特性书写:
int b=1;
while(b<=100)
{
printf("%d\n",b);
b+=2;
}
switch语句
switch语句是一种分支语句,多用于多分支的情况
简化书写编码:
#include <stdio.h>
int main()
{
int day=0;
scanf("%d",&day); //输入数据使用scanf函数
if(1==day)
printf("星期一\n");
else if(2==day)
printf("星期二\n");
else if(3==day)
printf("星期三\n");
else if
printf("星期四\n");
//...
printf("星期天\n");
return 0;
}
上述转化为switch语句:
case 1://指输入的常量为1时执行
break; //用于跳出 不一定全部的case后都需要加break,根据情况设置
#include <stdio.h>
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 7:
printf("星期天\n");
break;
}
return 0;
}
省略break的一些代码:
//default是当输入不符合规则时跳出,default可有可无
#include <stdio.h>
int main()
{
int day=0;
scanf("%d",&day);
switch(day)
{
case 1:
case 2:
case 3:
case 4:
case 6:
printf("工作日\n");
break;
case 6:
case 7:
printf("休息日\n");
break;
default:
printf("输入错误\n");
break;
}
return 0;
}
case后加入if语句:
int day=0;
scanf("%d",&day);
switch(day)
{
case 1:
if(1==day)
printf("hehe\n");
case 2:
case 3:
case 4:
case 6:
printf("工作日\n");
break;
语法结构
switch(整型表达式) //括号内一定要定义为整型()
{
语句项;
}
语句项为:
case 整型常量表达式: //整型 常量表达式 可以是:1 (常量)...、1+1(表达式),不能是1.0(小数)、n(变量)也不行
语句;
switch允许嵌套使用
特例:
#include <stdio.h>
int main()
{
int n=1;
int m=2;
switch(n)
{
case 1:m++; //n=1,执行 m=3
case 2:n++; //由于没有break,n就需要执行 n=2
case 3: //n
switch (n)
{
case 1:n++; //由于n=2,不执行
case 2:m++;n++;break; //由于n=2,执行 得 m=4,n=3 后break退出
}
case 4:m++; //继续执行没有break,得 m=5
break;
default:
break;
}
printf("m=%d,n=%d\n",m,n);
return 0;
}
输出结果为:
m=5,n=3
2、循环语句
while
for
do while
while循环
eg:恶性循环会一直重复返回hehe
#include <stdio.h>
int main()
{
while(1)
printf("hehe\n");
return 0;
}
while语法结构
while(表达式)
循环语句;
举例:
while嵌套if语句
break; //停止、跳出循环,直接终止循环
continue;//终止本次循环,就是continue后的代码不会再执行,直接跳转到while语句的判断部分,进行下一次循环
#include <stdio.h>
int main()
{
int i=1;
while(i<=10)
{
if(5==i)
break; //停止、跳出循环
printf("%d ",i);
i++;
}
return 0;
}
#include <stdio.h>
int main()
{
int i=1;
while(i<=10)
{
if(5==i)
continue; //等i=5时会一直在 6、7、8、9行执行无法跳出
printf("%d ",i);
i++;
}
return 0;
}
getchar :(输入)获取字符的含义
puchar:(输出) ,puchar打印字符相当于printf
#include <stdio.h>
int main()
{
int ch=getchar();\\getchar 运行结果是需要等待输入后,才可以输出
putchar(ch);
printf("%c\n",ch);
return 0;
}
输出结果为:
r //这个是getchar提示输出的
rr //这个是putchar printf输入的
eg:
EOF—end of file:文件结束标志 \0,
scanf、getchar:都是 输入函数——>输入缓冲区
#include <stdio.h>
int main()
{
int ch=0;
//按ctrl+z 就会停止
//EOF——end of file ->-1
while((ch=getchar())!=EOF)
{
purchar(ch);
}
return 0;
}
scanf函数只读取到空格前面的字符
#include <stdio.h>
int main()
{
int ret=0;
char password[20]={0};
printf("请输入密码:>");
scanf("%s",password);//输入密码(当输入的密码为1234\n时适用),并存放在password数组中
//缓冲区还剩余一个'\n'
//读取一下'\n'
getchar();
printf("请确认(Y/N):>");
ret=getchar();
if(ret=='Y')
{
printf("确认成功\n");
}
else
{
printf("放弃确认\n");
}
return 0;
}
输入密码为:1234 abc\n时适用
#include <stdio.h>
int main()
{
int ret=0;
char password[20]={0};
printf("请输入密码:>");
scanf("%s",password);//输入密码,并存放在password数组中
//缓冲区还剩余一个'\n'
//读取一下'\n'
while(ch=getchar())!='\n')//一直读取,等读取到'/n'才跳出
{
;
}
printf("请确认(Y/N):>");
ret=getchar();
if(ret=='Y')
{
printf("确认成功\n");
}
else
{
printf("放弃确认\n");
}
return 0;
}