期末复习-语言各章总结

时间:2019-05-15 10:17:57下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《期末复习-语言各章总结》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《期末复习-语言各章总结》。

第一篇:期末复习-语言各章总结

汇编语言学习笔记 《汇编语言》--王爽 前言

学习汇编目的:充分获得底层编程体验;深刻理解机器运行程序的机理。原则:没有通过监测点不要向下学习;没有完成当前实验不要向下学习。第一章 基础知识

有三类指令组成汇编语言:汇编指令;伪指令;其他符号。8bit = 1byte = 一个存储单元有n根地址线,则可以寻址2的n次方个内存单元。1.1节--1.10节 小结

(1)汇编指令是机器指令的助记符,同机器指令一一对应。(2)每一种cpu都有自己的汇编指令集。(3)cpu可以直接使用的信息在存储器中存放。

(4)在存储器中指令和数据没有任何区别,都是二进制信息。(5)存储单元从零开始顺序编号。

(6)一个存储单元可以存储8个bit,即八位二进制数。

(7)每一个cpu芯片都有许多管脚,这些管脚和总线相连。也可以说,这些管脚引出总线。一个cpu可以引出的三种总线的宽度标志了这个cpu不同方面的性能。地址总线的宽度决定了cpu的寻址能力;数据总线的宽度决定了cpu与其他器件进行数据传送时的一次数据传送量;控制总线的宽度决定了cpu对系统中其他器件的控制能力。监测点:1KB的存储器有1024个存储单元?存储单元的编号从0到1023.内存地址空间:

最终运行程序的是cpu,我们用汇编编程时,必须要从cpu的角度思考问题。对cpu来讲,系统中的所有存储器中的存储单元都处于一个统一的逻辑存储器中,它的容量受cpu寻址能力的限制。这个逻辑存储器即是我们所说的内存地址空间。第二章 寄存器(cpu的工作原理)mov ax, 2 add ax, ax add ax, ax add ax, ax(1)cpu中的相关部件提供两个16位的地址,一个称为段地址,另一个称为偏移地址;(2)段地址和偏移地址通过内部总线送人一个称为地址加法器的部件;(3)地址加法器将两个16位地址合成为一个20位的物理地址;(4)地址加法器通过内部总线将20位物理地址送人输入输出控制电路;(5)输入输出控制电路将20位物理地址送上地址总线;(6)20位物理地址被地址总线传送到存储器; 段地址*16+偏移地址 = 物理地址 的本质含义 内存并没有分段,段的划分来自cpu。

以后编程时可以根据需要,将若干地址连续的内存单元看做一个段,用段地址*16定位段的起始地址,用偏移地址定位段的内存单元。

一个段的起始地址一定是16的倍数,一个段的最大长度为64kB。当然也没有办法定义一个起始地址不是16的倍数的段。

cpu可以用不同的段地址和偏移地址形成同一物理地址。

在8086cpu加电启动或复位后cs和ip被设置为cs = f000h,ip = ffffh,即ffff0h单元中的指令是8086pc机开机后执行的第一条指令。(??应该是fffffh吧??)cpu将cs:ip指向的内存单元看做指令。

在cpu中,程序员能够用指令读写的部件只有寄存器,程序员可以通过改变寄存器中的内容实现对cpu的控制。

mov指令称为传送指令,cpu中大部分寄存器的值都可以通过mov指令改变。除了cs:ip 8086没给他这样的功能。cs:ip可以用转移指令来改变。jmp jmp cs:ip 用指令给出的段地址修改cs,偏移地址修改ip jmp 某一寄存器 的功能为:用寄存器中的值修改ip jmp ax 含义类似于mov ip,ax 段地址在8086pc机的段寄存器存放。当8086cpu要访问内存时,由段寄存器提供内存单元的段地址。8086cpu有四个段寄存器,其中cs用来存放指令的段地址。cs存放指令的段地址,ip存放指令的偏移地址。

8086机中,任意时刻,cpu将cs:ip指向的内容当作指令执行。8086cpu的工作过程:

1.从cs:ip指向内存单元读取指令,读取的指令进入指令缓冲器; 2.ip指向下一条指令 3.执行

8086提供转移指令修改cs:ip的内容 debug的使用

查看,修改cpu中寄存器的内容:r命令 查看内存中的命令:d命令

修改内存中的内容:e命令(可以写入数据,指令,在内存中,它们实际上没有区别)将内存中的命令解释为机器指令和相应的汇编指令:u命令 执行cs:ip指向的内存单元处的命令:t命令 以汇编指令的形式向内存中写入指令:a命令 第三章 寄存器(内存访问)3.1内存中字的存储

高八位存放在高字节中,低八位存放在低字节中 3.2DS和【address】 3.3字传送 3.4MOV ADD SUB 3.5数据段 3.6栈

栈是一种具有特殊的访问方式的存储空间。它的特殊性就在于,最后进入这个空间的数据,最先出去。

栈有两个基本的操作:入栈和出栈。

栈的这种操作规则被称为:lifo(last in first out,后进先出)。cpu如何知道10000H--1000fH这段空间被当作栈使用?

push pop指令在执行时必须知道哪个单元是栈顶单元,可是如何知道呢?

栈顶的段地址存放在ss中,偏移地址存放在sp中。任意时刻,ss:sp指向栈顶单元。push和pop指令执行时,cpu从ss和sp中得到栈顶的地址。入栈时,栈顶从高地址向低地址方向增长。如何定义一个栈的大小? mov ax, 1000h mov ss, ax mov sp, 0010h;则栈顶为1000f 栈底为 10000 ****************************************** mov ax, 1000h mov ds, ax mov ax, 2266h mov [0], ax ************************ mov ax,1000h mov ss, ax mov sp, 0002h mov ax, 2266h push ax 栈顶的变化范围最大为:0--ffffh 栈的综述

(1)8086cpu提供了栈操作机制,方案如下: 在ss、sp中存放栈顶的段地址和偏移地址;

提供入栈和出栈指令,他们根据ss、sp指示的地址,按照栈的方式访问内存单元。(2)push指令的执行步骤:1)sp=sp-2;2)向ss:sp指向的字单元送人数据;(3)pop指令的执行步骤:1)从ss:sp指向的字单元中读取数据;2)sp=sp+2(4)任意时刻,ss:sp指向栈顶元素。

(5)8086cpu只记录栈顶,栈空间的大小我们要自己管理。

(6)用栈来暂存以后需要恢复的寄存器的内容时,寄存器出栈的顺序要和入栈的顺序相反。(7)push、pop指令实质上是一种内存传送指令,注意他们的灵活运用。一个栈段最大可以设为64k 段的综述

我们可以将一段内存定义为一个段,用一个段地址指示段,用偏移地址访问段内的单元。这完全是我们的安排。用一个段存放代码,即代码段 用一个段存放数据,即数据段 用一个段当栈,即栈段

对于数据段,把段地址放在ds中,用mov,add,sub等访问内存单元的指令时,cpu就将我们定义的数据段内容当做数据来访问;

对于代码段,把段地址放在cs:ip中,用mov,add,sub等访问内存单元的指令时,cpu就将执行我们定义的代码段的指令;

对于栈段,把段地址放在ss:sp中,用push pop 等访问内存单元的指令时,cpu就将其当作堆栈来访问;

debug的t命令在执行修改器ss的指令时,下一条指令也紧接着被执行了。3.7栈超界问题

8086cpu不保证我们对栈的操作不会超界。也就是说,8086cpu只知道栈顶在何处而不知道我们安排的栈空间有多大,这点就好像,cpu只知道当前要执行的指令在何处,而不知道要执行的指令有多少。从这两点我们可以看出cpu的工作机理,它只考虑当前情况:当前的栈在何处,当前要执行的指令是哪一条。对于超界问题我们可以做到就是小心。第五章【bx】和loop指令

我们完整的描述一个内存单元,需要两种信息:(1)内存单元的地址;(2)内存单元存放数据的类型; inc bx的含义是bx中的内容加一

[bx]寄存器bx中所包含的地址中存放的内容 [bx]表示一个内存单元,他的偏移地址在bx中。loop指令执行的时候,要进行两步操作: 1;(cx)=(cx)-1;

2;判断cx中的值,不为零则转至标号处执行。

“通常”我们用loop实现循环功能,cx中存放循环次数。用cx和loop指令相配合实现循环功能的三个要点:(1)再cx中存放循环次数;

(2)loop指令中的标号所标识地址要在前面;

(3)要循环执行的程序段,要写在标号和loop指令的中间。在汇编源程序中,数据不能以字母开头。所以对于大于9fffh的数,均在前面加上0。mov cx,11 s: add ax,ax loop s assume cs:code code segment..mov ax,4c00h int 21h code ends end ffff:6单元是一个字节单元,ax是一个十六位寄存器,数据长度不一样,如何赋值? 注意我们说的是“赋值”,就是说,让ax中的数据的值(数据的大小)和ffff:0006单元中的数据的值(数据的大小)相等。八位数据01h和16位数据0001h的数据长度不一样,但他们的值是相等的。

