C语言N08 编译预处理、位运算与文件 2学时+2学时
《c语言程序设计》教学大纲

《C语言程序设计》教学大纲课程名称:中文名称:C语言程序设计;英文名称:C Language Programming课程编码:161002学分:4.5分总学时:72学时,其中,理论学时:52学时;上机学时:20学时。
适用专业:全校理工科各专业先修课程:计算机基础执笔人:审订人:一、课程的性质与任务《C语言程序设计》是为全校所有的理工科专业的学生开设的公共基础课,也是一门重要的必修课。
其目的是使学生掌握程序设计的基本方法,培养学生掌握利用计算机处理问题的思维方法与应用能力。
要求学生掌握程序的三种基本结构及结构化的程序设计方法,了解并掌握几种典型的算法,并且能够熟练地运用C语言编写各种应用程序,为进一步学习其它相关课程奠定基础。
二、教学内容与学时分配第一章程序设计基本概念(3学时)本章重点:一、算法及特性;二、结构化程序设计方法。
难点:算法设计及其表示。
第一节程序和程序设计一、程序;二、程序设计。
第二节算法第三节结构化程序设计方法第四节C语言程序的基本结构第二章数据类型、运算符和表达式(5学时)本章重点:一、标识符的正确使用;二、各种基本数据类型的使用;三、算术运算符的优先级和结合性;四、表达式计算中的类型转换。
难点:一、各种类型数据在计算机内存中的存储形式;二、自增自减运算。
第一节C语言的数据类型第二节常量与变量第三节整型数据第四节实型数据第五节字符型数据第六节算术运算符与算术表达式第七节赋值运算符与赋值表达式一、赋值运算符和赋值表达式;二、复合的赋值表达式;三、自加、自减运算符;四、赋值运算中的类型转换。
第八节逗号运算符与逗号表达式第三章顺序结构程序设计(4学时)本章重点:一、printf函数;二、scanf函数。
难点:输入与输出时的格式控制。
第一节C语句概述第二节赋值语句第三节数据的输入与输出一、printf函数;二、putchar函数;三、scanf函数;四、getchar函数第四节顺序结构程序举例第四章选择结构程序设计(4学时)本章重点:一、逻辑值的表示、使用及其运算;二、关系运算符的运算规则及关系表达式;三、逻辑运算符的运算规则及逻辑表达式;四、if语句;五、switch语句的形式与执行过程。
C语言编译预处理PPT课件

知识点精讲
知识点2 不带参数的宏定义
知识点分析 用一个指定的标识符(即名字)来代表一个字符串,其一般形式如下: #define 标识符 字符串 例如: #define PI 3.1415926 1.宏定义的作用是在本程序文件中用指定的标识符PI来代替3.141 592 6这个字符串。在编译 预处理时,将程序中在该命令后出现的所有PI都用3.141 592 6代替。这种方法使用户能够以一个 简单的名字代替一个长的字符串。 2.这个标识符(名字)称为“宏名”。 3.在预处理时,将宏名替换成字符串的过程称为“宏展开”。“#define”是宏定义命令。 例如: #include "stdio.h" #define PI 3.1415926 /*定义了一个不带参数的宏*/
知识点精讲
int sum=ADD ( m+n)*k; printf("sum=%d", sum); } 2.下列程序的运行结果是____s_u_m_=_1_2_______ #define ADD(x)(x)+(x) void main( ) { int m=1,n=2,k=3; int sum=ADD(m+n)*k; printf("sum=%d", sum); } 3.下列程序的运行结果是______2_8________ #include <stdio.h> #define f(x) x*x main( )
void main( )
{
printf("L=%f\nS=%f\n",L,S);
getch( );
}
知识点精讲
知识点3 带参数的宏定义
真题回顾 (2021年真题)计算圆的面积s(公式为s=3.14r2)。请补全下列代码。 #include<stdio.h>
c语言第8章-编译预处理及位运算习题答案doc资料

