第一周:程序设计与C语言

1.编程:是告诉计算机去做什么,用编程语言写出来如何去解决问题,而不是去用编程语言和计算机交流,而是描述要求它如何做事情的过程和方法

2.解释和编译的区别:

解释:是用一种软件去帮你执行你的高级语言,例如python,与编译不同,它有执行的动作,帮你去执行了

编译:是将你写的高级语言程序用一种编译器,变成计算机能理解的二进制代码——机器语言,而没有去执行这串二进制代码,需要进一步的去执行

(注:C语言需要被编译才能运行,所以需要编辑器、编译器或者IDE集成开发环境)

gcc是一个编译工具,常被集合在相应的开放软件中,也可单独在终端调用,只要设置好环境变量

3.区分计算机、程序、算法

第二周:计算

注:直到学函数之前,我们的所有代码都是在这个框架中间

2.0 printf("23+43=%d\n",23+43);

%d是将后面的那个整数要输出到%d这个位置上

2.1浮点数的运算:

只要有一个是浮点数就可以实现带小数点的运算,当浮点数和整数放到一起运算时,C会将整数转换成浮点数,然后进行浮点数的运算

2.2数据类型:

3.1整数

int

printf("%d",...);

scanf("%d",&...);

3.2带小数点的数

double

printf("%f",...);

scanf("%lf",&...);    //获取带小数点的数,即输出浮点数,这里后面是lf,与输出printf后面不一样

程序表达的是顺序执行的结果!

2.3 const int NUM=100; //在C语言中定义一个静态变量,这个变量在程序中不允许被修改,变量名通常用大写来表示静态变量

断点:是表示当前语句还没有执行,将要执行,只执行完了上一句

调试时蓝色框框表示当前执行到的语句

第三周:

3.0编程练习解析:

看样例数据和看题目一样重要。

例如题目要求输入5 3

则程序中就必须是scanf("%d %d",&a,&b);   //%d %d中间的空格不能省略,不然在输入的时候程序就会出错,它要你输入的是空格,必须要你输入空格才能得到它想要的东西。

(注意:你在输入时的内容必须要严格对应scanf中字符串的格式和内容,不然scanf就会出错)

不要看交互的输出,即不需要“请输入XX”这样的printf

程序不能编译时,在工具是设置一下后,如果还不行,重要的以管理员身份打开DevC++

严格村收输出的格式

时间划分:

十进制的1120,如何得到前两位的11和后两位的20呢?

用1120/100就得到了整数11,用1120%100取余就得到了整数20(不超过除数100)

在编程时例如在DevC++中

这三个字符分别是小写的o、数字0、大写的o,即在编程语言中数字0中间会有一个小斜杠

变量名不可以是数字开头,由下划线、数字、字母组成

3.1判断

比较运算符的结果只有0和1,例如输出语句printf("%d",5>=3);也只是输出1,没有其他结果

算数运算符>关系运算符>赋值运算符,例如int a=2>1; 此时a=1。

单行的注释//和多行的注释/*  */

当if语句后面没有大括号时,则只将if语句后面的下句作为执行语句,同时要注意if后面有没有分号,可能执行语句为空,此时不执行任何动作

3.2分支

计算机最不会做的就是一眼看出来结果,它只会一步一步的做某件事

在没有大括号限制时,else总是和最近的那个if相匹配

3.2.1级联的if —else—if

适用于分段函数

if常见易错点:

1.忘了大括号

2.if后面的圆括号后面加分号

3.错误使用==和=

例如

if(a=b)

/*假设此时a=5,b=6。if只要求括号里的内容是0或非0,在这段代码中if语句括号中的内容为b的值,为真,并且执行动作将b的值赋值给了a   */

{

printf("%d",a);               //此时a=6

}

注:warning和error

warning:是一个警告,系统不确定程序是否有错,而且仍会帮你执行这个程序

error:是一个错误,系统这段代码确定出错,且不会帮你执行这个程序

3.2.2多路分支switch-case

switch(控制表达式)  //控制表达式只能是一个整数型的结果

{

case 常量: 语句   //常量可以是常数,也可以是常数计算的表达式

case 常量: 语句

default:语句     //默认语句,除非前面提前用break语句跳出

}

case不是划分一段一段的标志,只是一个入口,遇到符合条件的就进去,在执行完分支里的最后一条语句时,如果没有遇到break,就会一直执行,进入其它case里的语句,直到遇到一个break,或者switch结束(case不能阻止语句往下面执行,只有break可以)

注意:if语句不是判断关系,而是描述执行的步骤

即if...else if...else不等于if...if...if

因为前者只会执行一个分支,前者是描述执行的步骤,而后者当多个条件都满足时,会执行多个分支,后者是判断关系

当判断大于等于时,要从高出往下走

当判断小于等于时,要从低处往上走

第四周:循环

4.1循环

4.1.1如何得到一个整数的位数(位数很大,例如123456789)

可以将这个数一直反复除以10,,第一次会得到12345678,少了一位,同时i++,循环下去,每次少末尾一位,直到商为0,最后i就是这个数的位数

while循环:当条件满足时,不断的重复循环体内的语句