设ffff:0006单元中的的数据是xxh,若要ax中的值和ffff:0006单元中的值相等,ax中的数据应为00xxh。所以,若实现ffff:0006单元向ax赋值,我们应该令(ah)=0,(al)=(ffff6H).若希望程序能从cs:0012处执行,可以用g命令。“g 0012”。他表示程序执行到0012处。

若希望程序能跳出循环,用p命令

5.4 debug和汇编编译器masm对指令的不同处理。

在汇编源程序中,mov al,[0]会被编译器解释成为:mov al,0 所以要这样表达:mov bx,0 mov al,[bx] 或者 mov al,ds:[0] 第一,我们在汇编源程序中,如果用指令访问一个内存单元,则在指令中必须用[...]来表示内存单元,如果在[]里用一个常量idata直接给出内存单元的偏移地址,就要在[]的前面显示地给出段地址所在的段寄存器。

第二,如果在[]里用寄存器,比如bx,间接给出内存单元的偏移地址,则段寄存器默认在ds中。

第六章 包含多个段的程序 程序取得所需段的方法有两种:

一是在加载程序的时候为程序分配,再就是程序在执行的过程中向系统申请。dw的含义是定义字型数据即define word 字型数据间以逗号隔开。

程序运行的时候cs存放代码段的段地址,所以我们可以从cs中得到它们的段地址。dw定义的数据处于代码段的最开始,所以偏移地址为零。dw 0123h,5604h,1234h start :指令 end start 我们在程序的第一条指令的前面加了一个标号start:并在end的后面再次加入。end除了通知编译器程序结束外,还可以通知编译器程序的入口在什么地方。在单任务系统中,可执行文件中的程序执行如下:

(1)由其他的程序(debug、command或其他程序)将可执行文件中的程序加载入内存;(2)设置cs:ip指向程序的第一条要执行的指令(即程序的入口),从而使程序得以运行;(3)程序运行结束后,返回到加载者; 描述信息

可执行文件由描述信息和程序组成,程序来源于源程序中的汇编指令和定义的数据;描述信息则主要是编译连接程序对原程序中相关伪指令进行处理所得到的信息。6.2 在代码中使用栈

在程序中通过定义数据来取得一段空间,然后将这段空间当作栈空间来使用。

例如将cs:16--cs:31的内存空间当作栈来用,初始状态下栈为空,所以ss:sp要指向栈底,则设置ss:sp指向cs:32.6.3将数据代码栈放入不同的段

用assume将定义的具有一定用途的段跟寄存器联系起来 第七章 更灵活的定位内存地址的方法 7.1 and 和 or 指令(1)and指令:逻辑与指令,按位进行与运算。mov al ,01100011B and al ,00111011B 执行后:al=00100011B 通过该运算可将操作对象的相应位设为0,其他位不变。(2)or指令:逻辑或指令,按位进行或运算。

通过该运算可将操作对象的相应位设为1,其他位不变。7.2 关于ASCII码

所谓编码方案,就是一套规则,它约定了用什么样的信息来表示现实对象。小写字母的ASCII码值,比大写字母的ASCII码值大20H。

就ASCII码的二进制形式来看,除第五位外,大写字母和小写字母的ASCII码值都一样。大写字母第五位为0,小写字母第五位为1.运用and和or指令的给特定位赋值功能即可实现大小写字母之间的转换。7.5 [bx+idata] 类似于[bx]的一种更灵活的指明内存单元的方式。

[bx+idata]表示一个内存单元,它的偏移地址为(bx)+idata(bx中的数值加上idata。也可以写成 mov ax,[200+bx] mov ax,200[bx] mov ax,[bx].200 7.6 用[bx+idata]的方式进行数组的处理 7.7 SI和DI SI和DI是8086cpu中和bx功能相近的寄存器。区别是SI和DI不能够分成两个八位寄存器来使用。codesg segment start: mov ax,datasg mov ds,ax mov si,0 mov di,16 mov cx,8;di si 为16位寄存器只需循环 s: mov ax,[si] mov [di],ax;八次即可将16个字节传送完毕 add si,2 add di,2 loop s

mov ax,4c00h int 21h codesg ends end start si = dijmp指令后的第一个字节的地址(2)short指明此处的位移为八位位移。(3)八位位移的范围为-128 127,用补码表示;(4)八位位移由编译程序在编译时算出。

还有一种jmp near ptr 标号 实现段内近转移(ip)=(ip)+16位位移(1)16位位移 = “标号”处的地址1(DI)=(DI)-1 MOVSW 可以传送一个字

MOVSB和MOVSW进行的是串传送操作中的一个步骤,一般都要和rep配合使用,格式如下: rep movsb 相当于: s:movsb loop s rep的作用是根据cx的值,重复执行后面的串传送指令。8086cpu提供了下面两条指令对DF位进行设置: CLD:将DF位置0 STD:将DF位置1 1.传送的原始地址 2.传送的目的地址 3.传送的长度 4.传送的方向 11.11 pushf和popf 压入/弹出标志寄存器中的数据 为访问标志寄存器提供了一种方法。11.12 标志寄存器在DEBUG中的表示 第十二章 内中断 12.1 内中断的产生

cpu内部发生下面情况时,将产生相应的中断信息:

(1)除法错误(2)单步执行(3)执行int0命令(4)执行int命令 中断类型码0 1 4 n 为一个字节型数据 12.2 中断处理程序

cpu如何通过八位的中断类型码得到中断处理程序的段地址和偏移地址? 12.3 中断向量表 答:通过中断向量表

中断向量表就是中断处理程序入口地址的列表。保存在内存中。cpu如何找到中断向量表?

对于8086中断向量表指定存在内存地址0处。从0000:0000到0000:03e8单元。共1000个字节。中断向量表中一个表项存放一个中断向量,占两个字。分别存放段地址和偏移地址。12.4 中断过程

(1)从中断信息中取得中断类型码(2)标志寄存器的值入栈

(3)设置标志寄存器的第八位TF和第九位IF的值为0(4)CS的内容入栈(5)IP的值入栈

(6)从内存地址为中断类型码*4和中断类型码*4 + 2 的两个字单元中读取中断处理程序的入口地址设置IP和CS 12.5 中断处理程序(1)保存用到的寄存器(2)处理中断。(3)恢复用到的寄存器(4)用IRET指令返回。12.6 除法错误中断的处理 12.7 编程处理0号中断 12.8 安装 第十三章 int指令 13.1 int指令

int指令的最终功能和call指令相似,都是调用一段程序。13.2 编写供应用程序调用的中断例程

编写、安装中断7ch的中断例程,功能:求一word型数据的平方。(AX)= 要计算的数据。

DX,AX存放结果的高十六位和低十六位。MOV WORD PTR ES:[7CH*4],200H MOV WORD PTR ES:[7CH*4+2],0 MOV CX,OFFSET SQREND-OFFSET SQR CLD REP MOVSB int指令和iret指令配合使用与call指令和ret指令配合使用具有相似的思路。13.3 对int、iret和栈的深入理解 ********************************* 13.4 BIOS和DOS所提供的中断例程 BIOS主要包含以下内容:

1、硬件系统的检测和初始化程序

2、外部中断和内部中断的中断例程

3、用于对硬件设备进行I/O操作的中断例程

4、其他和硬件系统相关的中断例程 13.5 BIOS和DOS中断例程的安装过程

1.开机后,cpu一加点,初始化(cs)= 0FFFFH,(IP)= 0,自动从FFFF:0单元开始执行程序。FFFF:0处有一条跳转指令,cpu执行该程序后,转去执行BIOS中的硬件检测和初始化程序。

2.初始化程序将建立BIOS所支持的中断向量,即将BIOS提供的中断例程的入口登记在中断向量表中。注意,对于BIOS所提供的中断例程,只需将入口地址登记在中断向量表中即可,因为它们是固化到ROM中的内容,一直在内存中存在。

3.硬件系统检测和初始化完成后,调用int 19h进行操作系统的引导。从此将计算机交给操作系统控制。

4.DOS启动后,除完成其他工作外,还将它提供的中断例程装入内存,并建立相应的中断向量。

13.6 BIOS中断例程应用

int 10h 中断例程是BIOS提供的中断例程,其中包含多个和屏幕输出有关的子程序。一个供程序员调用的中断例程往往包含多个子程序,中断例程内部用传递进来的参数来决定执行那一个子程序。BIOS和DOS提供的中断例程,都用AH来传递内部参数 13.7 DOS中断例程应用

例如 我们一直在使用的4ch号子程序,即程序返回功能。mov ah 4ch mov al 0 int 21h ========================== DOS功能调用 int 21h(1)键盘输入 1)1号调用——从键盘输入单个字符 调用格式: MOV AH,1 INT 21H 功能: 等待从键盘输入一个字符并送入AL。

