翁恺老师C语言课部分题目/零碎知识点解析总结

翁恺老师C语言课大纲

C语言程序设计
1.1.1 计算机和编程语言
1.1.2 计算机的思维方式
1.2.1 为什么是C
1.2.2 简单历史
1.2.3 编程软件
1.3.1 第一个C程序
1.3.2 详解第一个程序
1.3.3 做点计算
1.3.4 Mac OS X如何在命令行编辑、编译和运行C程序
2.1.1 第二周
2.1.2 变量定义
2.1.3 变量赋值与初始化
2.1.4 变量输入
2.1.5 常量vs变量
2.1.6 浮点数
2.2.1 表达式
2.2.2 运算符优先级
2.2.3 交换变量
2.2.4 复合赋值和递增递减
2.2.5 如何使用PAT系统来做编程练习题
3.0.1 PAT再解释
3.0.2 第二周习题解析
3.0.3 0的故事
3.1.1 做判断
3.1.2 判断的条件
3.1.3 找零计算器
3.1.4 否则的话
3.1.5 if语句再探
3.2.1 嵌套的if-else
3.2.2 级联的if-else if
3.2.3 if-else的常见错误
3.2.4 多路分支
4.1.1 循环
4.1.2 while循环
4.1.3 do-while循环
4.2.1 循环计算
4.2.2 猜数游戏
4.2.3 算平均数
4.2.4 整数逆序
5.1.1 for循环
5.1.2 循环的计算和选择
5.2.1 循环控制
5.2.2 嵌套的循环
5.2.3 从嵌套的循环中跳出
5.3.1 前n项求和
5.3.2 整数分解
5.3.3 求最大公约数
6.0.1 编程练习解析4-0:给定条件的整数集
6.0.2 编程练习解析4-1:水仙花数
6.0.3 编程练习解析4-2:九九乘法表
6.0.4 编程练习解析4-3:统计素数求和
6.0.5 编程练习解析4-4:猜数游戏
6.0.6 编程练习解析5-0:n项求和
6.0.7 编程练习解析5-1~5-3
6.1.1 数据类型:C语言有哪些基础数据类型,sizeof可以做什么
6.1.2 整数类型:除了int,还有多少整数类型
6.1.3 整数的内部表达:整数是如何表达的,尤其是负数如何表达
6.1.4 整数的范围:如何推算整数类型所能表达的数的范围,越界了会怎样
6.1.5 整数的格式化:如何格式化输入输出整数,如何处理8进制和16进制
6.1.6 选择整数类型:没什么特殊需要就只用int就好了
6.1.7 浮点类型:double和float,它们是什么,如何输入输出
6.1.8 浮点的范围与精度:浮点数到底能表示哪些数
6.1.9 字符类型:char是整数也是字符
6.1.1 0逃逸字符:反斜杠开头的字符是特殊的控制字符
6.1.11 类型转换:如何在不同类型之间做转换
6.2.1 逻辑类型:表示关系运算和逻辑运算结果的量
6.2.2 逻辑运算:对逻辑量进行与、或、非运算
6.2.3 条件运算与逗号运算
第一次单元测验
7.1.1 初见函数
7.1.2 函数的定义和调用
7.1.3 从函数中返回
7.2.1 函数原型:用来告诉编译器这个函数长什么样儿
7.2.2 参数传递:调用函数的时候,是用表达式的值来初始化函数的参数
7.2.3 本地变量:定义在函数内部的变量是本地变量,参数也是本地变量
7.2.4 函数庶事:一些有关函数的细节问题,main()是什么
8.1-1 初试数组
8.1-2 数组的使用:如何定义和使用数组,数组的下标和下标的范围
8.1-3 数组的例子:统计个数
8.2-1 数组运算
8.2-2 数组例子:素数
8.2-3 二维数组
9.1-1 取地址运算:&运算符取得变量的地址
9.1-2 指针:指针变量就是记录地址的变量
9.1-3 指针的使用:指针有什么用呢?
9.1-4 指针与数组:为什么数组传进函数后的sizeof不对了
9.1-5 指针与const:指针本身和所指的变量都可能const
9.2-1 指针运算
9.2-2 动态内存分配
10.1-1 字符串
10.1-2 字符串变量
10.1-3 字符串输入输出
10.1-4 字符串数组,以及程序参数
10.2-1 单字符输入输出,用putchar和getchar
10.2-2 字符串函数strlen
10.2-3 字符串函数strcmp
10.2-4 字符串函数strcpy
10.2-5 字符串函数strcat
10.2-6 字符串搜索函数
第二次单元测验
A0-1 ACLLib介绍,看几个小游戏的演示
A0-2 Win32API简单介绍,太难了,不学!
A0-3 Dev C++建ACLLib项目,第一个窗口跑起来
A0-4 ACLLib的基本绘图函数
11.1-1 枚举
11.2-1 结构类型
11.2-2 结构与函数
11.2-3 结构中的结构
11.3-1 类型定义
11.3-2 联合
12.1-1 全局变量:定义在函数之外的变量,全局的生存期和作用域
12.1-2 静态本地变量:能在函数结束后继续保有原值的本地变量
12.1-3 后记:返回指针的函数,使用全局变量的贴士
12.2-1 宏定义
12.2-2 带参数的宏
12.3-1 多个源代码文件
12.3-2 头文件
12.3-3 声明
13.1-1 格式化输入输出
13.1-2 文件输入输出
13.1-3 二进制文件
13.2-1 按位运算
13.2-2 移位运算
13.2-3 位运算例子
13.2-4 位段
14.1-1 可变数组
14.1-2 可变数组的数据访问
14.1-3 可变数组的自动增长
14.2-1 可变数组的缺陷
14.2-2 链表
14.2-3 链表的函数
14.2-4 链表的搜索
14.2-5 链表的删除
14.2-6 链表的清除
期末考试

