文档库 最新最全的文档下载
当前位置:文档库 › 实验七 用函数实现模块化程序设计

实验七 用函数实现模块化程序设计

实验七 用函数实现模块化程序设计
实验七 用函数实现模块化程序设计

河南工业大学C语言实验报告

专业班级:生物11级1班学号:201112910118姓名:l刘路路指导老师:朱红莉评分:

实验题目:用函数实现模块化程序设计

实验目的:熟练掌握函数的定义、调用、声明

实验内容:P218-219 习题1、2、4

实验步骤:(具体程序及运行结果)

7.1写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输入。

#include

int main()

{int hcf(int,int);

int lcd(int,int,int);

int u,v,h,l;

scanf("%d,%d",&u,&v);

h=hcf(u,v);

printf("H.C.F=%d\n",h);

l=lcd(u,v,h);

printf("L.C.D=%d\n",l);

return 0;

}

int hcf(int u,int v)

{int t,r;

if (v>u)

{t=u;u=v;v=t;}

while ((r=u%v)!=0)

{u=v;

v=r;}

return(v);

}

int lcd(int u,int v,int h)

{

return(u*v/h);

}

7.3写一个判素数的函数,在主函数输入一个整数,输出是否为素数的信息。

#include

int main()

{int prime(int);

int n;

printf("input an integer:");

scanf("%d",&n);

if (prime(n))

printf("%d is a prime.\n",n);

else

printf("%d is not a prime.\n",n);

return 0;

}

int prime(int n)

{int flag=1,i;

for (i=2;i

if (n%i==0)

flag=0;

return(flag);

}

7.4写一个函数,使给定的一个3×3的二维整型数组转置,即行列互换。#include

#define N 3

int array[N][N];

int main()

{ void convert(int array[][3]);

int i,j;

printf("input array:\n");

for (i=0;i

for (j=0;j

scanf("%d",&array[i][j]);

printf("\noriginal array :\n");

for (i=0;i

{for (j=0;j

printf("%5d",array[i][j]);

printf("\n");

}

convert(array);

printf("convert array:\n");

for (i=0;i

{for (j=0;j

printf("%5d",array[i][j]);

printf("\n");

}

return 0;

}

void convert(int array[][3])

{int i,j,t;

for (i=0;i

for (j=i+1;j

{t=array[i][j];

array[i][j]=array[j][i];

array[j][i]=t;

}

}

实验体会:通过本次试验的学习,让你给我懂得了,进行程序设计,必须用一种计算机语言作为工具,否则是纸上谈兵。C语言功能丰富、表达能力强、使用灵活方便、应用面广、目标程序效率高、可移植性好,即具有高级语言的优点,又有低级语言的许多特点,即适合编写系统软件,又能方便地编写应用软件。

C语言用函数实现模块化程序设计

第7章用函数实现模块化程序设计 习题与思考 2.在C语言中,函数的隐含存储类别是_____A_____. A)auto B)static C)extern D)无存储类别 要点分析:本习题考察变量的存储类别。C语言规定,如不指定变量的存储类别,系统默认为自动类型的,即auto型。 3.以下所列的各函数首部中,正确的是_____C_____. A)void play(var:Integer,var b:Integer) B)void play(int a,b) C)void play(int a,int b) D)Sub play(a as integer,b as integer) 要点分析:本习题考察函数的定义。要求函数首部的各个形式参数应分别指出其数据类型。 4.以下程序的输出结果是_____C_____. fun(int x,int y,int z) { z=x*x+y*y;} void main( ) { int a=31; fun(5,2,a); printf("%d",a);} A)0 B)29 C)31 D)无定值要点分析:本习题考察形参和实参的关系。函数一旦发生传值调用,把实参的值传递给形参后,实参的值仍保留原值。 5.以下程序的输出结果是_____A_____. f( int b[ ],int m, int n ) { int i,s=0; for(i=m;i

return s; } void main( ) { int x,a[ ]={1,2,3,4,5,6,7,8,9}; x=f(a,3,7); printf("%d\n",x); } A) 10 B) 18 C) 8 D) 15 要点分析:本习题考察数组做函数的参数,此时实参为数组名,形参数组不再重新分配存储空间,形参数组共占实参数组所在的存储空间。数组做函数参数是学生出错误比较多的知识点。 7.以下程序的输出结果是_____D_____. int f( ) { static int i=0; int s=1; s+=i;i++; return s;} void main( ) { int i,a=0; for(i=0;i<5;i++)a+=f(); printf("%d\n",a); } A) 20 B) 24 C) 25 D) 15 要点分析:本习题考察静态局部变量。静态局部变量的值在调用结束后仍保持结束后的值。静态局部变量是变量的存储类别的重点,学生应该掌握并应用。 8. 以下程序的功能是调用函数fun计算:m=1-2+3-4+…+9-10,并输出结果。请填空。 int fun( int n) { int m=0,f=1,i; for(i=1; i<=n; i++) { m+=i*f; f= _____-f_____ ; } return m; } void main( ) { printf("m=%d\n", _____fun(10)_____ ); } 要点分析:本习题考察函数的调用。通过编写fun函数求得累加和。

汇编语言程序设计实验七

实验七子程序的应用 【实验目的】 1.掌握子程序的定义 2.掌握子程序中的参数传递 3.掌握子程序的调用。 【实验环境】 配有汇编语言开发环境的计算机 【实验内容】 十进制数到十六进制数转换程序。程序要求从键盘取得一个十进制数,然后把该数以十六进制形式在屏幕上显示出来。 【实验过程、结果】 ;程序名:t6-2.asm ;功能:从键盘获取一个十进制数, ;用十六进制的形式输出 decihex segment assume cs:decihex ;主程序部分 main proc far call decibin call crlf

call binihex call crlf main endp ;*************************** decibin proc near mov bx,0 ;从键盘获取一个数字,转换为二进制 ;结果放在bx寄存器中 newchar: mov ah,1 int 21h ;从键盘输入一个字符并显示在屏幕上 sub al,30h ;转换成ASCII码 jl exit cmp al,9d jg exit cbw ;从al扩展到ax,数字现在存放在ax中 xchg ax,bx mov cx,10d mul cx xchg ax,bx add bx,ax jmp newchar

exit: ret decibin endp ;子程序结束 ;将二进制转换为十六进制子程序binihex proc near mov ch,4 rotate: mov cl,4 rol bx,cl ;循环移位 mov al,bl and al,0fh add al,30h cmp al,3ah jl printint add al,7h printint: mov dl,al mov ah,2 int 21h dec ch jnz rotate ret

模块化程序设计实例

9 .5 模块化程序设计实例 《程序设计基础》(基于C语言讲解)石光华编著—北京: 清华大学出版社 下面以设计一个简单的成绩管理软件为例,一步一步地按模块化程序设计方法进行设计。 1 .定义问题 设计一个成绩管理软件,其基本功能包括:输入成绩,成绩加分,计算平均成绩,找出最高分,找出最低分,输出成绩等。 2 .确定组成程序的模块 根据成绩管理软件的功能,确定软件的基本模块包括:输入模块,加分模块,平均分模块,最高分模块,最低分模块,输出模块等。 142 程序设计基础 3 .绘制程序结构图 成绩管理软件的结构图如图9-5所示。 图9-5 成绩管理软件结构图 4 .流程图 用流程图确定主程序的逻辑结构,如图9-6所示。 在流程图中,istate 的作用是记录是否已经输入成绩。istate 的使用有如下两种 方式。 (1) 作为全局变量使用。此时istate可以在所有模块中改变其值,主程序更简洁,但 可能产生边际效应。 (2) 作为主程序的局部变量使用。此时istate只能在主程序中改变其值。在主程序 中可以直观地看到其变化,能够防止边际效应。 采用方式(2)的主程序如下。

#include < stdio .h> #define SIZE 10 void main() { int iscore[SIZE] ={0}; int key= - 1; int iresult=0; float fresult=0; int istate=0; printf(″1:Input scores;\n″); 第9章模块化程序设计 143 图9-6 成绩管理软件主程序流程图 printf(″2:Output scores;\n″); printf(″3:Count for the max score;\n″); printf(″4:Count for the minimum score;\n″); printf(″5:Count for the total score;\n″); printf(″6:Count for theaverage score;\n″); printf(″- 1:Exit .\n″); while(1) { printf(″Please input your choose:″); scanf(″%d″,&key); if (key = = - 1) 144 程序设计基础

模块化程序设计练习题及答案

第四章模块化程序设计练习题及参考答案 一、填空题 1、以下程序的运行结果是(111),把x定义为静态变量运行结果是(123)。void increment(void) { int x=0; x+=1; printf("%d",x);} main() { increment(); increment(); increment(); } 2、若输入的值是-125,以下程序的运行结果是(-125=-5*5*5) #include "" main() { int n; void f(int n); scanf("%d",&n); printf("%d=",n); if(n<0) printf("-"); n=fabs(n); fun(n); } void fun(int n) { int k,r; for(k=2;k<=sqrt(n);k++) { r=n%k; while(r==0) { printf("%d",k); n=n/k; if(n>1)printf("*"); r=n%k; } } if(n!=1) printf("%d\n",n); } 3、设有以下宏定义: #define WIDTH 80 #define LENGTH WIDTH+40 则执行赋值语句:v=LENGTH*20;(v为int型)后,v的值是(880) 4、设有以下宏定义: #define WIDTH 80 #define LENGTH (WIDTH+40)

则执行赋值语句:k=LENGTH*20;(k为int型变量)后,k的值是(2400) 5、下面程序的运行结果是(5) #define DOUBLE(r) r*r main() { int x=1,y=2,t; t=DOUBLE(x+y); printf("%d\n",t);} 6、下面程序的运行结果是(36) #define MUL(z) (z)*(z) main() { printf("%d\n",MUL(1+2)+3); } 7、下面程序的运行结果是(212) #define POWER(x) ((x)*(x)) main() { int i=1; while(i<=4) printf("%d,",POWER(i++)); } 8、下面程序的运行结果是(9) #define MAX(a,b) (a>ba:b)+1 main() { int i=6,j=8,k; printf("%d\n",MAX(i,j)); } 二、选择题 1、以下正确的说法是(D)建立自定义函数的目的之一是: A)提高程序的执行效率 B)提高程序的可读性 C)减少程序的篇幅 D)减少程序文件所占内存 2、以下正确的说法是(B) A)用户若需调用标准库函数,调用前必须重新定义 B)用户可以重新定义标准库函数,若如此,该函数将失原有含义。 C)系统根本不允许用户重新定义标准库函数。 D)用户若需调用标准函数,调用前不必使用预编译命令将该函数所在文件包括到用户源文件中,系统自动去调用。 3、以下正确的函数定义形式是(C) A)double fun(int x,int y) B)double fun(int x;int y) C)double fun(int x,int y); D)double fun(int x,y) 4、以下正确的说法是(D)。在C语言中: A)实参与其对应的形参各占用独立的存储单元。 B)实参和与其对应的形参共占用一个存储单元。 C)只用当实参和与其对应的形参同名时才共占用存储单元。

实验七-网络程序设计综合实验汇总

网络程序设计 实验报告 实验名称:winsock 编程接口实验实验类型:设计型 指导教师:贾浩 专业班级:信安1204 姓名:马灿 学号:20123252 电子邮件: 实验地点:东6 E307 实验日期:

实验成绩:__________________________

实验七网络程序设计综合实验 摘要:本课程设计包含了文件传输协议的简单设计与实现。文件传送协议是一种最基本的应用层协议按照客户/服务器的模式进行工作,提供交互式的访问,是INTERNET使用最广泛的协议之一。文件传输协议的简单设计与实现建立在计算机网络实验环境TCP/IP网络体系结构之上,使用socket编程接口编写两个程序,分别为客户程序(client.c)和服务器程序(server.c),利用了已有网络环境设计并实现简单应用层协议。本设计包括了具体设计任务,基本思路及所涉及的相关理论,设计流程图,调试过程中出现的问题及相应解决办法,实验运行结果,核心程序,个人体会及建议等。 关键词:SOCKET编程,FTPclient/server程序 一.问题描述及设计思路 1.1 问题描述 服务器端: 1.指定一个目录作为FTP目录(之后所有的文件操作均在此目录下进行) 2.接收客户端的命令请求并提供相应的服务。 客户端:完成与FTP用户的人机界面,以命令的方式向服务器请求服务,主要的命令有:1.CONNECTIP地址端口号 2.指定FTP服务器的IP地址和端口号,连接到服务器。响应:连接成功/失败。 3.LOGIN用户名 4.用户登录(假设在服务器端有用户管理功能)

5.响应:若用户不存在,提示“无此用户”;若用户存在,提示“密码:”;用户输入密码后,若正确提示“登录成功”;若不成功,提示“密码错误”。6.3.DIR 7.显示FTP服务器的FTP目录的文件列表(假设无子目录) 8.响应:目录列表(只要文件名即可)。 9.4.GET文件名 10.将FTP目录下的文件下载到本地,支持断点续传 11.响应:传送成功/失败/无此文件。 12.5.PUT文件名 13.将本地文件上传到FTP目录,支持断点续传 14.响应:传送成功/失败/无此文件。 15.6.HELP(客户端和服务器端均有该功能) 16.实验环境本次实验采用MFC工程工程采用MFC对话框界面工程名称为MyServer和FTPSOCKET。 17.详细设计过程 1.2 设计思路 1. FTP协议基础 FTP 是TCP/IP 协议组中的协议之一,该协议是Internet文件传送的基础,它由一系列规格说明文档组成。目标是提高文件的共享性,提供非直接使用远程计算机,使存储介质对用户透明和可靠高效地传送数据。简单的说,FTP就是完成两台计算机之间的拷贝,从远程计算机拷贝文件至自己的计算机上或从自己计算机中拷贝至远程计算机上。在TCP/IP协议中FTP标准命令TCP端口号为21,Port

C语言程序设计实验报告(实验大纲+过程)之欧阳家百创编

《C程序设计》实验教学大纲 欧阳家百(2021.03.07) 一、适用范围 大纲适用信息管理专业本科教学使用。 二、课程名称 C程序设计 三、学时数与学分 总学时:90 总学分: 4 实验学时:28 实验学分:1 四、教学目的和基本要求 目的:通过C程序设计实验,培养学生对学习程序设计的兴趣,加深对讲授内容的理解,尤其是通过上机来掌握语法规则,使学生全面了解C 语言的特点,熟练掌握C 语言程序设计的基本方法和编程技巧。 基本要求:了解和熟悉C语言程序开发的环境;学会上机调试程序,善于发现程序中的错误,并且能很快地排除这些错误,使程序能正确运行,达到实验知识和理论知识的融会贯通。上机实验前,学生必须事先根据题目的内容编好程序,然后在实验时输入程序、调试程序、直至运行结果正确为止,上机结束后,应整理出实验报告。 五、实验项目与学时分配

注:带*的实验项目为选做实验项目 六、教材、讲义及参考书 《C程序设计题解与上机指导》谭浩强主编清华大学出版社 七、实验成绩评定办法 实验成绩=平时实验表现+实验报告。实验成绩占总成绩的20%。 实验成绩以等级形式给出,评定等级分优、良、中、及格、不及格五类。 1、平时考核:上机实验前,学生必须事先根据题目的内容编好程序,然后在实验时输入程序、调试程序、直至运行结果正确为止。在实验中,教师可根据学生编程操作能力、观察和分析及运用知识能力、程序编制正确性以及学生的课堂纪律、实验态度、保持实验室卫生等方面的表现进行综合考核。 2、实验报告:学生实验后应按时完成实验报告。 八、实验教学大纲说明 本大纲共安排28学时的实验,其中带*号实验项目为选做实验项目,实际课时为18学时。实验项目多为设计性实验项目,每

C++程序设计实验-1-7 - 完整

二、参照例1-2,用结构化方法编程实现: 1、 根据每学年学费、专业总学分、某课程学分,计算上该课程的总花费,以及每学时,每 分钟的花费。(1学分=18学时) 2、 P43编程题1,2,3 1.输入一个三位整数,将它反向输出。 2.输入平面上某点横坐标x 和纵坐标y ,若该点在由图 3.1表示的方块区域内,则输出1;否则,输出0。 图1.11 正方形 3.输入三个整数,求出其中最小数(要求使用条件表达式)。 根据每学年学费、专业总学分、某课程学分,计算上该课程的总花费,以及每学时,每分钟的花费。使得本校不同专业,不同课程的同学都能用它来计算。(1学分=18学时) 提示: 1、定义一个类, 类的数据成员包括:每学年学费、专业总学分、课程学分; 类的成员函数包括: 设置每学年学费、专业总学分、课程学分; 显示每学年学费、专业总学分、课程学分; 计算上某课程的总花费; 计算上某课程的每学时花费; 计算上某课程的每分钟的花费; 1.输入某学生成绩,若成绩在85分以上输出“very good ”,若成绩在60分到85分之间输出“good ”,若成绩低于60分输出“no good ”。 2.输入三个整数,按从小到大的顺序输出它们的值。 3.输入三角形的三条边,判别它们能否形成三角形,若能,则判断是等边、等腰、还是一般三角形。 4.输入百分制成绩,并把它转换成五级分制,转换公式为: ?????????-----=59 069607970898010090(不合格)(合格)(中等)(良好)(优秀)(级别)E D C B A grade 5.编程序模拟剪刀、石头和纸游戏。游戏规则为:剪刀剪纸,石头砸剪刀,纸包石头。玩游戏者从键盘上输入s (表示剪刀)或r (表示石头)或p (表示纸),要求两个游戏者交

实验七 用函数实现模块化程序设计

河南工业大学C语言实验报告 专业班级:生物11级1班学号:201112910118姓名:l刘路路指导老师:朱红莉评分: 实验题目:用函数实现模块化程序设计 实验目的:熟练掌握函数的定义、调用、声明 实验内容:P218-219 习题1、2、4 实验步骤:(具体程序及运行结果) 7.1写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输入。 #include int main() {int hcf(int,int); int lcd(int,int,int); int u,v,h,l; scanf("%d,%d",&u,&v); h=hcf(u,v); printf("H.C.F=%d\n",h); l=lcd(u,v,h); printf("L.C.D=%d\n",l); return 0; } int hcf(int u,int v) {int t,r; if (v>u) {t=u;u=v;v=t;} while ((r=u%v)!=0) {u=v; v=r;} return(v); } int lcd(int u,int v,int h) { return(u*v/h); } 7.3写一个判素数的函数,在主函数输入一个整数,输出是否为素数的信息。 #include int main() {int prime(int); int n; printf("input an integer:"); scanf("%d",&n);

if (prime(n)) printf("%d is a prime.\n",n); else printf("%d is not a prime.\n",n); return 0; } int prime(int n) {int flag=1,i; for (i=2;i #define N 3 int array[N][N]; int main() { void convert(int array[][3]); int i,j; printf("input array:\n"); for (i=0;i

单片机实验4 子程序设计-- BCD码转换为二进制

实验4. 子程序设计----BCD 码转换为二进制 单字节可存放两位压缩BCD 码(0—99) 为0 —9) 单字节BCD 码转换为二进制子程序 入口:(R0)= 压缩BCD 码的地址 出口:(A)= 转换结果 DSFR::MOV A,@R0 ANL A,#0F0H ;取十位数 SWAP A ;变为标准BCD 码 MOV B,#10 MUL AB ;(A)=D1×10 MOV R7,A ;D1× 10暂存 R7 MOV A,@R0 ANL A,#0FH ;取个位 ADD A,R7 ;A=D1×10+D0 RET 1、实验内容: 子程序设计要点: 1) 子程序一般为多次返复使用的程序段,一般应说明入口条件,DSFR 子程序的 入口条件是:被转换为二进制的单字节BCD 码为间接寻址,间接寻址寄存器为R0。要调用DFSR 子程序必需先将压缩BCD 码的存放地址赋与R0。而出口条件是指最后结果在哪儿存放。本子程序转换结果在ACC 内。 2) 主程序调用子程序,在调试时一般要先调试子程序、再调试主程序。

2、实验步骤 1)打开PV32编程序。汇编正确进入调试界面。否则修改程序重新汇编直到通过。 2)打开DATD窗口给20H、21H、R6、R7赋值 3)单步调试DSFR子程序观察并记禄寄存器、内存的变化。判断程序是否正确。若发现 问题重返编辑界面,修改、存盘、汇编。返回调试界面调试通过。 4) 设断点调试主程序观察并记禄寄存器、内存的变化。判断程序是否正确。若发现问 题重返编辑界面,修改、存盘、汇编。返回调试界面调试通过。 3.实验报告 1.写出主程序流程图、子程序流程图、程序清单 2.根据记渌数据给程序加注解 3.调试心得

实验05 函数程序设计

计算两个复数之积(调试示例error05_1)程序填空,不要改变与输入输出 有关的语句。 分别输入两个复数的实部与虚部,编程调用函数实现计算两个复数之积。 若两个复数分别为:c1=x1+(y1)i, c2=x2+(y2)i,则: c1*c2 = (x1*x2-y1*y2) + (x1*y2+x2*y1)i 输入输出示例:括号内是说明 输入 1 2 (x1=1, y1=2) -2 3 (x2=-2, y2=3) 输出 product of complex is (-5.000000)+(1.000000)i #include /*---------*/ int main(void) { float imag1, imag2, real1, real2; scanf("%f%f", &real1, &imag1); scanf("%f%f", &real2, &imag2); complex_prod(real1, imag1, real2, imag2); printf("product of complex is (%f)+(%f)i\n", result_real, result_imag); return 0; } /*---------*/ 使用函数求1! + 2! + … + m!(改错题error05_2)程序填空,不要改 变与输入输出有关的语句。 求1! + 2! + … + 10!,要求定义并调用函数fact(n)计算 n!,函数形参 n 的类型是int,函数类型是double。 输入输出示例:括号内是说明 输出: 1!+2!+...+10! = 4037913.000000 #include

模块化程序设计

第四章模块化程序设计 教学目的:模块程序设计是C程序合作编程序的方法,通过这一章的学习使学生能自己编C 程序中的函数,正确地调用函数,熟悉函数调用时形式参数和实在参数的关系。通过变量的存储类型,能正确使用各种不同存储类型的变量编程序。 重点难点:函数的嵌套调用及函数的递归调用。 前面各几章的学习,大家已有了编制小程序的经验。如果想编制大程序,在C语言下就得用模块化程序设计,其基本思想是将一个大的程序按功能分割成一些模块,使每一个模块都成为功能单一、结构清晰、接口简单、容易理解的小程序。 C语言提供了支持模块化软件开发的功能: 1 函数式的程序结构。程序由一个或多个函数组成,每个函数都有各自独立的功能和界面。 2 允许通过使用不同的存储类别的变量,控制模块内部和外部的信息交换。 3具有预编译处理功能,为程序的调试、移植提供方便,支持模块化程序设计。 本章介绍这些功能及进行程序开发的基本方法。 4.1 函数 C程序结构 无论涉及的问题是复杂还是简单,规模是大还是小,用C语言设计程序,任务只有一种,就是编写函数,至少要编写一个主函数main(),C程序的执行就是执行相应的main()函数。即从它的main()函数的第一个花括号开始,依次执行后面的语句,直到最后的花括号为止。其它函数只有在执行了main()函数的过程中被调用时才执行。 高级语言中“函数”的概念和数学中“函数”的概念不完全相同。英语单词function有“函数”和“功能”两种介绍,高级语言中的函数实际上是功能的意思。当要完成某一个功能时,就用一个函数去实现它。在程序设计时首先要考虑main()函数中的算法,当main()中需要使用某一功能时,就用一个具有该功能的函数表达式表示。这时的函数,我们只知道它具有什么功能,其它先不作处理。设计完main()的算法并检验无误后,这时开始考虑它所调用的函数。如果在库函数中能找到,就可直接使用,否则再动手设计这些函数。这种设计方法称为自顶向下、逐步细化的程序设计方法。这种方法设计出来的程序在功率高,程序层次分明、结构清晰。复杂程序的层次可从以下图形中看出: 许多大型软件系统包含了相当丰富的,可供从事某一领域工作人员选用,如一个高等学校的信息管理系统就包含了教务、科研、人事、财务,设备、图书、后勤、办公室等子系统。每一个子系统以可分为许多子子系统。 这种软件为了方便用户大都采用菜单(menu)方式,这种形式的软件,大家都用过。用户

汇编语言实验报告 模块化程序设计

汇编语言实验报告 Assembly Language Programming Lab Reports ______________________________________________________________________________ 班级:姓名:学号:实验日期: 学院:专业: 实验顺序:原创:___ 实验名称:模块化程序设计 实验分数:_______ 考评日期:________ 指导教师: ______________________________________________________________________________ 一.实验目的 1、掌握宏定义的相关内容。 (1)伪指令: MACRO,ENDM。 (2)掌握宏定义时的哑元,变元,&分割符的使用。变元可以是操作数,操作码,操作码的一部分和&联合使用,存储单元,字符串。 (3)掌握宏调用时的实元和宏的展开。 2.掌握宏运算 (1)&替换运算符 (2)<>传递运算符 (3)!转义运算符号 (4)%表达式运算符 (5);;宏注释符 3、其它宏功能 (1)宏标号LOCAL (2)宏删除purge (3)宏嵌套,宏展开中的数字1代表插入的程序是宏定义实体中的。宏嵌套在展开时里层被嵌套调用的宏会显示嵌套调用的层次,待验证。 (4)宏库的建立和调用 4、结构伪操作 (1)结构定义 结构名 STRUG 结构体 结构名 ENDS (2)结构预置 (3)结构引用 5、重复汇编和条件汇编。 6、多模块结构程序设计 (1)全局符号定义PUBLIC

(2)外部符号说明EXTRN (3)段属性与段组合 (4)参数传递 7、宏指令和子程序的区别 (1)工作方式的区别,在多次调用时,使用宏指令占用较大空间但速度较快。使用子程序占用空间小但执行时间长。 (2)参数传递的方便性。 (3)参数的多样性和灵活性,宏指令的实参数可以是常数,寄存器,内存变量,操作码或操作码的一部分,操作数的一部分等,子程序是不可以比拟的。 鉴于以上区别,编程时应该扬长避短地使用宏指令和子程序,通常宏指令被用在代码较短且参数较多的场合,子程序被用在代码较长的场合。 8、模块连接 (1)外部引用与全局符号说明 (2)使用公用数据段实现通信过程 段定义伪指令在定义组合类型时定义为COMMON类型,这样在连接时会把多个程序的同名数据段连接时重叠形成一个段,产生段覆盖。允许各模块使用不同的变量名,但是主模块和子模块的数据在定义这些变量上应当有对应的结构。 (3)使用寄存器或者堆栈实现过程通信。 ______________________________________________________________________________二.实验环境 操作系统:windows 8 编译程序:masm 5.0 ______________________________________________________________________________三.实验原理 1、宏库的建立和调用 2、多模块结构程序设计 _______________________________________________________________________ 四.实验步骤及结果分析 1、宏库的建立和调用 宏库的建立: ;8-1.mac input macro mov ah,01h int 21h endm output macro x mov dl,x

实验一简单程序设计实验

实验一:简单程序设计实验 (1)编写一个 32 位无符号数除法的程序,要求将存放在 NUM1 中的 32 位无符号数与存放 在 NUM2 中的 16 位无符号数相除,结果存放在 NUM3 和 NUM4 中。 程序流程图略。 参考源程序: DATA SEGMENT NUM1 DD 2A8B7654H NUM2 DW 5ABCH NUM3 DW ? NUM4 DW ? DATA ENDS CODE SEGMENT ASSUME DS:DATA, CS:CODE START: MOV AX,DATA ;数据段寄存器初始化 MOV DS,AX MOV AX, WORD PTR NUM1 MOV DX, WORD PTR NUM1+2 DIV NUM2 MOV NUM3,AX MOV NUM4,DX MOV AH,4CH ;正常返回DOS 系统 INT 21H CODE ENDS END START (2)编写一个拆字程序。要求将存放在 ARY 单元的 2 位十六进制数 X 1X 2 拆为 X 1 和 X 2 两 部分,并以 0X 1 和 0X 2 的形式分别存入 ARY+1 和 ARY+2 单元中。 程序流程图略。 参考源程序: DATA SEGMENT ARY DB 2AH,?,? DATA ENDS CODE SEGMENT ASSUME DS:DATA, CS:CODE START: MOV AX,DATA MOV DS,AX MOV SI,OFFSET ARY ;取ARY 的偏移地址 MOV AL,[SI] ;取16进制数至AL

MOV BL,AL AND AL,0F0H ;取16进制数的高四位,即X1 SHR AL,4 MOV [SI+1],AL ;存0X1 MOV AL,BL AND AL,0FH ;取16进制数的低四位,即X2 MOV [SI+2],AL ;存0X2 MOV AH,4CH INT 21H CODE ENDS END START

matlab实验四函数编写与程序设计

实验四:函数编写与程序设计 一、实验目的1 . 掌握M文件的创建。 2.掌握函数的编写规则。 3.掌握函数的调用。 4 . 掌握基本的输入输出函数以及显示函数的用法。 5.会用Matlab程序设计实现一些工程算法问题。 二、实验内容 1 . 设计程序,完成两位数的加、减、乘、除四则运算,即产生两个两位随机整数,再输入一个运算符号,做相应的运算,显示相应的结果,并要求结果显示类似于“a=x+y=34”。a=input('请输入一个数: ')

b=input('请输入一个数:'); fuhao=input('请输入一个运算符号(+-*/):','s'); switch fuhao case {'+'} he=a+b; disp(['和=',num2str(a),'+',num2str(b),'=',num2str(he)]); case {'-'} he=a-b; disp(['减=',num2str(a),'-',num2str(b),'=',num2str(he)]) case {'*'} he=a*b; disp(['乘=',num2str(a),'*',num2str(b),'=',num2str(he)]) case {'/'} he=a/b; disp(['除=',num2str(a),'/',num2str(b),'=',num2str(he)]) otherwise disp('请输入正确的符号'); end 2 . 求下列分段函数的值 2 2 2 6,0 56, 1, y χχχχ χχχχχ χχ ?+-<≠ ? =-+≤≠≠? ?-- ? 且-3 0<10,2且3 其他

汇编语言程序设计实验报告三(子程序设计实验)

汇编语言程序设计实验报告三(子程序设计实验) 一、实验目的 1、掌握主程序与子程序之间的调用关系及其调用方法。 2、掌握子程序调用过程中近程调用与远程调用的区别。 3、熟练掌握码型变换的程序。 二、实验内容 1、从键盘输入二位非压缩BCD数,存入AX寄存器中,编程实现将其转换为二进制 数,并在屏幕上显示。要求码型转换程序用远程子程序编写,字符显示用近程子程序编写。数据可循环输入,遇‘00’结束。 三、实验准备 1、预习子程序设计的基本方法,根据实验内容要求编写出实验用程序。 2、熟悉键盘输入和字符显示的程序段的编制。 四、实验步骤 1、编辑、汇编源程序,生成可执行文件。 2、执行程序,检查输入、输出结果,看是否正确。如不正确,用DEBUG检查,修改 源程序,再汇编、运行,直到程序正确为止。 3、用DEBUG的T命令或P命令跟踪程序的执行,观察在远程和近程调用过程中,堆 栈的变化情况。 五、实验报告要求 1、分析近程调用和远程调用的主要区别。用DEBUG命令观察执行过程有何不同。 2、分析实验结果及所遇到的问题的解决方法。 主程序流程图 转换子程序TRAN流程图

七、程序清单 STA SEGMENT STACK ’STACK’ DB 100 DUP(0) STA ENDS GSAG SEGMENT PARA ‘CODE’ ASSUME CS:CSAG MAIN PROC FAR STRA T: PUSH DS SUB AX,AX PUSH AX REV: MOV AH,1 INT 21H MOV BL,AL INT 21H MOV AH,AL MOV AL,BL CMP AX,3030H JE ENDTRAN CALL NEAR PTR TRAN CALL FAR PTR CON MOV AL,0DH CALL FAR PTR DISP MOV AL,0AH CALL FAR PTR DISP MOV AL,0AH CALL FAR PTR DISP JMP REV ENDTRAN: RET MAIN ENDP TRAN PROC NEAR AND AX,0F0FH MOV BL,AL MOV BL,AL MOV CL,3 SHL AL,CL MOV CL,1 SHL BL,CL ADD AL,BL ADD AL,AH RET TRAN ENDP CSAG ENDS CSBG SEGMENT PARA’CODE’ ASSUME CS:CSBG

大学生C语言程序设计(第四版 谭洪强)实验7 答案

实验七 参考答案(参考答案) (1) (sy7-1.c )请编写函数fun ,它的功能是:计算并输出n (包括n )以内能被5 或9 整除的所有自然数的倒数之和。例如,若主函数从键盘给n 输入20后,则输出为s=0.583333。 注意:n 的值要求不大于100。 算法分析: 使用for 循环i ,遍历n 包含n 以内的所有整数,逐一判断每个i ,是否满足条件(能被5 或9 整除),如果满足,则把它的倒数累加到累加器里。注意:i 的倒数要表示成:1.0/i; 参考子函数如下: double fun(int n) { double sum=0; int i; for(i=5;i<=n;i++) if(i%5==0||i%9==0) sum=sum+1.0/i; return sum; } (2) (sy7-2.c ) 请编写函数fun ,其功能是:根据以下公式计算s ,并计算结果作为函数值返回,n 通过形参传入。 n s ?++++?++++++=321132112111 例如:若n 的值为11时,函数的值为1.83333 算法分析: 等式右边从第二项(i=2)开始,其分母等于前一项的分母加上i ;一共有n 项;求出每项的分母,然后把每项进行累加。 参考子函数如下: float fun(int n) { float sum=1; //sum 中已经累加了第一项的值 int i,m=1; //m 表示每项的分母; for(i=2;i<=n;i++) { m=m+i; sum=sum+1.0/m; } return sum; }

(3) (sy7-3.c)请编写函数fun,其功能是:将两个两位数的正整数a、b 合并形成一个整数放在c 中。合并的方式是:将 a 数的十位和个位依次放在c 数的十位和千位上,b 数的十位和个位数依次放在c 数的个位和百位上。 例如,当a=45,b=12,调用该函数后,c=5241。 算法分析: 对一个两位数n,它的各位可以通过n%10求的,它的十位数可以通过n/10求的;所以分别用上述方法求的a和b的个位和十位,同时按照要求累加到c里。 参考子函数如下: long fun(int a, int b) { long c=0; c=a%10*1000+a/10*10+b/10+b%10*100; return c; } (4) (sy7-4.c)请编一个函数fun,函数的功能是使实型数保留2位小数,并对第三位进行四舍五入(规定实型数为正数)。例如:实型数为1234.567, 则函数返回1234.570000;实型数为1234.564, 则函数返回1234.560000。 算法分析: 先把这个数乘以100,然后再加0.5(实现四舍五入),再把这个数存放到一个长整型变量中,目的是把小数点后的小数去除,最后把这个数转换成浮点型数除以100,即可得出所的结果。 参考自定义函数如下: float fun ( float h ) { long w ; w = h * 100 + 0.5 ; return (float) w / 100 ; } (5) (sy7-5.c)请编写一个函数unsigned fun ( unsigned w ),w 是一个大于10的无符号整数,若w 是n (n ≥2)位的整数,函数求出w的低n-1位的数作为函数值返回。 例如:w 值为5923,则函数返回923;w 值为923 则函数返回23。 算法分析: 首先应求出w的位数,有一位,i就乘以10(如果有4位,i就等于10000);然后通过求模运算舍弃最高位; 参考子函数如下: unsigned fun ( unsigned w ) { int i=1;//i用来存放整数的位数

C语言 实验三 模块化程序设计

实验三模块化程序设计 (3学时) 【实验目的】 1. 掌握一维数组和二维数组的定义、赋值和输入输出的方法。 2. 掌握字符数组和字符串函数的使用。 3. 掌握与数组有关的算法。 4. 掌握函数定义的方法。 5. 掌握函数实参与形参的传递方式。 6. 掌握函数的嵌套调用和递归调用的方法。 7. 了解全局变量和局部变量、动态变量、静态变量的概念和使用方法。 【实验内容】 任务1 数组的基本定义与应用 1. 定义一个10个元素的int数组a,输入10个数,并输出。 参考程序: main() {int i,a[10]; for(i=0;i<10;i++) scanf("%d",&a[i]); for(i=0;i<10;i++) printf("%5d",a[i]); printf("\n"); } 运行结果: 2. 寻找整数数组num中的最大值及其所在的下标。 参考程序:main() {int i,max,p,a[10]; printf("please enter 10 data:\n"); for(i=0;i<10;i++) scanf("%d",&a[i]); max=a[0];p=0; for(i=1;i<10;i++) 淮南师范学院电气信息工程学院 1

if(a[i]>max) {max=a[i];p=i;} printf("max is:%d\n",max); printf("point is:%d\n",p+1); } 运行结果: 3. 实现对n个数的数列从小到大排序。(比较交换法、选择法、冒泡法) 参考程序:冒泡法 #include main() {int i,j,n,a[100];int temp;clrscr(); printf("enter the number:\n"); scanf("%d",&n); for(i=0;ia[j+1]) {temp=a[j];a[j]=a[j+1];a[j+1]=temp;} printf("\n output the sorted array\n"); for(i=0;i

相关文档
相关文档 最新文档