执行时系统将扫描键盘,等待有健按下,一旦有健按下,就将其字符的ASCII码读

入,先检查是否Ctrl-Break,若是,退出命令执行;否则将ASCII码送AL,同时将

该字符送显示器显示。2)10号调用——从键盘输入字符串

功能: 从键盘接收字符串送入内存的输入缓冲区,同时送显示器显示。调用前要求: 先定义一个输入缓冲区

MAXLEN DB 100 ;第1个字节指出缓冲区能容纳的字符个数,即缓冲区长度,不能为0 ACLEN DB ? ;第2个字节保留,以存放实际输入的字符个数 STRING DB 100 DUP(?);第3个字节开始存放从键盘输入的字符串。

调用格式: LEA DX,MAXLEN(缓冲区首偏移地址)MOV AH,10 INT 21H(2)显示输出

1)2号调用——在显示器上显示输出单个字符 调用格式: MOV DL,待显示字符的ASCII码 MOV AH,2 INT 21H 功能:将DL中的字符送显示器显示。【例】显示输出大写字母A MOV DL,41H ;或写为 MOV DL,'A' MOV AH,2 INT 21H 2)9号调用——在显示器上显示输出字符串 调用格式: LEA DX,字符串首偏移地址 MOV AH,9 INT 21H 功能:将当前数据区中DS:DX所指向的以'$'结尾的字符串送显示器显示。【例】在显示器上显示字符串“YOU ARE SUCESSFUL!” DATA SEGMENT STRING DB ' YOU ARE SUCESSFUL!$ ' DATA ENDS CODE SEGMENT „ „ MOV AX,DATA MOV DS,AX LEA DX,STRING MOV AH,9 INT 21H „ „ CODE ENDS 说明:若希望显示字符串后,光标可自动回车换行,可在定义字符串时作如下更改: STRING DB ' YOU ARE SUCESSFUL!',0AH,0DH,' $ ' ;在字符串结束前加回车换行的ASCII码0AH,0DH

第二篇:C语言 各章知识点总结

总体上必须清楚的:

2)读程序都要从main()入口, 然后从最上面顺序往下读(碰到循环做循环,碰到选择做选择)。

4)bit是位 是指为0 或者1。byte 是指字节, 一个字节 = 八个位.5)一定要记住 二进制 如何划成 十进制。概念常考到的:

1、编译预处理不是C语言的一部分,不再运行时间。C语言编译的程序称为源程序,它以ASCII数值存放在文本文件中。2、每个C语言程序中main函数是有且只有一个。3、在函数中不可以再定义函数。

4、算法一定要有输出的,但可以没有输入。5、break可用于循环结构和switch语句。6、逗号运算符的级别最低。第一章

1)合法的用户标识符考查:

合法的要求是由字母,数字,下划线组成。有其它元素就错了。并且第一个必须为字母或则是下划线。第一个为数字就错了。

关键字不可以作为用户标识符号。main define scanf printf 都不是关键字。迷惑你的地方If是可以做为用户标识符。因为If中的第一个字母大写了,所以不是关键字。

关键字有:

auto break case char const continue default do double else enum extern float for goto if int long register return short signed static sizeof struct switch typedef union unsigned void volatile while auto :声明自动变量

double :声明双精度变量或函数

int: 声明整型变量或函数

struct:声明结构体变量或函数 break:跳出当前循环

else :条件语句否定分支(与 if 连用)long :声明长整型变量或函数 switch :用于开关语句 case:开关语句分支 enum :声明枚举类型

register:声明寄存器变量

typedef:用以给数据类型取别名 char :声明字符型变量或函数

extern:声明变量是在其他文件正声明

return :子程序返回语句(可以带参数,也可不带参数)union:声明共用数据类型 const :声明只读变量

float:声明浮点型变量或函数 short :声明短整型变量或函数

unsigned:声明无符号类型变量或函数

continue:结束当前循环,开始下一轮循环 for:一种循环语句

signed:声明有符号类型变量或函数

void :声明函数无返回值或无参数,声明无类型指针 default:开关语句中的“其他”分支 goto:无条件跳转语句

sizeof:计算数据类型长度

volatile:说明变量在程序执行中可被隐含地改变 do :循环语句的循环体

while :循环语句的循环条件

static :声明静态变量

if:条件语句

2)实型数据的合法形式:

2.333e-1 就是合法的,且数据是2.333×10-1。考试口诀:e前e后必有数,e后必为整数。.3)字符数据的合法形式::

'1' 是字符占一个字节,“1”是字符串占两个字节(含有一个结束符号)。'0' 的ASCII数值表示为48,'a' 的ASCII数值是97,'A'的ASCII数值是65。

4)整型一般是两个字节, 字符型是一个字节,双精度一般是4个字节:

考试时候一般会说,在16位编译系统,或者是32位系统。碰到这种情况,不要去管,一样做题。掌握整型一般是两个字节, 字符型是一个字节,双精度一般是4个字节就可以了。5)转义字符的考查:

在程序中 int a = 0x6d,是把一个十六进制的数给变量a 注意这里的0x必须存在。

在程序中 int a = 065, 是一个八进制的形式。

6)算术运算符号的优先级别:

同级别的有的是从左到右,有的是从右到左。7)强制类型转换:

一定是(int)a 不是 int(a),注意类型上一定有括号的。

注意(int)(a+b)和(int)a+b 的区别。前是把a+b转型,后是把a转型再加b。8)表达式的考查:

是表达式就一定有数值。

赋值表达式:表达式数值是最左边的数值,a=b=5;该表达式为5,常量不可以赋值。

自加、自减表达式:假设a=5,++a(是为6),a++(为5);

运行的机理:++a 是先把变量的数值加上1,然后把得到的数值放到变量a中,然后再用这

个++a表达式的数值为6,而a++是先用该表达式的数值为5,然后再把a的数值加上1为6,再放到变量a中。进行了++a和a++后在下面的程序中再用到a的话都是变量a中的6了。考试口诀:++在前先加后用,++在后先用后加。

逗号表达式:优先级别最低 ;表达式的数值逗号最右边的那个表达式的数值。(2,3,4)的表达式的数值就是4。9)位运算的考查:

会有一到二题考试题目。

总的处理方法:几乎所有的位运算的题目都要按这个流程来处理(先把十进制变成二进制再变成十进制)。

一定要记住,在没有舍去数据的时候,<<左移一位表示乘以2;>>右移一位表示除以2。

10)018的数值是非法的,八进制是没有8的,逢8进1。

11)%符号两边要求是整数。不是整数就错了。12)两种取整丢小数的情况:

1、int a =1.6;

2、(int)a;

第二章 1)printf函数的格式考查:

%d对应整型;%c对应字符;%f对应单精度等等。宽度的,左对齐等修饰。-

%ld对应 long int;%lf 对应double。2)scanf函数的格式考察:

注意该函数的第二个部分是&a 这样的地址,不是a;

Scanf(“%d%d%*d%d”,&a,&b,&c);跳过输入的第三个数据。3)putchar ,getchar 函数的考查: char a = getchar()是没有参数的,从键盘得到你输入的一个字符给变量a。

putchar(‘y’)把字符y输出到屏幕中。

5)如何实现保留三位小数,第四位四舍五入的程序,(要求背下来)

这个有推广的意义,注意 x =(int)x 这样是把小数部分 去掉。

第三章

特别要注意:c语言中是用非0表示逻辑真的,用0表示逻辑假的。1)关系表达式:

表达式的数值只能为1(表示为真),或0(表示假)

当关系的表达是为真的时候得到1。如 9>8这个是真的,所以表达式的数值就是1; 2)逻辑表达式:

只能为1(表示为真),或0(表示假)a)共有&& ||!三种逻辑运算符号。b)!>&&>|| 优先的级别。

c)注意短路现象。考试比较喜欢考到。

(表达式1)&&(表达式2)如果表达式1为假,则表达式2不会进行运算,即表达式2“被短路”

(表达式1)||(表达式2)如果表达式1为真,则表达式2不会进行运算,即表达式2“被短路”

3)if 语句

else 是与最接近的if且没有else的相组合的。4)条件表达式: 表达式1 ?表达式2 :表达式3 5)switch语句:

a)一定要注意 有break 和没有break的差别,书上(34页)的两个例子,没有break时候,只要有一个case匹配了,剩下的都要执行,有break则是直接跳出了swiche语句。

b)switch只可以和break一起用,不可以和continue用。

第四章 1)三种循环结构:

a)for(); while();do-while()三种。b)for循环当中必须是两个分号,千万不要忘记。

