【C语言 MOOC】程序设计入门_C语言(翁恺)

这篇博客介绍了翁恺教授的C语言MOOC课程,内容涵盖程序设计的基本概念、C语言的变量、数据类型、表达式、判断与循环、数组、函数、指针和字符串等。通过周为单位,详细讲解了C语言的关键知识点,适合C语言初学者学习。
摘要由CSDN通过智能技术生成

文章目录

程序设计入门—C语言(MOOC—翁恺)

Week 1 程序设计与C语言

lesson 1 计算机和编程语言

  • 告诉人做一件事情是 what to do
  • 告诉计算机做一件事情是 how to do
  • 编程语言并非人与计算机交流的语言,人与计算机通过人机交互进行交流
辗转相除法
int u = 32;
int v = 26;
while ( v != 0 ) {
   
    int temp = u % v;
    u = v;
    v = temp;
}
printf("%d\n", u);

运行结果

  1. 如果 v 等于 0 ,计算结束,u 就是最大公约数
  2. 如果 v 不等于 0 ,那么计算 u 除以 v 的余数,让 u 等于 v ,而 v 等于那个余数
  3. 回到第一步
程序的执行
  • 解释:借助一个程序,那个程序能试图理解你的程序,然后按照你的要求执行
  • 编译:借助一个程序,就像一个翻译,把你的程序翻译成计算机能懂的机器语言程序并可直接执行

lesson 2 第一个程序

  • 程序框架
#include <stdio.h>
int main()
{
   
	//代码
	return 0;
}
  • 在接触函数之前,所有代码都是这个框架

Week 2 计算

lesson 1 变量

变量的定义及初始化
  • <类型名称> <变量名称> = <初始值>;
    • int price = 0;
    • int amount = 100;
  • 定义组合变量时,也可在定义中单独给单个变量赋初值
    • int price = 0, amount = 100;
  • C语言严格区分大小写
  • 变量的命名规则: 一个标识符以字母 A-Z 或 a-z 或下划线 _ 开始,后跟零个或多个字母、下划线和数字(0-9)
变量类型
  • int price = 0;,这一行定义了一个变量,变量名是price,类型是int,初始值是0
  • C是一种强类型语言,所有变量在使用之前必须定义或声明,且必须具有确定的数据类型。数据类型表示在变量中可以存放且只能存放什么类型的数据,程序运行过程中也不能改变变量的类型
    准确性有待商榷
    来源不可考
※ 关于scanf

scanf里不能有\n,否则当输入完需要输入的内容后就算按无数回车也必须要再输入一个值才能成功输入,但该值并不会参与程序的运行

常量
  • 一种定义方式(C99 ONLY):const int AMOUT = 100;
  • const 是一个修饰符,加在 int 前面,用来给这个常量加上一个const(不变)的属性,这个const的属性表示这个变量的值一旦初始化就不能更改

lesson 2 数据类型

  • 浮点数:带小数点的数值
    • 浮点的本意就是指小数点是浮动的,是计算机内部表达非整数(包括分数和无理数)的一种方式,另一种方式叫定点数,但C语言中没有定点数
  • double
    • printf("%f", ...);
    • scanf("%lf", ...);

lesson 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 t = t1 - t2;
    
    printf("时间差是%d小时%d分", t / 60, t % 60);
    
    运行结果
  • hour * 60 + minute → 转换为分钟为单位
  • t / 60 → 小时,t % 60 → 分钟

  • a++(- -) 是 a 加(减)1 之前的值,在使用i之后,使i的值加(减)1 ,先使用再运算
  • ++(- -)a 是 a 加(减)1 之后的值,在使用i之前,先使i的值加(减)1 ,先运算再使用
  •   int a = 3;
      int c1, c2, c3, c4;
      
      c1 = a++;  // a赋值给c1后自身再加1
      printf("c1的值是%d,a的值是%d\n", c1, a);
      
      a = 3;
      c2 = ++a;  // a自身加1后再赋值给c2
      printf("c2的值是%d,a的值是%d\n", c2, a);
      
      a = 3;
      c3 = a--;  // a赋值给c3后自身再减1
      printf("c3的值是%d,a的值是%d\n", c3, a);
      
      a = 3;
      c4 = --a;  // a自身减1后再赋值给c4
      printf("c4的值是%d,a的值是%d\n", c4, a);
    
    运行结果

Week 3 判断与循环

