一.变量
1.做计算
printf("12+13=%d",12+13);
2.算找零
printf("100-23=%d",100-23);
3.为什么要引入变量
每次计算时都需要输入数字,繁琐
4.引入change函数
int price=0;
printf("请输入金额(元):");
scanf("%d",&price);
int change=100-price;
printf("找您:%d元\n",change);
5.输出printf和输入scanf在终端进行
6.int price=0解释
定义了一个类型是int名称是price初始值是0的变量
7.变量定义
<变量类型><变量名称>
eg:int price; int amount; int price,amount;
8.变量的名称
标识符,由数字字母下划线组成,数字不能开头,一些关键字不能作为变量名称,eg:int
二.变量的赋值与初始化
1.int price=0;和price=0;的区别
int price=0;定义了一个类型为int名称为price初始值为0的变量
price=0;是一个式子,指把0的值赋给price
2.赋值和数学意义的=区别
数学中:a=b的值a和b的值相等,是关系,静态
计算机中:a=b指把b的值赋给a,是动作,动态
3.初始化
十一2有系统说明
赋值发生在变量定义的时候称为初始化,eg:int price=0;int price是定义变量,=0是赋值
注意:c语言不强调在变量定义时做初始化,但在变量第一次被使用前需要做初始化,eg:int change=100-price;(变量出现在=右边)
4.如果没有初始化
#include <stdio.h>
int main()
{
int i;
int j;
j=i+10;
printf("%d\n",j);
return 0;
}
![]()
这里看课讲的是终端显示乱码,但是我用的devc++终端显示10
终端输出奇怪的结果是因为:因为没有对进行第一次参与计算的变量进行初始化,导致变量i和j用的是内存的东西;而输出10的原因可能是内存里面是10
5.变量初始化格式
<变量类型><变量名称>=<初始值>;eg:int price=0;int amount=100;
多变量定义:eg:int price=0,amount=100;
6.表达式
=是赋值运算符,有运算符的式子就叫表达式,eg:price=0;change=100-price;
7.c99和ansic的区别
//c99
int price=0;
printf("请输入金额(元):");
scanf("%d",&price);
int change=100-price;
printf("找您%d元",change);
//ansic
int price=0;
int change=100-price;
printf("请输入金额(元):");
scanf("%d",&price);
int change=100-price;
printf("找您%d元",change);
ansic所有的变量定义都在前列,c99的变量定义可以在程序中间
8.scanf函数
scanf("%d",&price);
要求scanf这个函数读入下一个整数,读到的结果赋值给变量price
![]()
三.变量输入scanf
1.如何让程序读入用户输入的数字
int a=0;
int b=0;
scanf("%d %d",&a,&b);
printf("%d %d\n",a,b);
scanf("%d %d",&a,&b);中“”里面的内容是要读取(你要输入)的东西,交给后面的两个变量,格式和终端输入的数字一致,不管printf格式,这是输出后的东西,你需要在输入时做相同的格式
2.eg
scanf("%d %d",&a,&b);
scanf("%d,%d",&a,&b);
scanf("price%d %d",&a,&b);
scanf("%d %d\n",&a,&b);//这里的\n不是换行,而是你要输入\n
四.变量和常量
1.常量
int change=100-price;中100是常量,直接写在程序的称为直接量(literal)
2.定义一个常量:const int AMOUNT=100;(c99)
AMOUNT是金额
const int AMOUNT=100;
int price=0;
printf("请输入金额(元):");
scanf("%d",&price);
int change=AMOUNT-price;
printf("找您:%d元\n",change);
const int AMOUNT=100;定义了一个类型const int名称AMOUNT初始值100的常量,在第一次使用AMOUNT前赋值,是初始化,有两个好处:(1)知道这是金额(2)便于检查
3.const
修饰符,放在int前,给变量加一个不变的属性,表示这个变量一旦初始化就不能修改
4.如果对AMOUNT进行修改
AMOUNT=90;
int price=0;
AMOUNT=90;
printf("请输入金额(元):");
![]()
AMOUNT是一个只读的变量不能被赋值
5.如果想修改100怎么办
const int AMOUNT=100;修改为int amount=100;后面加scanf,因为const通常和大写AMOUNT一起
int amount=100;
int price=0;
printf("请输入金额(元):");
scanf("%d",&price);
printf("请输入面值");
scanf("%d",&amount);
int change=amount-price;
printf("找您%d元",change);
终端操作:空格或者回车
6.scanf怎么放多个变量
int a=0;
int b=0;
printf("请输入两个整数:");
scanf("%d %d",&a,&b);
printf("%d+%d=%d\n",a,b,a+b);
scanf""里面两个%d用空格
终端操作:空格或者回车
如果输入了字符串怎么办
输出内存的数字
![]()
八.浮点数(整数运算的结果只有整数部分,不然用浮点数)
1.英尺英寸换算米
一个外国人身高5尺7寸,用米表示
printf("身高英尺和英寸:");
int foot;
int inch;
scanf("%d %d",&foot,&inch);
printf("身高是%f米",(foot+inch/12)*0.3048);
![]()
但是实际计算结果是(5+7/12)*0.3048=1.7018
2.为什么会出现这个问题
因为c语言在进行整数运算时会去掉小数点(往小的去掉)
![]()
![]()
![]()
printf("%d",12/5);
终端:2
printf("%d"10/3*3);
终端:9
由此看出:c语言在进行整数运算时候,对每个步骤都会去掉小数点
3.解决方案(2个)
(1)10是整数,10.0是浮点数,用10.0代替
printf("%d",10.0/3*3);
![]()
错误原因:%d:格式化占位符,用于输出int整形数据
10.0/3:10.0是浮点数字面量,运算结果是double双精度浮点数
修改:把%d修改为%f:
printf("%f",10.0/3*3);
![]()
4.浮点数
浮点数指带小数点的数值,浮点指小数点乱动
定点数指小数点不动,但在c语言遇不到
5.改进
printf("身高是%f米",((inch+foot/12.0)*0.3048));
printf("身高英尺和英寸:");
int inch;
int foot;
scanf("%d %d",&inch,&foot);
printf("身高是%f米",(inch+foot/12.0)*0.3048);
![]()
浮点数和整数运算时,c语言会把整数换成浮点数,结果也是浮点数,所以写成%f米
这里我感觉很奇怪,printf("%f",(foot+inch/12)*0.3048);c语言在进行整数和浮点数运算时候,c语言会把整数换成浮点数,结果也是浮点数,foot和inch和12是整数,0.3048是浮点数,那结果也是浮点数,用%f,但是结果是整数运算的1.5,把12换成12.0结果是正确的
ai学习结果是inch/12先执行了整数除法,导致精度丢失
(2)double关键字
整数和浮点数运算=浮点数,只需要转换inch或foot成浮点数即可让结果是浮点数
double是双(双精度浮点数),表示浮点数类型
float意思是单(浮点)
printf("身高英尺和英寸:");
double foot;
double inch;
scanf("%lf %lf",&foot,&inch);
printf("身高是%f米",(foot+inch/12.0)*0.3048);
scanf输入时用lf
6.数据类型
整数
int
printf("%d",…)
scanf("%d",…)
带小数的数
double
printf("%f",…)
scanf("%lf",…)
九.表达式
1.一个表达式是一系列运算符和算子的结合,用来计算一个值
amount=x*(1+0.033)*(1+0.033)*(1+0.033);
total=57;
count=count+1;
value=(min/2)*LastValue;
2.运算符和算子
运算符:进行运算的动作:=+…
算子:参与运算的值:常数、变量、一个方法的返回值