c)写程序的时候一定要注意,循环一定要有结束的条件,否则成了死循环。-

d)do-while()循环的最后一个while();的分号一定不能够丢。(当心上机改错)

2)break 和 continue的差别

记忆方法:

break:是打破的意思,(破了整个循环)所以看见break就退出真个一层循环。-

continue:是继续的意思,(继续循环运算),但是要结束本次循环,就是循环体内剩下的语句不再执行,跳到循环开始,然后判断循环条件,进行新一轮的循环。3)嵌套循环

就是有循环里面还有循环,这种比较复杂,要一层一层一步一步耐心的计算,一般记住两层是处理二维数组的。

4)while((c=getchar())!=’n’)和 while(c=getchar()!=’n’)的差别

先看a = 3!= 2 和(a=3)!=2 的区别:(!= 号的级别高于 = 号 所以第一个先计算 3!=2)第一个a的数值是得到的1;第二个a的数值是3。考试注意点: 括号在这里的重要性。

第五章

函数:是具有一定功能的一个程序块; 2)一定要注意参数之间的传递

实参和形参之间 传数值,和传地址的差别。(考试的重点)

传数值的话,形参的变化不会改变实参的变化。

传地址的话,形参的变化就会有可能改变实参的变化。3)函数声明的考查:

一定要有:函数名,函数的返回类型,函数的参数类型。不一定要有:形参的名称。

第六章

*p++ 和(*p)++的之间的差别:改错题目中很重要 *p++是 地址会变化。

(*p)++ 是数值会要变化。

三名主义:(考试的重点)

数组名:表示第一个元素的地址。数组名不可以自加,他是地址常量名。了很多次)

函数名:表示该函数的入口地址。

字符串常量名:表示第一个字符的地址。

(考第七章

1一维数组的重要概念: 对a[10]这个数组的讨论。

1、a表示数组名,是第一个元素的地址。

2、a是地址常量,所以只要出现a++,或者是a=a+2赋值的都是错误的。3、a是一维数组名,所以它是列指针,也就是说a+1是跳一列。

对a[3][3]的讨论。

1、a表示数组名,是第一个元素的地址。

2、a是地址常量,所以只要出现a++,或者是a=a+2赋值的都是错误的。3、a是二维数组名,所以它是行指针,也就是说a+1是跳一行。

4、a[0]、a[1]、a[2]也都是地址常量,不可以对它进行赋值操作,同时它们都是列指针,a[0]+1,a[1]+1,a[2]+1都是跳一列。

5、注意a和a[0]、a[1]、a[2]是不同的,它们的基类型是不同的。前者是一行元素,后三者是一列元素。二维数组做题目的技巧:

如果有a[3][3]={1,2,3,4,5,6,7,8,9}这样的题目。

步骤一:把他们写成:

第一列 第二列 第三列

a[0] 1 2 3 ->第一行 a[1] 4 5 6 —>第二行 a[2] 7 8 9 ->第三行 步骤二:这样作题目间很简单:

*(a[0]+1)我们就知道是第一行的第一个元素往后面跳一列,那么这里就是a[0][1]元素,所以是2。

*(a[1]+2)我们就知道是第二行的第一个元素往后面跳二列。那么这里就是a[1][2]元素,所以是6。一定记住:只要是二维数组的题目,一定是写成如上的格式,再去做题目,这样会比较简单。

数组的初始化,一维和二维的,一维可以不写,二维第二个一定要写

int a[]={1,2} 合法。int a[][4]={2,3,4}合法。但int a[4][]={2,3,4}非法。二维数组中的行指针 int a[1][2];

其中a现在就是一个行指针,a+1跳一行数组元素。搭配(*)p[2]指针 a[0],a[1]现在就是一个列指针。a[0]+1 跳一个数组元素。搭配*p[2]指针数组使用 无条件等价:

a[2]等价于*(a+2)a[2][3]等价于*(a+2)[3]等价于*(*(a+2)+3)这个思想很重要!

第三篇:c语言期末复习

谁能出线

电视台举办“超级学生”才艺大赛,由于报名人数狂多,所以要先进行分组预赛。按规定,每10名学生为一个预赛小组,评委打出分数(0~100分),各小组第一名可以进入下一轮;如果有多名学生得分相同都是第一名,则可同时进入下一轮。

1.#include 2.#include 3.int main()4.{ 5.int a[10],i,max=0;6.for(i=0;i<10;i++)7.{ 8.scanf(“%d”,&a[i]);9.if(a[i]>max)10.{ 11.max=a[i];12.} 13.} 14.for(i=0;i<10;i++)15.{ 16.if(a[i]>=max)17.{ 18.printf(“%dn”,i);19.} 20.} 21.return 0;22.} 统计素数的个数

求出 2 到 m 之间(含 m,m<=1000)所有素数并放在数组 a 中。输入:正整数m 输出:从小到大的所有素数,及个数(素数输出的时候用%4d来控制)

1.#include 2.int main()3.{ 4.int a[1000],m,i=0,j,n,cnt;5.scanf(“%d”,&m);6.for(n=2;n<=m;n++)7.{ 8.a[i]=n;

9.i=i+1;10.}

11.cnt=0;

12.for(i=0;i

14.j=2;

15.while(a[i]%j!=0)16.{

17.j++;18.}

19.if(j==a[i])20.{

21.printf(“%4d”,j);22.cnt=cnt+1;23.} 24.25.}printf(“n”);26.printf(“%d”,cnt);27.printf(“n”);28.return 0;29.}

1.#include 2.int main()3.{

4.int a[10],i,j,n;5.for(i=0;i<10;i++)6.{

7.scanf(“%d”,&a[i]);8.}

9.for(j=0;j<10;j++)10.{ 11.12.for(i=0;i<9;i++)13.{

14.if(a[i+1]

16.n=a[i+1];17.a[i+1]=a[i];18.a[i]=n;19.} 20.} 21.} 22.23.for(i=0;i<10;i++)24.{

25.printf(“ %d”,a[i]);

冒泡法排序26.} 27.printf(“n”);28.return 0;29.} 插入法排序

1.#include 2.int main()3.{ 4.int a[11],i,n,m,j;5.for(i=0;i<10;i++)6.{ 7.scanf(“%d”,&a[i]);8.} 9.scanf(“%d”,&n);10.for(j=0;j<11;j++)11.{ 12.for(i=0;i<10;i++)13.{ 14.if(n

1.#include 2.#define N 10 3.int main()4.{ 5.int n,a[N],i=0,k=0,t,m=0,j;6.scanf(“%d”,&n);

7.do 8.{

9.a[i]=n%10;10.n=n/10;11.i++;12.k++;

13.}while(n!=0);

14.for(j=0;j

16.for(i=0;i

18.if(a[i+1]>a[i])19.{

20.m=a[i+1];21.a[i+1]=a[i];22.a[i]=m;23.} 24.} 25.}

26.for(i=0;i

28.printf(“%d”,a[i]);29.}

30.printf(“n”);31.return 0;32.}

数组逆序输出

1.#include 2.int main()3.{

4.int a[10],i,j,t;5.for(i=0;i<10;i++)6.{

7.scanf(“%d”,&a[i]);8.} 9.i=0;10.j=9;

11.while(i

13.t=a[i];14.a[i]=a[j];15.a[j]=t;16.i++;17.j--;18.}

19.for(i=0;i<10;i++)20.{ 21.printf(“%d ”,a[i]);22.} 23.printf(“n”);24.return 0;25.} 求最大值

1.#include 2.int main()3.{ 4.int a[10],i,max;5.for(i=0;i<10;i++)6.{ 7.scanf(“%d”,&a[i]);8.} 9.max=a[0];10.for(i=0;i<10;i++)11.{ 12.if(max

程序定义了 4× 4 的二维数组,请编写程序,给二维数组赋值,并使数组下半三角元素中的值乘以n。例如:

数组中的值为

假设n为10,则输出结果如下:(输出的数按照4位宽度来输出,即%4d)

1.#include 2.int main()3.{

4.int a[4][4],i,j,n;5.for(i=0;i<4;i++)6.{

7.for(j=0;j<4;j++)8.{

9.scanf(“%d”,&a[i][j]);10.} 11.}

12.scanf(“%d”,&n);13.for(i=0;i<4;i++)14.{

15.for(j=0;j<=i;j++)16.{

17.a[i][j]=n*(a[i][j]);18.} 19.}

20.for(i=0;i<4;i++)21.{

22.for(j=0;j<4;j++)23.{

24.printf(“%4d”,a[i][j]);25.}

26.printf(“n”);27.}

28.return 0;29.}

在屏幕上显示杨辉三角形

1.#include 2.#define N 100 3.#define M 100 4.int main()5.{