lesson 1 判断

  • C语言提供了六个关系运算符:

    • == 相等
    • != 不相等
    • > 大于
    • >= 大于或等于
    • < 小于
    • <= 小于或等于
  • 注意其中有两个字符的运算符:==、>=和<=的两个字符必须紧紧连在一起,中间不能插入空格。

  • 关系运算的结果是一个逻辑值,逻辑值只有两种可能的值:true(真,表示成立)或 false(假,表示不成立)。当两个值的关系符合关系运算符的预期时,关系运算的结果为 true,否则为 false。

  • 当两个值的关系符合运算符的预期时,关系运算的结果为整数1,否则为整数0

    printf("%d\n", 5 == 3);
    printf("%d\n", 5 != 3);
    printf("%d\n", 5 > 3);
    printf("%d\n", 5 >= 3);
    printf("%d\n", 5 < 3);
    printf("%d\n", 5 <= 3);
    

    运行结果


  • 比较两个数的大小
  • 代码一:
    int a, b;
    printf("请输入两个整数:");
    scanf("%d %d", &a, &b);
    int max = 0;
    if ( a > b )
    	max = a;
    else
        max = b;
    printf("大的那个是%d\n", max);
    
    运行结果
  • 代码二:
    int a, b;
    printf("请输入两个整数:");
    scanf("%d %d", &a, &b);
    int max = b;
    if ( a > b )
    	max = a;
    printf("大的那个是%d\n", max);
    
    运行结果

  • if( 1<=n<=10 ); 可以通过编译,但不表示 n 属于 [1,10]
    • 先判断 1<=n ,判断结果为0(假)或1(真),然后在判断 (1<=n) 的整体值(0或1)是否小于等于 10,结果为真
    • 可以执行,但并不能表示 n 介于 1 到 10 之间的判断
    • 如果要执行 n 介于 1 到 10 之间的判断,应表示为:if( n>=1 && n<=10 )

lesson 2 循环

  • while语句 是一个循环语句,它会首先判断一个条件是否满足,如果条件满足,则执行后面紧跟着的语句或语句括号,然后再次判断条件是否满足,如果条件满足则再次执行,直到条件不满足为止。后面紧跟的语句或语句括号,就是循环体
  • do-while循环 和 while循环很像,唯一的区别是我们在循环体执行结束的时候才来判断条件。也就是说,无论如何,循环都会执行至少一遍,然后再来判断条件。与while循环相同的是,条件满足时执行循环,条件不满足时结束循环
  • do-while循环结尾有分号

  • for(a=10;a>0;a--)
    表示:对于一开始的 a=10,当 a>0 时,重复执行循环体,每一轮执行完循环体时使得 a- -

  • 做求程序时,变量初始值应为0
  • 做求程序时,变量初始值应为1

  • 在循环语句内定义循环变量(C99 ONLY)

  • 每个for循环都可转换为一个while循环:
for ( int i=1; i<=n; i++ ) {
   
	fact *= i;
}

//等同于

int i = 1;
while ( i<=n ) {
   
    fact *= i;
    i++;
}
  • 循环语句的选择:
    • 若有固定次数:用for
    • 若必须执行一次(至少执行一次):用do-while
    • 其他情况用while

Week 4 进一步的判断和循环

lesson 1 逻辑类型与运算

bool 布尔类型
//导入 stdbool.h 来使用布尔类型,C99 ONLY
#include <stdbool.h>
#include <stdio.h>

//计算n!,n的值在main中定义
int main(void)
{
   
    int n = 10;    //计算叠乘数
    int sum = 1; //用来存放叠乘的结果
    bool flag = false;    //叠乘标记
    
    int num = n;    //循环次数
    while ( !flag ) {
   
        sum = sum * (num--);
        //当num=1时结束循环
        if ( num == 1 ) {
   
            flag = true;
        }
    }
    printf ("%d的叠乘值为 %d \n", n, sum);
    return 0;
}

运行结果

逻辑运算
  • 逻辑运算是对逻辑量进行的运算,结果只有0或1
  • 逻辑量是关系运算或逻辑运算的结果
运算符 描述 示例 结果
! 逻辑非 ! a 真假颠倒
&& 逻辑与 a && b 全真才真,一假即假
|| 逻辑或 a || b 一真即真,全假才假
  • 如何表达x ∈ (4, 6)
    • 4 < x < 6是错误的表达方式,因为x < 4表示的是一个逻辑值 0 或 1
    • 正确的表达方式是:x < 6 && x > 4
  • x ∈ [4, 6]同理
短路运算
  • 逻辑运算是自左向右进行的,如果左边的结果已经能够决定结果了,就不会做右边的计算

  • a == 6 && b == 1

  • a == 6 && b += 1,如果左边为假,右边的赋值就不会进行

    切记! 不要把赋值包括复合赋值写进逻辑运算表达式

  • 对于 && ,左边是 false 时就不会进行右边

  • 对于 ||,左边是 ture 时就不会进行右边

条件运算符
  • count = (count > 20) ? count - 10 : count + 10;
  • 条件 ?条件满足时的值 :条件不满足的值
  • 自右向左结合
  • 忌用嵌套的条件表达式
逗号表达式
  • 连接两个表达式
  • 用右边的表达式作为结果
    • i = (3 + 4, 5 + 6),i 的值是11

lesson 2 级联和嵌套的判断

  •   //单一出口,f的值可灵活使用,并且程序修改相对容易,推荐
      int f;
      if ( x < 0 ) {
         
      	f = -1;
      } else if ( x == 0 ) {
         
      	f = 0;
      } else {
         
      	f = 2 * x;
      }
      printf("%d",f);
      
      /**********************************************/
      
      //写死了,不推荐
      if ( x < 0 ) {
         
      	printf("%d", -1);
      } else if ( x == 0 ) {
         
      	printf("%d", 0);
      } else {
         
      	printf("%d", 2 *x);
      }
    

lesson 3 多路分支——switch-case语句

//if-else语句
if ( type == 1 )
	printf("你好");
else if ( type == 2 )
	printf("早上好");
else if ( type == 3 )
	printf("晚上好");
else if ( type == 4 )
	printf("再见好"
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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值