第一篇:C程序设计教案(第5章 实验6)
实验 6 字符数组和字符串函数一、二、实验学时:2课时 实验目标
1.熟悉掌握字符数组的使用。2.掌握与数组有关的算法。
三、实验要求:
1.在上实验课之前,每一个同学必须将实验的题目、程序编写完毕,做好充分的准备。
2.所有实验环节均由每位同学独立完成,严禁抄袭他人实验结果,若发现有结果雷同者,按实验课考核办法处理。
四、实验步骤和内容
【启动Visual C++】 【新建工程】
选中【C++ Source File】项,【新建源程序文件】 编辑程序 执行程序
【例5.7】gets读取字符串与puts输出字符串。/* 源文件名:Li5_7.c 功能:gets读取字符串与puts输出字符串。*/ #include
/*定义s字符数组的初值*/ printf(“输入字符串”);gets(s);
/*读取字符串*/ puts(s);
/*输出字符串*/ printf(“读取的字符串是”%s“n”,s);
/*输出s字符数组的值*/ }
1)观查执行结果,是否与教材相同。
2)思考gets()和scanf()、puts()和printf()函数在输出字符串的异同点
【例5.8】输入一组字符串,以输入空串结束输入,找出最大的字符串(设串长不超过80字符)。
/* 源文件名:Li5_8.c 功能:输入一组字符串,找出最大的字符串。*/ 可以用gets函数读取字符串,设置一个最大字符串数组smax,第一次设置smax为空串,每读一个字符串s就把它与保存在smax中的字符串比较,如s>smax则用s替换smax,不然smax保持不变,这样当所有的字符串输入完毕后,smax中存储的就是最大字符串。
#include
/*定义s数组和smax数组*/ strcpy(smax, “ ”);
/*设置smax数组为空,也可以设置smax[0]=‘ ‘*/ do
{ printf(“输入字符串:”);gets(s);
/*读取字符串*/ if(strcmp(s,smax)>0)
strcpy(smax,s);
/*s数组比smax数组大的话,把s数组赋值个smax数组*/
}while(s[0]!=‘ ‘
puts(“最大的字符串是”);puts(smax);}
1)观查执行结果,是否与教材相同。2)重新输入不同的字符串,再查看结果
五、思考题
1)【例5.7】思考gets()和scanf()、puts()和printf()函数在输出字符串的异同点。2)【例5.5】若要找出最小字符串,该如何实现?
六、实验小结:
第二篇:嵌入式实验6交叉编译及Linux简单程序设计实验
实验六交叉编译及Linux简单程序设计实验的实验报告
一实验目的
1、了解和掌握交叉编译模式和方法;
2、熟悉和掌握Linux简单程序设计。
二实验环境
预装Fedora10_A8_Linux的pc机一台,CVT-A8嵌入式实验箱一台(已构建嵌入式Linux系统),以太网线一根,交叉编译工具链。
三实验步骤
1、连接主机和目标板;(三根线,注意网线和串口线是否连接正常)
2、安装交叉编译器arm-linux-gcc,并配置环境。a)在命令行中输入arm-linux-后按tab键,如果命令能够补齐,说明里面已经有交叉编译工具了,环境变量已经设置好,那接下来的步骤,可以作为参考。如果不能补齐,则把电脑“E:cvtechCVT-A8-III Linux光盘Linux系统及应用源码”目录下的“4.3.3.tar.gz”文件拷贝到Fedora10的/usr/local目录下
b)转到文件夹/usr/local
cd /usr/local
c)解压交叉编译工具链
tar-vzxf4.3.3.tar.gz cd 4.4.3/bin 执行pwd命令得到这个目录的绝对路径,用右键复制这个路径,这个路径一般为/usr/local/4.3.3/bin。
d)打开环境变量设置脚本文件
vi ~/.bash_profile e)在文件中倒数第几行中,把“/usr/local/4.3.3/bin”添加到PATH环境变量路径的后面,类似于PATH=$PATH:/usr/local/4.3.3/bin $PATH表示原来的环境变量路径,添加的/usr/local/4.3.3/bin部分表示在原来的环境变量PATH中添加此交叉编译器的路径
f)vi保存并退出
g)输入命令source ~/.bash_profile使环境变量路径生效
h)在任意目录下输入arm-linux-gcc后回车,如果是arm-linux-gcc no input file表示配置成功,或者仅输入“arm-linu”之后按TAB键看是否能补齐arm-linux-gcc命令,如果能够补齐,说明交叉编译工具链的环境变量设置成功。
3,Linux简单程序设计
a)使用vi等编辑器编写一个简单程序,比如输出“hello world”,实现a+b等C语言程序。
b)在命令行中使用gcc编译器编译并运行程序;使用file命令查看编译后的可执行文件信息。
c)使用交叉编译器arm-linux-gcc编译并运行程序,记录结果;使用file命令查看交叉编译后的可执行文件信息。
d)将交叉编译得到的可执行文件通过tftp下载到目标机,在目标机上执行,记录结果
Cd: Vi:
gcc –o.c:
四实验思考
1、为什么要使用交叉编译模式?
由于嵌入式系统资源匮乏,一般不能像PC一样安装本地编译器和调试器,不能在本地编写、编译和调试自身运行的程序,而需借助其它系统如PC来完成这些工作,这样的系统通常被称为宿主机。宿主机通常是Linux系统,并安装交叉编译器、调试器等工具;宿主机也可以是Windows系统,安装嵌入式Linux集成开发环境。在宿主机上编写和编译代码,通过串口、网口或者硬件调试器将程序下载到目标系统里面运行。所谓的交叉编译,就是在宿主机平台上使用某种特定的交叉编译器,为某种与宿主机不同平台的目标系统编译程序,得到的程序在目标系统上运行而非在宿主机本地运行。ARM上可以运行操作系统,所以用户完全可以将ARM当做计算机来使用,理论上也可以在ARM上使用本地的编译器来编译程序.但是,编译器在编译程序时,会产生大量的中间文件,这会占用很大的内存和磁盘空间,且对CPU处理速度要求较高,比如S3C2440A内存、磁盘空间只有几十到100多兆,CPU只有400-500MHz,完全达不到编译程序的要求.所以,在进行ARM-linux嵌入式开发时必须在PC机(x86结构)上编译出能够运行在ARM上的程序,然后再将程序下载到ARM中来运行.这就用到了交叉编译器.要进行交叉编译,用户需要在主机平台上安装对应的交叉编译工具链(cross compilation tool chain),然后用这个交叉编译工具链编译用户的源代码,最终生成可在目标平台上运行的代码.交叉编译工具链可以从网上下载,也可以自己制作.但编译器不是万能的,受版本限制,编译某些程序时会报错.常见的交叉编译工具链有:
(1)Cross-2.95.3 tar: 该版本较早,除了编译vivi外一般不使用.(2)arm920t-eabi.tgz: 4.1.2版本的编译器,支持eabi,可以编译TX2440A开发板上的所有程序.(3)arm-linux-gcc: 4.3.2版本的编译器,支持eabi,是最常见的交叉工具链.2、gcc和交叉编译工具生成的可执行文件有什么不同?
Gcc:GCC(GNU Compiler Collection,GNU编译器套件),是由 GNU 开发的编程语言编译器。它是以GPL许可证所发行的自由软件,也是 GNU计划的关键部分。GCC原本作为GNU操作系统的官方编译器,现已被大多数类Unix操作系统(如Linux、BSD、Mac OS X等)采纳为标准的编译器,GCC同样适用于微软的Windows。[2] GCC是自由软件过程发展中的著名例子,由自由软件基金会以GPL协议发布。
GCC 原名为 GNU C 语言编译器(GNU C Compiler),因为它原本只能处理 C语言。GCC 很快地扩展,变得可处理 C++。后来又扩展能够支持更多编程语言,如Fortran、Pascal、Objective-C、Java、Ada、Go以及各类处理器架构上的汇编语言等,所以改名GNU编译器套件(GNU Compiler Collection)。
交叉编译工具:在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码。
可执行文件(executable file)指的是可以由操作系统进行加载执行的文件。在不同的操作系统环境下,可执行程序的呈现方式不一样。
交叉编译工具可以简单地理解为在电脑上编译,生成的可执行文件在开发板上运行。交叉编译工具是根据开发板芯片的体系结构制作的,这与开发板上的芯片指令系统有关。arm-linux-gcc只是在编译时根据arm芯片的环境来生成可执行文件,生成的可执行文件必须移植到开发板上才能运行。
3、比较可执行文件在主机和目标板上运行的不同,理解交叉编译的含义。执行文件在主机和目标板上运行的不同:
宿主机和开发板可通过网络连接, 宿主机将会包含开发板所需的编译环境, 程序可在宿主机上编译完成后, 传递到开发板上执行, 而在开发板上不会包含编译环境, 只会有执行环境,所以两者的运行不同。
在windows操作系统下,可执行程序可以是.exe文件.sys文件.com等类型文件。
Linux可执行文件格式为ELF即Executable and Linkable Format。格式: ELF header program header table.txt.rodata.data Section header table 交叉编译含义:
交叉编译这个概念的出现和流行是和嵌入式系统的广泛发展同步的。我们常用的计算机软件,都需要通过编译的方式,把使用高级计算机语言编写的代码(比如C代码)编译(compile)成计算机可以识别和执行的二进制代码。比如,我们在Windows平台上,可使用Visual C++开发环境,编写程序并编译成可执行程序。这种方式下,我们使用PC平台上的Windows工具开发针对Windows本身的可执行程序,这种编译过程称为native compilation,中文可理解为本机编译。然而,在进行嵌入式系统的开发时,运行程序的目标平台通常具有有限的存储空间和运算能力,比如常见的 ARM平台,其一般的静态存储空间大概是16到32MB,而CPU的主频大概在100MHz到500MHz之间。这种情况下,在ARM平台上进行本机编译就不太可能了,这是因为一般的编译工具链(compilation tool chain)需要很大的存储空间,并需要很强的CPU运算能力。为了解决这个问题,交叉编译工具就应运而生了。通过交叉编译工具,我们就可以在CPU能力很强、存储空间足够的主机平台上(比如PC上)编译出针对其他平台的可执行程序。4.你认为做好本实验应该注意哪些方面?
在做本实验时首先应该做好预习工作,在网上或者书本上查相关资料,了解交叉编译模式和方法,可以提前练习linux的程序设计流程,做一个小的练习,这样在试验中就会更加流畅。在做实验中,应该好好学习助教的讲解,并做好笔记,防止助教讲完就忘记,结果又会遇到一些本来可以自己解决的问题。听完助教讲解后,加上之前的预习,再按照操作一步步完成,一般都不会有问题了。
五实验心得
通过本次实验,了解和掌握了交叉编译模式和方法,熟悉和掌握了Linux简单程序设计。在实验开始时对实验的整体流程的了解还不是很清楚,但是在经过助教的讲解后,就有了比较清楚的逻辑。最后在操作中还是遇到了很多问题,因为对linux指令了解还不深入,所以在解决问题时会浪费很多时间。所以我体会到了这门课要学好还需要做好基础功,多了解和掌握linux相关的指令和知识,同时多加练习,才能为以后打好基础。
第三篇:有机化学实验教案-6
有机化学实验教案——6 实验一 熔点的测定及温度计校正
一、实验目的
1、了解熔点测定的意义;
2、掌握熔点测定的操作方法;
3、了解利用对纯粹有机化合物的熔点测定校正温度计的方法。
二、实验原理
1、熔点
熔点是固体有机化合物固液两态在大气压力下达成平衡的温度,纯净的固体有机化合物一般都有固定的熔点,固液两态之间的变化是非常敏锐的,自初熔至全熔(称为熔程)温度不超过0.5-1℃。
加热纯有机化合物,当温度接近其熔点范围时,升温速度随时间变化约为恒定值,此时用加热时间对温度作图(如图1)。
图1 相随时间和温度的变化 图2 物质蒸气压随温度变化曲线
化合物温度不到熔点时以固相存在,加热使温度上升,达到熔点.开始有少量液体出现,而后固液相平衡.继续加热,温度不再变化,此时加热所提供的热量使固相不断转变为液相,两相间仍为平衡,最后的固体熔化后,继续加热则温度线性上升。因此在接近熔点时,加热速度一定要慢,每分钟温度升高不能超过2℃,只有这样,才能使整个熔化过程尽可能接近于两相平衡条件,测得的熔点也越精确。
当含杂质时(假定两者不形成固溶体),根据拉乌耳定律可知,在一定的压力和温度条件下,在溶剂中增加溶质,导致溶剂蒸气分压降低(图2中M´L´),固液两相交点M´即代表含有杂质化合物达到熔点时的固液相平衡共存点,TM´为含杂质时的熔点,显然,此时的熔点较纯粹者低。
2、混合熔点
有机化学实验教案——6 在鉴定某未知物时,如测得其熔点和某已知物的熔点相同或相近时,不能认为它们为同一物质。还需把它们混合,测该混合物的熔点,若熔点仍不变,才能认为它们为同一物质。若混合物熔点降低,熔程增大,则说明它们属于不同的物质。故此种混合熔点试验,是检验两种熔点相同或相近的有机物是否为同一物质的最简便方法。多数有机物的熔点都在400℃以下,较易测定。但也有一些有机物在其熔化以前就发生分解,只能测得分解点。
三、药品和仪器
药品:浓硫酸 苯甲酸 乙酰苯胺 萘 未知物
仪器:温度计 B型管(Thiele管)
四、实验操作
1、样品的装入
将少许样品放于干净表面皿上,用玻璃棒将其研细并集成一堆。把毛细管开口一端垂直插人堆集的样品中,使一些样品进入管内,然后,把该毛细管垂宜桌面轻轻上下振动,使样品进人管底,再用力在桌面上下振动,尽量使样品装得紧密。或将装有样品,管口向上的毛细管,放入长约50一60Cm
垂直桌面的玻璃管中,管下可垫一表面皿,使之从高处落于表面皿上,如此反复几次后,可把样品装实,样品高度2—3mm。熔点管外的样品粉末要擦干净以免污染热浴液体。装入的样品一定要研细、夯实。否则影响测定结果。
2、测熔点
按图搭好装置,放入加热液(浓硫酸),用温度计水银球蘸取少量加热液,小心地将熔点管粘附于水银球壁上,或剪取一小段橡皮圈套在温度计和熔点管的上部(如下图)。将粘附有熔点管的温度计小心地插入加热浴中,以小火在图示部位加热。开始时升温速度可以快些,当传热液温度距离该化合物熔点约10一15℃时,调整火焰使每分钟上升约1—2℃,愈接近熔点,升温速度应愈缓慢,每分钟约0.2一0.3℃。为了保证有充分时间让热量由管外传至毛细管内使固体熔化,升温速度是准确测定熔点的关键;另一方面,观察者不可能同时观察温度计所示读数和试祥的变化情况,只有缓慢加热才可使此项误差减小。记下试样开始塌落并有液相产生时(初熔)和固体完全消失时(全熔)的温度读数,即为该化合物的熔距。要注意在加热过程中试祥是否有萎缩、变色、发泡、升华、碳化等现象,均应如实记录。
有机化学实验教案——6
熔点测定,至少要有两次的重复数据。每一次测定必须用新的熔点管另装试样,不得将已测过熔点的熔点管冷却,使其中试样固化后再做第二次测定。因为有时某些化合物部分分解,有些经加热会转变为具有不同熔点的其他结晶形式。
如果测定未知物的熔点,应先对试祥粗测一次,加热可以稍快,知道大致的熔距.待浴温冷至熔点以下30℃左右,再另取一根装好试样的熔点管做准确的测定。
熔点测定后,温度计的读数须对照校正图进行校正。
一定要等熔点浴冷却后,方可将硫酸(或液体石蜡)倒回瓶中。温度汁冷却后,用纸擦去硫酸方可用水冲洗,以免硫酸遏水发热温度计水银球破裂。
3、温度计校正
测熔点时,温度计上的熔点读数与真实熔点之间常有一定的偏差。这可能由于以下原因,首先,温度计的制作质量差,如毛细孔径不均匀,刻度不准确。其次,温度计有全浸式和半浸式两种,全浸式温度计的刻度是在温度计汞线全部均匀受热的情况下刻出来的,而测熔点时仅有部分汞线受热,因而露出的汞线温度较全部受热者低。为了校正温度计,可选用纯有机化合物的熔点作为标准或选用一标准温度计校正。
选择数种已知熔点的纯化合物为标推,测定它们的熔点,以观察到的熔点作纵坐标,测得熔点与已知熔点差值作横坐标,画成曲线,即可从曲线上读出任一温度的校正值。
常用标准样品(表1)
有机化学实验教案——6
五、实验注意事项
1、熔点管必须洁净。如含有灰尘等,能产生4—10OC的误差。
2、熔点管底未封好会产生漏管。
3、样品粉碎要细,填装要实,否则产生空隙,不易传热,造成熔程变大。
4、样品不干燥或含有杂质,会使熔点偏低,熔程变大。
5、样品量太少不便观察,而且熔点偏低;太多会造成熔程变大,熔点偏高。
6、升温速度应慢,让热传导有充分的时间。升温速度过快,熔点偏高。
7、熔点管壁太厚,热传导时间长,会产生熔点偏高。
8、使用硫酸作加热浴液要特别小心,不能让有机物碰到浓硫酸,否则使浴液颜色变深,有碍熔点的观察。若出现这种情况,可加人少许硝酸钾晶体共热后使之脱色。采用浓硫酸作热浴,适用于测熔点在220℃以下的样品。若要测熔点在220℃以上的样品可用其它热浴液。
六、思考题
测熔点时,若有下列情况将产生什么结果?
(1)熔点管壁太厚。
(2)熔点管底部未完全封闭,尚有一针孔。
(3)熔点管不洁净。
(4)样品未完全干燥或含有杂质。
有机化学实验教案——6(5)样品研得不细或装得不紧密。(6)加热太快。
验二 蒸馏及沸点的测定
一、实验目的
1、熟悉蒸馏和测定沸点的原理,了解蒸馏和测定沸点的意义;
2、掌握蒸馏和测定沸点的操作要领和方法。
二、实验原理
液体的分子由于分子运动有从表面逸出的倾向,这种倾向随着温度的升高而增大,进而在液面上部形成蒸气。当分子由液体逸出的速度与分子由蒸气中回到液体中的速度相等,液面上的蒸气达到饱和,称为饱和蒸气。它对液面所施加的压力称为饱和蒸气压。实验证明,液体的蒸气压只与温度有关。即液体在一定温度下具有一定的蒸气压。
当液体的蒸气压增大到与外界施于液面的总压力(通常是大气压力)相等时,就有大量气泡从液体内部逸出,即液体沸腾。这时的温度称为液体的沸点。
纯粹的液体有机化合物在一定的压力下具有一定的沸点(沸程0.5-1.5C)。利用这一点,我们可以测定纯液体有机物的沸点。又称常量法。
o 5
有机化学实验教案——6 但是具有固定沸点的液体不一定都是纯粹的化合物,因为某些有机化合物常和其它组分形成二元或三元共沸混合物,它们也有一定的沸点。
蒸馏是将液体有机物加热到沸腾状态,使液体变成蒸汽,又将蒸汽冷凝为液体的过程。
通过蒸馏可除去不挥发性杂质,可分离沸点差大于30C的液体混合物,还可以测定纯液体有机物的沸点及定性检验液体有机物的纯度。
o
三、药品和仪器
药品
乙醇
仪器 蒸馏瓶 温度计 直型冷凝管 尾接管 锥形瓶 量筒
四、实验装置
主要由气化、冷凝和接收三部分组成,如下图所示:
1、蒸馏瓶:蒸馏瓶的选用与被蒸液体量的多少有关,通常装入液体的体积应为蒸馏瓶容积1/3-2/3。液体量过多或过少都不宜。(为什么)?在蒸馏低沸点液体时,选用长颈蒸馏瓶;而蒸馏高沸点液体时,选用短颈蒸馏瓶。
2、温度计:温度计应根据被蒸馏液体的沸点来选,低于100oC,可选用100oC温度计;高于100oC,应选用250-300oC水银温度计。
3、冷凝管:冷凝管可分为水冷凝管和空气冷凝管两类,水冷凝管用于被蒸液体沸点低于140 oC;空气冷凝管用于被蒸液体沸点高于140 oC(为什么)。
4、尾接管及接收瓶:尾接管将冷凝液导入接收瓶中。常压蒸馏选用锥形瓶为接收瓶,减压蒸馏选用圆底烧
有机化学实验教案——6 瓶为接收瓶。
仪器安装顺序为:先下后上,先左后右。卸仪器与其顺序相反。
五、实验步骤
1、加料:将待蒸乙醇40ml小心倒入蒸馏瓶中,不要使液体从支管流出。加入几粒沸石(为什么),塞好带温度计的塞子,注意温度计的位置。再检查一次装置是否稳妥与严密。
2、加热:先打开冷凝水龙头,缓缓通入冷水,然后开始加热。注意冷水自下而上,蒸汽自上而下,两者逆流冷却效果好。当液体沸腾,蒸气到达水银球部位时,温度计读数急剧上升,调节热源,让水银球上液滴和蒸气温度达到平衡,使蒸馏速度以每秒1—2滴为宜。此时温度计读数就是馏出液的沸点。
蒸馏时若热源温度太高,使蒸气成为过热蒸气,造成温度计所显示的沸点偏高;若热源温度太低,馏出物蒸气不能充分浸润温度计水银球,造成温度计读得的沸点偏低或不规则。
3、收集馏液:准备两个接受瓶,一个接受前馏分或称馏头,另一个(需称重)接受所需馏分,并记下该馏分的沸程:即该馏分的第一滴和最后一滴时温度计的读数。
在所需馏分蒸出后,温度计读数会突然下降。此时应停止蒸馏。即使杂质很少,也不要蒸干,以免蒸馏瓶破裂及发生其它意外事故。
4、拆除蒸馏装置:蒸馏完毕,先应撤出热源,然后停止通水,最后拆除蒸馏装置(与安装顺序相反)。
六、实验注意事项
1、冷却水流速以能保证蒸汽充分冷凝为宜,通常只需保持缓缓水流即可。
2、蒸馏有机溶剂均应用小口接收器,如锥形瓶。
七、思考题
1、什么叫沸点?液体的沸点和大气压有什么关系?文献里记载的某物质的沸点是否即为你们那里的沸点温度?
2、蒸馏时加入沸石的作用是什么?如果蒸馏前忘记加沸石,能否立即将沸石加至将近沸腾的液体中?当重新蒸馏时,用过的沸石能否继续使用?
3、为什么蒸馏时最好控制馏出液的速度为1-2滴/S为宜?
4、如果液体具有恒定的沸点,那么能否认为它是单纯物质?
有机化学实验教案——6
实验三 重结晶及过滤
一、实验目的
了解重结晶原理,初步学会用重结晶方法提纯固体有机化合物。掌握热过滤和抽滤操作。
通常反应生成的固体有机物含有杂质——副产物、没反应的原料、催化剂等。需选用适当的溶剂进行重晶提纯。
二、基本原理
固体有机物在溶剂中的溶解度一般随温度的生高而增大。把固体有机物溶解在热的溶剂中使之饱和,冷却时由于溶解度降低,有机物又重新析出晶体。——利用溶剂对被提纯物质及杂质的溶解度不同,使被提纯物质从过饱和溶液中析出。让杂质全部或大部分留在溶液中,从而达到提纯的目的。
注意——重结晶只适宜杂质含量在5%以下的固体有机混合物的提纯。从反应粗产物直接重结晶是不适宜的,必须先采取其他方法初步提纯,然后再重结晶提纯。
三、实验步骤
1、溶剂的选择 P68理想溶剂具备的条件,查手册、资料或通过实验来决定。
2、制饱和溶液 在溶剂沸点温度下,将被提纯物制成饱和溶液。怎么制?然后再多加20%的溶剂。(过多会损失,过少会析出。有机溶剂需要回流装置)。
若溶液含有色杂质,要加活性炭脱色。(用量为粗产品质量的1%—5%)——待溶液稍冷后加活性炭!煮沸5~10分钟。
3、热过滤
方法一:用热水漏斗趁热过滤,见装置。(预先加热漏斗,叠菊花滤纸P71,准备锥形瓶接收滤液,减少溶剂挥发用的表面皿)。若用有机溶剂,过滤时应先熄灭火焰或使用档火板。
方法二:可把布氏漏斗预先烘热,然后便可趁热过滤。可避免晶体析出而损失。
上述两种方法在过滤时,应先用溶剂润湿滤纸,以免结晶析出而阻塞滤纸孔。
4、结晶
滤液放置冷却,析出结晶。静大动小。
5、抽滤 介绍循环水泵,安全瓶,滤纸的直径应小于布氏漏斗内径!抽滤后,打开安全伐停止抽滤。用少量溶剂润湿晶体,继续抽滤,干燥。
待提纯物 乙酰苯胺 2 g
溶剂 水 70 ml
有机化学实验教案——6
实验四 水蒸气蒸馏
1、水蒸气蒸馏
水蒸气蒸馏是分离和纯化与水不相混溶的挥发性有机物常用的方法。适用范围(1)从大量树脂状杂质或不挥发性杂质中分离有机物;(2)除去不挥发性的有机杂质;(3)从固体多的反应混合物中分离被吸附的液体产物;
(4)水蒸气蒸馏常用于蒸馏那些沸点很高且在接近或达到沸点温度时易分解、变色的挥发性液体或固体有机物,除去不挥发性的杂质。但是对于那些与水共沸腾时会发生化学反应的或在100度左右时蒸气压小于1.3KPa的物质,这一方法不适用。
2、装置
常用的水蒸气蒸馏装置,它包括蒸馏、水蒸气发生器、冷凝和接受器四个部分。
水蒸汽导出管与蒸馏部分导管之间由一T形管相联结。T形管用来除去水蒸气中冷凝下来的水,有时在操作发生不正常的情况下,可使水蒸气发生器与大气相通。蒸馏的液体量不能超过其容积的1/3。水蒸气导入管应正对烧瓶底中央,距瓶底约8~10mm,导出管连接在一直形冷凝管上。见图。
水蒸气蒸馏装置
3、操作
在水蒸气发生瓶中,加入约占容器3/4的水,待检查整个装置不漏气后,旋开T形管的螺旋夹,加热至沸。当有大量水蒸气产生并从T形管的支管冲出时,立即旋紧螺旋夹,水蒸气便进入蒸馏部分,开始蒸馏。在蒸馏
有机化学实验教案——6 过程中,通过水蒸气发生器安全管中水面的高低,可以判断水蒸气蒸馏系统是否畅通,若水平面上升很高,则说明某一部分被阻塞了,这时应立即旋开螺旋夹,然后移去热源,拆下装置进行检查(通常是由于水蒸气导入管被树脂状物质或焦油状物堵塞)和处理。如由于水蒸气的冷凝而使蒸馏瓶内液体量增加,可适当加热蒸馏瓶。但要控制蒸馏速度,以2~3滴为宜,以免发生以外。
当馏出液无明显油珠,澄清透明时,便可停止蒸馏。其顺序是先旋开螺旋夹,然后移去热源,否则可能发生倒吸现象。
有机化学实验教案——6
实验五 萃取与洗涤
1、基本原理
萃取是利用物质在两种不互溶(或微溶)溶剂中溶解度或分配比的不同来达到分离。提取或纯化目的的一种操作。萃取是有机化学实验中用来提取或纯化有机化合物的常用方法之一。应用萃取可以从固体或液体混合物中提取出所需物质,也可以用来洗去混合物中少量杂杂质。通常称前者为“抽取”或萃取,后者为“洗涤”。
2、仪器的选择
液体萃取最通常的仪器是分液漏斗,一般选择容积较被萃取液大1-2倍的分液漏斗.
3、萃取溶剂
萃取溶剂的选择,应根据被萃取化合物的溶解度而定,同时要易于和溶质分开,所以最好用低沸点溶剂。一般难溶于水的物质用石油醚等萃取;较易溶者,用苯或乙醚萃取;易溶于水的物质用乙酸乙酯等萃取。
每次使用萃取溶剂的体积一般是被萃取液体的1/5~1/3,两者的总体积不应超过分液漏斗总体积的2/3
4、操作方法
在活塞上涂好润滑脂,塞后旋转数圈,使润滑脂均匀分布,再用小像皮圈套住活塞尾部的小槽,防止活塞滑脱。关好活塞,装入待萃取物和萃取溶剂。塞好塞子,旋紧。先用右手食指末节将漏斗上端玻塞顶住,再用大拇指及食指和中指握住漏斗,用左手的食指和中指蜷握在活塞的柄上,上下轻轻振摇分液漏斗,使两相之间充分接触,以提高萃取效率。每振摇几次后,就要将漏斗尾部向上倾斜(朝无人处)打开活塞放气,以解除漏斗中的压力。如此重复至放气时只有很小压力后,再剧烈振摇2~3min,静置,待两相完全分开后,打开上面的玻塞,再将活塞缓缓旋开,下层液体自活塞放出,有时在两相间可能出现一些絮状物也应同时放去。然后将上层液体从分液漏斗上口倒出,却不可也从活塞放出,以免被残留在漏斗颈上的另一种液体所沾污。
乳化现象解决的方法:(1)较长时间静置;
(2)若是因碱性而产生乳化,可加入少量酸破坏或采用过滤方法除去;
(3)若是由于两种溶剂(水与有机溶剂)能部分互溶而发生乳化,可加入少量电解质(如氯化钠等),利用盐析作用加以破坏。另外,加入食盐,可增加水相的比重,有利于两相比重相差很小时的分离;
有机化学实验教案——6(4)加热以破坏乳状液,或滴加几滴乙醇、磺化蓖麻油等以降低表面张力。
注意:使用低沸点易燃溶剂进行萃取操作时,应熄灭附近的明火。
5、化学萃取
化学萃取(利用萃取剂与被萃取物起化学反应)也是常用的分离方法之一,主要用于洗涤或分离混合物,操作方法和前面的分配萃取相同。例如,利用碱性萃取剂从有机相中萃取出有机酸,用稀酸可以从混合物中萃取出有机碱性物质或用于除去碱性杂质,用浓硫酸从饱和烃中除去不饱和烃,从卤代烷中除去醇及醚等。
6、液-固萃取
自固体中萃取化合物,通常是用长期浸出法或采用脂肪提取器,前者是靠溶剂长期的浸润溶解而将固体物质中的需要成分浸出来,效率低,溶剂量大
脂肪提取器是利用溶剂回流和虹吸原理,是固体物质每一次都能被纯的溶剂所萃取,因而效率较高,为增加液体浸溶的面积,萃取前应先将物质研细,用滤纸套包好置于提取器中,提取器下端接盛有萃取剂的烧瓶,上端接冷凝管,当溶剂沸腾时,冷凝下来的溶剂滴入提取器中,待液面超过虹吸管上端后,即虹吸流回烧瓶,因而萃取出溶于溶剂的部分物质。就这样利用溶剂回流和虹吸作用,是固体中的可溶物质富集到烧瓶中,提取液浓缩后,将所得固体进一步提纯。
有机化学实验教案——6
实验六 减压蒸馏
1、减压蒸馏
液体的沸点是指它的蒸气压等于外界压力时的温度,因此液体的沸点是随外界压力的变化而变化的,如果借助于真空泵降低系统内压力,就可以降低液体的沸点,这便是减压蒸馏操作的理论依据。
减压蒸馏是分离可提纯有机化合物的常用方法之一。它特别适用于那些在常压蒸馏时未达沸点即已受热分解、氧化或聚合的物质。
2、装置
减压蒸馏装置主要由蒸馏、抽气(减压)、安全保护和测压四部分组成。蒸馏部分由蒸馏瓶、克氏蒸馏头、毛细管、温度计及冷凝管、接受器等组成。克氏蒸馏头可减少由于液体暴沸而溅入冷凝管的可能性;而毛细管的作用,则是作为气化中心,使蒸馏平稳,避免液体过热而产生暴沸冲出现象。毛细管口距瓶底约1~2mm,为了控制毛细管的进气量,可在毛细玻璃管上口套一段软橡皮管,橡皮管中插入一段细铁丝,并用螺旋夹夹住。蒸出液接受部分,通常用多尾接液管连接两个或三个梨形或圆形烧瓶,在接受不同馏分时,只需转动接液管,在减压蒸馏系统中切勿使用有裂缝或薄鄙的玻璃仪器。尤其不能用不耐压的平底瓶(如锥形瓶等),以防止内向爆炸。抽气部分用减压泵,最常见的减压泵有水泵和油泵两种。安全保护部分一般有安全瓶,若使用油泵,还必须有冷阱、及分别装有粒状氢氧化钠、块状石蜡及活性炭或硅胶、无水氯化钙等吸收干燥塔,以避免低沸点溶剂,特别是酸和水汽进入油泵而降低泵的真空效能。所以在油泵减压蒸馏前必须在常压或水泵减压下蒸除所有低沸点液体和水以及酸、碱性气体。测压部分采用测压计,常用的测压计。
3、操作方法
仪器安装好后,先检查系统是否漏气,方法是:关闭毛细管,减压至压力稳定后,夹住连接系统的橡皮管,观察压力计水银柱有否变化,无变化说明不漏气,有变化即表示漏气。为使系统密闭性好,磨口仪器的所有接口部分都必须用真空油脂润涂好,检查仪器不漏气后,加入待蒸的液体,量不要超过蒸馏瓶的一半,关好安全瓶上的活塞,开动油泵,调节毛细管导入的空气量,以能冒出一连串小气泡为宜。当压力稳定后,开始加热。液体沸腾后,应注意控制温度,并观察沸点变化情况。待沸点稳定时,转动多尾接液管接受馏分,蒸馏速度以0.5~1滴/S为宜.蒸馏完毕,除去热源,慢慢旋开夹在毛细管上的橡皮管的螺旋夹,待蒸馏瓶稍冷后再慢慢开启安全瓶上的活塞,平衡内外压力,(若开得太快,水银柱很快上升,有冲破测压计的可能),然后才关闭抽气泵.有机化学实验教案——6
实验七 环己烯的制备
一、实验目的
1、熟悉环己烯反应原理,掌握环己烯的制备方法。
2、学习分液漏斗的使用,复习分馏操作。
二、实验原理
三、试剂
环己烯
浓硫酸
食盐
无水氯化钙
5% 碳酸钠
四、实验步骤
在50毫升干燥的圆底烧瓶中,放入15g环己烯(15.6ml,0.15mol)、1ml浓硫酸和几粒沸石,充分振摇使混合均匀。烧瓶上装一短的分馏柱作分馏装置,接上冷凝管,用锥形瓶作接受器,外用冰水冷却。
将烧瓶在石棉网上用小火慢慢加热,控制加热速度使分馏柱上端的温度不要超过90℃,馏液为带水的混合物。当烧瓶中只剩下很少量的残渣并出现阵阵白雾时,即可停止蒸馏。全部蒸馏时间约需lh。
将蒸馏液用精盐饱和,然后加入3—4ml 5%碳酸钠溶液中和微量的酸。将此液体倒入小分液漏斗中,振摇后静置分层。将下层水溶液自漏斗下端活塞放出、上层的粗产物自漏斗的上口倒入干燥的小锥形瓶中,加入1-2克无水氯化钙干燥。
将干燥后的产物滤入干燥的蒸馏瓶中,加入沸石后用水浴加热蒸馏。收集80-85℃的馏分于一已称重的干燥小锥形瓶中。产率7-8g。
有机化学实验教案——6 ÎÂ¶È¼Æ ÎÂ¶È¼Æ ÕôÁóÍ·Ö±ÐÎÀäÄý¹Ü ½ÓÊÜÍäÍ· Ö±ÐÎÀäÄý¹Ü ½ÓÊÜÍäÍ·Ô²µ×ÉÕÆ¿·ÖÁóÖù ׶ÐÎÆ¿Ô²µ×ÉÕÆ¿ ׶ÐÎÆ¿
分馏装置
蒸馏装置
五、注意事项
1、环己醇在常温下是粘碉状液体,因而若用量筒量取时应注意转移中的损失,环己烯与硫酸应充分混合,否则在加热过程中可能会局部碳化。
2、最好用简易空气浴,使蒸馏时受热均匀。由于反应中环己烯与水形成共沸物(沸点70.8℃,含水l0%);环己醇与环己烯形成共沸物(沸点64.9℃,含环己醇30.5%);环己醇与水形成共沸物(沸点97.8℃,含水80%)。因比在加热时温度不可过高,蒸馏速度不宜太快。以减少末作用的环己醇蒸出。
3、水层应尽可能分离完全,否则将增加无水氯化钙的用量,使产物更多地被干燥剂吸附而招致损失,这里用无水氯化钙干燥较适合,因它还可除去少量环己醇。
4、在蒸馏已干燥的产物时,蒸馏所用仪器都应充分干燥。
六、思考题
1、在粗制的环己烯中,加入精盐使水层饱和的目的何在? 2、在蒸馏终止前,出现的阵阵白雾是什么? 3、下列醇用浓硫酸进行脱水反应的主要产物是什么?
①3-甲基-l-丁醇 ②3-甲基-2-丁醇
②3,3-二甲基-2-丁醇
有机化学实验教案——6 蒸馏、分馏和沸点的测定
一、实验目的和基本要求
蒸馏和分馏的基本原理是一样的,都是利用有机物质的沸点不同,在蒸馏过程中低沸点的组分先蒸出,高沸点的组分后蒸出,从而达到分离提纯的目的。不同的是,分馏是借助于分馏柱使一系列的蒸馏不需多次重复,一次得以完成的蒸馏(分馏就是多次蒸馏),应用范围也不同,蒸馏时混合液体中各组分的沸点要相差30℃以上,才可以进行分离,而要彻底分离沸点要相差110℃以上。分馏可使沸点相近的互溶液体混合物(甚至沸点仅相差1-2℃)得到分离和纯化。通过实验使学生:
(1)理解蒸馏和分馏的基本原理,应用范围,什么情况下用蒸馏,什么情况下用分馏。(2)熟练掌握蒸馏装置的安装和使用方法。
(3)掌握分馏柱的工作原理和常压下的简单分馏操作方法。
二、基本原理
当液态物质受热时蒸气压增大,待蒸气压大到与大气压或所给压力相等时液体沸腾,即达到沸点。所谓蒸馏就是将液态物质加热到沸腾变为蒸气,又将蒸气冷却为液体这两个过程的联合操作。
分馏:如果将两种挥发性液体混合物进行蒸馏,在沸腾温度下,其气相与液相达成平衡,出来的蒸气中含有较多量易挥发物质的组分,将此蒸气冷凝成液体,其组成与气相组成等同(即含有较多的易挥发组分),而残 留物中却含有较多量的高沸点组分(难挥发组分),这就是进行了一次简单的蒸馏。
如果将蒸气凝成的液体重新蒸馏,即又进行一次气液平衡,再度产生的蒸气中,所含的易挥发物质组分又有增高,同样,将此蒸气再经冷凝而得到的液体中,易挥发物质的组成当然更高,这样我们可以利用一连串的有系统的重复蒸馏,最后能得到接近纯组分的两种液体。
应用这样反复多次的简单蒸馏,虽然可以得到接近纯组分的两种液体,但是这样做既浪费时间,且在重复多次蒸馏操作中的损失又很大,设备复杂,所以,通常是利用分馏柱进行多次气化和冷凝,这就是分馏。
有机化学实验教案——6 在分馏柱内,当上升的蒸气与下降的冷凝液互凝相接触时,上升的蒸气部分冷凝放出热量使下降的冷凝液部分气化,两者之间发生了热量交换,其结果,上升蒸气中易挥发组分增加,而下降的冷凝液中高沸点组分(难挥发组分)增加,如果继续多次,就等于进行了多次的气液平衡,即达到了多次蒸馏的效果。这样靠近分馏柱顶部易挥发物质的组分比率高,而在烧瓶里高沸点组分(难挥发组分)的比率高。这样只要分馏柱足够高,就可将这种组分完全彻底分开。工业上的精馏塔就相当于分馏柱。
三、操作要点和说明
1、进行蒸馏操作时,有时发现馏出物的沸点往往低于(或高于)该化合物的沸点,有时馏出物的温度一直在上升,这可能是因为混合液体组成比较复杂,沸点又比较接近的缘故,简单蒸馏难以将它们分开,可考虑用分馏。
2、沸石的加入 为了清除在蒸馏过程中的过热现象和保证沸腾的平稳状态,常加沸石,或一端封口的毛细管,因为它们都能防止加热时的暴沸现象,把它们称做止暴剂又叫助沸剂,值得注意的是,不能在液体沸腾时,加入止暴剂,不能用已使用过的止暴剂。
3、蒸馏及分馏效果好坏与操作条件有直接关系,其中最主要的是控制馏出液流出速度,以1-2滴/s为宜(lml/min),不能太快,否则达不到分离要求。
4、当蒸馏沸点高于140℃的物质时,应该使用空气冷凝管。
5、如果维持原来加热程度,不再有馏出液蒸出,温度突然下降时,就应停止蒸馏,即使杂质量很少也不能蒸干,特别是蒸馏低沸点液体时更要注意不能蒸干,否则易发生意外事故。蒸馏完毕,先停止加热,后停止通冷却水,拆卸仪器,其程序和安装时相反。
6、蒸馏低沸点易燃吸潮的液体时,在接液管的支管处,连一于燥管,再从后者出口处接胶管通入水槽或室外,并将接受瓶在冰浴中冷却。
7、简单分馏操作和蒸馏大致相同,要很好地进行分馏,必须注意下列几点:
(1)分馏一定要缓慢进行,控制好恒定的蒸馏速度(1-2/s),这样,可以得到比较好的分馏效果。
有机化学实验教案——6(2)要使有相当量的液体沿柱流回烧瓶中,即要选择合适的回流比,使上升的气流和下降液体充分进行热交换,使易挥发组分量上升,难挥发组分尽量下降,分馏效果更好。
(3)必须尽量减少分馏柱的热量损失和波动。柱的外围可用石棉绳包住,这样可以减少柱内热量的散发,减少风和室温的影响也减少了热量的损失和波动,使加热均匀,分馏操作平稳地进行。
四、思考题
1、什么叫沸点?液体的沸点和大气压有什么关系?文献里记载的某物质的沸点是否即为你们那里的沸点温度?
答:将液体加热,其蒸气压增大到和外界施于液面的总压力(通常是大气压力)相等时,液体沸腾,此时的温度即为该液体的沸点。
文献上记载的某物质的沸点不一定即为我们那里的沸点度,通常文献上记载的某物质的沸点,如不加说明,一般是一个大气压时的沸点,如果我们那里的大气压不是一个大气压的话,该液体的沸点会有变化。
2、蒸馏时加入沸石的作用是什么?如果蒸馏前忘记加沸石,能否立即将沸石加至将近沸腾的液体中?当重新蒸馏时,用过的沸石能否继续使用?
答:加入沸石的作用是起助沸作用,防止暴沸,因为沸石表面均有微孔,内有空气,所以可起助沸作用。不能将沸石加至将近沸腾的液体中,那样溶液猛烈暴沸,液体易冲出瓶口,若是易燃液体,还会引起火灾,要等沸腾的液体冷下来再加。
用过的沸石一般不能再继续使用,因为它的微孔中已充满或留有杂质,孔经变小或堵塞,不能再起助沸作用。
3、为什么蒸馏时最好控制馏出液的速度为1-2滴/s为宜?
答:在整个蒸馏过程中,应使温度计水银球上常有被冷凝的液滴,让水银球上液滴和蒸气温度达到平衡。所以要控制加热温度,调节蒸馏速度,通常以1-2滴/s为宜,否则不成平衡。蒸馏时加热的火焰不能太大,否则会在蒸馏瓶的颈部造成过热现象,使一部分液体的蒸气直接受到火焰的热量,这样由温度计读得的沸点会 18
有机化学实验教案——6 偏高;另一方面,蒸馏也不能进行的太慢,否则由于温度计的水银球不能为馏出液蒸气充分浸润而使温度计上所读得的沸点偏低或不规则。
4、如果液体具有恒定的沸点,那么能否认为它是单纯物质?
答:纯粹的液体有机化合物,在一定的压力下具有一定的沸点,但是具有固定沸点的液体不一定都是纯粹的化合物,因为某些有机化合物常和其它组分形成二元或三元共沸混合物,它们也有一定的沸点。
5、分馏和蒸馏在原理及装置上有哪些异同?如果是两种沸点很接近的液体组成的混合物能否用分馏来提纯呢?
答:利用蒸馏和分馏来分离混合物的原理是一样的,实际上分馏就是多次的蒸馏。分馏是借助于分馏往使一系列的蒸馏不需多次重复。一次得以完成的蒸馏。
现在,最精密的分馏设备已能将沸点相差仅1-2℃混合物分开,所以两种沸点很接近的液体组成的混合物能用分馏来提纯。
6、若加热太快,馏出液>1-2滴/s(每秒种的滴数超过要求量),用分馏分离两种液体的能力会显著下降,为什么?
答:因为加热太快,馏出速度太快,热量来不及交换(易挥发组分和难挥发组分),致使水银球周围液滴和蒸气未达平衡,一部分难挥发组分也被气化上升而冷凝,来不及分离就一道被蒸出,所以分离两种液体的能力会显著下降。
7、用分馏柱提纯液体时,为了取得较好的分离效果,为什么分馏柱必须保持回流液?
答:保持回流液的目的在于让上升的蒸气和回流液体,充分进行热交换,促使易挥发组分上升,难挥发组分下降,从而达到彻底分离它们的目的。
8、在分离两种沸点相近的液体时,为什么装有填料的分馏柱比不装填料的效率高?
答:装有填料的分馏柱上升蒸气和下降液体(回流)之间的接触面加大,更有利于它们充分进行热交换,使易挥发的组分和难挥发组分更好地分开,所以效率比不装填料的要高。
9、什么叫共沸物?为什么不能用分馏法分离共沸混合物?
有机化学实验教案——6 答:当某两种或三种液体以一定比例混合,可组成具有固定沸点的混合物,将这种混合物加热至沸腾时,在气液平衡体系中,气相组成和液相组成一样,故不能使用分馏法将其分离出来,只能得到按一定比例组成的混合物,这种混合物称为共沸混合物或恒沸混合物。
10、在分馏时通常用水浴或油浴加热,它比直接火加热有什么优点?
答:在分馏时通常用水浴或油浴,使液体受热均匀,不易产生局部过热,这比直接火加热要好得多。
第四篇:《C程序设计》实验教案
《C程序设计》实验教案
一、实验的目的与任务:
《C程序设计》是一门实践性很强的课程。通过实验使学生加深对课堂讲授的概念、语法、算法、编程技术的理解;熟悉C程序设计的开发环境;掌握程序设计和调试的基本技能。并通过实践激发学生进一步学习的积极性,培养学生的学习兴趣和创新思维。通过8个实验,使学生经过一定数量的上机训练,了解和掌握C程序设计的环境、程序的数据表示、程序的执行流程控制、程序的整体结构等C程序设计的基本概念和应用技术。
二、实验项目与要求
实验一:C程序的运行环境和运行一个C程序的方法(2学时)
实验性质:验证性实验
一、实验目的
1.了解所用的计算机系统的基本操作方法,学会独立使用该系统。2.了解在该系统上如何编辑、编译、连接和运行一个C程序。3.通过运行简单的C程序,初步了解C源程序的特点。
二、实验内容
1.调用编辑程序,输入教材第一章习题1.1程序,并进行编译和运行。应了解所用的系统是用什么命令进行编译和连接运行的。编译和连接后所得到的目标程序的后缀是什么形式的?
2.输入并运行教材第一章中习题1.4。
3.输入并运行教材第一章中习题1.9,了解如何在运行时向程序变量输入数据。
实验二 数据类型、运算符和表达式(2学时)
实验性质:验证性实验
一、实验目的
1.掌握C语言数据类型,熟悉如何定义一个整型、字符型、实型变量,以及对它们赋值的方法,了解以上类型数据输出时所用格式转换符。
2.学会使用C的有关算术运算符,以及包含这些运算符的表达式,特别是自加(++)和自减(--)运算符的使用。
3.进一步熟悉C程序的编辑、编译、连接和运行的过程。
二、实验内容
1.输入并运行教材第三章例3.6.即: #include
printf(“%c %cn”,c1,c2); printf(“%d %dn”,c1,c2); } 在此基础上 ①将第二行改为: int c1,c2;再使之运行,分析结果。②再将第三行、第四行改为: c1=300;c2=400;再使之运行,分析其运行结果。
2.输入并运行教材第三章习题3.6,在上机前先用人工分析程序写出应得结果,上机后将二者对照。
3.输入并运行习题3.10。即: #include
printf(“%d,%d,%d,%d”,i,j, i++,j++);⑤程序改为: main(){int i,j,m=0,n=0;;i=8;j=10;m+=i++;n-=--j;printf(“i=%d,j=%d,m=%d,n=%d”,i,j,m,n);}
实验三 最简单的C程序设计(2学时)
实验性质:验证性实验
一、实验目的
1.掌握C语言中使用最多的一种语句—赋值语句的使用。2.掌握数据的输入输出的方法,能正确使用各种格式转换符。
二、实验内容
1.输入并运行以下程序: #include
void main(){int a,b; float d,e; char c1,c2; double f,g; long m,n;
unsigned int p,q; a=61;b=62; c1=’a’;c2=’b’; d=3.56;e=-6.87;
f=3157.890121;g=0.123456789; m=50000;n=-60000; p=32768;q=40000;
printf(“a=%d,b=%dn c1=%c,c2=%cnd=%6.2f,e=%6.2fn”,a,b,c1,c2,d,e);
printf(“f=%15.6f,g=%15.12fnm=%ld,n=%ldnp=%u,q=%un”,f,g,m,m,p,q); } 在此基础上,做以下改动: ① 将程序第8-13行改为: a=61;b=62; c1=a;c2=b;
f=3157.890121;g=0.123456789; d=f;e=g;
p=a=m=50000;q=b=n=-60000; 运行程序,分析结果。
② 在①的基础上将printf语句改为:
printf(“a=%d,b=%dn c1=%c,c2=%cnd=%15.6f,e=%15.12fn”,a,b,c1,c2,d,e);
printf(“f=%f,g=%fn m=%ld,n=%ldn p=%d,q=%dn”,f,g,m,n,p,q); 运行程序。
2.编写程序,用getchar函数读入两个字符c1、c2,然后分别用putchar函数和printf函数输出这两个字符。
上机运行程序,比较用printf和putchar函数输出字符的特点。
实验四 选择结构程序设计(2学时)
实验性质:设计性实验
一、实验目的
1.了解C语言表示逻辑量的方法(以0代表“假”,以1代表“真”); 2.学会正确使用逻辑运算符和逻辑表达式; 3.熟练掌握if语句和switch语句。
二、实验内容
先编程序,解决以下问题,然后上机调试运行程序。1.有一个函数
xy2x13x11x11x10 x10用scanf函数输入x的值(分别为x<1、1~
10、≥10三种情况),求y值。2.给出一个百分制成绩,要求输出成绩等级‘A’,‘B’,‘C’,‘D’,‘E’。90分以上为‘A’,80~89分为‘B’,70~79分为‘C’,60~69分为‘D’,60分以下为‘E’。
实验五 循环控制(4学时)
实验性质:设计性实验
一、实验目的
1.熟悉用while语句,do-while语句和for语句实现循环的方法。2.掌握在程序设计中用循环的方法实现各种算法(如穷举、迭代、递推等)。
二、实验内容
编程序并上机调试运行。
1.输入两个正整数,求其中最大公约数和最小公倍数。2.用牛顿迭代法求方程2x-4x+3x-6=0在1.5附近的根。
32实验六 数组(4学时)
实验性质:设计性实验
一、实验目的
1.掌握一维数组和二维数组的定义、赋值和输入输出的方法; 2.掌握字符数组和字符串函数的使用。3.掌握与数组有关的算法(特别是排序算法)。
二、实验内容
编程序并上机调试运行。
1.用选择法对10个整数排序。10个整数用scanf函数输入。2.将两个字符串连接起来,不要用strcat函数。
实验七 函数(4学时)
实验性质:设计性实验
一、实验目的
1.掌握定义函数的方法;
2.掌握函数实参与形参的对应关系,以及“值传递”的方式; 3.掌握函数的嵌套调用和递归调用的方法;
4.掌握全局变量和局部变量,动态变量和静态变量的概念和使用方法。
二、实验内容
编程序并上机调试运行。
1.写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的信息。2.求两个整数的最大公约数和最小公倍数,用一个函数求最大公约数。用另一函数根据求出的最大公约数求最小公倍数。
(1)用全局变量的方法。将两个整数的最大公约数、最小公倍数都设为全局变 量。
(2)不用全局变量,两个整数在主函数中输入,并传送给函数1,求出的最大公约数返回主函数,然后再与两个整数一起作为实参传递给函数2,以求出最小公倍数,返回到主函数输出最大公约数和最小公倍数。
实验八 预处理命令(2学时)
实验性质:设计性实验
一、实验目的
1.掌握宏定义的方法; 2.掌握文件包含处理方法; 3.掌握条件编译的方法。
二、实验内容
编程序并上机调试运行。
1.定义一个带参数的宏,使两个参数的值互换。在主函数中输入两个数作为使用宏的实参,输出已交换后的两个值。
说明:在程序主函数使用宏时只能用两个实参,如SWAP(a,b),不能用三个参数。2.用条件编译方法实现以下功能:
输入一行电报文字,可以任选两种输出,一为原文输出;一为将字母变成其下字母(如‘a’变成‘b’,„,‘z’变成‘a’。其它字符不变)。用#define命令来控制是否要译成密码。例如: #define CHANGE 1 则输出密码。若 #define CHANGE 0 则不译成密码,按原码输出。用条件编译方法来处理。
实验九 指针(4学时)
实验性质:设计性实验
一、实验目的 1.掌握指针的概念,会定义和使用指针变量; 2.学会使用数组的指针和指向数组的指针变量; 3.学会使用字符串的指针和指向字符串的指针变量; 4.学会使用指向函数的指针变量;
二、实验内容
编程序并上机调试运行程序(都要求用指针处理)。1.输入三个整数,按由小到大的顺序输出。
2.将一个3*3的矩阵转置,用一函数实现之。在主函数中用scanf函数输入以下矩阵元素:
17 133915511 19将数组名作为函数实参。函数调用后在主函数中输出已转置的矩阵。3.用一个函数实现两个字符串的比较,即自己写一个strcmp函数: strcmp(s1,s2)如果s1=s2,则函数返回值为0;如果s1≠s2,返回它们二者第一个不同字符的ASCII码差值(如“BOY”与“BAD”,第二个字母不同,“O”与“A”之差为79-65=14);如果s1>s2,则输出正值;如s1 两个字符串s1,s2由main函数输入,strcmp函数的返回值也在main函数输出。 实验十 结构体和共用体(4学时) 实验性质:设计性实验 一、实验目的 1.掌握结构体类型变量的定义和使用; 2.掌握结构体类型数组的概念和应用; 3.掌握共用体的概念与使用。 二、实验内容 编程序,然后上机调试运行。 1.有5个学生,每个学生的数据包括学号、姓名、三门课的成绩,从键盘输入5 8 个学生数据,要求打印出三门课总平均成绩,以及最高分的学生的数据(包括学号、姓名、三门课的成绩、平均分数)。 要求用一个input函数输入5个学生数据;用一个average函数求总平均分;用max函数找出最高分学生数据;总平均分和最高分的学生的数据都在主函数中输出。 2.输入和运行以下程序: #include union data {int i[2]; float a; long b; char c[4]; }; void main(){union data u; scanf(“%d,%d”,&u.i[0],&u.i[1]); printf(“i[0]=%d,i[1]=%dna=%fnb=%ldnc[0]=%c,c[1]=%c,c[2]=%c,c[3]=%cn”,u.i[0],u.i[1],u.a,u.b,u.c[0],u.c[1],u.c[2],u.c[3]);} 输入两个整数10000、20000给u.i[0]和u.i[1]。分析运行结果。 然后将scanf语句改为: scanf(“%ld”,&u.b); 输入60000给b。分析运行结果。 实验十一 文件(2学时) 实验性质:设计性实验 一、实验目的 1.掌握文件以及缓冲文件系统、文件指针的概念; 2.学会使用文件打开、关闭、读、写等文件操作函数。3.学会用缓冲文件系统对文件进行简单的操作。 二、实验内容 1.从键盘输入一个字符,将其中的小写字母全部转换成大写字母,然后输出到一个磁盘文件“test”中保存。输入的字符以“!”结束。 实验十二 学生成绩管理(4学时) 实验性质:综合性设计性实验 一、实验目的 1.综合运用C程序设计知识,解决实际问题。 二、实验内容 1.有5个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号、姓名、三门课成绩),计算出平均成绩,将原有数据和计算出的平均分数存放在磁盘文件“stud”中。 2.将上题“stud”文件中的学生数据,按平均分进行排序处理,将已排序的学生数据存入一个新文件“stu-sort”中。 3.将上题已排序的学生成绩文件进行插入处理。插入一个学生的三门课成绩。程序先计算新插入学生的平均成绩,然后将它按成绩高低顺序插入,插入后建立一个新文件。 学生的原有数据为: 91101 Wang 89,98,67.5 91103 Li 60,80,90 91106 Fun 75.5,91.5,99 91110 Ling 100,50,62.5 91113 Yuan 58,68,71 要插入的学生数据为: 91108 Xin 90,95,60 10 C语言程序设计实验教案 目 录 实验一visual c++编译环境的使用..............................................................................2 实验二 顺序程序设计...............................................................................................6 实验三 选择结构程序设计........................................................................................9 实验四 循环结构程序设计......................................................................................13 实验五 函数...........................................................................................................17 实验六 指针...........................................................................................................22 实验七 数组...........................................................................................................25 实验八 结构体........................................................................................................32 实验一visual c++编译环境的使用 实验目的: 1.掌握c程序设计编程环境visual c++,掌握运行一个c程序设计的基本步骤,包括编辑、编译、连接和运行。 2.掌握c语言程序设计的基本框架,能够编写简单的c程序。3.了解程序调试的思想,能找出并改正c程序中的语法错误。实验内容: 1.在“我的电脑”上新建一个文件夹,用于存放c程序,文件夹名字可以是学号姓名。2.调试示例,在屏幕上显示一个短句“Hello World!”。 源程序 #include Hello World!基本步骤:(要求熟练掌握)1)启动VC++ “开始”->“程序”->“Microsoft Visual Studio 6.0”->“Microsoft Visual C++6.0”进入VC++编程环境。2)新建文件(*.cpp) “文件”->“新建”,单击“文件”选项卡,选择“C++Source Files”,修改文件保存“目录”和“文件”(文件名),单击“确定”。 3)编辑和保存(注意:源程序一定要在英文状态下输入,即字符标点都要在半角状态下,同时注意大小写,一般都用小写) 在编辑窗口输入源程序,然后执行“文件”->“保存”或“文件”->“另存为” 4)编译(*.obj) 用来检查语法错误 “编译”->“编译”或Ctrl+F7,在产生的工作区队话框中,选择“是”。5)连接(*.exe)“编译”->“构件”或F7 6)运行 “编译”->“执行”或Ctrl+F5 7)关闭程序工作区 “文件”->“关闭工作区” 8)打开文件 “文件”->“打开” 9)查看C源文件、目标文件和可执行文件的存放位置。 源文件在保存目录下,目标文件和可执行文件在“保存目录Debug”中 3.编程,在屏幕上显示一个短句“this is my first c program.”。4.调试示例,在屏幕上显示一个短句“welcome to you!”。源程序(有错误的程序)#include 1)按照实验2中介绍的步骤1)~3)输入上述源程序并保存。 2)编译,“编译”->“编译”(Ctrl+F7),信息窗口中显示编译出错信息,如下图所示。3)找出错误,在信息窗口中依次双击出错信息,编辑窗口就会出现一个箭头指向程序出错的位置,一般在箭头的当前行或上一行,可以找到出错语句。 第4行,出错信息:Welcome是一个未定义的变量,但Welcome并不是变量,出错的原因是Welcome前少了一个双引号。 4)改正错误,重新编译,得下如下图所示出错信息。 出错信息:“}”前少了分号。 5)再次改正错误,在“}”前即printf()后加上“;”(英文状态),生新编译,显示正确 6)连接,“编译”->“构件”(F7),出现如下出错信息。 出错信息:缺少主函数。 7)改正错误,即把“mian”改为“main”后,重新连接,信息窗口显示连接正确。8)运行,“编译”->“执行”(Ctrl+F5),观察结果是否与要求一致。5.改错,改正下列程序中的错误,在屏幕上显示以下3行信息。 **************** Welcome **************** 源程序(有错误的程序)#include } 实验报告要求 将以上各题的源程序、运行结果,以及实验中遇到的问题和解决问题的方法,以及实验过程中的心得体会,写在实验报告上。 Printf(“ Welcome”)Printf(“****************n”); 实验二 顺序程序设计 【实验目的】 1.学会顺序程序设计的思想 2.进一步熟悉Turbo C集成编译环境的使用,达到熟练使用的目的 3.熟练掌握各种数据类型的输入输出格式,并学会使用输入输出函数 4.学会使用表达式 【实验内容】 1.在屏幕中输出一行文字“Hello,Welcome!” 说明: (1)只需要在屏幕中显示一行文字即可 参考程序如下: #include printf(“Hello,Welcome!n”);} 2. 输入一个华氏温度,要求输出摄氏温度。公式为 输出要求有文字说明,取两位小数 说明: (1)摄氏温度F和华氏温度c都应用float类型变量存储(2)注意表达式书写中的各变量的顺序问题(3)输出时只需输出两位小数 参考程序如下: #include float F,c; printf(“input F:”); scanf(“%f”,&F); c=5*(F-32)/9; printf(“c=%.2fn”,c);} 3.输入三角形三边长a、b、c,求三角形周长和l面积s。用scanf输入数据,输出计算结果,输出时要求有文字说明,取消书店后两位小数。说明: (1)程序设计中使用的所有变量均为float类型 c59F32(2)三角形周长公式:labc abc2(3)三角形面积公式;sp(pa)(pb)(pc),其中 p (4)注意应保证输入数据能够构成三角形 (5)需要使用开根号函数sqrt,在程序顶部加上#include #include float a,b,c,l,s; float p; printf(“input a,b,c:”); scanf(“%f,%f,%f”,&a,&b,&c); l=a+b+c; p=(a+b+c)/2; s=sqrt(p*(p-a)*(p-b)*(p-c)); printf(“l=%.2fn”,l);printf(“s=%.2fn”,s);} 4.设圆半径r1.5,圆柱高h3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输入数据,输出计算结果,输出时要求有文字说明,取消书店后两位小数。说明: (1)程序设计中使用的所有变量均为float类型(2)圆周长公式:l2r(3)圆面积公式:S1r(4)圆球表面积公式:S24r V14322(5)圆球体积公式: r3 (6)圆柱体积公式:V2rh 参考程序如下: #include 2main(){ float r=1.5,h=3; float l,s1,s2,v1,v2; l=2*PI*r; s1=PI*r*r; s2=4*PI*r*r; v1=4*PI*r*r*r/3; v2=PI*r*r*h; printf(“l=%.2fn”,l);printf(“s1=%.2fn”,s1);printf(“s2=%.2fn”,s2);printf(“v1=%.2fn”,v1);printf(“v2=%.2fn”,v2);} 实验三 选择结构程序设计 【实验目的】 1.了解C语言的逻辑运算 2.学会使用if语句和switch语句 3.熟练掌握选择结构程序设计方法 【实验内容】 1.有一函数 y x x1 1x10 2x 13x11 x10 写一程序,输入x,输出y值 说明: (1)根据输入x的不同求y的值,使用if语句 (2)分别输入三个分段中的三个数,判断输出结果是否正确,测试程序正确与否 参考程序如下: #include float x,y; printf(“input x:”); scanf(“%f”,&x); if(x<1) y=x; if(x>=1 && x<10) y=2*x-1; if(x>=10) y=3*x-11;printf(“y=%fn”,y);} 2.从键盘输入一个字符,可以是数字、字母、或是标点符号,对输入的字符进行判断,如果是数字则输出“* is a number!”,如果是字母则输出“* is a letter!”,如果是其他的字符怎输出“* is the other!”(*为输入的字符)说明: (1)从键盘输入一个字符,用char类型变量存储(2)使用if语句作判断(3)判断条件根据输入字符的ASCII码值的范围,具体的ASCII码值参看书后的ASCII码表 参考程序如下: #include char c; printf(“input a char:”); scanf(“%c”,&c); if(c>=48 && c<=57) printf(“%c is a number!n”,c); else if((c>=65 && c<=90)||(c>=97 && c<=122)) printf(“%c is a letter!n”,c); else printf(“%c is the other!n”,c);} 3.输入两个实数a、b,保证变量a中存储的是较大的数,变量b中存储的实较小的数,并按照由大到小的顺序输出。说明: (1)需要对输入的两个数进行比较,判断是否需要交换两个数(2)按照从大到小的顺序输出两个数 参考程序如下: #include float a,b; float temp; printf(“input a,b:”); scanf(“%f,%f”,&a,&b); if(a { temp=a; } printf(“%f,%fn”,a,b);} 4.输入一年份,判断该年是否是闰年。说明: (1)判断闰年的条件:能够被4整除,但不能被100整除或者能被100整除,又能被400整除 (2)使用一个变量来代表是否是闰年 a=b;b=temp;10(3)如果是闰年则输出“* is a leap year!”,否则输出“* is not a leap year!”。*代表输入的年份 参考程序如下: #include int year; int flag=0; printf(“input a year:”); scanf(“%d”,&year); if((year%4==0 && year%100!=0)||(year%100==0 && year%400==0)) flag=1; if(flag==1) printf(“%d is a leap year!n”,year); else printf(“%d is not a leap year!n”,year);} 5.从键盘输入一个月号,显示输出该月号的英文名称 说明: (1)使用if语句较为麻烦,因为需要做12次比较(2)使用switch语句 (3)如果输入月份超出范围,则应当输出错误信息 参考程序如下: #include int month; printf(“input a month:”); scanf(“%d”,&month); switch(month) { case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: printf(“January!n”);printf(“February!n”);break;break;printf(“March!n”);break;printf(“April!n”);break;printf(“May!n”);break;printf(“June!n”);break;printf(“July!n”);break;printf(“August!n”);break;printf(“September!n”);break;case 10: printf(“October!n”);break;case 11: printf(“November!n”);break;case 12: printf(“December!n”);break; } } default: printf(“input error!n”);12 实验四 循环结构程序设计 【实验目的】 1.学会使用while、do-while、for语句 2.熟练掌握循环结构程序设计方法 3.掌握选择结构与循环结构的嵌套 【实验内容】 201.求和说明: n!n1(即求1!+2!+„„+20!) (1)首先要求出每一项的n!的值 (2)然后把各项相加得到所求的值 (3)存储求和运算结果的变量的初始值应为0(4)存储求积运算结果的变量的初始值应为1 参考程序如下: ①使用while循环 #include float sum=0; float mid=1; int n=1; while(n!=21) { mid=mid*n; } printf(“sum=%fn”,sum);} ②使用for循环 #include float sum=0; float mid=1; int n; for(n=1;n<=20;n++) { mid=mid*n;n++;sum=sum+mid; sum=sum+mid;} printf(“sum=%fn”,sum);} 2.求出100到200以内最大的素数和最小的素数,并求出两者的差值 说明: (1)素数的概念:只能被1和自身整除的正整数 (2)分别求出这个两个素数,并输出,输出格式为: big one:* small one:* 最小的素数正序找出 最大的素数倒序找出 (3)求出两者的差,并输出,输出格式为: result:* 参考程序如下: #include int big,small; int result; } for(i=200;i>=100;i--){ int i,j;int flag;for(i=100;i<200;i++){ flag=0;for(j=2;j } if(i%j==0){ } flag=1;break;if(flag==0){ } small=i;break;flag=0;for(j=2;j { } if(flag==0){ } big=i;break;if(i%j==0){ flag=1;break;} } result=big-small;printf(“big:%dn”,big);printf(“small:%dn”,small);printf(“reslut:%dn”,result);} 3.输入两个正整数m和n,求其最大公约数和最小公倍数 说明: (1)最大公约数:能够被m和n同时整除的最大正整数(2)最小公倍数:m和n相乘的积除以最大公约数 (3)使用for循环,将m和n同时除以1到m(m为m和n两者中较小者),直到找出最大的正整数即为最大公约数(4)输出格式如下: The greatest common divisor is *! The least common multiple is *!参考程序如下: #include printf(“input m,n:”); scanf(“%d,%d”,&m,&n);if(m>n){ temp=m;m=n; n=temp;} for(i=1;i<=m;i++){ if(n%i==0 && m%i==0) great=i;} least=m*n/great;printf(“The greatest common divisor is %dn”,great);printf(“The least common multiple is %dn”,least);} 4.打印出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本书。例如,153是一水仙花数,因为153153 说明:(1)“水仙花数”是三位数,所以范围是从100到999(2)使用for循环 (3)循环中需要把数字的每一位都分离出来,然后求和,同原数字比较,进行判断 参考程序如下: #include int i;int temp;for(i=100;i<1000;i++){ a=i/100;b=(i-a*100)/10;c=i%10;temp=a*a*a+b*b*b+c*c*c;if(i==temp)printf(“%dn”,i); 33} } 实验五 函数 【实验目的】 1.掌握C语言函数的定义、声明以及函数的调用方法 2.了解主调函数和被调函数之间的参数传递方式 3.熟练掌握数组作为函数参数的用法 【实验内容】 1.写一个判断素数的函数,在主函数输入一个整数,输出是否素数的信息。说明: (1)判断素数的函数名为Prime(2)传递参数为int类型的变量(3)输出格式为: * is a prime!或者* is not a prime!参考程序如下: #include if(num%i==0) { } flag=1;break;} if(flag==0)printf(“%d is a prime!n”,num);else printf(“%d is not a prime!n”,num);} main(){ int num;printf(“input a num:”);scanf(“%d”,&num);Prime(num);} 2.写一个函数,用“冒泡法”对输入的10个数字由小到大顺序排列,并输出。说明: (1)排序的函数名为Sort(2)排序前后的输入输出都应在主函数中完成(3)使用数组作为函数参数(4)使用“冒泡法”排序 参考程序如下: #include } } main(){ int num[10];int i;printf(“input 10 numbers:”);for(i=0;i<10;i++) scanf(“%d”,&num[i]);Sort(num);printf(“the sorted numbers:”);for(i=0;i<10;i++) printf(“%d ”,num[i]);} 3.写一函数,使给定的一个二维数组(5×5)转置,即行列互换。说明: (1)使用5×5的二维数组存放数据 (2)矩阵转置的函数名为Turn(2)转置前后的输入输出都应在主函数中完成(3)使用数组作为函数参数 for(j=0;j<9-i;j++){ } if(num[j]>num[j+1]){ temp=num[j]; } num[j]=num[j+1];num[j+1]=temp;18 参考程序如下: #include } } main(){ int num[5][5]={{1,2,3,4,5},{6,7,8,9,0},{11,12,13,14,15},{16,17,18,19,20},{21,22,23,24,25}}; int i,j;printf(“Before array be turned:n”);for(i=0;i<5;i++){ for(j=0;j<5;j++)printf(“%2d ”,num[i][j]);for(j=i;j<5;j++){ } temp=num[i][j];num[i][j]=num[j][i];num[j][i]=temp; printf(“n”);} Turn(num);printf(“After array be turned:n”);for(i=0;i<5;i++){ } } 4.写一函数,使输入的字符串反序存放,在主函数中输入和输出字符串。说明: (1)字符串反序的函数名为Reverse(2)反序前后的输入输出都应在主函数中完成(3)使用数组作为函数参数 for(j=0;j<5;j++)printf(“%2d ”,num[i][j]);printf(“n”);19(4)需要使用strlen函数得到字符串长度,需要在源文件头部加入#include #include } } main(){ char str[50];printf(“input a string:”);scanf(“%s”,str);Reverse(str);printf(“After reversed is %sn”,str);} 5.写一函数,将两个字符串连接。 说明: (1)连接两个字符串的函数名为:Connect(2)将连个字符串存入两个字符串数组中,要保证第一个字符串的长度能够容纳两个字符串之和 (3)连接两个字符串主要是找到第一个字符串的结尾,然后将第二个字符串连接到第二个字符串的后边 (4)输出格式为: The connected string is *!(5)使用数组作为函数参数 (6)连接前后的字符串输出都要在主函数中完成,自定义函数只完成连接功能 参考程序如下: #include str1[i]=str2[j];str1[i]=' ';} main(){ char str1[50],str2[20];int i,j;printf(“input string1:”);scanf(“%s”,str1);getchar();printf(“input string2:”);scanf(“%s”,str2);Connect(str1,str2);printf(“The connected string is %sn”,str1);} 6.写一函数,求字符串的长度,并编写主函数。说明: (1)求字符串长度的函数名为:Count(2)字符串结束的标志是’ ’(3)输出格式为: The length of string is *!(4)使用数组作为函数参数 参考程序如下: #include 实验六 指针 【实验目的】 1.掌握C语言指针变量的定义、声明和赋值 2.学会使用指针变量的程序设计 3.掌握指针作为函数参数的用法 【实验内容】 1.使用指针作为函数参数,写一交换两个数的函数 说明: (1)交换两个数的函数名为:Swap(2)使用指针变量作为函数参数 (3)在主函数中输入输出,自定义函数只完成交换功能 参考程序如下: #include 2.使用指针作为函数参数,写一求数组中最大值和最小值的函数。说明: (1)函数名为:MaxAndMin(2)使用指针指向一维数组 (3)最大值和最小值的输出必须要在主函数中 参考程序如下: #include *max=array[0];*min=array[0];for(i=0;i<10;i++){ if(*max } } main(){ int array[10]={0,1,2,3,4,5,6,7,8,9};int max,min;int *p1,*p2;p1=&max;p2=&min;MaxAndMin(array,p1,p2);printf(“max=%dnmin=%dn”,max,min);} 3.找出以下程序的错误,并加以修改。①交换两个数 #include temp=p1; p1=p2; p2=temp;} main(){ int a,b;int *pointer_1,*pointer_2; scanf(“%d,%d”,&a,&b); pointer_1=&a;pointer_2=&b;Swap(pointer_1,pointer_2); } ②输出数组重点全部元素 #include *p++=i; for(i=0;i<10;i++) printf(“a[%d]=%dn”,i,*p++);} 4.写一函数,求出矩阵中的最大值和最小值,要求使用指针作为函数参数。说明: (1)使用二维数组存放矩阵元素(2)只用指针变量指向数组(3)函数名为:ArrayMaxAndMin 参考程序如下: #include *min=*(array+i*n+j);for(i=0;i } if(*max<*(array+i*n+j))*max=*(array+i*n+j);if(*min>*(array+i*n+j))*min=*(array+i*n+j); } } main(){ int array[3][3]={1,2,3,4,5,6,7,8,9};int max,min;int *p,*p1,*p2;p=array;p1=&max;p2=&min;ArrayMaxAndMin(p,p1,p2,3);printf(“max=%dnmin=%dn”,max,min);} 实验七 数组 【实验目的】 1.掌握一维数组和二维数组的定义、赋值和初始化的方法 2.掌握字符数组的使用 3.熟练掌握与数组相关的各种算法 【实验内容】 1.从键盘输入10个整数,对这个十个数进行排序,并输出 说明: (1)将这10个整数存入一个含有10个元素的一维数组中 (2)冒泡法:从第一个数开始依次让相邻的两个数进行比较,如次序对则不做任何操作;如次序不对则使这两个数交换位置。第一遍比较后,最大的数已放在最后,第二遍只需考虑剩下的数,以此类推直到最后两个数比较后就可以完成排序。(3)比较完成后将数组中元素依次输出 参考程序如下: #include scanf(“%d”,&num[i]);for(i=0;i<=8;i++){ for(j=0;j<9-i;j++){ if(num[j]>num[j+1]){ temp=num[j];num[j]=num[j+1];num[j+1]=temp; } } } printf(“the sorted numbers:”);printf(“%d ”,num[i]);for(i=0;i<10;i++) } 2.从键盘输入一串字符串,统计字符串中特定字符的个数(特定字符也需要从键盘输入),并输出个数 说明: (1)输入时需要用到的输入格式控制字是%s(2)字符串存入一个足够大的字符数组中,保证输入的字符个数不要超过最大个数(3)使用循环控制语句,需要了解字符数组的结束标志是’ ’,作为循环的结束标志(4)输出格式如下: The number of * is *!参考程序如下: #include { if(str[i]==ch)count++;i++;} printf(“The number of %c is %d!n”,ch,count);} 注意: 程序中多了一行getchar(),这并不是多余的,而是因为在输入完字符串后,键入的回车被放入到内存的输入缓冲区中,在输入特殊字符的时候ch得到了上一个回车,而无法得到我们要输入的字符,因此需要使用一行getchar()将缓冲区中的回车读出,相当于清除缓冲区的作用。 3.青年歌手参加歌曲大奖赛,有10个评委进行打分,试编程求这位选手的平均得分(去掉一个最高分和一个最低分)。 说明: (1)将10位评委的打分放入一个含有10个元素的一维数组中(2)程序设计重点是排序 (3)排序后只要用中间的8个元素即可(4)输出格式为: The average is *!参考程序如下: #include scanf(“%f”,&score[i]);for(i=0;i<=8;i++){ for(j=0;j<9-i;j++){ if(score[j]>score[j+1]){ } temp=score[j];score[j]=score[j+1];score[j+1]=temp;} } for(i=1;i<=8;i++){ sum=sum+score[i]; } average=sum/8;printf(“The average is %f!n”,average);} 4.将两个字符串连接起来,不要使用strcat函数。 说明: (1)将连个字符串存入两个字符串数组中,要保证第一个字符串的长度能够容纳两个字符串之和 (2)连接两个字符串主要是找到第一个字符串的结尾,然后将第二个字符串连接到第二个字符串的后边 (3)输出格式为: The connected string is *!参考程序如下: #include printf(“input string1:”);scanf(“%s”,str1);getchar();printf(“input string2:”);scanf(“%s”,str2);for(i=0;str1[i]!=' ';i++);for(j=0;str2[j]!=' ';j++,i++) str1[i]=str2[j];str1[i]=' ';printf(“The connected string is %sn”,str1);} 5.已有一个已排好序的数组,从键盘输入一个数,要求按原来排序的规律将它插入数组中。说明: (1)需要保证数组的元素据个数比插入前多1(2)需要找到在数组中插入的位置 (3)可倒序查找:假设从小到大排序,从最后一个开始查找,如果要插入元素比当前数组元素小则将该数组元素赋予后边一个元素,继续比较;否则将要插入元素赋予该数组元素的下一个元素,然后break结束循环(4)输入该数组即可 参考程序如下: #include if(a[i]>b)a[i+1]=a[i];else { } a[i+1]=b;break;} printf(“The new sorted array is ”);for(i=0;i<10;i++) } printf(“%d ”,a[i]);6.将一个数组中的值按逆序重新存放。例如:原来顺序为8,6,5,4,1,要求改为1,4,5,6,8。说明: (1)只要将原来数组中的值以中间值为中心交换 n1(2)交换次数为2次 (3)注意此时的n是数组最后一个元素的下标 参考程序如下: #include temp=num1[i]; num1[i]=num1[9-i];num1[9-i]=temp;} for(i=0;i<(8+1)/2;i++){ temp=num2[i];num2[i]=num2[8-i];num2[8-i]=temp; } printf(“The converted array1 is ”);for(i=0;i<10;i++) printf(“%d ”,num1[i]);printf(“nThe converted array2 is ”);for(i=0;i<9;i++) printf(“%d ”,num2[i]);} 7.求一个3×3矩阵的对角线元素之和 说明: (1)使用3×3的二维数组存储数据 (2)使用for循环嵌套,判断数组中元素是否是对角线元素,如果是则相加(3)对角线元素的特点是行号和列号相同 参考程序如下: #include int array[3][3]={1,2,3,4,5,6,7,8,9};int sum=0;int i,j;for(i=0;i<3;i++)for(j=0;j<3;j++){ } if(i==j)sum=sum+array[i][j];{ } printf(“summary is %dn”,sum);} 8.设计一个较为复杂的一维数组操作程序,实现对一维数组的基本操作 说明: (1)通过输入函数实现对一维数组的输入,可以将数组定义为100个整型元素,输入其中的10个元素 (2)在屏幕上将数组中的10个元素输出 (3)往数组中插入一个元素,并将插入后的11个元素输出(4)从数组中删除一个元素,并将删除后的10个元素输出 (5)从数组中查找一个元素,并将查找后的元素下标输出,如果元素不存在,给出提示 参考程序如下: #include int a[100],i,j;int ins,del,find,pos;printf(“input the data: ”);for(i=0;i<10;i++)scanf(“%d”,&a[i]);printf(“The array is ”);for(i=0;i<10;i++)printf(“%d ”,a[i]);printf(“ninsert a data: ”);scanf(“%d”,&ins);for(i=0;i<10;i++){第五篇:C语言程序设计实验教案