6.int a[N][M],i,j,n;7.scanf(“%d”,&n);8.for(i=0;i

10.j=i;

11.a[i][0]=1;12.a[i][j]=1;13.} 14.for(i=2;i

1.#include 2.#define N 10 3.#define M 10 4.int main()5.{ 6.int a[N][M],n,i,j,m;7.scanf(“%d”,&n);8.for(i=0;i

28.printf(“ %d”,a[i][j]);

29.} printf(“n”);30.}

31.return 0;32.}

给数组中的元素按顺序编号

对数组 a[10] 中的十个整数从小到大进行连续编号,输出各个元素的编号。要求不能改变数组 a 中元素的顺序,且相同的整数要具有相同的编号。例如数组是: A=(5,3,4,7,3,5,6,8,9,10)则输出为:(4,1,3,7,1,4,6,8,9,10)

1.#include 2.int main()3.{

4.int a[10],b[10],i,j,t;5.for(i=0;i<10;i++)6.{

7.scanf(“%d”,&a[i]);8.}

9.for(i=0;i<10;i++)10.{

11.b[i]=a[i];12.}

13.for(i=0;i<9;i++)14.{

15.for(j=i+1;j<10;j++)16.{

17.if(a[i]>a[j])18.{

19.t=a[i];20.a[i]=a[j];21.a[j]=t;22.} 23.} 24.}

25.for(j=0;j<10;j++)26.{

27.for(i=0;i<10;i++)28.{

29.if(b[j]==a[i])30.{

31.printf(“%3d”,i+1);brea

k;

32.} 33.}

34.}printf(“n”);35.return 0;36.} 字符转换

描述

提取一个字符串中的所有数字字符(‘0’...‘9’)将其转换为一个整数输出。输入

一个以回车符为结束标志的字符串(少于80个字符)。输出

把字符串中的所有数字字符(‘0’...‘9’)转换为一个整数并输出。

1.#include 2.#define N 80 3.int main()4.{ 5.char a[N];6.int j;7.scanf(“%s”,a);8.for(j=0;a[j]!='';j++)9.{ 10.if((a[j]<='9')&&(a[j]>='0'))

11.{ 12.printf(“%c”,a[j]);13.} 14.} 15.printf(“n”);16.return 0;17.} 合并字符串

输入:

两个已经排好顺序(升序)的字符串

输出:

一个合并在一起的有序(升序)的字符串

要求:

设计一个效率尽量高的算法,对每个字符串只扫描一遍就可以了。

如果采用先进行串连接,然后再进行排序的算法,则效率太低了。

1.#include 2.#include 3.#define N 20 4.#define M 10 5.int main()6.{

7.char a[N],b[M];8.int i,j,t,n;9.gets(a);10.gets(b);11.strcat(a,b);12.n=strlen(a);

13.for(i=0;i

15.for(j=i+1;j

17.if(a[i]>=a[j])18.{

19.t=a[i];20.a[i]=a[j];21.a[j]=t;22.} 23.} 24.}

25.puts(a);26.return 0;27.}

删除重复字符

1.#include 2.int main()3.{

4.char a[100],b[100];5.int i,j,n=0;6.gets(a);7.b[0]=a[0];

8.for(i=0;a[i]!='';i++)9.{ 10.j=0;11.for(j=0;j<=n;j++)12.{ 13.if(a[i]==b[j])14.{ 15.break;16.} 17.} 18.if(a[i]!=b[j])19.{ 20.n++;21.b[n]=a[i];22.} 23.} 24.b[n+1]='';25.puts(b);26.return 0;27.} 删除字符串中指定字符

1.#include 2.int main()3.{ 4.char a[15],b[4],c[10];5.int i,j,n=0;6.gets(a);7.gets(b);8.for(i=0;a[i]!='';i++)9.{ 10.j=0;11.for(j=0;j<3;j++)12.{ 13.if(a[i]==b[j])break;14.15.} 16.if(a[i]!=b[j])17.{ 18.c[n]=a[i];19.n++;20.} 21.22.} 23.c[n]='';24.puts(c);25.return 0;26.}

在指定位置插入字符串

1.#include 2.#include 3.int main()4.{

5.char a[20],b[5],ch,c[10];6.int i,j,k,n;

7.gets(a);gets(b);8.scanf(“%c”,&ch);9.n=strlen(b);

10.for(i=0;a[i]!='';i++)11.{

12.if(ch==a[i])break;13.} 14.k=0;

15.for(j=i;a[j]!='';j++)16.{

17.c[k]=a[j];18.k++;19.}

20.c[k]='';

21.for(j=0;j

23.printf(“%c”,a[j]);24.}

25.printf(“%s”,b);26.printf(“%sn”,c);27.return 0;28.}

数的合并

1.int fun(int a,int b)2.{

3.int c;

4.c=a/10*10+a%10*1000+b/10+b%10*100

;

5.return c;6.}

7.int main()8.{

9.int a,b,c;

10.scanf(“%d%d”,&a,&b);11.c=fun(a,b);

12.printf(“c=%dn”,c);13.return 0;14.} 素数的判断

1.int fun(int a)2.{ 3.int i;4.for(i=2;i

请编写函数fun,它的功能是计算下列级数和,值由函数值返回。

例如,当n=10,x=0.3时,函数值为1.349859。请勿改动主函数main,仅在函数fun的花括号中填入所编写的若干语句。

1.#include 2.double fun(double a,int b)3.{ 4.int i,m=1;5.double z,S=1;6.for(i=1;i<=b;i++)7.{ 8.m=m*i;9.z=pow(a,i);

10.S=S+z/m;11.}

12.return S;13.}

14.int main()15.{

16.double x;17.int n;

18.scanf(“%lf%d”,&x,&n);19.printf(“%lfn”,fun(x,n));20.return 0;21.}

求大于m且紧靠m的k个素数

1.int fun(int m,int n,int zz[1000])2.{

3.int i,j,cnt=0,k=0;4.for(i=m+1;i<1000;i++)5.{

6.for(j=2;j

8.if(i%j==0)9.break;10.}

11.if(j==m+1)12.{

13.cnt++;14.zz[k]=i;15.k++;

16.if(cnt==n)17.{

18.return zz[m];19.} 20.} 21.} 22.}

23.int main()24.{

25.int m,n,zz[1000];26.scanf(“%d%d”,&m,&n);27.fun(m,n,zz);

28.for(m=0;m

29.printf(“%6d”,zz[m]);30.printf(“n”);31.return 0;32.}

删除指定字符 请编写函数fun,其功能是:从字符串中删除指定的字符。同一字母的大、小写按照不同的字符处理。1.#include 2.char fun(char str[80],char ch)3.{ 4.int i,j=0;5.char a[80];6.for(i=0;str[i]!='';i++)7.{ 8.if(str[i]!=ch)9.{ 10.a[j]=str[i];11.j++;12.} 13.} 14.a[j]='';15.strcpy(str,a);16.return str[j];17.} 18.int main()19.{ 20.char str[80];21.char ch;22.23.gets(str);24.scanf(“%c”,&ch);25.fun(str,ch);26.printf(“%sn”,str);27.return 0;28.} 递归

求整数 n 到 m 区间的累加和,其中n<=m。输入:

区间的起始点n 区间的终止点m 输出:

累加和

1.int fun(int a,int b)2.{ 3.int h;4.h=a;5.if(a==b)6.{ 7.h=a;8.} 9.else if(a

11.h=b+fun(a,b-1);12.} 13.14.return h;15.}

16.int main()17.{

18.int m,n,s;

19.scanf(“%d%d”,&n,&m);20.s=fun(n,m);

21.printf(“%dn”,s);22.return 0;23.}

求最大公约数——递归

请使用递归算法计算正整数n和m的最大公约数GCD(n,m)。

1.#include 2.int GCD(int n,int m)3.{

4.if((m<=n)&&(n%m==0))5.{

6.return m;7.}

8.else if(n

10.return GCD(m,n);11.} 12.else 13.{

14.return GCD(m,n%m);15.} 16.}

17.int main()18.{

19.int a,b;

20.scanf(“%d%d”,&a,&b);21.printf(“%dn”,GCD(a,b));22.return 0;23.}

求数列的第N项

已知整数数列第一项和第二项是1,该数列从第三项开始,如果该项是奇数项,则它是前两项之和,如果该项是偶数项,则它是前两项之差,即:  f(n)= 1 当 n = 1 或 2 时, f(n)= f(n-1)-f(n-2)当n是偶数时, f(n)= f(n-1)+ f(n-2)当n是奇数时,编写一个递归函数,求数列的第N项。

1.#include 2.int f(int n)3.{ 4.int m;5.if(n<=2)6.{ 7.return 1;8.} 9.else 10.{ 11.if(n%2==0)12.{ 13.return m=f(n-1)-f(n-2);

