c语言陷阱和缺陷2

2024-07-21

c语言陷阱和缺陷2(通用10篇)

c语言陷阱和缺陷2 篇1

在C语言中,我们都知道字符串是永恒的话题,字符串含有很多地雷,你稍不留心就会被砸到,比方说,字符串的结尾是',也是占一个字符空间的,那么如果我们在利用strcpy拷贝字符串的时候,应该多加1个字符空间,就是专门留给这个'的,

如果我们不多加一个字符空间,会发生致命的错误,那么我们通过案例来说明。

-------------我是分割线------------------

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

#include

#include

#include

intmain

{

charstr[]=“MengLiang”;

//此处分配空间没有考虑到'

char*New_str=(char*)malloc(strlen(str));

strcpy(New_str,str);

printf(“TheNew_str=%sn”,New_str);

free(New_str);

New_str=NULL;

system(“pause”);

return0;

}

-------------我是分割线------------------

我在注释中已经写了,那么这小段程序的结果呢?

-------------我是分割线------------------

正确的修改为:

-------------我是分割线------------------

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

#include

#include

#include

intmain()

{

charstr[]=“MengLiang”;

//此处的加1就是为'来服务的

char*New_str=(char*)malloc(strlen(str)+1);

strcpy(New_str,str);

printf(“TheNew_str=%sn”,New_str);

free(New_str);

New_str=NULL;

system(“pause”);

return0;

}

-------------我是分割线------------------

C语言的自由意味着我们要自制!

----------------------------------------------

本文出自 “享受科技带来的快乐” 博客,请务必保留此出处liam2199.blog.51cto.com/2879872/146

c语言陷阱和缺陷2 篇2

1 汇编语言和C语言的特点

1.1 汇编语言

汇编语言是人们基于初级计算机语言,也就是二进制语言的基础,将原本“0”和“1”组成的二进制字符串,换用较符合人类思维逻辑的符号来表达,比如,用“ADD”代表加法指令,用“ADC”代表加进位的加法指令,用“INC”代表加1指令,以更简明的方式来表达指令要求的符号化计算机语言。

由于符号化表达更符合人类思维逻辑的特征,也更易读易编写,汇编语言比二进制语言更易理解,人们在编程时更容易及时发现错误并修正错误,且后期的软件维护也变得相对简单。根据计算机的硬件系统来编制完成的汇编语言程序,可以将计算机不能识别的汇编语言翻译成计算机可以识别的二进制语言,从而完成信息指令的传输。用汇编语言进行编程时,数值运算比较复杂,数据处理的工作量大而繁琐。但汇编语言的优点在于编程效率高,可以充分发挥计算机硬件系统的功能,程序相对精准简练,软件质量比较高,所以汇编语言依旧是现在进行软件开发的重要工具。

1.2 C语言

C语言是面对过程的程序语言,摆脱了对计算机硬件系统的依赖,移植性比较强,在不同型号的计算机上都已成功移植,应用范围广且数据处理能力强。加上C语言处理数据的灵活性强,在各领域的实际软件应用编程时都普遍采用了C语言,例如单片机软件系统开发、三维图编写、动画编写等。

1.3 混合编程的意义

在进行程序设计时,C语言可以高效地生成目标代码,但是汇编语言生成的目标码质量更高,而且利用汇编语言完成对计算机硬件的特殊操作更快捷准确。利用汇编语言编程时,数据运算较繁琐,但C语言具有强大的库函数,可以高速完成对数据的处理。所以合理地混合使用两种语言进行程序设计,可以有效提高工作效率和工作质量。在混合编程时,C语言的主程序和汇编语言的主程序允许互相调用其子程序,也将汇编子程序插进C语言程序中,同时如何进行参数传递及确定调用关系非常重要,也要考虑到不同功能模块之间的连接问题。运用混合编程技术既可以发挥汇编语言的精确性优势及充分运用计算机硬件的功能,又可以利用C语言强大的数据处理能力,可以有效解决在大型程序设计中遇到的问题[1]。

2 混合编程的注意事项

2.1 注意保护堆栈和寄存器,以完成参数传递

汇编语言程序利用寄存器来完成参数信息的传递,C语言程序利用堆栈传递参数数据给汇编语言程序。C语言程序在调用汇编语言的变量和过程时,按下述的过程输送数据:C语言调用程序将参数按顺序压入堆栈→汇编语言用BP寄存器加上对应的偏移量来存取堆栈中C语言程序传递过来的参数→汇编语言进行程序转换→C语言从堆栈按顺序弹出的参数中获得操作数据。

所以在编程之前,应充分熟悉并掌握所用编程语言的多类别的堆栈的结构、生成和入栈模式。对汇编语言而言,应根据变量和过程的参数个数来选择合适的寄存器。当参数小于或等于4个时,将参数数据按次序一一传送到R0、R1、R2和R3寄存器;当子程序的参数个数大于4个时,将多出的参数数据按照原次序的反方向分别传送到数据栈[2]。

在C语言程序调入使用汇编变量和过程时要注意保护各种重要的寄存器,如DS、BP、SI、DI、AX和DX等,根据需要将数据用PUSH指令压入堆栈来保护,以保证参数的顺畅传递,否则会导致出现失误。

2.2 注意汇编子程序的返回值

返回值通过AX和DX寄存器来传递。少于16位二进制的返回值存放于AX,而32位的返回值中的低16位仍存放于AX,而其余的高16位则存放于DX寄存器中。大于32位(如浮点)的返回值存放于静态变量存储区[3]。

2.3 应统一两种语言的存储模式

汇编语言是使用Model来生成符合用户已选存储模式的段定义。而C语言则有6种存储模式可供选择,所选择的存储模式不同,其定义的代码段就不同。在混合编程时,汇编语言和C语言最好选择统一的存储模式,例如汇编语言选用Model Small模式来适应C语言的Small模式,以确保不同功能模块的准确衔接。

2.4 变量和函数的互相调用时命名方式的约定

在运用C语言进行程序设计的过程中,如需要使用汇编语言程序的过程和变量,汇编语言应加public标识,并在过程和变量名前加下划线,比如public_fun。

而汇编程序在调用C语言程序的函数或者变量时,应在调用部分的代码前添加下划线,并在汇编语言程序的命名时用extern加以说明,其格式分别是:extern_变量名:变量类型或者extern_函数名:函数类型[4]。

3 汇编语言和C语言混合编程方法

在完成功能复杂的软件的设计时,需首先将软件划分成不同的功能模块,每个功能模块以子程序或函数的形式存在,针对每个功能模块的不同特征,合理选用恰当的计算机语言来单独编程,而后将每个模块编译为相应的目标文件,所有文件组合后形成所需命令。

3.1 C语言程序直接插入单独汇编指令

C语言程序可执行汇编语言的ASM指令,故可运用ASM在C语言程序中嵌入所需汇编指令,不同的情况下,嵌入格式不同。

单个语句插入格式为:

“asm汇编语言指令代码”

如语句多,格式应为:

格式要求:(1)必须在对应的汇编程序代码前加入ASM;(2)必须按照C语言的环境要求使用分隔符“;”与注释分界符“/*”和“*/”。

这种混合编程方法虽然简单易行,但是直接插入的模式一旦出现细微偏差,就会影响原来的C语言环境,出现差错。所以此方法适用于需要汇编语言程序为程序实现一些特殊的硬件功能,且汇编程序简短时采用。此方法不适用于嵌入较复杂的汇编程序[5]。