日常测验

第二周 计算

2.1 变量

有效变量名

以下哪些是有效的变量名?

A.main

B.4ever

C.monkey-king

D.__int

正确答案:A、D

注:main不是C语言的关键字,所以是有效变量名

附上C语言关键字

关键字 说明
auto 声明自动变量
short 声明短整型变量或函数
int 声明整型变量或函数
long 声明长整型变量或函数
float 声明浮点型变量或函数
double 声明双精度变量或函数
char 声明字符型变量或函数
struct 声明结构体变量或函数
union 声明共用数据类型
enum 声明枚举类型
typedef 用以给数据类型取别名
const 声明只读变量
unsigned 声明无符号类型变量或函数
signed 声明有符号类型变量或函数
extern 声明变量是在其他文件正声明
register 声明寄存器变量
static 声明静态变量
volatile 说明变量在程序执行中可被隐含地改变
void 声明函数无返回值或无参数,声明无类型指针
if 条件语句
else 条件语句否定分支(与 if 连用)
switch 用于开关语句
case 开关语句分支
for 一种循环语句
do 循环语句的循环体
while 循环语句的循环条件
goto 无条件跳转语句
continue 结束当前循环,开始下一轮循环
break 跳出当前循环
default 开关语句中的“其他”分支
sizeof 计算数据类型长度
return 子程序返回语句(可以带参数,也可不带参数)循环条件

第三周 判断

3.2 分支

break和continue

写出程序的输出:

int i=1;
switch ( i%3 ) {
   
case 0: printf("zero");
case 1: printf("one");
case 2: printf("two");
}

正确答案:onetwo

因为case 1后面并没有break;所以要一直跑下去,直至switch中的语句结束或遇到break

真正的代码应该为:

int i=1;
switch ( i%3 ) {
   
case 0: printf("zero"); break;
case 1: printf("one"); break;
case 2: printf("two"); break;
}

break 用来结束所有循环,循环语句不再有执行的机会;
continue 用来结束本次循环,直接跳到下一次循环,如果循环条件成立,还会继续循环。

第五周 循环控制

5.1 第三种循环

i++和for循环

以下代码段的输出是什么?

for ( int i=10; i> 1; i /=2 ) {
   
    printf("%d ", i++);
}

正确答案:10 5 3 2

解析:i=10 ——输出10 ——i赋值为11——i=5
i=5 ——输出5 ——i赋值为6——i=3
i=3 ——输出3 ——i赋值为4——i=2
i=2——输出2 ——i赋值为——i=1
i=1——表达式2为假——跳出循环

附注:for语句的执行过程

1.求解表达式1。
2.求解表达式2。若其值为真,则执行 for 语句中指定的内嵌语句,然后执行第3步;若表达式2值为假,则结束循环,转到第5步。
3.求解表达式3。
4.转回上面第2步继续执行。
5.循环结束,执行 for 语句下面的语句。

第六周 数据类型

6.1 数据类型

字母在数字后面表示类型

以下哪个字母不能在数字后面表示类型?

A.F

B.U

C.L

D.X

正确答案:D