14.} 15.else 16.{ 17.return m=f(n-1)+f(n-2);

18.} 19.} 20.} 21.int main()22.{ 23.int n;24.scanf(“%d”,&n);25.printf(“%dn”,f(n));26.return 0;27.} 偶数分解

编写程序,输入若干个大于2的正整数,如果是偶数,则将其分解为两个素数并输出;如果输入的奇

数,则输出“××× is odd number!” ;输入为0时程序结束。只有1和它本身这两个因数的自然数叫做素数,0和1既不是素数也不是和数。实现分解的过程用函数实现。输入:整数序列,0

输出:偶数1 = 素数A + 素数B(当输入是偶数时)奇数1 is odd number!(当输入是奇数时)1.#include 2.int s(int n)3.{

4.int i;

5.for(i=2;i

7.if(n%i==0)8.return 0;9.}

10.if(i==n)11.{

12.return 1;13.} 14.}

15.void fun(int n)16.{

17.int i;

18.for(i=2;i

20.if(s(n)==1)21.{

22.printf(“%d is odd number!

n”,n);23.}

24.else if((s(i)==1)&&(s(n-i)=

=1))

25.{

26.printf(“%d=%d+%dn”,n,i,n

-i);break;27.} 28.} 29.}

30.int main()31.{

32.int n;33.do 34.{

35.scanf(“%d”,&n);36.fun(n);37.}while(n!=0);38.return 0;39.} 浮点数四舍五入

1.#include 2.#include 3.double fun(double a)4.{ 5.return(floor)(a*100+0.5)/100.0;

6.} int main()7.{ double a;8.scanf(“%lf”, &a);9.printf(“%lfn”, fun(a));10.return 0;11.} 长整型截短

1.#include 2.int fun(int n)3.{ 4.int a,i=0,b=0;5.do 6.{ 7.a=n%10;8.n=n/10;9.if(a%2==0)10.{ 11.b=b+a*pow(10,i);12.i++;13.} 14.}while(n!=0);15.return b;16.} 17.int main()18.{ int n;19.scanf(“%ld”,&n);20.printf(“The result is: %ldn”,fun(n));

21.return 0;22.}

长整型截短

编写一个函数fun,其功能是:将形参n中,各位上为偶数的数取出,并按原来从高位到低位的顺序组成一个新的数,并作为函数值返回。

1.#include

2.int fun(int n)

3.{

4.int a,i=0,b=0;5.do 6.{

7.a=n%10;8.n=n/10;9.if(a%2==0)10.{

11.b=b+a*pow(10,i);12.i++;13.}

14.}while(n!=0);15.return b;16.}

17.int main()18.{ int n;

19.scanf(“%ld”,&n);

20.printf(“The result is: %ldn”,fun(n));

21.return 0;22.}

公式求解

1.double fun(int n)2.{

3.int i;

4.double a=1,s=1;5.for(i=1;i<=n;i++)6.{

7.a=a/i;8.s=s+a;9.} 10.return s;11.} 12.int main()13.{ int n;14.double s;15.16.scanf(“%d”,&n);17.s=fun(n);18.printf(“s=%fn”,s);19.return 0;20.} 数的合并

请编写函数fun,其功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a的十位和个位依次存放在c数的十位和千位上,b的十位和个位依次存放在c数的个位和百位上。

1.int fun(int a,int b,int *p)2.{ 3.*p=a/10*10+a%10*1000+b%10*100+b/10;4.return p;5.} 6.int main()7.{ 8.int a,b,c;9.scanf(“%d%d”,&a,&b);10.fun(a,b,&c);11.printf(“%dn”,c);12.return 0;13}

数组中奇偶数

请编一个函数 fun,函数的功能是分别求出数组中所有奇数之和以及所有偶数之和。形参 n 给了数组中数据的个数:利用指针 odd 返回奇数之和,利用指针 even 返回偶数之和。

例如:数组中的值依次为: 1,8,2,3,11,6 ;则利用指针 odd 返回奇数之和 15 ;利用指针 even 返回偶数之和 16。

 void fun(int x[],int y,int *odd,int *even)

 {

int i; *odd=0; *even=0;

for(i=0;i

if(x[i]%2!=0) {

 *odd=*odd+x[i]; } 

else

 {

 *even=*even+x[i]; }  }  }

 int main()

 { int a[N],i,n,odd,even; scanf(“%d”,&n);

for(i=0;i

 printf(“The sum of even numbers:%dn”,even);

return 0; }

 #include



#define N 20

浮点数四舍五入

请编一个函数 void fun(double a,double *h),函数的功能是对变量 h 中的值保留 2 位小数,并对第三位进行四舍五入(规定 h 中的值为正数)。

例如: h 值为 8.32433,则函数返回 8.32 ;

h 值为 8.32533,则函数返回 8.33。

 #include

 void fun(double a,double *h) {

 *h=(floor)(a*100+0.5)/100; } int main() {

 double a,h;

 scanf(“%lf”,&a); fun(a,&h);

 printf(“The result:%lfn”,h); return 0;

 }

字符移动

请编一个函数void fun(char *s),函数的功能是把字符串中所有的字符前移一个位置,串中的第一个字符移到最后。

例如:原有的字符串为: Mn.123xyZ,则调用该函数后,串中的内容为: n.123xyZM。

 void fun(char *s) {

int i=0,j,k;

char ch,a[N];

do

 {

 a[i++]=*(s++); }while(*s!=''); ch=a[0];



for(j=0;j

 a[j]=a[j+1]; }

 a[i-1]=ch; a[i]='';



for(k=i-1;k>=0;k--) {

 *(--s)=a[k]; }

 } int main() { char a[N]; gets(a); fun(a);

 printf(“%sn”,a); return 0; }

生成新数

给定程序中,函数fun的功能是:将形参n所指变量中,各位上为偶数的数去除,剩余的数按原来从高位到低位的顺序组成一个新的数,并通过形参指针n传回所指变量。

例如,输入一个数:27638496,新的数:为739。

 #include  void fun(int *p) {

int a[10],b[10];

int i=0,j=0,k;

do

 {

 a[i++]=*p%10; *p=*p/10; }while(*p!=0);



for(k=0;k



if(a[k]%2!=0) {

 b[j++]=a[k]; }  }



for(k=0;k

 *p=*p+b[k]*pow(10,k); }  }

 int main() { int n=-1;

while(n>99999999||n<0) { scanf(“%d”,&n);}  fun(&n);

 printf(“%dn”,n);

return 0; }

字符串转换成整数

请编写一个函数fun,它的功能是:将一个数字字符串转换为一个整数。例如,若输入字符串“-1234”,则函数把它转换为整数值-123

4 #include

 int fun(char *p) {

char a[10];

int q=0,i=0,j=0;

do

 {

 a[j++]=*(p++); }while(*p!='');

if(a[0]=='-') {



for(i=1;i

q=q+(a[i]-'0')*pow(10,j-1-i); }

 q=-1*q; } 

else

 {



for(i=0;i

q=q+(a[i]-'0')*pow(10,j-1-i); }  }



return q; }

 int main()/* 主函数 */

 { char s[10];

int n; gets(s); n = fun(s);

 printf(“%dn”,n);

return 0; }

二维数组按列优先存放

请编写函数fun, 函数的功能是: 将M行N列的二维数组中的字符数据, 按列的顺序依次放到一个字符串中。

例如, 二维数组中的数据为: W W W W S S S S H HHH 则字符串中的内容应是: WSHWSHWSHWSH。

 void fun(char w[M][N],char *q) {

int j,i;

for(j=0;j

for(i=0;i

 *(q++)=w[i][j]; }  }

 *q=''; }

 int main() { char

a[100],w[M][N]={{'W','W','W','W'},{'S','S','S','S'},{'H','H','H','H'}};

 fun(w,a); puts(a);

return 0;

 } #include

 #define M 3

 #define N 4

删除字符串中指定的星号

假定输入的字符串中只包含字母和 * 号。请编写函数 fun,它的功能是:除了尾部的 * 号之外 , 将字符串中其它 * 号全部删除。在编写函数时,不得使用 C 语言提供的字符串函数

 void fun(char *p,char *t) {

char a[30],b[30],ch;

int i=0,j,k=0;

do

 {

 a[i++]=*(p++); }while(*p!=''); a[i]='';

for(j=0;;j++) {



if(a[j]!='*') {

 b[k++]=a[j];

 if(a[j]==*t)break; }  }



for(j=k;j

 b[j]=*(++t); }



for(k=j;k>=0;k--) {

 *(p--)=b[k]; }  }

 int main()

 { char s[81],*t; gets(s); t=s;

while(*t)t++; t--;

while(*t=='*')t--; fun(s , t); puts(s);

return 0; }

统计数字字符