3.2 以C语言为主,插入汇编语言

在运用C语言编程时,如果出现需要用汇编语言编程来实现特定功能的情况,且对应的汇编语言程序较为复杂,需要大量的汇编语言才能实现软件所需功能,则不应选择直接嵌入的方式,而应考虑将这部分软件程序划分为独立的功能模块,用汇编语言独立编制程序代码后,整体插入C程序对应位置。

在C语言主程序调入使用汇编语言的子程序的过程中,必须保证汇编源代码的正确性,才能确保调入使用过程的正确,最终顺利实现软件所需功能。因此,汇编源程序要严格依照系统要求来编制。

二者对照如表1所示。

必须用public和下划线来标明汇编子程序的外部函数属性,也就是严格按照下述格式:public_变量类型(或者变量名称),以保证C语言顺利地调入使用汇编子程序。

3.3 以汇编语言为主,C语言为辅

汇编语言具有在输入程序时能够直接采取二进制数据、控制硬件操作等C语言不具备的编程特长,因此汇编语言允许以主程序的方式调入使用C语言的函数和过程。

在调入使用时,要注意如下事项:(1)在被调用C语言函数前要加上extern标识,以表明其外来性质,以免跟原程序的代码弄混;(2)注意在调用时,要按照反向顺序依次将C语言函数的参数压入对应的任务堆栈,也就是保证最后子程序的最末位参数首先压入堆栈;(3)同时,在汇编主程序中用“call near ptr函数名”的形式完成调入使用C函数,不再加入原针对堆栈的指令[6]。

操作示例:

C子程序:

其过程为:前4个参数保存在r1-r4中→后两个参数留在堆栈用b1指令调用C程序模块→r0中得出结果。

4 结语

对于一些特殊领域的特殊应用需求的软件而言,混合编程可以解决很多难题。整个编程过程中交互使用两种语言,完成数据模型的搭建和数据的共享,以按照软件的功能需求,最终成功地完成程序编制。

摘要:C语言虽是高级计算机语言,但汇编语言可以高效率、高质量地发挥计算机硬件操作系统的功能,在程序编写时将二者有机结合并加以利用,可以事半功倍。

关键词:汇编语言,C语言,嵌入,相互调用,程序调试,混合编程

参考文献

[1]史斌.ARM汇编语言和C/C++语言混合编程的方法[J].电子测量技术,2006,(6).

[2]陈百良.单片机C语言与汇编语言的混合编程[J].科技信息,2008,(6).

[3]牟淑杰.C语言与汇编语言的混合编程[J].电大理工,2004,(1).

[4]杨加国.单片机C语言与汇编语言的混合编程[J].成都大学学报(自然科学版),2008,(3).

[5]左艳丽.C语言和汇编语言混合编程的方法和实现[J].职教与经济研究,2008,(3).

c语言陷阱和缺陷2 篇3

关键词:存储空间图;间接寻址;一级指针;二级指针;存储单元

中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)16-31093-03

A Discussion about the Relation of C Language Pointer and Assemble Language Indirect Addressing——Giving Analysis from the Storage Space Digraph

WANG Hai-yan

(Computer Science Department of Suqian College, Suqian 223800, China)

Abstract: C language is a user-oriented procedural language. Pointer is the most flexible part in this language. Assemble language is a language which is processor-oriented and there is no definite conception of pointer, but the similar conception of pointer emergences everywhere. In this paper, it present the application of pointer in assemble language through indirect addressing mode. Depending on the storage space digraph and the relation between pointer of C language and indirect addressing of assemble language, it makes it easier to understand the application and relation between the two languages.

Keywords: Storage Space Digraph; Indirect Addressing; Pointer; Second Rank Pointer; Storage Unit

1 引言

作为最基本的编程语言之一,汇编语言的重要性勿庸置疑,即使是 Linux 程序员有时也需要使用汇编语言解决实际问题,理由很简单:精简、高效和 libc 无关性。假设要移植 Linux 到某一特定的嵌入式硬件环境下,首先必然面临如何减少系统大小、提高执行效率等问题,此时或许只有汇编语言能帮上忙了。我们常说汇编语言的抽象是C语言, 而C语言中最灵活是C语言中拥有“指针”这个数据类型。那么汇编语言和C语言中的指针有什么样的关系呢?我们也知道在汇编语言中,几乎所有对内存的操作都是对给定地址的内存进行访问来完成的,那么在汇编语言中,绝大多数操作也必然和地址(即指针)产生或多或少的联系。汇编语言和CPU以及内存,端口等硬件知识是连在一起的。汇编语言中存储数据的地方不仅有寄存器而且还有存储单元,更多的数据则保存在存储单元中。因此,对编程人员而言,他肯定迫切地希望访问内存,以保存

更多的数据,本文将重点阐述访问数据的方式。

2 存储空间图的概念

画一个图形,或者观察一个图形,能帮助我们把复杂的程序设计具体化、形象化,有利于掌握程序之间的内在联系,从而更好的理解程序,激发大家对程序设计语言的兴趣。本文用形象的图形解释C语言中指针以及汇编语言中间接寻址方式之间的相互关系。文中运用类似于存储空间图的方法对两门语言进行解释。说它类似于存储空间图是因为这种图形没有用真正二进制描述空间的值和空间的地址,姑且我把这种图形叫做存储空间图。

3 两门语言之间的内在联系

我们知道在计算机中,所有的数据都是存放在存储器中的,访问数据的方式并不是唯一的。在C语言中访问单元数据有两种常见方式,一是通过名字直接访问单元数据;二是通过指针访问单元数据。直接通过单元名字访问数据,两种语言都很简单,我在这篇文章中不加以阐述。接下来我就分一级指针和二级指针分别阐述汇编语言和C语言是如何间接访问内存单元数据,又是以怎样的形式加以表现的。

3.1 C语言中的一级指针和汇编语言中一次间接寻址的联系

3.1.1 C语言中一级指针定义

指针定义形如:数据类型 *指针变量,它的存储空间图表示如下:

图1中X就是一级指针,Y是一个整形变量,X、Y的本质区别在于X单元的值是用于存放内存单元的地址,Y单元是存放任意类型的数据。X之所以指向Y,是因为Y单元的地址赋予了X,同时X所指向的类型和Y同类型。

图1

3.1.2 汇编语言中的一次间接寻址是指通过寄存器或存储单元一次间接寻找操作数。

它的存储空间图表示如下:

图2中si是cpu中的一个寄存器,si中存放着Y所在单元的地址,Y是一个单元的名称,Y单元存放着普通操作数,si之所以指向Y,是因为Y单元的地址赋予了si。

图2

图1、图2中X和si都是用于存放内存单元的地址,我们从中可以得到启迪,汇编语言中也存在着类似C语言的指针。

3.1.3 以下从编程角度深入探悉二者之间的联系。

例1 用C语言指针的方法输出a单元中的数据:

main()

{int a=3,*p;

p=&a

printf("%d",*p); 3

}

例2 用间接寻址方法把a单元中的数据送往al寄存器中:

data segment

a db 3

data ends

……

lea si, a

mov al, [si]

……