循环体中要有改变条件的机会,不然就会出不来,陷入死循环,像这种情况,pat裁断系统会给出“超时”

在程序适当的地方插入printf来输出变量的内容,也可以跟踪程序的运行,这样可以不用debug调试

还可以在循环的入口的第一行加printf(“in loop”)来看程序是否进入了循环体

算法的描述是先运算第3、4步,再判断,进行第五步,如果程序中去掉去掉开头的n++;x /=10;(为了边界数字0)就是先运行了算法中的第五步,应该将算法中的第五步移到第三步的前面去

那有没有可以更好的算法呢?先做事情,再来看条件呢,引入do-while循环

do-while和while唯一的区别就是do-while至少会执行一次循环,再来判断是否满足条件

注意:do-while循环后面要加分号,否则编译会出错

4.2循环应用

小套路1:计算之前,先int t=x,用t保存原始的x值,后面可能会用到x的值

小套路2:如果要模拟运行一个次数很大的循环,可以模拟较小的循环次数,然后做出推断

计算读取的多个数的平均数

如果将第13行的scanf去掉,则会出现死循环,没有改变循环的条件

乘以1.0可以将最后的结果呈现出小数点

整数的分解:x%10得到末位,循环下去,可得到每一位

思考:如何得到一个整数的逆序数呢?

第三种循环:for循环,像一个计数循环

小套路:做求和的程序时,记录结果的变量应该初始化为0,做求积的程序时,记录结果的变量应该初始化为1

在for循环里声明初始变量,只能在支持C99格式的编译器里使用,例如不能for(int i=0;;),否则就在前面提前声明

任何一个for循环都可以被改写为while循环,反之也一样

while和do-while循环就是一个先判断,一个后判断的区别,其他也是等价的

什么时候用for循环、while循环、do-while循环?

break的作用是跳出循环,可以用在任何循环当中,例如switch、for,while、do-while,都可以用break语句跳出循环(打破这个循环,要出去)

continue跳过循环这一轮剩下的语句,进入下一轮循环,不是跳出循环(continue是把这一轮没做的东西放弃了,去做下一轮)

问题:如何判断一个数是不是素数(质数)?

如果一个数只能被1和n它本身整除,则是素数,若能被1~n之间的任何一个整数整除,则不是素数

1.肯定是用循环来执行程序,用哪种循环呢?因为边界2~n-1很好判断,所以直接用for循环即可;

2.如何判断整数呢?用 n%i 是否为0来判断整数,若为0,则不是素数,若每次取余都不为0,则是素数。

问题:如何输出100以内的所有素数?

问题:如何输入从1 开始的前50个素数?

循环里的嵌套:注意每一层的循环,变量应该设置成不一样的,否则容易出错

凑硬币问题:如何用一角、两角、五角的硬币凑出10元以下的某个金额呢?

计算机最擅长的事情:枚举。

在多层嵌套循环时,break只是跳出当前层(即它所在的那一层) 的循环,不能跳出更外层循环

在这种情况下,如何跳出外层的所有循环呢?用接力break或者goto语句

goto语句非常适合多层循环(多层嵌套)下,要跳出外层的所有循环时,跳到最外面时去使用的

第六周:数据类型

问题:如何实现1-1/2+1/3-1/4+1/5....呢?

因为循环的开头和末尾1、n很好确定,所以用for循环即可,正负的翻转怎么实现呢?

int sign=1;

在循环体内,每次sign= -sign;//即可实现正负的交替;

问题:如何正序分解正整数?

例如输入123456,输出 1 2 3 4 5 6 ;输入70000.输出 7 0 0 0 0

问题:如何计算两个数的最大公约数?(既能被a整除,又能被b整数的最大整数就是最大公约数)

算法一:枚举法(重点)

算法二:辗转相除法计(不用了解原理)算最大公约数

水仙花数:

问题:约分最简分式

本质就是求分子和分母的最大公约数,然后分子分母同时除以这个最大公约数,求得到约分后的结果

6.0编程练习解析,多动手实践下

6.1数据类型

注意区别:

指针是C语言类型的一种

不同类型的变量在内存中的表现形式是不一样的,整数在内存中是自然二进制码或二进制补码形式,而浮点型数字在内存中是一种编码形式,不是自然二进制数,编码形式是不能拿来直接做二进制层面的自然运算的,而两个整数可以在加法器中直接运算(参照计算机组成原理)

sizeof是一个运算符,可以给出某个类型或某个变量在内存中所占据的字节(个)数,返回的是一个数字

例如sizeof(int)、sizeof(i)

sizeof是一个静态运算符,它的结果在编译时刻就决定了,不要在sizeof里面做运算,这些运算不会去做

sizeof的运算结果是括号里的结果所占的字节数,整数型的a加double类型的浮点数1.0,运算结果是double类型的,所以输出结果第二行显示8

unsigned将每位二进制看成无符号位,可以将数值的正整数部分的范围扩大 ,表示更多的正整数,但是主要是为了做移位运算的

如何查看自己的计算机的int类型可以表示的最大整数是多少?

