当前位置:网站首页>C语言程序设计笔记(浙大翁恺版) 第二周:计算
C语言程序设计笔记(浙大翁恺版) 第二周:计算
2022-08-09 14:23:00 【CS_Lee_】
按照中国大学MOOC上浙江大学翁恺老师主讲的版本所作,B站上也有资源。原课程链接如下:
https://www.icourse163.org/course/ZJU-9001
由于是大三抽空回头整理的,所以可能前五章会记的内容比较简略。此外,作为选学内容的A0:ACLLib的基本图形函数和链表两章也没有做。西电的考试是机试,理论上学到结构体就能够应付考试了,但为了以后的学习考虑建议全学。
其他各章节的链接如下:
计算
变量
变量定义
变量是做什么的,如何定义一个变量
算找零
printf("100-23=%d\n", 100-23);
如何能在程序运行时输入那个数字23,然后计算输出结果?
// change.c
int price = 0;
printf("请输入金额(元):");
scanf("%d", &price);
int change = 100 - price;
printf("找您%d元。\n", change);
如何输入
输入也在终端窗口中
输入是以行为单位的,行的结束标志就是你按下了回车键。在你按下回车之前,你的程序不会读到任何东西
变量
int price = 0;这一行定义了一个变量。变量的名字是price,类型是int,初始值是0
变量是一个保存数据的地方,当我们需要在程序里保存数据时,比如上面的例子中要记录用户输入的价格,就需要一个变量来保存它。用一个变量保存了数据,它才能参加到后面的计算中,比如计算找零
变量定义
变量定义的一般形式就是:<类型名称> <变量名称>;。 如:int price;,int amount;,int price, amount;
变量的名字
变量需要一个名字,变量的名字是一种“标识符”,意思是它是用来识别这个和那个的不同的名字
标识符有标识符的构造规则。基本的原则是:标识符只能由字母、数字和下划线组成,数字不可以出现在第一个位置上,C语言的关键字(有的地方叫它们保留字)不可以用做标识符
C语言的保留字

变量赋值与初始化
a=b表示把b的值赋给a,而不是它们相等
赋值和初始化
int price = 0;
price = 0是一个式子,这里的“=”是一个赋值运算符,表示将“=”右边的值赋给左边的变量
赋值
和数学不同,a=b在数学中表示关系,即a和b的值一样;而在程序设计中,a=b表示要求计算机做一个动作:将b的值赋给a。关系是静态的,而动作是动态的。在数学中,a=b和b=a是等价的,而在程序设计中,两者的意思完全相反
初始化
当赋值发生在定义变量的时候就是变量的初始化。虽然C语言并没有强制要求所有的变量都在定义的地方做初始化,但是所有的变量在第一次被使用(出现在赋值运算符的右边)之前应该被赋值一次
如果没有被初始化,原来内存里有什么内容就是什么
变量初始化
<类型名称> <变量名称> = <初始值>; 如:int price = 0;,int amount = 100;
组合变量定义的时候,也可以在这个定义中单独给单个变量赋初值,如:int price = 0, amount = 100;
表达式
"="是赋值运算符,有运算符的式子就叫做表达式。 如:price = 0,change = 100 - price;
变量类型
C是一种有类型的语言,所有的变量在使用之前必须定义或声明,所有的变量必须具有确定的数据类型。数据类型表示在变量中可以存放什么样的数据,变量中只能存放指定类型的数据,程序运行过程中也不能改变变量的类型
int change = 100 - price;定义了第二个变量change并且做了计算,这种写法是C99的写法。ANSI C只能在代码开头的地方定义变量

程序输入
如何让程序读入用户输入的数字,scanf
scanf("%d", &price);要求scanf这个函数读入下一个整数,读到的结果赋值给变量price,小心price前面的&
如果输入的不是整数,无法从输入里读到任何数字就只能给一个默认值
常量 vs 变量
不变的量是常量,以及,我们要怎样输入两个变量的值
常量
固定不变的数,是常数。直接写在程序里,我们称作直接量(literal)。
更好的方式,是定义一个常量:const int AMOUNT = 100,这也是C99的写法
// change2.c
#include <stdio.h>
int main()
{
const int AMOUNT = 100;
int price = 0;
printf("请输入金额(元):");
scanf("%d", &price);
int change = AMOUNT - price;
printf("找您%d元。\n", change);
return 0;
}
const
const是有一个修饰符,加在int的前面,用来给这个变量加上一个const(不变的)的属性。这个const的属性表示这个变量的值一旦初始化,就不能再修改了
如果你试图对常量做修改,把它放在赋值运算符的左边,就会被编译器发现,指出为一个错误
// plus.c
#include <stdio.h>
int main()
{
int a;
int b;
printf("请输入两个整数:");
scanf("%d %d", &a, &b);
printf("%d + %d = %d\n", a, b, a + b);
return 0;
}

浮点数
整数运算的结果只有整数部分,不然就要用浮点数
两个整数的运算的结果只能是整数,如10/3*3=>9。10和10.0在C中是完全不同的数,10.0是浮点数
浮点数
带小数点的数值。浮点这个词的本意就是指小数点是浮动的,是计算机内部表达整数(包含分数和无理数)的一种方式。另一种方式叫做定点数,不过在C语言中你不会遇到定点数。人们借助浮点数这个词来表达所有的带小数点的数
当浮点数和整数放到一起运算时,C会将整数转换成浮点数,然后进行浮点数的运算
double
inch是定义为int类型的变量,如果把int换成double,我们就把它改为double类型的浮点数变量了
double的意思是“双”,它本来是“双精度浮点数”的第一个单词,人们用来表示浮点数类型。除了double,还有float(意思就是浮点!)表示单精度浮点数
计算身高的程序
#include <stdio.h>
int main()
{
printf("请分别输入身高的英尺和英寸,"
"如输入\"5 7\"表示5英尺7英寸:");
double foot;
double inch;
scanf("%lf %lf", &foot, &inch);
printf("身高是%f米。\n",
((foot + inch / 12) * 0.3048));
return 0;
}
数据类型
整数
intprintf("%d", ...)scanf("%d", ...)
带小数点的数
doubleprintf("%f", ...)scanf("%lf", ...)
表达式
运算符和算子,取余运算,程序就是数据加计算
表达式
一个表达式是一系列运算符和算子的组合,用来计算一个值