c语言第8章-编译预处理及位运算习题答案编译预处理习题一.单项选择题1.在宏定义#define A 3.897678中,宏名A代替一个()。
A)单精度数 B)双精度数 C)常量 D)字符串2.以下叙述中正确的是A)预处理命令行必须位于源文件的开头 B)在源文件的一行上可以有多条预处理命令C)宏名必须用大写字母表示D)宏替换不占用程序的运行时间3.C语言的编译系统对宏命令的处理()。
A)在程序运行时进行的B)在程序连接时进行的C)和C程序中的其它语句同时进行的D)在对源程序中其它语句正式编译之前进行的4.在文件包含预处理语句的中,被包含文件名用“< >”括起时,寻找被包含文件的方式是()。
A)直接按系统设定的标准方式搜索目录B)先在源程序所在目录搜索,再按系统设定的标准方式搜索C)仅仅在源程序所在目录搜索D)仅仅搜索当前目录5.以下说法中正确的是A)#define和printf都是C语句 B)#define是C语句,而printf不是C)printf是C语句,但#define不是D)#define和printf都不是C 语句6.#define A 3.897678#include <stdio.h>main( ){ printf(“A=%f ”,A);}程序运行结果为()。
A) 3.897678=3.897678 B) 3.897678=A C) A=3.897678 D)无结果7.有宏定义:#define LI(a,b) a*b#define LJ(a,b) (a)*(b)在后面的程序中有宏引用:x=LI(3+2,5+8);y=LJ(3+2,5+8);则x、y的值是()。
A) x=65,y=65 B) x=21,y=65 C) x=65,y=21 D)x=21,y=218.有以下程序# define f(x) (x*x)main(){ int i1, i2;i1=f(8)/f(4) ; i2=f(4+4)/f(2+2) ;printf("%d, %d\n",i1,i2);}程序运行后的输出结果是A)64, 28 B)4, 4 C)4, 3D)64, 649.以下程序的输出结果是#define M(x,y,z) x*y+zmain(){ int a=1,b=2, c=3;printf(“%d\n”, M(a+b,b+c, c+a));}A) 19 B) 17 C) 15 D) 1210.有以下程序#define N 5#define M1 N*3#define M2 N*2main(){ int i;i=M1+M2; printf(“%d\n”,i);}程序编译后运行的输出结果是:A) 10 B) 20 C) 25 D) 3011.有如下程序#define N 2#define M N+1#define NUM 2*M+1#main(){ int i;for(i=1;i<=NUM;i++)printf(“%d\n”,i);}该程序中的for循环执行的次数是A) 5 B) 6C) 7 D) 812.位运算是对运算对象按二进制位进行操作的运算,运算的对象是____数据,以___的形式参与运算。
《C语言程序设计》课程标准

《C语言程序设计》课程标准一、课程基本信息课程名称: C语言程序设计所属系部:计算机系学时: 112授课对象:计算机专业高职学生课程性质:计算机各专业的专业基础课开发人员: 甘杜芬介颂园陈小海钟永全二、课程性质与作用(一)课程性质《C语言程序设计》课程是高职高专计算机类各专业的职业素质必修课,在专业人才培养方案中处于核心地位,对于培养学生结构化程序设计的思想和方法起重要作用。
旨在培养高职学生运用计算机逻辑思维的能力,掌握运用C语言编程来解决工作中实际问题的方法和步骤,为提高职业能力和拓展职业空间打下坚实基础.(二)课程作用使学生掌握C语言程序的基础知识和基本技能,树立结构化程序设计思想,养成良好的编程习惯,培养严谨务实的分析问题与解决问题的能力,并为后续的应用性课程和系统开发课程打好软件基础.三、课程设计的理念与思路(一)课程设计理念《C语言程序设计》是培养学生结构化程序设计思想的课程,是计算机类专业的基础.鉴于面向的是高职高专学生,本着以职业技能培养为主导,以培养能力和提高兴趣为目标,变应试为应用,重视在新形势下的新方法、新规则和新思想的传授,把程序设计领域最新、最有价值的思想和方法渗透到C语言中.着重培养学生无论以后再学习、工作中使用什么语言编程,都能灵活应用这些思想和方法的能力.(二)课程设计思路本课程针对一年级学生初次接触面向过程的程序设计概念的特点,结合C程序设计语言,通过列举大量的应用实例,初步系统地介绍面向过程、面向模块和结构化程序设计的思想和方法,教学过程中注重程序设计思路的灵活多变,力求锻炼学生的逻辑思维能力。
在此基础上,结合上机实践,使学生对程序设计有一个比较全面、系统的了解,为学生今后的学习打下扎实的理论基础。
课程的理论实践一体化教学过程全部安排在机房进行,教学中以学生为中心,教师全程负责传授知识、答疑解惑、指导项目设计、充分调动师生双方的积极性,实现教学目标。
四、课程目标本课程的总体目标:通过任务驱动的学习和综合实训,熟练掌握应用C语言程序设计的基本知识和技能,并树立结构化程序设计的基本思想,养成良好的编程习惯。
C语言程序设计教案 第九章 编译预处理