以上程序均是操作存储单元中的数据,但都不是通过单元名字操作的。例1用C语言中一级指针的方法,例2用汇编语言中的寄存器间接寻址的方法。那么二者有怎样的联系呢?为了讲清楚这个问题,我把这两个程序分别用以下存储空间图表示:

图3 C语言编程的存储空间图图4 汇编语言编程的存储空间图

上图中p和si其实质都是一级指针,在C语言中是用指针指向的内容,即用*p的形式来取得单元的数据,而汇编语言是通过寄存器一次间接寻址方式来取得单元内容,当然这都要求指针p和寄存器si首先获得单元的地址。(p=&a/lea si, a)。

3.2 C语言中的二级指针和汇编语言中二次间接寻址的联系

3.2.1 C语言中二级指针的定义。

指针定义形如:数据类型 **指针变量,它的存储空间图表示如下:

图5中X相对与Z这个变量是二级指针,它和一级指针的区别在于X这个指针所指向的内容仍然是某个单元的地址(图中是Z单元的地址)。要想输出Z单元的内容,则需要通过两次指向才能完成。

图5

3.2.2 汇编语言中二次间接寻址是指通过寄存器或存储单元两次间接寻找操作数。

它的存储空间图表示如下:

图6中si其实就等价于图5中定义的X,都是二级指针。但在汇编语言中si是一个指针寄存器,无论是作为一级指针还是作为二级指针,我们在使用的时候都是不需要定义的。事实上汇编语言中根本没有一级指针和二级指针的定义,也就是说汇编语言中没有C语言中定义上的繁琐,但你仍可以用C语言的思想来解释汇编语言中的指针问题。

图6

3.2.3 以下从编程角度深入探悉二者之间的联系。

例3 输出以下字符串

main()

{char *p[] = {"ab", "cd", "ef"};

char **sp = p;

int i;

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

printf("%s", **(sp+i));

}

图7 C语言编程的存储空间图

例4 累加数组array中元素和的程序段

data segment

array dw 10,20,30,40,50,60,70,80,90,100

count dw 10

sum dw?

table dw 3 dup(?);地址表

data ends

code segment

main proc far

assume cs:code, ds:data

start:push ds

……

mov table, offset ary

mov table+2, offset count

mov table+4, offset sum

mov bx, offset table

call proadd

ret

main endp

proadd procnear

……

mov si, [bx]

mov di, [bx+2]

mov cx, [di]

mov di, [bx+4]

xor ax, ax

next: add ax, [si]

add si, 2

loop next

mov [di], ax

……

proadd endp

code ends

end start

图8 汇编语言编程的存储空间图

以上程序均是通过两次操作才找出单元中的数据,前者是用C语言中二级指针二次指向的方法,后者是用汇编语言中的两次间接寻址的方法寻找操作数。从上图可知这两门语言的内在联系,即两门语言最终都是通过指针两次寻址来访问操作数。所不同的是:前者是二级指针的概念,后者是两次间接寻址。这种本质相同,只是语言描述上有所不同的概念,从存储空间图的视角可以帮助我们更好的理解他们之间的联系。

依此类推,对于多级指针的学习,我们也可以借助存储空间图来帮助我们更好的分析程序,理解程序,对于一些复杂的问题给予简化,对于不同语言之间的关系我们也能进行更好的深入思考。

4 结束语

本文通过存储空间图深入浅出的探悉了两门语言在寻找数据方面的联系。可以说C语言的指针和汇编语言的寻址方式一直困扰着很多编程者,尤其对二级指针、二次间接寻址的理解及运用更加困难。文中的例题均以最简单的题型来说明这些深奥的道理,而且从存储空间图的视角分析了二者之间的联系。相信这篇文章,不仅能帮助我们运用存储空间图解释问题、分析问题,而且能帮助我们更好的思考不同语言之间的联系,更好的去思考程序设计。

参考文献:

[1] 裘宗燕. C++程序设计语言(特别版). 北京机械工业出版社, 2002.7.

[2] Standley B.lippman. C++ Primer中文版. 人民邮电出版社,20006.3.

[3] 谭浩强. C程序设计(第二版). 清华大学出版社出版,2005.6.

[4] 钱能. C++程序设计教程. 清华大学出版社, 2005.5.

[5] 沈美明. IBM PC汇编语言程序设计. 清华大学出版社,1993.9.

[6] 钱晓捷. 汇编语言程序设计. 电子工业出版社,2003.

c语言陷阱和缺陷2 篇4

《C语言程序设计》实验报告

年级:2009级(必修)

学号:姓名:专业:

实验题目:

输入一个班N个学生(N为符号常量,自定人数)的学号和每个学生考试三门功课(数学、英语、计算机基础)的成绩。编程计算出每个学生的总分和平均分,并按学生成绩优劣排序,最后打印一张按高分到低分名次排序的成绩单。要求:

1)排序用一个函数实现。

2)打印的成绩单表项包括:序号,学号、数学、英语、计算机、总分、平均分。

3)按实验报告电子模板格式填写实验内容。

可用多个函数或多个源文件实现

可以用数组法、指针法、结构体法编写程序。

源程序清单:

主要标识符说明:(说明变量、函数、指针、结构体等)

实验结果贴图:

实验环境:

intel Pentium 4 计算机,windowsXP操作系统,Microsoft Visual C++ 6编译环境。

教师评语:

在C语言中什么是指针和数组等价 篇5

在C语言中对数组和指针的困惑多数都来自这句话,说数组和指针“等价”不表示它们相同, 甚至也不能互换。它的意思是说数组和指针的算法定义可以用指针方便的访问数组或者模拟数组。

特别地,等价的基础来自这个关键定义:

一个T 的数组类型的左值如果出现在表达式中会蜕变为一个指向数组第一个成员的指针(除了三种例外情况); 结果指针的类型是T的.指针。

这就是说, 一旦数组出现在表达式中, 编译器会隐式地生成一个指向数组第一个成员地指针, 就像程序员写出了&a[0] 一样,

例外的情况是, 数组为sizeof 或&操作符的操作数, 或者为字符数组的字符串初始值。

作为这个这个定义的后果, 编译器并那么不严格区分数组下标操作符和指针。在形如a[i] 的表达式中, 根据上边的规则, 数组蜕化为指针然后按照指针变量的方式如p[i] 那样寻址, 如问题6.2 所述, 尽管最终的内存访问并不一样。如果你把数组地址赋给指针:

p = a;

c语言陷阱和缺陷2 篇6

1、《C语言程序设计》教学网站设计的需求分析

《C语言程序设计》教学网站的设计要求能够方便学生在线学习资源共享,并能够有效地将学习资源在网上发布,网站的平台要求界面美观,操作能力强,具有明确的导航设计,网站的安全性可靠,容错性强,能够为学生提供多种学习资源,帮助学生解决学习过程中遇到的问题,在内容设计上,要求具有很强的实践性,能为教师与学生提供交流互动的模块,在网站的功能上,要求实现用户注册、教学资源发布管理、资源浏览管理、学生的留言管理、学习大纲、教师课件、视频、在线考试等相关的学习内容,同时还要能够实现资源修改与管理,用户的管理功能要能够实现用户注册、登录、密码修改与重置等功能,用户与管理员的权限分配等功能。