请编写函数 fun,它的功能是: 统计形参 s 所指字符串中数字字符出现的次数,并存放在形参 t

 void fun(char *p,int *q) {

int i=0;

for(;*p!='';p++) {

if((*p>='0')&&(*p<='9')) {

 i++; }  }

 *q=i; } int main() { char s[80];

int t; gets(s); fun(s,&t);

 printf(“%dn”,t);

return 0; }

将两个串按要求形成一个新串

给定程序的函数 fun 的功能是:逐个比较 p、q 所指两个字符串对应位置中的字符,把 ASCII 值大或相等的字符依次存放到 c 所指数组中,形成一个新的字符串。

 void fun(char *p,char *q,char *c) {

int i,j;

for(i=0;*(p+i)!=''&&*(q+i)!='';i++)

 {

if(*(p+i)>=*(q+i)) {

 *(c+i)=*(p+i); } 

else

 {

 *(c+i)=*(q+i); }  }  j=i;



if(*(p+j)!='') {



for(j=i;*(p+j)!='';j++) {

 *(c+j)=*(p+j); }  } 

else

 {

 for(j=i;*(q+j)!='';j++) {

 *(c+j)=*(q+j); }  }

 *(c+j)=''; }

 int main()

 { char a[10], b[10], c[80]; gets(a);gets(b); fun(a,b,c); puts(c); return 0;

 }

 #include

 #include

统计子串的个数

请编写函数 fun,它的功能是: 统计 substr 所指子字符串在 str 所指字符串中出现的次数。

 void fun(char *p,char *q,int *c) {

int i,j,cnt; *c=0;

for(;*p!='';p++) {

 cnt=1;

if(*p==*q) {

 for(j=0;*(q+j)!='';j++) {

 if(*(p+j)!=*(q+j)) {

 cnt=0; break; }  }  }



else cnt=0;

if(cnt) {

(*c)++; }  }  }

 int main() {

char str[80],substr[80];

int count; gets(str);

 gets(substr);

 fun(str,substr,&count); printf(“%dn”,count);

return 0; }

函数 fun 的功能是: 将 s 所指字符串中除了下标为奇数、同时 ASCII 值也为奇数的字符之外,其余的所有字符都删除 , 串中剩余字符所形成的一个新串放在 t 所指的数组中。

 void fun(char *p,char *q) {

int i;

for(i=0;*(p+i)!='';i++) {

if(i%2==1&&*(p+i)%2==1) {

 *(q++)=*(p+i); }  }

 *(q++)=''; } int main() {

char s[100], t[100]; scanf(“%s”, s); fun(s, t);

 printf(“%sn”, t);

return 0; }

求非偶数的除数

请编写函数 fun,它的功能是:求出能整除形参 x 且不是偶数的各整数 , 并按从小到大的顺序放在 pp 所指的数组中 , 这些除数的个数通过形参 n 返回。

 void fun(int x,int *p,int *q) {

int i; *q=0;

for(i=1;i<=x;i=i+2) {

if(x%i==0) {

 *(p++)=i;(*q)++; }  }  }

 int main()

 { int x, aa[1000], n, i; scanf(“%d”, &x); fun(x, aa, &n);

for(i = 0;i < n;i++) printf(“ %d”, aa[i]); printf(“n”);

return 0; }

求最大值及其下标

请编写函数 fun,其功能是求出数组的最大元素在数组中的下标并存放在 k 所指的存储单元中

 void fun(int *p,int n,int *q) {

int i,max; max=0;

for(i=0;i

if(*(p+i)>max) {

 max=*(p+i); *q=i; }  }  }

 void main() {

int a[10], k ,i;

for(i=0;i<10;i++)

 scanf(“%d”,&a[i]); fun(a, 10, &k);

 printf(“%d,%dn”, k, a[k]); }

结构体填空

给定程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的学号、姓名和3门课的成绩。函数modify的功能是将该学生的各科成绩都乘以一个系数a。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

 #include

 typedef struct

 {

int num;

char name[9];

float score[3]; } STU;

 void show(STU tt) {



int i;

 printf(“%d %s : ”,tt.num,tt.name);

for(i=0;i<3;i++)

 printf(“%5.1f”,tt.score[i]); printf(“n”); }

 void modify(STU *ss,float a) {



int i;



for(i=0;i<3;i++) ss->score[i]*=a; }

 int main() {

 STU std=

{ 1,“Zhanghua”,76.5,78.0,82.0 };



float a;

 scanf(“%f”,&a); modify(&std,a); show(std);

return 0; }

程序通过定义学生结构体变量,存储了学生的学号、姓名和 3 门课的成绩。函数 fun 的功能是对形参 b 所指结构体变量中的数据进行修改 , 最后在主函数中输出修改后的数据。

 #include

 #include

 struct student { 

long sno;

char name[10];

float score[3]; };

 void fun(struct student *b) {

 b->sno= 10004;

 strcpy(b->name, “LiJie”); }

 int main()

 { struct student t={10002,“ZhangQi”, {93, 85, 87}};



int i; fun(&t);

 printf(“No: %ld Name: %snScores:”,t.sno, t.name);

for(i=0;i<3;i++)printf(“%6.2f”, t.score[i]);

 printf(“n”);

return 0; }

