C语言程序设计笔记(浙大翁恺版) 第二周:计算
按照中国大学MOOC上浙江大学翁恺老师主讲的版本所作,B站上也有资源。原课程链接如下:
https://www.icourse163.org/course/ZJU-9001
由于是大三抽空回头整理的,所以可能前五章会记的内容比较简略。此外,作为选学内容的A0:ACLLib的基本图形函数和链表两章也没有做。西电的考试是机试,理论上学到结构体就能够应付考试了,但为了以后的学习考虑建议全学。
其他各章节的链接如下:
C语言程序设计笔记(浙大翁恺版) 第一周:程序设计与C语言
C语言程序设计笔记(浙大翁恺版) 第二周:计算
C语言程序设计笔记(浙大翁恺版) 第三周:判断
C语言程序设计笔记(浙大翁恺版) 第四周:循环
C语言程序设计笔记(浙大翁恺版) 第五周:循环控制
C语言程序设计笔记(浙大翁恺版) 第六周:数据类型
C语言程序设计笔记(浙大翁恺版) 第七章:函数
C语言程序设计笔记(浙大翁恺版) 第八周:数组
C语言程序设计笔记(浙大翁恺版) 第九周:指针
C语言程序设计笔记(浙大翁恺版) 第十周:字符串
C语言程序设计笔记(浙大翁恺版) 第十一周:结构类型
C语言程序设计笔记(浙大翁恺版) 第十二周:程序结构
C语言程序设计笔记(浙大翁恺版) 第十三周:文件
其他各科笔记汇总
计算
变量
变量定义
变量是做什么的,如何定义一个变量
算找零
printf("100-23=%d\n", 100-23);
如何能在程序运行时输入那个数字23,然后计算输出结果?
// change.cint 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;
}
数据类型
整数
int
printf("%d", ...)
scanf("%d", ...)
带小数点的数
double
printf("%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;
设断点后调试运行停在该行,这行还没有执行
复合赋值和递增递减
这是两类有历史也有争议的运算符
复合赋值
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了
这两个运算符有其历史来源。可以单独使用,但是不要组合进表达式
C语言程序设计笔记(浙大翁恺版) 第二周:计算相关推荐
- 【C语言程序设计进阶-浙大翁恺】C语言笔记 文件
[C语言程序设计进阶-浙大翁恺]C语言笔记 文件 文件 格式化输入输出 文件输入输出 二进制文件 位运算 按位运算 移位运算 位运算例子 位段 文件 格式化输入输出 %-nd:数字左对齐,且输出要占n ...
- C语言程序设计笔记(浙大翁恺版) 第九周:指针
按照中国大学MOOC上浙江大学翁恺老师主讲的版本所作,B站上也有资源.原课程链接如下: https://www.icourse163.org/course/ZJU-9001 由于是大三抽空回头整理的, ...
- C语言程序设计笔记(浙大翁恺版) 第三周:判断
按照中国大学MOOC上浙江大学翁恺老师主讲的版本所作,B站上也有资源.原课程链接如下: https://www.icourse163.org/course/ZJU-9001 由于是大三抽空回头整理的, ...
- C语言程序设计笔记(浙大翁恺版) 第八周:数组
按照中国大学MOOC上浙江大学翁恺老师主讲的版本所作,B站上也有资源.原课程链接如下: https://www.icourse163.org/course/ZJU-9001 由于是大三抽空回头整理的, ...
- C语言程序设计笔记(浙大翁恺版) 第七章:函数
按照中国大学MOOC上浙江大学翁恺老师主讲的版本所作,B站上也有资源.原课程链接如下: https://www.icourse163.org/course/ZJU-9001 由于是大三抽空回头整理的, ...
- C语言程序设计笔记(浙大翁恺版) 第五周:循环控制
按照中国大学MOOC上浙江大学翁恺老师主讲的版本所作,B站上也有资源.原课程链接如下: https://www.icourse163.org/course/ZJU-9001 由于是大三抽空回头整理的, ...
- C语言程序设计笔记(浙大翁恺版) 第十周:字符串
按照中国大学MOOC上浙江大学翁恺老师主讲的版本所作,B站上也有资源.原课程链接如下: https://www.icourse163.org/course/ZJU-9001 由于是大三抽空回头整理的, ...
- 翁凯c语言单词长度,中国大学MOOC-C程序设计(浙大翁恺)—— 单词长度
题目内容: 你的程序要读入一行文本,其中以空格分隔为若干个单词,以'.'结束.你要输出这行文本中每个单词的长度.这里的单词与语言无关,可以包括各种符号,比如"it's"算一个单词, ...
- C语言编程笔记——MOOC翁恺
第一周:程序设计与C语言 1.编程:是告诉计算机去做什么,用编程语言写出来如何去解决问题,而不是去用编程语言和计算机交流,而是描述要求它如何做事情的过程和方法 2.解释和编译的区别: 解释:是用一种软 ...
最新文章
- leetcode 1584. 连接所有点的最小费用(并查集)
- 从有赞裁员,看SCRM的挑战与机遇
- Oracle 空间查询, 数据类型为 sdo_geometry
- 使用依赖注入的ASP.NET Core 2.0用户角色基础动态菜单管理
- Atitit.Gui控件and面板----数据库区-mssql 2008 权限 配置 报表查看成员
- 【Linux 命令学习第一天
- Grafana 系统可视化监控
- IT项目经验和难点分享
- wordpress自定义打赏
- Java 电阻计算器(一)
- 倾斜摄影与三维实景建模技术设计书.PDF(文档可下载)
- android win8 磁贴效果第三方库,Win8巧用动态磁贴让浏览更轻松
- 双efi分区同时引导失败修复经验
- 【Python性能优化实例】计算 numpy 数组首尾为 0 的数量
- Spring入门-1-基本配置和IOC、DI
- 干货 | 播音主持必知的五十个知识
- 谷歌浏览器csdn图片无法显示
- scp拷贝多个小文件
- ILSSI|谁是实验设计(DOE)的先驱者?- 优思学院
- Linux CPU之mpstat
热门文章
- 我的python世界 豆瓣_python系列之(4)豆瓣图书《平凡的世界》书评及情感分析...
- [轻松学会shell编程]-3、grep、正则表达式、awk的详细用法、分析系统自带的两个文件(functions和network)
- Rust+官方APP使用教程
- msi笔记本u盘装linux,微星msiGT72S笔记本一键u盘装系统win10教程
- win10计算机不分区,win10系统自带无损分区且数据不丢失的处理方案
- 点击按钮弹出单选列表对话框和加载Webview
- 语音转文字软件哪个好,这三款值得收藏
- 解决node环境下SyntaxError: Cannot use import statement outside a module的问题
- 68个dlib的landmarks
- 【C++】1、C++ 11新特性