因此,对《C语言程序设计》的教学网站主要完成如下的功能,课程概述、教学团队、在线测试等,网站主要包括教学区、学习区、互动区、在线练习、深入提高几个部分。教学区主要包括C语言的学习大纲、学习目标、教学实验内容、学习进度计划表、C语言的基本应用介绍等,它的主要功能是帮助学生了解C语言的学习方法、课程教学的目的,进而形成对C语言学习的整体认识。学习区主要包括C语言的教学课件、视频资源、关键代码、教学与实验指导、C语言案例分析等相关的学习资源,通过学习区学生可以根据自己的偏好选择合适的资源进行学习,解决自己在学习过程中遇到的问题,练习区主要包括练习题、在线测试等,主要是帮助学生能够及时地掌握学习的结果,以对学生的学习结果进行验证,提高区是C语言高级应用部分,主要提供一些C语言的经典应用、优秀案例分析以及一些外部学习资源的链接等,提高学生对C语言学习的应用能力,互动区包括师生自己的互动、学生之间的互动,学生学习C语言的心得讨论交流、为学生提供一个互动交流的空间,通过互动区学生可以找到合作学习的伙伴,解决学习遇到的问题。

2、《C语言程序设计》教学网站的关键技术分析

对于《C语言程序设计》教学网站的开发,主要采用JSP作为网站网贞开发技术,运用MYSQL作为网站后台的数据库,实现对网站开发的数据存储功能,JSP技术主要基于Scrvlet规范的动态网页开发技术,而MYSQL主要开源代码的关系型网络数据库,改数据库在一些中小型网站中得到了广泛的应用。《C语言程序设计》教学网站系统平台的设计,主要运用SSH(Struts+Spring+Hibernate)框架网络三层网络架构的设计模式,并采用MVC模型设计模式,将教学网站的安全性、可靠性、稳定性以及可扩充性等有机结合在一起,形成了网络的表示层、业务逻辑层、数据层以及域模块层等多层级设计与开发的动态教学网站结构,采用该模型结构,充分的考虑了用户的请求与响应的时间,有效地将数据端、客户端的分离,同时也实现了数据的业务逻辑层与应用层的分析,使得系统的安全性、可靠性、稳定性等得到了大幅度的提升。

首先,通过动态的JSP交互页面的设计,能够有效地将系统用户的请求(Request)接收,并实现与数据库的连接与传送响应(Response),然后系统的Struts命令根据配置文件对用户的请求进行处理,并利用ActionServlet功能来接收到的用户Request的内容,然后将相应的信息交给Action命令进行处理,完成整个数据库的调用与连接,并将结果反馈给用户;其次,在系统网站的业务层设计中,主要由SpringIOC容器对用户的请求进行分析,并负责向系统Action提供业务模型(Model)组件控制,调用相应的数据库文件,并利用对象数据处理(DAO)组件来完成系统数据库的连接与断开操作,在系统的数据库连接中,还提供了数据的缓冲池、事务处理等容器等组件,来控制数据处理过程可能出现的问题,以保证系统在处理数据过程中的稳定性、安全性、容错性与完整性;最后,在数据处理的过程中,充分的利用Hibernate的对象化映射处理技术来实现系统数据库的动态连接与交互,并利用处理DAO组件请求的数据,结合用户请求的结果,然后在数据处理的结果返回给用客户端,实现整个过程的数据处理与应用。在网站的数据库设计中,主要采用动力数据库的数据表,主要包括的关键数据表有Admin、Announce、AnicleClass、Article等数据表结构。《C语言程序设计》教学网站平台在网页设计上充分的采用了Ajax系统架构的模式技术对网站的页面进行设计,来完成页面局部刷新与资源上传的功能,运用F1ashPaper实现文档到FLASH动画的转换功能,并使用开源代码的在线HTML编辑器KindFditor来编辑数据,实现对动画、视频、PPT课件的在线编辑功能,这样就能够充分的实现《C语言程序设计》的课件在线编辑的功能。

3、《C语言程序设计》的实现功能

《C语言程序设计》教学网站的功能是现实教师与学生有效互动的平台,通过网络的开发与设计,为师生提供丰富的教学资源与学习资源,并为师生提供了便捷的访问方式,每一个页面都相应的链接,并以图、文件、表格的形式来呈现教学内容。因此,教学网站实现的功能如下:

1)《C语言程序设计》课程概述。主要对C语言课程进行全面的概述,主要有课程的内容简介、课程的教学目标、学习要求、具体的学习方法以及在线作业、在线考试、学习链接以及在进入网站学习时需要注意的一些问题等相关的栏目与内容设计。

2)教学团队简介。主要对C语言的教学团队进行总体的介绍。介绍C语言教学团队的负责人、团队成员活动的教学成果、获奖证书,学习C语言的感受及学习计算机编程语言的励志名言等内容,在每一个栏目下边还设计相应的子栏目。

3)在线学习功能。在线学习是《C语言程序设计》教学网站的重要功能,它主要为学生提供在线学习功能,并为学生的学习所需的各类资料与相关的学习指导。在线学习功能主要包括资源的推送、教师课件、学生资源、教材资源的配送、教学大纲、习题解答、经典案例代码等相关的学习资源,在线学习的相关资源可以供学习者下载使用。

4)教学录像提供。该功能主要是提供课程负责人的完整教学录像与教学视频、微课视频、PPT课件等资源。本模块主要与《C语言程序设计》的教材向对应,不同的章节具有不同的学习内容,学习者只要打开相应的栏目,系统就会以不同的格式呈现出相应的教学视频等文件,便于学生在线或者下载后进行学习。

5)在线练习功能。主要介绍《C语言程序设计》的相关系统与解题方法,主要为学习者提供基础知识的学习、相关编程题目的讲解与分析,并为学习者提供在线编程习题,系统根据学习者的情况,为学习提供相应的帮助或者提示,学习者在完成相应的习题之后,系统会自动对学习者答案进行判断,并指出存在错误的地方等功能

。6)在线考试功能。主要是对《C语言程序设计》进行在线考试,系统对C语言程序设计的环境等情况做详细的说明,同时也提供国家计算机二级考试、历年考试真题、计算机二级考试的大纲等内容,学习者在进行在线考试时,系统会为用户设置考试时间,在用户完成在线考试之后,系统为自动对用户考试成绩进行判断。

7)计算机大赛。主要以C语言编程为主,鼓励学生积极参与到各种计算机大赛中,在改栏目功能中主要设置了ITAT大赛和中国大学生计算机设计大赛等栏目,并能够将计算机大赛的相关资源进行展示,帮助学生了解计算机大赛的相关内容,同时也供学习者下载相应的大赛资料。

8)师生作品展示功能。该教学网站为师生提供了成果作品展示的平台,便于其他学习者能够学习师生的成功经验,改变模块主要包括教师作品与学生作品等两个功能,主要介绍教师与学生开发的优秀程序,供其他学习者参考与学习。