运算符
运算符(operator)是指进行运算的动作,比如加法运算符“+”,减法运算符“-”
算子(operand)是指参与运算的值,这个值可能是常数,也可能是变量,还可能是一个方法的返回值

计算时间差
输入两个时间,每个时间分别输入小时和分钟的值,然后输出两个时间之间的差,也以几小时几分表示
如果直接分别减,会出现分钟借位的情况:1点40分和2点10分的差
int main()
{
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 t = t2-t1;
printf("时间差是%d小时%d分。", t/60, t%60);
return 0;
}
hour1 * 60 + minutes1 —> 转换为分钟为单位
t/60 —> 小时部分;t%60 —> 分钟
运算符优先级
优先级、结合关系、赋值运算符
求平均值
下一个程序,输入两个整数,输出它们的平均值
#include <stdio.h>
int main()
{
int a,b;
scanf("%d %d", &a, &b);
double c = (a+b)/2.0;
printf("%d和%d的平均值=%f\n", a, b, c);
return 0;
}
运算符优先级

单目运算符
只有一个算子的运算符:+、-
int a = 10;
int b = -20;
printf("%d", a * -b);
200
赋值运算符
赋值也是运算,也有结果
a=6的结果是a被赋予的值,也就是6
a=b=6 —> a=(b=6)
”嵌入式赋值“

结合关系

交换变量
如何交换两个变量的值,顺便看下Dev的调试功能
程序是按步执行的
程序表达的是顺序执行的动作,而不是关系
a=b; b=a;是依次执行的,结果使得a和b都得到b原来的值
交换
int t = a;
a = b;
b = t;
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wrEQHWwo-1659869838584)(C语言程序设计.assets/image-20220805213155491.png)]](/img/dd/67251e6236cc3a8e18480c9bec609b.png)
设断点后调试运行停在该行,这行还没有执行
复合赋值和递增递减
这是两类有历史也有争议的运算符
复合赋值
5个运算符,+ - * / %,可以和赋值运算符”=“结合起来,形成复合赋值运算符:”+=“,-=,*=,/=,%=
注意两个运算符中间不要有空格
total += 5;
total = total + 5;
total += (sum+100)/2;
total = total + (sum+100)/2;
total *= sum+12;
total = total * (sum+12);
total /= 12+6;
total = total / (12+6);
递增递减运算符
++和--是两个很特殊的运算符,它们是单目运算符,这个算子还必须是变量。这两个运算符分别叫做递增和递减运算符,他们的作用就是给这个变量+1或者-1
count++;
count += 1;
count = count +1;
前缀后缀
++和--可以放在变量的前面,叫做前缀形式,也可以放在变量的后面,叫做后缀形式
a++的值是a加1以前的值,而++a的值是加了1以后的值,无论哪个,a自己的值都加了1了

这两个运算符有其历史来源。可以单独使用,但是不要组合进表达式
边栏推荐
- 从软件哲学角度谈 Amazon SageMaker(第一讲)
- Detailed firewall firewall
- 【Database】Sqlserver如何定时备份数据库和定时清除
- 探索进军元宇宙的代表性企业
- C语言程序设计笔记(浙大翁恺版) 第十三周:文件
- RHCE Course Summary
- 项目小操作:form表单的校验,以及第二次显示提示校验内容等问题
- Architect's learning experience summary
- Regular expression combat: the latest Douban top250 crawler super detailed tutorial
- Refuse to "reinvent the wheel", Baidu EasyDL lets you play with AI custom development
猜你喜欢

*4-1 CCF 2014-12-1 Access Control System

RHCE Course Summary

*2-4 Daily temperature *2-5 Rainwater

Assembly Language Learning (6) Curriculum Design 1

同事的接口文档我每次看着就头大,毛病是真的多多多。。。

探索进军元宇宙的代表性企业

冰冰学习笔记:new与delete

Refuse to "reinvent the wheel", Baidu EasyDL lets you play with AI custom development

*4-2 CCF 2014-12-2 zigzag scan

【DevOps】jekinsBuild step 'Execute shell' marked build as failure
随机推荐
Item 37: Make std::threads unjoinable on all paths.
JUC容器介绍
Several common registries and their differences
Regular expression combat: the latest Douban top250 crawler super detailed tutorial
Which applet making software is easy to use?how to choose?
正则表达式实战:最新豆瓣top250爬虫超详细教程
dpkg:错误:无法新建文件 ‘/var/lib/dpkg/info/format-new’: 没
#25-1 OJ 78 Calculate birthday day of the week
RHCE Course Summary
*5-1 CCF 2015-03-1 Image rotation
Simulink simulation pid control servo system
外贸软件如何提升进出口公司业绩 实现降本增效
MySQL锁机制和锁算法
除非另外还指定了 TOP、OFFSET 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效
冰冰学习笔记:new与delete
Bubble sort (detailed)
What is the cost of small program development and production?Three development methods cost analysis!
Computational Imaging Technology
Minesweeper game
Meta 发布 1750 亿聊天机器人,亿万富翁老板小扎被「他」疯狂吐槽!