3.计算时间差
计算某小时某分钟到某小时某分钟的时间差
设置四个变量相减,但是由于可能出现借位情况,都换算为分钟后再做取余
int hour1,minute1;
int hour2,minute2;
scanf("%d %d",&hour1,&minute1);
scanf("%d %d",&hour2,&minute2);
int t1=hour1*60+minute1;
int t2=hour2*60+minute2;
int t3=t2-t1;
printf("时间差是%d小时%d分钟",t3/60,t3%60);
![]()
![]()
十.运算符优先级
1.写一个程序求平均值
int a,b;
scanf("%d %d",&a,&b);
double c=(a+b)/2.0;
printf("%d和%d的平均值=%f\n",a,b,c);
![]()
2.运算符优先级表格
单目运算符可以理解为不需要括号的正数和负数
|
优先级 |
运算符 |
运算 |
结合关系 |
举例 |
|
1 |
+ |
单目不变 |
自右向左 |
a*+b |
|
1 |
- |
单目取负 |
自右向左 |
a*-b |
|
2 |
* |
乘 |
自左向右 |
a*b |
|
2 |
/ |
除 |
自左向右 |
a/b |
|
2 |
% |
取余 |
自左向右 |
a%b |
|
3 |
+ |
加 |
自左向右 |
a+b |
|
3 |
- |
减 |
自左向右 |
a-b |
|
4 |
= |
赋值 |
自右向左 |
a=b |
3.赋值运算符
赋值也是运算,也有结果,a=6的结果是a被赋予的值,也就是6,a=b=6——>a=(b=6)
4.嵌入式运算符
int a=6;
int b;
int c=1+(b+a);
不利于阅读,容易产生错误
5.结合关系
一般自左向右,单目+-和赋值=自右向左
result=a=b=3+c;
result=2;
result=(result=result*2)*6*(result=3+result);
第三行是嵌入式赋值,不要写
十一.交换变量
1.怎么用c语言交换两个变量的值
如果用a=b;b=a;的话,b的值赋给a,a的值就等于b,a的值赋给b,b的值就等于b
2.怎样交换变量
想象两杯水怎么交换?引入一个空杯子
用一个没有赋值的变量作为中介进行
int a=3;
int b=4;
int t;
t=a;
a=b;
b=t;
printf("a=%d,b=%d",a,b);
这里有个疑问,c语言中变量在第一次使用前(变量出现在=右边,不是定义变量),需要对这个变量进行初始化,但是b=t,没有让t进行初始化,编译为什么没有出错
ai学习后了解
|
赋值(写入) |
不需要 |
t=a; |
|
读取(使用值) |
必须 |
int c=t; |
|
定义变量 |
不需要(但推荐) |
|
3.调试
点击需要进行断点的代码行数-生成断点-调试
下一步,光标移至变量可查看当前变量值
无法调试:工具-编译选项-设定编译器配置-debug
工具-编译选项-代码生成/优化-连接器-产生调试信息-yes
环境配置-浏览debug变量-鼠标
十二.复合赋值和递增递减
1.复合赋值
五个算数运算符:+-*/%,和复制号=结合为复合赋值运算符:
+=-=*=/=%=
total+=5;
total=total+5;
两个运算符之间不要有空格;
2.做复合赋值时注意括号
total+=(sum+100)/2;
total=total+(sum+100)/2;
total*=sum+12;
total=total*(sum+12);
total/=12+6;
total=total/(12+6);
3.递增递减运算符
++是递增运算符,--是递减运算符,都是单目运算符(一个算子),这个算子必须是变量,作用是让这个变量加1或减1
count++;
count+=1;
count=count+1;
4.前缀后缀
++(--)变量,前缀形式;变量++(--),后缀形式
a++的值是a+1以前的值,++a的值是加了1以后的值,a的值都加1
(++在前,先+1再使用,++在后,先使用再+1)
int a=10;
printf("a++=%d",a++);
printf("a=%d",a);
printf("++a=%d",++a);
printf("a=%d",a);
![]()
5.表达式和运算和表达式的值
|
表达式 |
运算 |
表达式的值 |
|
count++ |
给count加1 |
count原来的值 |
|
++count |
给count加1 |
count+1以后的值 |
|
count-- |
给count减1 |
count原来的值 |
|
--count |
给count减1 |
count-1以后的值 |
不要组合到表达式,复杂
8550



被折叠的 条评论
为什么被折叠?