U表示该常数用无符号整型方式存储,相当于 unsigned int,如32U
L表示该常数用长整型方式存储,相当于 long,如32L
F表示该常数用浮点方式存储,相当于 float,如32F

变量所占字节

以下哪个数字占据的空间最大?

A.32768

B.‘3’

C.32768.0

D.32768.0F
正确答案:C

类型 字节长度
char 1
short 2
int 不同系统不一样
float 4
double 8
long 不同系统不一样
long long 8

1字节表示 8bit

switch-case的判断变量类型

以下哪种类型不能用在switch-case的判断变量中:

A.char

B.short

C.int

D.double

正确答案:D

switch语句后的控制表达式只能是short、char、int、long整数类型和枚举类型,不能是float,double和bool类型

第七周 函数

7.2 函数的参数和变量

函数原型

以下哪句不是正确的原型?

A.int f();

B.int f(int i);

C.int f(int);

D.int f(int i) {}

正确答案:D

解析:D选项是函数定义,不是函数原型

void

以下哪个函数的定义是错误的?

A.void f() {}

B.void f(int i) { return i+1; }

C.void f(int i) {}

D.int f() { return 0; }

正确答案:B

解析:错在函数的返回值。
正确的应该是:

int f (int i)
{
   
return i + 1;
}

此处知识点为函数的定义。
函数定义的语法形式是:

类型标识符 函数名(形式参数表)
{
语句序列
}

类型标识符是函数的类型,就是常说的函数的返回值类型。函数的返回值可以返回给主调函数使用,由return语句给出,比如:return 0。没有返回值的函数的类型标识符为void,不需要写return语句。函数都有自己的类型,除void类型的函数外都有自己的返回值。

总结:void没有返回值,不需要return

第九周 指针

9.2 指针运算

内存

对于以下代码段,正确的说法是:

char *p;
while (1) {
   
    p = malloc(1);
    *p = 0;
}

A.最终程序会因为没有没有空间了而退出

B.最终程序会因为向0地址写入而退出

C.程序会一直运行下去

D.程序不能被编译

正确答案:B

解析:当得不到内存时,程序不会自动退出,而是malloc返回了0(也就是NULL),然后让程序去处理。这个程序导致退出的原因不是没有内存了,而是它在这里只是写入,最终会因为向0地址写入而崩溃。

数组下标越界

对于以下代码段:

int a[] = {
   1,2,3,4,5,};
int *p = a;
int *q = &a[5];
printf("%d", q-p);

当sizeof(int)为4时,以下说法正确的是:

A.因为第三行的错误不能编译

B.因为第三行的错误运行时崩溃

C.输出5

D.输出20

正确答案:C

这里只是指针p加了5而已,并没有动到里面的数据,动到该内存(变量)也不会出现系统崩溃。
[ ]符号代表取偏移地址的内容。a[5]表示取指针向后偏移5个指针a所指类型数据长度的位置处的内容。C语言不检查数组越界,因此a[5]在编译期不会报错。&a[5]代表该位置的地址,相当于a+5。因此q-p相当于a+5-a,答案自然为5。
因为&是取址运算符,注意,是运算,所以并不会读写那个并不属于你的空间,因此不会跳出错误。最后的q-p实际上等于 q 地 址 − p 地 址 的 偏 移 量 q地址-p地址的偏移量 qp,系统很智能的给出了偏移5个int

malloc和数组

使用malloc就可以做出运行时可以随时改变大小的数组

A. √ √

B. × × ×

正确答案:B

realloc才可以在运行时改变空间的大小(数组的大小),malloc只能用于申请内存空间,但该函数无法重新调整空间大小。

第一次单元测验

X++的输出值

下列程序段输出结果为:

int x=1, y=012;
printf(%d”,y*x++);

得分/总分

A.12

B.24

C.10

D.20

正确答案:C

X++的结果是加1以前的值,而++X是加1以后的值

短路效应

以下代码的输出是 _____.

int x=0, y=0, z=0;
z = (x==1) && (y=2);
printf("%d ", y);

正确答案:0

代码第二行 x!=1 导致&&直接输出为0,并不去算右边的 y=2 ,所以y的值还是0

sizeof()

以下代码段的结果是:

int i=10;
long long t = sizeof(i++);
printf("%d", i);

正确答案:10

sizeof()是静态运算符

if语句的包含范围

以下代码的输出是 :

 int i,x,y;	
i=x=y=0;
do {
   
	++i;
	if ( i%2 ) 
		x+=i, 
	i++;
	y +=i++;
} while ( i<=7 );
printf("%d %d %d"
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值