程序通过定义学生结构体数组,存储了若干名学生的学号、姓名和 3 门课的成绩。函数 fun 的功能是将存放学生数据的结构体数组,按照姓名的字典序(从小到大)排序。

 #include

 #include

 struct student { 

long sno;

char name[10];

float score[3]; };

 void fun(struct student a[], int n) {



struct student t;

int i, j;



for(i=0;i



for(j=i+1;j



if(strcmp(a[i].name,a[j].name)> 0)

 { t = a[i];a[i] = a[j];a[j] = t;}

 }

 int main()

 { struct student

s[4]={{10001,“ZhangSan”, {95, 80, 88}},{10002,“LiSi”, {85, 70, 78}}, {10003,“CaoKai”, {75, 60, 88}},{10004,“FangFang”, {90, 82, 87}}};



int i, j; fun(s, 4);

 printf(“The data after sorting :n”);

for(j=0;j<4;j++)

 { printf(“nNo: %ld Name: %-8s Scores:”,s[j].sno, s[j].name);

for(i=0;i<3;i++)

 printf(“%6.2f”, s[j].score[i]); }

 printf(“n”);

return 0; }

第四篇:语言期末复习名词解释

名词解释

补码:

计算机处理带符号数的编码,正数的补码就是其本身,负数的补码是原二进制码取反后加一。

BCD码:

用4位二进制表示1位十进制数的编码;分组合BCD码和非组合BCD码两种形式。

物理地址和逻辑地址:

逻辑地址由两个16位的地址分量构成,其中一个为段基址的高16位,另一个为偏移量。

段寄存器:

用于保存代码段、数据段、堆栈段和附加段的段基值(即段基址的高16位)的专用寄存器,分别是CS、DS、SS和ES。

IP寄存器:

即指令指针寄存器,用于保存下一条指令在代码段中的偏移量。

偏移量:

逻辑地址的一部分,又称为有效地址,为某存储单元距离段基址的字节数。

寻址方式:

指令获取操作数或操作数地址的方式;寻址方式包括“寄存器寻址”、“立即数寻址”、“存储器寻址”、“I/O接口寻址”等。

基址寻址和变址寻址:

立即数:以数值形式直接给出的操作数称为立即数,立即数不能作为目的操作数。

位移量:直接以数字形式出现的偏移量的分量之一。

伪指令:用于指示编译(汇编)程序如何进行编译的指令。

位操作指令:

能精准到位对其进行读写的计算机指令,包括逻辑运算和移位及循环移位指令。

PF标志位:

用于标志执行算术或逻辑运算后,运算结果的低8位中包含“1”数据位的奇偶结果。如果运算结果包含偶数个“1”,PF置1,否则被清0。

中断过程:中断请求、中断响应、中断处理、中断返回

第五篇:人教版八年级数学上期末总复习各章知识点总结

人教版八年级数学上期末总复习各章知识点总结

分式 A1.分式的定义:如果 A、B 表示两个整式,并且 B 中含有字母,那么式子 叫做分式。B分式有意义的条件是分母不为零,分式值为零的条件分子为零且分母不为零.2.分式的基本性质:分式的分子与分母同乘或除以一个不等于 0 的整式,分式的值不变。A AC A A C B B C C 0 B BC3.分式的通分和约分:关键先是分解因式4.分式的运算:分式乘法法则:分式乘分式,用分子的积作为积的分子,分母的积作为分母。分式除法法则:分式除以分式,把除式的分子、分母颠倒位置后,与被除式相乘。a c ac a c a d ad b d bd b d b c bc分式乘方法则:分式乘方要把分子、分母分别乘方。a an n n b b分式的加减法则:同分母的分式相加减,分母不变,a 0 把分子相加减。异分母的分式相加减,先通分,变为同分母分式,然后再加减 a b a b a c ad bc ad bc c c c b d bd bd bd混合运算:运算顺序和以前一样。能用运算率简算的可用运算率简算。15.任何一个不等于零的数的零次幂等于 1,即 a 0 1a 0 ;当 n 为正整数时,a n n a6.正整数指数幂运算性质也可以推广到整数指数幂.mn 是整数(1)同底数的幂的乘法: a m a n a mn ;(2)幂的乘方: a a mn m n(3)积的乘方: ab n a nb n ;(4)同底数的幂的除法: a m a n a mn a≠0; a n an(5)商的乘方: n ;b≠0 b b7.分式方程:含分式,并且分母中含未知数的方程——分式方程。解分式方程的过程,实质上是将方程两边同乘以一个整式(最简公分母),把分式方程转化为整式方程。解分式方程时,方程两边同乘以最简公分母时,最简公分母有可能为0,这样就产生了增根,因此分式方程一定要验根。(解分式方程的步骤 : 1)能化简的先化简; 2方程两边同乘以最简公分母,化为整式方程; 3解整式方程; 4验根. 增根应满足两个条件: 一是其值应使最简公分母为 0,二是其值应是去分母后所的整式方程的根。分式方程检验方法:将整式方程的解带入最简公分母,如果最简公分母的值不为 0,则整式方程的解是原分式方程的解;否则,这个解不是原分式方程的解。列方程应用题的步骤是什么? 1审;2设;3列;4解;5答.应用题有几种类型;基本公式是什么?基本上有四种: 1行程问题:基本公式:路程速度×时间而行程问题中又分相遇问题、追及问题. 2数字问题 在数字问题中要掌握十进制数的表示法. 3工程问题 基本公式:工作量工时×工效. 4顺水逆水问题 v 顺水v 静水v 水. v 逆水v 静水-v 水.8.科学记数法:把一个数表示成 a 10 n 的形式(其中 1 a 10,n 是整数)的记数方法叫做科学记数法. 用科学记数法表示绝对值大于 10 的 n 位整数时,其中 10 的指数是 n 1用科学记数法表示绝对值小于 1 的正小数时其中 10 的指数是第一个非 0 数字前面 0 的个数包括小数点前面的一个 0 第十七章 反比例函数 k1.定义:形如 y=(k 为常数,k≠0)的函数称为反比例函数。x 12.其他形式 xyk y kx 1 yk(k 为常数,k≠0)都是。x3.图像:反比例函数的图像属于双曲线。反比例函数的图象既是轴对称图形又是中心对称图形。有两条对称轴:直线 yx 和 y-x。对称中心是:原点3.性质:当 k>0 时双曲线的两支分别位于第一、第三象限,在每个象限内 y 值随 x 值的增大而减小。当 k<0 时双曲线的两支分别位于第二、第四象限,在每个象限内 y 值随 x 值的增大而增大。4.k的几何意义:表示反比例函数图像上的点向两坐标轴所作的垂线段与两坐标轴围成的矩形的面积。第十八章 勾股定理1.勾股定理:如果直角三角形的两直角边长分别为 a,b,斜边长为 c,那么 a2+b2c2。2.勾股定理逆定理:如果三角形三边长 abc 满足 a2+b2c2。,那么这个三角形是直角三角形。3.经过证明被确认正确的命题叫做定理。我们把题设、结论正好相反的两个命题叫做互逆命题。如果把其中一个叫做原命题,那么另一个叫做它的逆命题。(例:勾股定理与勾股定理逆定理)第十九章 四边形平行四边形定义:有两组对边分别平行的四边形叫做平行四边形。平行四边形的性质:平行四边形的对边相等;平行四边形的对角相等。平行四边形的对角线互相平分。平行四边形的判定 1.两组对边分别相等的四边形是平行四边形 2.对角线互相平分的四边形是平行四边形; 3.两组对角分别相等的四边形是平行四边形; 4.一组对边平行且相等的四边形是平行四边形。A三角形的中位线平行于三角形的第三边,且等于第三边的一半。D直角三角形斜边上的中线等于斜边的一半。矩形的定义:有一个角是直角的平行四边形。C B矩形的性质: 矩形的四个角都是直角; 矩形的对角线平分且相等。ACBD矩形判定定理: 1.有一个角是直角的平行四边形叫做矩形。2.对角线相等的平行四边形是矩形。3.有三个角是直角的四边形是矩形。菱形的定义 :邻边相等的平行四边形。菱形的性质:菱形的四条边都相等; 菱形的两条对角线互相垂直,并且每一条对角线平分一组对角。菱形的判定定理: 1.一组邻边相等的平行四边形是菱形。2.对角线互相垂直的平行四边形是菱形。3.四条边相等的四边形是菱形。S 菱形1/2×ab(a、b 为两条对角线)正方形定义:一个角是直角的菱形或邻边相等的矩形。正方形的性质:四条边都相等,四个角都是直角。正方形既是矩形,又是菱形。正方形判定定理:1.邻边相等的矩形是正方形。2.有一个角是直角的菱形是正方形。梯形的定义: 一组对边平行,另一组对边不平行的四边形叫做梯形。直角梯形的定义:有一个角是直角的梯形等腰梯形的定义:两腰相等的梯形。等腰梯形的性质:等腰梯形同一底边上的两个角相等; 等腰梯形的两条对角线相等。等腰梯形判定定理:同一底上两个角相等的梯形是等腰梯形。解梯形问题常用的辅助线:如图线段的重心就是线段的中点。平行四边形的重心是它的两条对角线的交点。三角形的三条中线交 5-1于疑点,这一点就是三角形的重心。宽和长的比是(约为 0.618)的矩形叫做黄金矩形。2 第二十章 数据的分析1.算术平均数: X 1 X n n X1 X 22.加权平均数:加权平均数的计算公式。权的理解:反映了某个数据在整个数据中的重要程度。而是以比的或百分比的形式出现及频数分布表求加权平均数的方法。3.将一组数据按照由小到大(或由大到小)的顺序排列,如果数据的个数是奇数,则处于中间位置的数就是这组数据的中位数median;如果数据的个数是偶数,则中间两个数据的平均数就是这组数据的中位数。4.一组数据中出现次数最多的数据就是这组数据的众数(mode)。5.一组数据中的最大数据与最小数据的差叫做这组数据的极差range。6.方差越大,数据的波动越大;方差越小,数据的波动越小,就越稳定。数据的收集与整理的步骤: 收集数据 2.整理数据 3.描述数据 4.分析数据 5.撰写调查报告 6.1.交流7.平均数受极端值的影响众数不受极端值的影响,这是一个优势,中位数的计算很少不受极端值的影响。

下载期末复习-语言各章总结word格式文档
下载期末复习-语言各章总结.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    药理学重点笔记复习各章总结

    第一章 绪论 1.药理学是研究药物与机体(包括病原体)相互作用的规律和机制的科学。 2.药物代谢动力学(药动学) :即研究机体对药物的处理,包括药物在体内的吸收、分布、代 谢和排......

    计算机网络各章复习总结.(推荐五篇)

    三、各章节知识点 第一章概述 1、网络是指“三网”,即电信网络、有线电视网络和计算机网络。 2、计算机网络功能:连通性、共享。 3、从因特网的工作方式上看,可以划分为以下......

    c语言期末复习试题

    下面程序运行时,如果从键盘上输入3,5,程序输出的结果是(C)。 void main(void) { int a,b,*pa,*pb; pa=&a; pb=&b; scanf("%d,%d",pa,pb); *pa=a+b; *pb=a+b; printf("a=%......

    线性代数各章复习要点

    第一章:1.3节 例5、例6; 1.5节 性质1~6、例7、例8、 例10;1.6节 引理、定理3、例12、推论、例13; 1.7节克拉默法则、例14、例16; 第二章:2.2节 矩阵的乘积、转置、行列式及性质、......

    C语言期末总结

    结构体 例10.4 指向结构体数组的指针的应用#include struct student { int num;char name[20];char sex;int age;}; struct student stu[3]={{10101,″Li Lin″,′M′,18},{1......

    学前班语言期末总结

    学前班语言期末总结 本人任教学前班的拼音、识字、美术、社会、科学课。本人能认真备课、上课、听课,能及时批改作业、讲评作业,使学生学有所得,从而不断提高自己的教学水平和......

    各章习题总结

    范围管理 8、 工作分解结构中的每一项都被标以一个独特的标示符,标示符的名称是什么? A、 质量检测标示符 B、 帐目图表 C、 项目活动编码 D、 帐目编码 9、 编制项目范围说......

    中药学各章总结

    第一章作业 作业答案 1.什么是中药 ?什么是中药学 ?答:中药,是指在中医药理论指导下认识和使用的药物,是用以防治疾病的重要武器 中药学是研究中药基本理论和各种中药的来源、采......