第九章编译预处理课题:第九章编译预处理教学目的:1、了解预处理的概念及特点2、掌握有参宏与无参宏的定义及使用,领会文件包含的使用及效果教学重点:教学难点:掌握宏的使用,文件包含有参宏与无参宏的使用步骤一复习引导ANSI C标准规定可以在C源程序中加入一些“预处理命令”,以改进程序设计环境,提高编程效率。
这些预处理命令是由ANSI C统一规定的,但它不是C语言本身的组成部分,不能直接对它们进行编译。
必须在对程序进行通常的编译之前,先对程序中这些特殊的命令进行“预处理”,即根据预处理命令对程序作相应的处理。
经过预处理后程序不再包括预处理命令了,最后再由编译程序对预处理后的源程序进行通常的编译处理,得到可供执行的目标代码。
步骤二讲授新课C语言与其他高级语言的一个重要区别是可以使用预处理命令和具有预处理的功能。
C 提供的预处理功能主要有以下三种:宏定义、文件包含、条件编译。
分别用宏定义命令、文件包含命令、条件编译命令来实现。
为了与一般C语句相区别,这些命令以符号“ #” 开头。
§9.1宏定义宏:代表一个字符串的标识符。
宏名:被定义为“宏”的标识符。
宏代换(展开):在编译预处理时,对程序中所有出现的“宏名”,用宏定义中的字符串去代换的过程。
一、不带参数的宏定义一般形式:#define 标识符字符串#define PI 3.1415926main(){ float l, s, r, v;printf( “input radius:” );scanf( “%f”, &r );l = 2.0*PI*r;s = PI*r*r;v = 3.0/4*PI*r*r*r;printf(“%10.4f,%10.4f,%10.4\n”, l, s, v);}例如:由键盘输入y值,求表达式:3(y2+3y)+ 4(y2+3y)+ y(y2+3y)#define M (y*y+3*y)main(){ int s, y;printf( “Input a number :”); scanf (“%d”,&y);s=3*M+4*M+y*M; p rintf(“s=%d\n”,s);}先宏展开:s=3*(y*y+3*y) +4*( y*y+3*y) + y*(y*y+3*y)再与源程序合并说明:⑴宏名一般用大写表示,以便与变量名区分。
C语言文件的编译到执行的四个阶段

C语言文件的编译到执行的四个阶段C语言程序的编译到执行过程可以分为四个主要阶段:预处理、编译、汇编和链接。
1.预处理:在这个阶段,编译器会执行预处理指令,将源代码中的宏定义、条件编译和包含其他文件等操作进行处理。
预处理器会根据源代码中的宏定义替换相应的标识符,并去除注释。
预处理器还会将包含的其他文件插入到主文件中,并递归处理这些文件。
处理后的代码被称为预处理后的代码。
2.编译:在这个阶段,编译器将预处理后的代码转换成汇编代码。
汇编代码是一种低级的代码,使用符号来表示机器指令。
编译器会对源代码进行词法分析、语法分析和语义分析,生成相应的中间代码。
中间代码是一种与特定硬件无关的代码表示形式,便于后续阶段的处理。
3.汇编:在这个阶段,汇编器将中间代码转化为机器可以执行的指令。
汇编器会将汇编代码翻译成二进制形式的机器指令,并生成一个目标文件。
目标文件包含了机器指令的二进制表示以及相关的符号信息。
4.链接:在C语言中,程序通常由多个源文件组成,每个源文件都经过了预处理、编译和汇编阶段得到目标文件。
链接器的作用就是将这些目标文件合并成一个可执行文件。
链接器会解析目标文件中的符号引用,找到其对应的定义并进行连接。
链接器还会处理库文件,将使用到的函数和变量的定义从库文件中提取出来并添加到目标文件中。
最终,链接器生成一个可以直接执行的可执行文件。
以上是C语言程序从编译到执行的四个阶段。
每个阶段都有特定的任务,并负责不同层次的代码转换和处理。
通过这四个阶段,C语言程序可以从源代码转换为机器能够执行的指令,并最终被计算机执行。
《C语言程序设计》课程标准