各种类型的整数在计算机内部就像一个圆,当最大的数加1时,就会变成最小的整数,当最小的整数减1时就会变成最大的整数

注意:整数关于0左右是不对称的,左端比右端多一个整数

C语言编程笔记——MOOC翁恺相关推荐

  1. 【C语言程序设计进阶-浙大翁恺】C语言笔记 文件

    [C语言程序设计进阶-浙大翁恺]C语言笔记 文件 文件 格式化输入输出 文件输入输出 二进制文件 位运算 按位运算 移位运算 位运算例子 位段 文件 格式化输入输出 %-nd:数字左对齐,且输出要占n ...

  2. Go语言编程笔记16:存储数据

    Go语言编程笔记16:存储数据 图源:wallpapercave.com 几乎任何程序都绕不开读写数据,只不过具体的数据存储介质和方式有所不同.本篇文章将从多种数据存储方式进行探讨各种存储方式如何实现 ...

  3. Go语言编程笔记18:软件测试

    Go语言编程笔记18:软件测试 图源:wallpapercave.com 软件测试也是软件开发的重要组成部分,本篇文章将探讨如何使用Go的标准库和第三方库对程序进行测试. testing Go的标准库 ...

  4. Go语言编程笔记12:web基础

    Go语言编程笔记12:web基础 图源:wallpapercave.com 开一个新坑,用Go来做web开发.虽然已经从事多年基于LAMP的web开发,但最近学习了Go编程,所以打算借着学习<G ...

  5. 中国大学MOOC翁恺C语言PTA入门练习(更新中)

    目录 7-1 重要的话说三遍 (5 分) 7-2 I Love GPLT (5 分) 7-3 输出带框文字 (5 分) 7-4 输出菱形图案 (5 分) 7-5 输出倒三角图案 (5 分) 7-6 厘 ...

  6. 教师节浙大颁出百万大奖,国内编程教育引路人翁恺获殊荣

    "师者,所以传道受业解惑也." 9月7日下午,浙江大学庆祝第34个教师节暨先进表彰会在紫金港校区举行,会上,浙江大学计算机学院的一线教师翁恺获颁"浙江大学永平杰出教学贡献 ...

  7. c语言 方程改main的值_C语言编程笔记丨编写第一个C语言程序hello world,我教你哇...

    如果用C语言输出:Hello,world!,该如何编写程序? **代码如下:** #include//包含标准库的信息 main()//定义名为main的函数,不接受参数值 {//main函数的语句都 ...

  8. 分享一份 Go 语言编程笔记

    在当今流行的编程语言中,Go 语言独树一帜,因为其简单易学.性能强劲且原生支持并发的特点,深受开发者的青睐.Stack Overflow 2022 的调查显示,同等工作年限下,Go 的年薪要远远高于传 ...

  9. MOOC翁恺老师零基础学Java语言课程编程题——第六周

    1 单词长度(5分) 题目内容: 你的程序要读入一行文本,其中以空格分隔为若干个单词,以'.'结束.你要输出这行文本中每个单词的长度.这里的单词与语言无关,可以包括各种符号,比如"it's& ...

最新文章

  1. 【整理】JDK MacOS X
  2. 大脑也在强化学习!加州大学提出「价值决策」被大脑高效编码,登Neuron顶刊...
  3. python学不会的表情包-小学生绞尽脑汁也学不会的python(反射)
  4. 机器学习算法源码全解析(二)-范数规则化之L0、L1与L2范数
  5. Mac本地生成SSHKey的方法
  6. 特定SQL的查询优化
  7. Fiori应用deploy到云上后在Chrome开发者工具里Source标签页的外观
  8. Spring Boot 使用Redis
  9. C++(STL):05---智能指针之unique_ptr
  10. Java 时断时续之————Java事件
  11. python opencv pdf脚本之家_OpenCV 3和Qt5计算机视觉应用开发 PDF 影印含源码版
  12. 注册app短信验证平台_免费的短信验证码平台弊端竟然这么多!
  13. 《Advanced .NET Debugging》 读书笔记 Listing 5-6: Pining的简单示例
  14. HTTP网页错误代码大全带解释
  15. 相同数据源情况下,使用Kafka实时消费数据 vs 离线环境下全部落表后处理数据,结果存在差异...
  16. Access数据库使用DateAdd函数更新日期信息
  17. 2021-5-17:Spring Boot整合Redis
  18. 服务器在raid5下做系统ghost备份,转 浅析在RAID5下做系统ghost备份
  19. matlab 相位校正,科学网—全相位比值校正法 - 王兆华的博文
  20. 细说http状态码之301,304

热门文章

  1. shipyard安装不迷茫
  2. oracle双活什么意思,什么是双活数据中心
  3. 紫光集团或入股武汉新芯 赵伟国将任董事长
  4. 坚果云和亿方云该如何选?
  5. mock.js使用指南
  6. 11. JS编程之查找元素在数组中的位置
  7. Trading Convexity for Scalability
  8. java中判断字符是否为英文字母、中文汉字或者数字
  9. Leecode DFS深度优先搜索
  10. OSChina 周三乱弹 ——技校重金属跟小清新画风的妹子