C语言编程笔记——MOOC翁恺

第一周:程序设计与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左右是不对称的,左端比右端多一个整数

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
C语言是古老而长青的编程语言,它具备了现代程序设计的基础要求,它的语法是很多其他编程语言的基础,在系统程序、嵌入式系统等领域依然是无可替代的编程语言,在各类编程语言排行榜上常年占据前两名的位置。 本课程是零基础的编程入门课,是后续的操作系统、编译原理、体系结构等课程的基石。 —— 课程团队 课程概述 程序设计是一门基础课程。对于计算机相关专业而言,程序设计是专业基础知识,是进一步学习其他专业知识的第一步阶梯;对于非计算机专业而言,程序设计的学习有助于理解计算机的能力所在,理解哪些是计算机擅长解决的问题,怎样的方式方法是计算机擅长的手段,从而能更好地利用计算机来解决本专业领域内的问题。 C语言是古老而长青的编程语言,它具备了现代程序设计的基础要求,它的语法是很多其他编程语言的基础,在系统程序、嵌入式系统等领域依然是无可替代的编程语言,在各类编程语言排行榜上常年占据前两名的位置。 对于非计算机专业的学生,学习本课程的主要目的是掌握程序设计的基本方法,C语言是教学媒介。但是对于计算机专业的学生,本课程是向后续的计算机组成、操作系统、编译原理、体系结构等课程前进的基石,对于C语言本身甚至程序设计语言基础原理的深入理解都是应该掌握的。 本课程是零基础的入门课程,完成本课程之后,就能具有初步的运用C语言编写程序的能力。要想完整的学习C语言,还需要进一步学习本课程的后续课程——《C语言程序设计进阶》。 程序设计是实践性很强的课程,该课程的学习有其自身的特点,听不会,也看不会,只能练会。你必须通过大量的编程训练,在实践中掌握编程知识,培养编程能力,并逐步理解和掌握程序设计的思想和方法。在这里所提供的,只是基础的知识讲解,要想学会编程,还需要更多时间的投入和努力。 为了学习编程,你需要有一台计算机,安装必要的编程软件。无论是MS Windows、Mac OS X还是Linux,都有适合C语言编程的软件。如果搞不定自己电脑上的编程软件,我们也会提供在网页中编写、运行C语言程序的方法。 课程大纲 01 程序设计与C语言 课时 1 计算机和编程语言 2 C语言 3 第一个程序 02 计算 课时 1 变量 2 数据类型 3 表达式 4 在线评判系统 03 判断与循环 课时 1 判断 2 循环 04 进一步的判断与循环 课时 1 逻辑类型和运算 2 级联和嵌套的判断 3 多路分支 4 循环的例子 5 判断和循环常见的错误 05 循环控制 课时 1 循环控制 2 多重循环 3 循环应用 06 数组与函数 课时 1 数组 2 函数的定义与使用 3 函数的参数和变量 4 二维数组 07 数组运算 课时 1 数组运算 2 搜索 3 排序初步 08 指针与字符串 课时 1 指针 2 字符类型 3 字符串 4 字符串计算 预备知识 作为第一门编程课,本课程可以零基础学习。大学计算机(大学计算机基础、计算思维导论)等课程对于理解本课程的部分内容有帮助,但这些课程的学习不是必须的。 证书要求 课程的总分达到60分以上,可以获得本课程的合格证书。 课程的总分达到85分以上,可以获得本课程的优秀证书。 参考资料 何钦铭、颜晖,《C语言程序设计(第3版)》,高等教育出版社,2015年,ISBN 978-7-04-043128-3 颜晖、张泳,《C语言程序设计实验与习题指导(第3版)》,高等教育出版社,2015年,ISBN 978-7-04-043563-4 常见问题 Q:我需要特殊版本的计算机吗? A:任何计算机都可以用于C语言编程,包括但不限于各个版本的MS Windows、各个版本的Mac OS X、各种发行版本的Linux。有的手机有app也能实现C语言编程,不过我们不推荐那么小的屏幕。 Q:我需要安装特定的软件才能做这门课的作业吗? A:任何C语言的开发工具都可以。课程演示会使用Dev C++及命令行环境,但是你使用任何其他开发工具都不会影响做作业的正确性。可以使用的其他工具包括但不限于MS Visual Studio、C-Free等。 Q:每周会发布多少时间的视频?我需要花多少时间来学习? A:我们按照90分钟的授课时间来设计课程。但是发布的视频肯定小于90分钟,一般在50到70分钟左右。因为在线下上课时,老师可能会回顾一下上周的内容、某些内容会看学生的反应重复几遍、会当堂问做一些提问,以及在各种软件等教学工具之间切换,这些都要花点时间,而这些在线上课程中都不存在了,所以视频的时间不会正好是90分钟。但是一般我们设计课程需要1:1.5到1:2的课后学习时间,这包括预习、作业、练习和复习的时间,所以每周大约需要花费三到五小时的时间。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

#学习的路上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值