《C语言程序设计》课程标准一、课程说明《C语言程序设计》课程标准课程编码〔34856〕承担单位〔计算机信息学院〕制定〔〕制定日期〔2022年11月16日〕审核〔专业指导委员会〕审核日期〔2022年11月20日〕批准〔二级学院(部)院长〕批准日期〔2022年11月28日〕(1)课程性质:《C语言程序设计》课程是高职高专计算机类和电子信息类各专业的专业基础课和职业素质必修课,旨在培养高职学生计算机编程基本思想、编程基本技能及逻辑思维能力,掌握运用C语言编程来解决岗位工作中实际问题的方法和步骤,为提高职业能力和拓展职业空间打下坚实基础。
本课程是电子信息类专业公共平台课程。
(2)课程任务:主要针对软件设计,程序设计员等岗位开设,主要任务是培养学生在软件设计,程序设计员等岗位的编程和思维能力,要求学生掌握编写程序方面的基本技能。
(3)课程衔接:在课程设置上,前导课程有《计算机基础》课程,后续课程有《数据结构》、《Java程序设计》、《软件工程》等。
二、学习目标(一)总体目标通过本课程的教学,掌握C语言程序设计的基础知识和基本技能,树立结构化程序设计的基本思想,养成良好的编程习惯,培养严谨务实的分析问题与解决问题能力,并为后续的应用性课程和系统开发课程打好软件基础。
(二)具体目标➢方法能力目标:(1)学会思考问题,能够将理论与实际相结合。
(2)通过反复实践和练习,提高分析问题和解决问题的能力(3)培养学生独立获取知识和协作学习的能力,具备创新意识等。
➢社会能力目标(1)程序的编译、连接;(2)程序错误的排查;(3)C语言程序的调试;(4)解决实际问题的基本能力。
➢专业能力目标(1)职业能力目标①培养并加强学生自主探索学习和相互协作解决问题的意识。
②培养学生谦虚、好学的能力,勇于创新、敬业乐业的工作作风。
③培养学生解决实际应用问题的能力,能使用C语言开发一个小型管理系统(如:学生学籍管理系统)。
使学生了解C语言的发展及趋势,为后续学习进阶打下基础。
c语言的编译流程

c语言的编译流程C语言是一种高级编程语言,被广泛用于系统软件、游戏开发、嵌入式系统等领域。
在使用C语言进行编程时,需要将代码转换为可执行文件,这个过程称为编译。
本文将介绍C语言的编译流程,以及编译过程的主要步骤。
1. 预处理(Preprocessing):编译过程的第一步是预处理,它由预处理器(Preprocessor)执行。
预处理器主要完成以下任务:- 处理以“#”开头的预处理指令,例如#include、#define、#ifdef 等。
- 将所有的#include指令替换为相应的头文件的内容。
-进行宏替换,将程序中的宏定义展开。
- 词法分析(Lexical Analysis):将代码分解为一个个的单词,称为记号(Token)。
- 语法分析(Syntax Analysis):根据语法规则组织单词,并创建语法树(Syntax Tree)。
- 语义分析(Semantic Analysis):对语法树进行分析,检查语义错误,并生成中间代码。
3. 汇编(Assembly):编译器生成的中间代码是与特定平台无关的,需要通过汇编器(Assembler)将其转换为可执行文件。
汇编器主要完成以下任务:-将汇编代码转换为机器码指令。
-将符号名称解析为地址,生成可重定位代码。
4. 链接(Linking):在C语言编程中,通常会使用多个源文件,这些文件中的函数和变量可能相互引用。
链接器(Linker)的作用是将这些文件中的符号引用和定义进行匹配,生成最终的可执行文件。
链接器主要完成以下任务:- 符号解析(Symbol Resolution):将符号引用与符号定义进行匹配。
- 地址重定位(Address Relocation):将代码中的相对地址转换为绝对地址。
- 符号合并(Symbol Merging):将多个源文件中同名的符号进行合并,以解决重复定义的问题。
-生成可执行文件,包括代码段、数据段等。
5. 加载(Loading):加载器(Loader)是操作系统提供的一部分,它将可执行文件加载到内存中,并执行程序。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
磁盘
例1:定义文件指针
FILE *fp;
11
• C程序对文件的操作步骤
第一步:声明文件指针变量
第二步:打开文件 fopen
第三步:对文件进行读、写、定位 第四步:关闭文件 fclose(文件指针)
例1:打开文件 FILE *fp; fp= fopen (“c:\\Turboc2\\test.dat”,”r”);
– 仿照前面所讲的“复合赋值运算符”理解
位段(不做要求,自学)
2015-6-21 9
8.3 文件
• 文件概念
– 是存储在外部介质上数据的集合 – 是操作系统数据管理的单位
P331
• 文件分类
– 按文件的逻辑结构
• 记录文件:由具有一定结构的记录组成(定长和不定长) • 流式文件:由一个个字符(字节)数据顺序组成
第八章 编译预处理、位运算与 文件
本章课程共4学时 其中:授课2学时,上机2学时
8.1 编译预处理
• 三种预编译命令
– 宏定义 – 文件包含 – 条件编译 #define #include #if #undef #else
FP177
#endif
例1:不带参数的宏 #define YES 1 #define NO 0 #define PI 3.1415926 #define OUT printf(“Hello,World”); 例2:宏的展开 if(x==YES) else if (x==NO) 展开后: if(x==1) else if (x==0) printf(“correct!\n”); printf(“error!\n”); printf(“correct!\n”); printf(“error!\n”);
文件包含(略)
#include “file2.c” A
2015-6-21
条件编译(自学)
B B A file1.c
6
file2.c
file1.c
8.2 位运算
• “按位与”运算符 & (逻辑与 AND)
FP193
– 运算规则: 0&0=0;0&1=0;1&0=0;1&1=1;
例1 求3和5作AND运算的结果 3 = 0 0 0 0 0 0 5 = 0 0 0 0 0 1 (&) 0 0 0 0 0 0 1 0 0 1 1 1
例2 求43和90作AND运算的结果 43 = 0 0 1 0 1 0 90 = 0 1 0 1 1 0 (&) 0 0 0 0 0 0
2015-6-21
1 1
1 0
0
0
7Leabharlann 可以用于:(1)清零和(2) 取数中某些指定位
• “按位或”运算符 |
(逻辑和 OR)
– 运算规则: 0|0=0; 0|1=1; 1|0=1; 1|1=1; 例3 求49和15作OR运算的结果 49 = 0 0 1 1 0 0 0 1 0 0 0 0 1 1 1 (|) 0 0 1 1 1 1 1 可以用于:将某些指定位设置为1 15 = 1 1
4
例8:带参数的宏 #define S(a,b) a*b ……….. area=S(3,2); 宏展开: area=3*2;
例9:应该去掉不必要的空格 #define S (r) PI*r*r 相当于定义了不带参宏S,代表字符串 (r)
PI*r*r
2015-6-21
例10:应该在形数和宏体外加上合适的括号 #define POWER(x) x*x x=4; y=6; z=POWER(x+y); 宏展开:z=x+y*x+y; 一般写成: #define POWER(x) ((x)*(x)) 宏展开: z=((x+y)*(x+y));
2015-6-21
2
例3:宏的作用域 #define YES 1 YES原作用域 main() { …….. 例4:宏的展开不涉及字符串内的部分 } #define PI 3.14159 #undef YES printf(“2*PI=%f\n”,PI*2); #define YES 0 宏展开:printf(“2*PI=%f\n”,3.14159*2); max() YES新作用域 {……..} 例5:宏不可以嵌套 #define MAX MAX+10 ( )
2015-6-21
例6:宏需要适当的括号限制 #define WIDTH 80 #define LENGTH (WIDTH+40) var=LENGTH*2; 宏展开:var= (80+40) *2;
3
/*format.h*/ 例7:不带参宏定义的重要应用—简化输入输出
#define PR printf #define NL "\n" #define D "%D" #define D1 D NL #define D2 D D NL #define D3 D D D NL #define D4 D D D D NL #define S "%S" main() { int a,B,C,D; char string[]="CHINA"; a=1;B=2;C=3;D=4; PR(D1, a); PR(D2, a, B); PR(D3, a, B, C); PR(D4, a, B, C, D); PR(S, string); } 2015-6-21
文件打开方式 "r / rb" 只读 "w / wb" 只写 "a / ab" 追加 "r+ / rb+" 读写
正常打开,返回指向文件结构体的 指针; 打开失败,返回NULL 打开模式
含义 为输入打开一个文本/二进制文件 为输出打开或建立一个文本/二进制文件 向文本/二进制文件尾追加数据 为读/写打开一个文本/二进制文件
2015-6-21
13
5
例11:用宏定义和函数实现同样的功能 #define MAX(x,y) (x)>(y)?(x):(y) int max(int x,int y) ……. { return(x>y?x:y); main() } { int a,b,c,d,t; main() ……. { int a,b,c,d,t; t=MAX(a+b,c+d); ……. …… t=max(a+b,c+d); } ……… 宏展开:t=(a+b)>(c+d)?(a+b):(c+d); }
8
• “按位取反”运算符 ~(逻辑非 NOT)
– 运算规则: ~0=1; ~1=0; 1 0 0 1 1 0
例5 求025的逻辑非运算的结果 025 = 0 0 0 1 0 (~) 0352 1 1 1 0 1
• 左移运算符 << • 右移运算符 >> • 位运算赋值运算符
(自学) (自学) &=, |=, >>=, <<=, ^=
例3:从键盘按格式输入数据存到磁盘文件中去 #include <stdio.h> main() { char s[80],c[80]; int a,b; FILE *fp; if((fp=fopen("test","w"))==NULL) { puts("can't open file"); exit() ; } fscanf(stdin,"%s%d",s,&a);/*read from keaboard*/ fprintf(fp,"%s %d",s,a);/*write to file*/ fclose(fp); if((fp=fopen("test","r"))==NULL) { puts("can't open file"); exit(); } fscanf(fp,"%s%d",c,&b);/*read from file*/ fprintf(stdout,"%s %d",c,b);/*print to screen*/ fclose(fp); }
12
"w+ / wb+" 读写 为读/写建立一个文本/二进制文件 2015-6-21 "a+ / ab+" 读写 为读/写打开或建立一个文本/二进制文件
例2:文件格式化输入输出 fprintf( fp, “%d,%6.2f”, i, t ); //将i和t按%d,%6.2f格式输出到fp文件 fscanf( fp, “%d,%f”, &i, &t ); //若文件中有3,4.5 ,则将3送入i, 4.5送入t
#define PR printf #define NL "\n" #define D "%D" #define D1 D NL #define D2 D D NL #define D3 D D D NL #define D4 D D D D NL #define S "%S" /*file.c*/ #include “format.h” main() { int a,B,C,D; char string[]="CHINA"; a=1;B=2;C=3;D=4; PR(D1, a); PR(D2, a, B); PR(D3, a, B, C); PR(D4, a, B, C, D); PR(S, string); }
– 按存储介质
• 普通文件:存储介质文件(磁盘、磁带等) • 设备文件:非存储介质(键盘、显示器、打印机等)