9)互动栏目。互动功能主要是为学习者与教师之间提供互动的`区域,主要完成教师的在线答疑、学生在线提问、教学交流、师生互动等相应的功能,学生学习《C语言程序设计》的心得体会与感受、C语言学习论坛、留言等。

4、网站数据库的建设

《C语言程序设计》教学网站开发的内容比较多,在具体的数据库设计中需要综合考虑多种因素,网站的开发有教学课件库、视频资源库、在线考试数据库、习题答案数据库等。

1)教学课件库。课件库是学生学习《C语言程序设计》的重要组成部分,主要包括教师课件库、学生课件库和教材配送课件库。教学课件数据库为教师与学习提供了在线编辑课件的功能。教师课件库是教师根据教学要求,按照教材的知识体系详细编制的C语言教学课件,在教学网站设计时,将相应的程序代码都存在在PPT的备注页中,方便教师在教学的过程中能够随时调用,学生课件库主要功能是专门为学生提供课件下载,为了保证教师的知识产权,学生下载的PPT课件都是JPG格式,在学习内容上与教师的PPT内容一致,只是没有教师PPT中的动画设计与层次,学生在课件下载之后也不能进行编辑,教材配送课件库主要是提供与《C语言程序设计》教材相配套的课件资源。

2)试卷资源数据库。主要包括单元试卷库、综合试卷库、历年考试数据库、国家计算机等级考试数据库几个部分。单元试卷库主要运用于在线测试,或者在线练习等,主要是安全教学的知识体系而设计的数据资源库,综合试卷数据库主要是依据国家计算机等级考试而设置的在线测试试卷,可以用户在线测试或者期末测试等功能,试卷习题的出现时随机的。

3)习题及答案库。主要是根据《C语言程序设计》教材的章节体系设计的习题练习库与答案库,学习者可以根据自己的需求,下载网站提供WORD格式的习题或者答案,但是提供的答案是经过加密处理的,学生只有在网站上提交完成的作业,才能在网站的互动区获得答案的密码。

4)教学录像数据库。主要包括教师课堂教学的视频录像、教师制作的微课视频、PPT课件学习资源等,视频课件能够体现出现教师与学生的互动,视频录像要求与《C语言程序设计》的相应章节相对应,以及网络相应的学习资源链接等内容。

5、结束语

《C语言程序设计》课件与教学网站平台的设计与开发,需要充分的考试网站的功能需求,将网络课件库、学习资源库、教学录像、在线考试、习题、讨论、互动、师生作品展示等功能综合在一起,利用教师与学生的互动,为学生提供在线指导与帮助,帮助学生掌握程序设计的相关专业知识,以提高学生学习《C语言程序设计》的效果,同时也有利于提升教师的课堂教学效果。

参考文献:

[1]郑伟平,胡遵华,田杰.多租户精品课程网站系统的研究与实现[J].东北师大学报:自然科学版,(11).

[2]张斌,郭黎.“计算机图形学”精品课程网站建设[J].测绘与空间地理信息.(3).

[3]李慧.高校教学资源共享平台建设的实践与探索[J].中国教育信息化,2016(9).

[4]张启字.探析精品课网站的开发[J].农业网络信息,2015(6).

[5]石少敏.计算机基础精品课程网站建设与实践[J].新西部,(2).112

求职面试的语言陷阱 篇7

面试官为了不致于“选错郎”,也许会在面试中设置种种语言陷阱,以探测你的智慧、性格、应变能力和心理承受能力。面试者只有识破这样的语言陷阱,才能小心巧妙地绕开它,不致于一头栽进去。

用“激将法”遮蔽的语言陷阱。这是面试官用来淘汰大部分应聘者的惯用手法。采用这种手法的面试官,往往在提问之前就会用怀疑、尖锐、咄咄逼人的眼神逼视对方,先令对方心理防线步步溃退,然后冷不防用一个明显不友好的发问激怒对方。

如:“你经历太单纯,而我们需要的是社会经验丰富的人”,“你性格过于内向,这恐怕与我们的职业不合适”,“我们需要名牌院校的毕业生,你并非毕业于名牌院校”,“你的专业怎么与所申请的职位不对口?”

面对这种咄咄逼人的发问,作为应聘者,首先要做到的就是无论如何不要被“激怒”,如果你被“激怒”了,那么你就已经输掉了。那么,面对这样的发问,如何接招儿呢?

如果对方说:“你经历太单纯,而我们需要的是社会经验丰富的人。”

你可以微笑着回答:“我确信如我有缘加盟贵公司,我将会很快成为社会经验丰富的人,我希望自己有这样一段经历。”

如果对方说:“你性格过于内向,这恐怕与我们的职业不合适。”

你可以微笑着回答:“据说内向的人往往具有专心致志、锲而不舍的品质,另外我善于倾听,因为我感到应把发言机会多多地留给别人。”

如果对方说:“我们需要名牌院校的毕业生,你并非毕业于名牌院校。”

你可以幽默地说:“听说比尔・盖茨也未毕业于哈佛大学。”

如果对方说:“你的专业怎么与所申请的职位不对口?”

你可以巧妙地回答:“据说,21世纪最抢手的就是复合型人才,而外行的灵感也许会超过内行,因为他们没有思维定势,没有条条框框。”

如果对方说:“你原单位这么好,你却要走,是不是在原单位混不下去只好挪个窝儿?”

应聘者若结结巴巴,无言以对,抑或怒形于色,据理力争,脸红脖粗,那就掉进了对方所设的圈套。应聘者碰到此种情况,要头脑冷静,明白对方在“做戏”,不必与他较劲。

挑战式的语言陷阱。这类提问的特点是,从求职者最薄弱的地方入手。

对于应届毕业生,面试官会设问:“你的相关工作经验比较欠缺,你怎么看?”对于女大学生,面试官也许会设问:“女性常常会对自己的能力缺乏自信,你怎么看?”

如果回答:“不见得吧”、“我看未必”或“完全不是这么回事”,那么也许你已经掉进陷阱了,因为对方希望听到的是你对这个问题的看法,而不是简单、生硬的反驳。

对于这样的问题,你可以用“这样的说法未必全对”、“这样的看法值得探讨”、“这样的说法有一定的道理,但我恐怕不能完全接受”为开场白,然后婉转地表达自己的不同意见。

面试官有时还会哪壶不开偏提哪壶,提出让求职者尴尬的问题。如:“你的学习成绩并不很优秀,这是怎么回事?”“从简历看,大学期间你没有担任学生干部的经历,这会不会影响你的工作能力”等等。

碰到这样的问题,有的求职者常会不由自主地摆出防御姿态,甚至狠狠反击对方。这样做,只会误入过分自信的陷阱,招致“狂妄自大”的评价。而最好的回答方式应该是,既不掩饰回避,也不要太直截了当,用明谈缺点实论优点的方式巧妙地绕过去。

比如说,当对方提出你的学习成绩不很优秀时,你可以坦然地承认这点,然后以分析原因的方式带出你另外的优点。如,在校期间学习成绩之所以不很优秀,是因为我担任社团负责人,投入到社团活动上的精力太多。虽然我花在社团的心血也带给我不少的收获,但是学习成绩不是最优秀,这一点一直让我耿耿于怀。当意识到这一点后,我一直在设法纠正自己的偏差。

在面试中屡战屡胜的 Michael就有过一次这样的面试经历。 Michael的学习成绩并不算顶尖,面试咨询公司时,这便成了考官发起攻击的要害:“你的成绩好像不太出众哦,你怎么证明自己的学习能力呢?”

Michael不慌不忙:“除了学习,我还有其他活动。不是只有成绩才能反映人的学习能力的。其实我的专业课都相当不错,如果你有疑问,可以当场测试我的专业知识。” Michael巧妙地绕开了令人尴尬的问题,将考官的注意力引导到他最拿手的专业知识上。

诱导式的语言陷阱。这类问题的特点是,面试官往往设定一个特定的背景条件,诱导对方做出错误的回答,因为也许任何一种回答都不能让对方满意。这时候,你的回答就需要用模糊语言来表示。

c语言陷阱和缺陷2 篇8

一.语言的功能与陷阱 大学语文主要培养的是(C)。A、背诵 B、书写 C、语感 D、文采

(往年考过)2.(镜像问题)王蒙的(A)这部作品给使他被错划为右派。A、《组织部来了个年轻人》 B、《青春万岁》 C、《春尽江南》 D、《中国天机》

王蒙写作的新中国历史上第一部校园小说是(C)。A、《组织部来了个年轻人》 B、《语言的功能和陷阱》 C、《青春万岁》 D、《恋爱的季节》

王蒙的第一部作品是()。A A.青春万岁

B.组织部来了个年轻人 C.班主任 D.青春之歌

3.《人论》是(D)的作品。A、笛卡尔 B、黑格尔 C、笛卡尔 D、卡西尔

4.“幸福”一词在中国的广泛使用源于(C)国家的影响。A、美国 B、德国 C、苏联 D、日本

5.(镜像问题)“春心莫共花争发,一寸相思一寸灰”是(C)的作品。A、李白 B、李贺 C、李商隐 D、李隆基

“春心莫共花争发,一寸相思一寸灰”是李商隐的作品。(是)

(往年考过)6.“言不尽意”最早是(B)意识到的问题。A、孔子 B、老子 C、孟子 D、屈原

下面(C)最早提出了言不尽意的观点。A、王蒙 B、苏轼 C、老子 D、孔子

(往年考过)7.红色文学的主题是(C)。A、爱情 B、青春 C、革命 D、农村

8.(镜像问题)“写小说就是写语言”是(B)的名言。A、巴金 B、汪曾祺 C、郭沫若 D、矛盾

(往年考过)“想象一种语言,就是想象一种社会生活”是(C)的观点。A、康德 B、萨特

C、维特根斯坦 D、尼采

(往年考过)“语言的局限就是我们全部世界的局限”是(D)的观点。A、马克思 B、费尔巴哈 C、黑格尔 D、恩格斯

(D)提出了“如果说不清楚就说明没有想清楚,如果写不清楚就说明没有说清楚”。A、王蒙 B、徐志摩 C、臧克家 D、闻一多

(A)曾说过写小说就是写语言。A、汪曾祺 B、王蒙 C、普罗普 D、林风眠

“语言是思想的物质的、直接的现实”是(D)的观点。A、弗洛伊德 B、王蒙 C、郭沫若 D、恩格斯 9.(镜像问题)辨认色彩最强的是(B)人。A、亚洲 B、欧洲 C、非洲 D、美洲

中国人辨别色彩的能力强于欧洲人,是因为汉语中表示色彩的词汇非常丰富。()我的答案:×

10.《团结一切抗日力量,反对反共顽固派》是毛泽东的作品,这篇文章的语言是面向(B)群体。

A、知识分子 B、农民 C、工人 D、官方

(往年考过)11.小品《主角和配角》反应了(C)时期两种群体力量的博弈。A、抗战 B、大跃进 C、改革开放 D、现代化建设

12.小品《主角和配角》体现了语言和(C)的关系。A、思想 B、意义 C、权力 D、情感

13.蒋介石在大陆第一次作为正面形象出现的电视剧是(D)。A、《闯关东》 B、《席卷大西南》 C、《亮剑》

D、《长沙保卫战》

(往年考过)14.《热血、辛劳、汗水和眼泪》是(D)的演讲。A、希特勒 B、斯大林 C、毛泽东 D、丘吉尔

《热血、辛劳、汗水和眼泪》是()时期的演讲。C  A 法国大革命  B 一战  C 二战

 D 解放战争

15.(D)真正带来了长篇小说的繁荣。A、毛笔写作 B、钢笔写作 C、沾笔写作 D、电脑写作

16.(B)因写作京剧《沙家浜》被摘掉了右派的帽子。A、王蒙 B、汪曾祺 C、丁玲 D、艾青

17.下面诗句中的月亮不代表思乡之情的是(A)。A、月明星稀,乌鹊南飞 B、海上生明月,天涯共此时 C、举头望明月,低头思故乡 D、露从今夜白,月是故乡明

18.王蒙总结了语言的三种功能,其中不包括(B)。A、交流功能 B、区别功能 C、推动思想功能 D、浪漫功能

19.《侠客行》中,只有不识字的小孩认出了蝌蚪文,这体现了语言的(D)。A、言不尽意 B、言过其实 C、可替代性

D、对思想的束缚

20.老一辈的人不懂玛丽苏、大叔控等词的意思,体现了语言(D)。A、是交流工具

B、是表达感情的媒介 C、具有大众性 D、具有时代性

21.(镜像问题)艺术的真正魅力来源于(D)。A、觉悟 B、修养 C、艺术技巧 D、语言技术

艺术的真正魅力来自于语言。我的答案:√

22.下面词语被语言赋予时间流逝感受的是(B)。A、月亮 B、流水 C、桃花 D、梅花

23.下面不能体现时间是空间的隐喻的是(C)。A、一顿饭的功夫 B、从前

C、9点10分 D、自古以来

24.毛泽东发表文章团结广大群众抗日时使用的语言是(C)。A、严肃正规的语言 B、冷静的语言 C、市井化的语言 D、有逻辑的语言

25.下面不能体现语言中包含着权力的是(B)。A、青年特指男性

B、俄罗斯的叙事诗很长 C、小老婆 D、叫花子

26.红色文学的主题是()。C A 爱情 B 青春 C 革命 D 农村

27.美国“垮掉的一代”反抗的是(C)。A、政府 B、体制 C、父辈 D、战争

28.下面不能体现语言性别歧视的是(A)。A、女人不能骂人 B、默认青年为男性

C、女人没有按照正常人类的形式被命名 D、生男孩是可好,生女孩是也好

29.(镜像问题)下面不属于演讲技术特点的是(D)。A、感染性 B、单向性 C、共谋性 D、冷静性

演讲需要从几个方面增强感染力,其中不包括(C)。A、感情 B、独语论断 C、道理

D、自我打动

30.语言的权力效益体现在(D)。A、让人觉得屈辱 B、让人觉得愤怒 C、让人觉得激动 D、以上都是

31.下面不能作为公共象征的是(B)A、热血 B、电脑 C、长城 D、五星红旗 我的答案:B(往年考过)32.《日喻说》是(A)的文章。A、苏轼 B、韩愈 C、柳宗元 D、杜甫

33.黑格尔提出,人和动物最重要的区别是(D)。

A、劳动 B、思维 C、情感 D、语言

(往年考过)34..王蒙认同语言工具论的提法。我的答案:×

35.王蒙提出人与动物最重要的区别是语言。()我的答案:×

(往年考过)36.《语言的功能与陷阱》是王蒙的一篇演讲词。我的答案:√

(往年考过)37.语言会激发思想,但也会扼杀人的创造力。我的答案:√

38.语言的“狗屎化效应”指语言说得多了,语言往往就失去意义了。我的答案:√

(往年考过)39.语言规定了种种瞬间的体验,甚至可以创造其本身不具有的意味。我的答案:√

(往年考过)40.在文学创作中,永远是内容决定形式,形式服务于内容。我的答案:×

(往年考过)41.语言不需要表达对象,本身就具有独立的审美意义。我的答案:√

(往年考过)42.演讲是一种公共话语行为。语言组织总是暗含着鼓动性和说服性。我的答案:√

43.在演讲中,理性的说服比感情的感染更有效。我的答案:×

44.(镜像问题)语言一定要符合现实生活,否则会产生消极的后果。我的答案:×

45语言来源于生活,不能脱离现实。()我的答案:×

(往年考过)46.语言本身隐藏着权力,本身可以影响我们的认识和思考。我的答案:√

(往年考过)47.一般来讲,作家的理论思考能力都很好。我的答案:×

48.语言有帮助思想、推动思想的功能。我的答案:√

(往年考过)49.语言一定要符合现实生活,否则会产生消极的后果。我的答案:×

50.想象一种语言,就是想象一种社会生活。我的答案:√

(往年考过)51.语言本身隐藏着权力,本身可以影响我们的认识和思考。我的答案:√

52.作家写作都是事先在脑子里构思好情节大纲才开始写的。()我的答案:×

53“不着一字,尽得风流”体现了言不尽意的魅力。()我的答案:√

54.任何时候言过其实都会让人反感,要尽量避免言过其实。()我的答案:×

55.不同的语言代表了不同的文化和社会地位。()我的答案:√

56.语言可以催生感情,即使是哈哈大笑也可能传递悲凉的情绪。我的答案:√

57.市场社会的代表语言就是官方语言。我的答案:×

58演讲中主体置换的目的是改变听众的利益需求。()我的答案:×

59人们对客观事物的感情很多时候会受到语言的影响。()我的答案:√

60虚假提问能够增强说话的气势。()我的答案:√

61画国画的对墨色的分辨能力要强于画油画的 我的答案:√

63语言的形式可以决定语言的内容。()我的答案:√

64蒋介石在大陆第一次作为正面人物出现的电视剧是《长沙保卫战》

我的答案:√

(往年考过)65从语言的使用上来讲,使用反问句去询问他人,通常是不礼貌的。我的答案:√

(往年考过)66在一个民主、自由的社会里,言论自由是社会得以正常运作的基石,正是因为倡导言论自由,因而也就排除了贵族或特权阶层的存在可能,毕竟言论自由不等于言论特权。

我的答案:√

67王蒙曾在《语言的功能与陷阱中》举了诸葛亮斩马谡的故事,这个例子说明的是语言的哪个陷阱?言过其实

68王蒙曾在《语言的功能与陷阱中》举了阿Q和徐志摩分别向吴妈示爱的例子,作者意图要说明语言的哪种功能?修辞

69王蒙在《语言的功能与陷阱》中举了“失空斩“的例子,用来说明语言的哪种问题?言过其实

70王蒙在《语言的功能与陷阱》中举了”轮扁斫轮"的例子,用来说明语言的哪种陷阱?言不能达意

c语言陷阱和缺陷2 篇9

1.下列词语中加点字的读音,与所给的读音全都相同的一组是 A.乘chéng 乘机 上乘 乘风破浪 ...B.剥bō 剥削

剥皮

生吞活剥 ...C.血xuè

心血

贫血

血淋淋 ...D.削xuē 瘦削

削梨

日削...月割

解析 B项剥皮bāo,C项血淋淋xiě,D项削梨xiāo。...答案 A 2.下列词语中加点字的读音,与所给的读音全都相同的一组是 A.勒lè

勒索

勒令

勒紧腰带 ...B.累lèi 劳累

累赘

危若累卵 ...C.卡kǎ 卡车

卡通

重重关卡 ...D.创chuāng 创口

创痛

予以重创 ...解析 A项勒紧腰带lēi;B项累赘léi、危若累卵lěi;C项重重关卡....qiǎ。答案 D 3.下列词语中加点字的读音,与所给的读音全都相同的一组是 A.xuān 宣布

渲染

喧宾夺主 ...B.chuò

辍学

啜泣

气息惙然 ...C.bì

庇护

毗邻

荜路蓝缕 ...D.cuì

荟萃

精粹

猝然去世 ...解析 A项渲染xuàn,C项毗邻pí,D项猝然去世cù。...答案 B 4.下列加点字的注音有错误的一项是

A.谙熟(ān)椽子(chuán)

咄咄逼人(duō)...B.翁媪(ǎo)倾轧(yà)

面面相觑(qù)...C.颀长(qí)自诩(xǔ)

一丘之貉(hé)...D.媲美(bǐ)抨击(pēng)

谆谆教诲(zhūn)...解析 D项媲美(pì)。.答案 D 5.下列词语中加点字的读音全都相同的一组是 A.供认

供需

供给

供不应求 ....B.结拜

领结

结实

张灯结彩 ....C.累年

累犯

累及

果实累累 ....D.行署

行商

行星

行尸走肉 ....解析

A项 “供认”中的“供”读gòng,其他读gōng。B项“结实”中的“结”读jiē,()()()()()其他读jié。C项“果实累累”中的“累”读léi,“累犯、累及”中的“累”读lěi。D项中的“行”都读xíng。

答案 D

创新迁移

6.改正下列句子中音同而误的别字。①人民须要你把工作坚持下去。

答:________________________________________________________________________ ②人的认识是主观对客观的反应。

答:________________________________________________________________________ ③盖叫天系河北高阳县人,虽出身北方,却常居南方。

答:________________________________________________________________________ 答案 ①须:需 ②应:映 ③常:长 7.给下列容易误读的形声字注音。

①纨袴()②内讧()③箴言()...④桎梏()⑤鞭笞()⑥庇护()...⑦徜徉()⑧纶巾()⑨联袂()...答案 ①kù ②hòng ③zhēn ④gù ⑤chī ⑥bì ⑦cháng ⑧guān ⑨mèi 8.选出加点字的读音完全相同的一组是 A.暴风骤雨

暴殄天物

一暴十寒 ...B.一块薄板

日薄西山

妄自菲薄 ...C.和衷共济

和颜悦色

曲高和寡 ...D.将计就计

将功赎罪

挈妇将雏 ...解析 D项均读jiāng。A项“一暴十寒”中的“暴”读pù,其余读bào。B项“一块薄板”中的“薄”读báo,其余读bó。C项“曲高和寡”中的“和”读hè,其余读hé。

答案 D

9.下列句子中加点字的读音正确的一项是

A.食物就是一种能够构成躯体和供(gòng)应能量的物质。.B.在这次行军中,我们不要暴露(lòu)我们的行踪。.C.你的这样的小伎俩(liǎng),我早就看明白了,不会上当的。.D.明天是美好的,让我们翘(qiào)首以待吧。.解析 A项中的“供”应该读“gōng”。B项中的“露”应该读“lù”。D项中的“翘”应该读“qiáo”。

答案 C 10.下列词语中加点字的读音,与所给注音全都相同的一项是 A.禅chán

禅林

禅机

禅让

禅宗 ....B.颤chàn

颤动

颤抖

颤音

颤悠 ....C.倘tǎng 倘或

倘然

倘若

倘佯 ....D.朝cháo 朝奉

朝野

朝气

朝昏 ....解析 A项“禅让”中的“禅”读shàn。C项“倘佯”中的“倘”读cháng。D项“朝气、()()()朝昏”中的“朝”读zhāo。

C语言与语言互相调用 篇10

C语言是目前非常流行的一种编程语言,除具有高级语言使用方便灵活、数据处理能力强、编程简单等优点外,还可实现汇编语言的大部分功能,如可直接对硬件进行操作、生成的 目标代码质量较高且执行的速度较快等。所以在工程上对硬件处理速度要求不很高的情况下,基本可以用C代替汇编语言,编写接口电路的控制软件。但C也不能完全取代汇编语言,如在一些对速度要求很高的实时控制系统中,以及对硬件的特殊控制方面,C有时也不能完全很好胜任,还需要汇编语言来编写。因为汇编语言目标代码更精练,对硬件直接控制能力更强和执行速度更快,但汇编语言编程烦难、表达能力差也显而易见。比较好的解决办法是C与汇编语言混合编程,即用C编写软件的调度程序、用户界面以及速度要求不高的控制部分,而用汇编语言对速度敏感部分提供最高速度的处理模块,供C调用。这种方法提供了最佳的软件设计方案,做到了兼顾速度效率高和灵活方便。由于本人的毕业设计需要C程序中调用汇编模块的方法来提高ARM定点指令的执行速度,故对这方面进行了学习。学习心得如下:

对于C和汇编语言的接口主要有两个问题需要解决。

一、调用者与被调用者的参数传递

这种数据传递通过堆栈完成,在执行调用时从调用程序参数表中的最后一个参数开始,自动依次压入堆栈;将所有参数压入堆栈后,再自动将被调用程序执行结束后的返回地址(断点)压入堆栈,以使被调程序结束后能返回主调程序的正确位置而继续执行。例如一调用名为add汇编程序模块的主函数:main(){......add(dest,op1,op2,flages);......}。在此例中对主函数进行反汇编,主函数在调用add函数前自动组织的堆栈。...lea 0xfffffffe8(%ebp),%eax #flages数组的首地址入栈

..执行完add调用语句后,栈内数据结果如图一所示。

进入汇编子程序后,为了能正确获取主调程序并存入堆栈中的数据,被调的汇编子程序先后要做如下一些工作: 1、保存esp的副本

进入汇编子程序后,子程序中免不了要有压栈和出栈的操作,故ESP时刻在变化。为了能用 ESP访问堆栈中的参数,安全办法是一进入子程序后,先为ESP制副本,以后对传递参数的访问 都用副本进行。一般可用EBP保存ESP,如: push %ebp mov %ebp,%esp push %eax pushl 0xfffffff8(%ebp)#OP2入栈 pushl 0xfffffffc(%ebp)#OP1 入栈 pushl 0xfffffff0(%ebp)#dest地址入栈

call 0x80483f0 #调用add函数

2、保留数据空间

如果汇编子程序中需要一些局部数据,可以简单地减小ESP的值,以便在栈空间中保留出一段存贮区,用于存放局部数据,该区域须在子程序结束后恢复。如下语句可以保留一个局部数据区: push %ebp

mov %ebp ,%esp subl space,%esp;设space=4 movl $0x0,%ebp movl $0x0,-2(%ebp)如上语句段中,space是局部数据的总字节数。在以后的应用中,由于ESP是变化的,而 EBP是 固定的,用负偏移量可以存取局部变量。上例利用EBP及偏移量,将两个字的局部数 据初始化为0。

3、保留寄存器值

如果在被调子程序中用到ESI、EDI等其它寄存器,则应先把它们压入堆栈,以保留寄存器原值。例如,下例就是将ESI和EDI寄存器的值压栈: pushl %ebp movl %ebp ,%esp subl $space ,%esp, pushl %esi pushl %edi

4、获取传递参数

作完了1~3步的操作后,结合上面C程序传送参数这一例子,现在栈结构如图二所示。

由此可见,EBP保留了ESP在参数传递完并将EBP压栈后的一个副本,利用EBP可以很方便地访问各参数。现假设各参数都是2字节的整数值,在小模式编译方式共占用2个字节。如果要将传递的参数op1、op2取出,并分别赋给ebx、ecx寄存器,可由下列语句完成这一功能:

movl 0x8(%ebp),%eax movl 0xc(%ebp),%ecx

5、子程序返回值

当子程序的执行结果需要返回时,根据返回值的字长,C按如下约定接收返回值:1字节在AL 寄存器中;2字节在EAX寄存器中;4字节则高位部分在EDX中、低位部分在EAX寄存器中。C可从这些寄存器中取出返回值。

6、退出汇编子程序

结束汇编子程序的步骤如下:

1)若ESS、EDS、ESI或EDI已被压栈,则需按保存它们的相反顺序弹出它们。

2)若在过程开始时分配了局部数据空间,则以指令 mov %esp和%ebp 恢复%esp。

3)以指令pop %ebp 恢复%ebp,该步是必须的。或者可以用leave语句来恢复%ebp。它相当于movl %ebp, %esp;popl %ebp 4)最后以ret结束汇编程序。

二、说明和建立调用者与被调用者间的连系

为了建立调用与被调用模块间的连接关系,被调用的汇编程序应用global,说明其可被外部模块调用;而调用程序则应预先说明要引用的外部模块名。下面通过我的例子进行说明,该例是C调用add0的汇编子程序。程序清单如下: /* add.c */ #include extern void add(int *dest,int op1,int op2,short int*flages);/*声明调用外部的汇编函数*/ int main(void){ int op1,op2,result;int *dest=&result;short int flages[4]={0,0,0,0};printf(“please enter two soure operater:”);scanf(“%x%x”,&op1,&op2);add(dest,op1,op2,flages);/*调用add0函数*/ printf(“The result

of

ADD

is

:%xn

flages

N(negative)

Z(zero)

C(carry)V(overflow:%d,%d,%d,%dn”,*dest,flages[3],flages[2],flages[1],flages[0]);return 0;} #add.s.text.align 2.global add.type add,function #定义add为外部可调用的函数

add:

push %ebp #ebp寄存器内容压栈,保存add函数的上级调用函数的栈基地址

mov %esp,%ebp #esp值赋给ebp,设置add函数的栈基地址

mov 0x8(%ebp),%edx

mov 0x10(%ebp),%eax

add 0xc(%ebp),%eax

mov %eax,(%edx)

mov 0x14(%ebp),%eax

jo OF

C:

jc CF

S:

js SF

jz ZF

jmp out

OF:

movw $0x1,(%eax)

jmp C

CF:

movw $0x1,0x2(%eax)

jmp S

SF:

movw $0x1,0x6(%eax)

movw $0x0,0x4(%eax)

jmp out

ZF:

movw $0x1,0x4(%eax)movw $0x0,0x6(%eax)

out:

leave

#将ebp值赋给esp,pop先前栈内的上级函数栈的基地址给#ebp,恢复原栈基址

ret

#add函数返回,回到上级的调用函数

其中.text 标志一个代码段的开始,这是AT&T的段格式;global add;n type add,function说明add是公用的,可以由外部其它单独编译模块调用。

将C源程序以文件名add.c存盘,汇编语言源程序以add.s 存盘;通过MAKE进行编译和连接连接代码如下:

all: myadd

myadd: adds.o addc.o

gcc –o myadd adds.o adc.o

adds.o: add.s

as –o adds.o add.s

addc.o: add.c

上一篇:范文作文大全250字四年级下一篇:2024年北京中考语文试卷及答案