华清远见25072班C语言学习day3
重点内容:
标准输入输出函数:
2.scanf函数
scanf("格式符",&变量名); 参数一:格式符 参数二:变量的地址
scanf函数:是一个严格控制格式的函数,双引号内是什么格式,终端输入就要是什么格式
scanf在获取多个数据时,以空格、tab键和回车作为数据的间隔
当scanf缓冲区中的数据和双引号内格式符的个数一致时,回车会作为scanf结束的标志
scanf在获取字符类型数据时,需要吸收垃圾字符
吸收垃圾字符的方式:
- 在%c格式符的前面加一个空格,这一个空格可以吸收无数个垃圾字符(空格、tab键和回车)
- 用%*c来吸收垃圾字符(抑制字符必须吸收一个字符,不论是否是垃圾字符,且如果有垃圾字符,抑制字符只能吸收一个垃圾字符)
- 使用getchar吸收垃圾字符需要写多条scanf语句
3.putchar
putchar(要输出的数据); 字符型数据的输出函数
4.getchar
变量名=getchar(); 字符数据的输入函数
运算符:
1.算数运算符
+、-、*、/、%
/:如果运算符左右两个操作数都是整数,结果是取整。只要有一个操作数是浮点型,结果就是浮点型。除数不能为0
%:除数不能为0,两个操作数都必须是整形。a对b取余的结果
2.自增自减运算符
a++、++a 前自增和后自增
a++运算的结果是a自增前的结果,但是a已经自增过了
++a运算的结果是a自增后的结果,a已经自增过了
a--、--a 前自减和后自减
a--运算的结果是a自减前的结果,但是a已经自减过了
--a 运算的结果是a自减后的结果,a已经自减过了
3.赋值运算符
= 就是C中的赋值运算符
左值:一般变量就是左值,左值是既可以放在赋值运算符左侧也可以放在赋值运算符右侧的值
右值:一般常量就是右值,右值是只能放在赋值运算符右侧的值
4.条件运算符
表达式1?表达式2:表达式3 如果表达式1成立,执行表达式2,否则执行表达式3
5.关系运算符
关系运算的结果是真值/假值 为真结果为1;为假结果为0
6.逻辑运算符
表达式1&&表达式2 如果表达式1和2同时成立结果为真,否则为假
表达式1||表达式2 只要表达式1和2中有一个成立,结果就为真
!(单目运算符) 非真即假,非假即真
可能会造成逻辑短路的现象:
逻辑与运算只要左侧的表达式结果为假,右侧的表达式不会执行
逻辑或运算只要左侧的表达式结果为真,右侧的表达式不会执行
7.逗号运算符
(表达式1,表达式2,表达式3)
可以有多个表达式,并且每一个表达式都会执行,获取最右侧一个表达式的结果
8.sizeof运算符
sizeof的用法和函数很像,但是sizeof是C中的一个关键字
sizeof(数据); //数据可以是常量,可以是变量,可以是数据类型
sizeof的结果在32位操作系统下,是一个unsigned int
在64位操作系统下,是一个unsigned long int
9.位运算符
a>>2 a右移两个bit位,高位补符号位
a<<2 a左移两个bit位,低位补0
数据左移n位相当于乘2^n,右移n位相当于除2^n
a&b 两个bit位都为真,结果为真,否则结果为假
a|b 两个bit位任意一个为真,结果为真,否则为假
a^b 两个bit位相同结果为0,不同结果为1(同0异1)
~a 将a的每一个bit位按位取反
10.运算符优先级
if分支语句:
if单分支语句:
if(条件) { 满足条件执行的语句块 }
if双分支语句:
if(条件) { 满足条件执行的语句块 } else { 不满足条件执行的语句块 }
if多分支结构:
if(条件1) { //满足条件1执行的语句块; }
else if(条件2) { //不满足条件1,但是满足条件2,执行的语句块 }
else if(条件3) { //不满足条件1也不满足条件2,但是满足条件3执行的语句块 }
嵌套if:
if(条件1)
{
if(条件2) { //既满足条件1也满足条件2执行的语句块 }
else { //满足条件1但是不满足条件2执行的语句块 }
}
else { //不满足条件1执行的语句块 }
if注意事项:
- if的条件后面不要加分号,加了分号之后后面的语句和if判断无关
- 如果if后面有多条语句,一定要加{}
- else前面必须有一个if
switch···case分支:
switch(变量名)
{
case 常量表达式1:
//当常量表达式1的值和变量值相同时执行的语句块
break;
case 常量表达式2:
//当常量表达式2的值和变量值相同时执行的语句块
break;
·······
case 常量表达式n:
//当常量表达式n的值和变量值相同时执行的语句块
break;
default:
//当上述常量表达式的值和变量值都不想同时,执行default后面的语句
//switch···case中的最后一条分支,break可以加也可以不加
}
执行逻辑:
switch···case语句会去判断变量值,用变量的值和case后面常量表达式的值对比,如果相同,则从该位置进入switch···case语句
case击穿:
如果一条case后面没有写break,那么会从进入该分支开始,一直向下顺序执行switch···case语句,直到switch···case结束
switch···case的注意事项:
- switch···case是对()中变量的值进行判断,哪一个case后面的值和变量值相同立即跳转到该分支,从该分支开始进入switch···case语句执行后面的代码
- default是用来判断所有case的值都和变量值不同的情况,如果没有case符合要求,执行default的代码
- switch的()中不能定义变量
- case后面的值不能重复
- break的作用:用于在进入switch···case后退出switch···case语句
- switch···case只能判断,整形和字符型的变量
作业:
1.终端输入三条边长,判断是否能构成三角形?
a.如果能构成三角形,判断是直角三角形,
b.如果不是直角三角形,判断是否是等腰三角形,
c.如果是等腰三角形,判断是否是等边三角形
程序源码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
int a,b,c;
printf("请输入三条边长(用逗号分开)");
scanf("%d,%d,%d",&a,&b,&c);
if(a+b>c&&a+c>b&&b+c>a)
{
if(a==b||b==c||a==c)
{
if(a==b&&b==c)
{
printf("可以构成等边三角形\n");
}
else
{
printf("可以构成等腰三角形\n");
}
}
else if(a*a+b*b==c*c||a*a+c*c==b*b||c*c+b*b==a*a)
{
printf("可以构成直角三角形\n");
}
else
printf("可以构成三角形\n");
}
else
printf("不能构成三角形\n");
return 0;
}
2.终端输入三个不同的整数,输出三个数中的中间值
程序源码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
int a,b,c,mid;
printf("请输入三个数(用逗号分开)");
scanf("%d,%d,%d",&a,&b,&c);
if(a>b&&a<c||a>c&&a<b)
{
mid=a;
}
else if(b>a&&b<c||b>c&&b<a)
{
mid=b;
}
else
mid=c;
printf("mid=%d\n",mid);
return 0;
}
3.某快递公司收费标准:
a.首重1公斤内10元;
b.续重每公斤5元(不足1公斤按1公斤算);
c.超过20公斤,每公斤8元(不再享受首重优惠,全部按续重计算)
d.另外,如果是偏远地区(用字符变量表示,如'y‘代表偏远,'n'代表不偏远),加收5元
e.输入重量(公斤,可以是小数)、是否偏远(y/n)
程序源码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define First_Weight 10
int main(int argc, const char *argv[])
{
double weight;
char distance;
int sum=0;
printf("请输入重量和距离(y为偏远;n为不偏远;用逗号分开)");
scanf("%lf, %c",&weight,&distance);
int weight_decimal=(int)weight;
if(weight<=1)
{
sum+=First_Weight;
if(distance=='y')
sum+=5;
}
else if(weight>1&&weight<=20)
{
if(weight!=weight_decimal)
{
sum=sum+First_Weight+weight_decimal*5;
}
else
{
weight=weight_decimal-1;
sum=sum+First_Weight+weight*5;
}
if(distance=='y')
sum+=5;
}
else
{
if(weight!=weight_decimal)
{
weight=weight_decimal+1;
sum=weight*8;
}
else
sum=weight*8;
if(distance=='y')
sum+=5;
}
printf("courierfee=%d\n",sum);
return 0;
}
4.思维导图: