实验十

实验十
实验十

C语言程序设计实验报告

专业计算机科学与技术班级0802 日期2009-5-20 成绩

实验组别55 第10 次实验指导教师周时阳

学生姓名张星雨学号U200814239 同组人姓名无

实验名称 10.文件实验

一、实验目的

1.熟悉文本文件和二进制文件在磁盘中的存储方式;

2.熟练掌握流式文件的读写方法。

二、实验任务

1.文件类型的程序验证题

设有程序:

#include

void main(void)

{

short a=0x253f,b=0x7b7d;

char ch;

FILE *fp1,*fp2;

fp1=fopen("d:\\abc1.bin","wb+");

fp2=fopen("d:\\abc2.txt","w+");

fwrite(&a,sizeof(short),1,fp1);

fwrite(&b,sizeof(short),1,fp1);

fprintf(fp2,"%hx %hx",a,b);

rewind(fp1); rewind(fp2);

while((ch = fgetc(fp1)) != EOF)

putchar(ch);

putchar('\n');

while((ch = fgetc(fp2)) != EOF)

putchar(ch);

putchar('\n');

fclose(fp1);

fclose(fp2);

}

(1)请思考程序的输出结果,然后通过上机运行来加以验证。

(2)将两处sizeof(short)均改为sizeof(char)结果有什么不同,为什么?

(3)将fprintf(fp2,"%hx %hx",a,b) 改为 fprintf(fp2,"%d %d",a,b)结果有什么不同。

2.源程序修改替换题

将指定的文本文件内容在屏幕上显示出来,命令行的格式为:

type filename

(1) 源程序中存在什么样的逻辑错误(先观察执行结果)?对程序进行修改、调试,使之能够正确完成指定任务。

#include

#include

void main(int argc, char* argv[])

{

char ch;

FILE *fp;

if(argc!=2){

printf("Arguments error!\n");

exit(-1);

}

if((fp=fopen(argv[1],"r"))==NULL){ /* fp 指向 filename */ printf("Can't open %s file!\n",argv[1]);

exit(-1);

}

while(ch=fgetc(fp)!=EOF) /* 从filename中读字符 */

putchar(ch); /* 向显示器中写字符 */

fclose(fp); /* 关闭filename */

}

(2)用输入输出重定向freopen改写main函数。

3.编程设计题

(1)从键盘输入一行英文句子,将每个单词的首字母换成大写字母,然后输出到一个磁盘文件“test”中保存。

(2) 设计一个通信录管理程序,程序应有以下9个选项:

①录入每个联系人的基本信息(至少应有姓名、单位、电话、邮件地址);

②从磁盘文件中读取记录到内存;

③保存记录到磁盘文件;

④修改记录;

⑤插入一条记录;

⑥删除一条记录;

⑦显示所有的记录;

⑧按姓名对记录升序排序

⑨退出

要求:

1) 用链表结构;

1) 采用结构化程序设计,将每个功能定义成函数;

2) 应有用户界面,提供菜单选项。

三、实验步骤及结果

(要求给出源程序和程序运行结果。另外,根据实验内容,记录编辑、编译、链接、调试程序的操作过程和实验现象)

1.文件类型的程序验证题

(1)输出?%}{

253f 7b7d

(2)输出?}

253f 7b7d

(3) 将数字转变成了十进制数。

2.源程序修改替换题

#include

void main(int argc, char* argv[])

{

char ch;

FILE *fp;

if(argc!=2){

printf("Arguments error!\n");

exit(-1);

}

fp=freopen(argv[1],"r",stdin);

if(fp==NULL){

printf("Can't open %s file!\n",argv[1]);

exit(-1);

}

while((ch=getch())!=EOF)

putch(ch);

fclose(fp);

}

3.编程设计题

1.

#include

void main(){

char *p;

int i,j;

FILE *p1;

p1=fopen("c:\\test.dat","w+");

while(gets(p)!=NULL){

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

if(((*(p+i)==' '))&&(*(p+i+1)>='a'&&*(p+i+1)< 'z' )) *(p+i+1)=*(p+i+1)-'a'+'A';

if(i==0&&(*(p+i)>='a'&&*(p+i)< 'z' ))

*p=*p-'a'+'A';

}

fprintf(p1,"%s",p);

}

fclose(p1);}

2.

#include

#include

#include

#define N 4

struct list{

char num[8],name[9];

char tel[13],id[20];

struct list *next;

};

void creat(struct list **headp){

int i;

struct list *p;

*headp=(struct list *)malloc(sizeof(struct list));

(*headp)->next=p;

for(i=0;i

p=(struct list *)malloc(sizeof(struct list));

p->next=NULL;

p=p->next;

}

}

void input(struct list *p){

while(p!=NULL){

scanf("%s%s%s%s",p->num,p->name,p->tel,p->id);

p=p->next;}

}

void save(struct list *p){

FILE *p1;

p1=fopen("c:\\abc.dat","wb");

while(p!=NULL){

fwrite(p,sizeof(struct list),1,p1);

p=p->next;

}

fclose(p1);

}

void out(struct list *p){

FILE *p1;

struct list *p2=p;

p1=fopen("c:\\abc.dat","rb");

while(!feof(p1)){

p2=(struct list *)malloc(sizeof(struct list )); fread(p2,sizeof(struct list),1,p1);

if(!feof(p1)){

p2=p2->next;

}

}

fclose(p1);

}

void change(struct list *p,char *p1){

while(p!=NULL){

if(strcmp(p->num,p1))

scanf("%s%s%s%s",p->num,p->name,p->tel,p->id); p=p->next;

}

}

void insert(struct list *p,struct list *p1){

p1->next=p->next->next;

p->next=p1;

}

void del(struct list *p,char *p1){

struct list *p2=p->next;

while(p2!=NULL){

if(strcmp(p2->num,p))

p->next=p2->next;

p=p->next;

p2=p2->next;

}

}

void show(struct list *p){

while(p!=NULL){

printf("%s\t",p->num);

printf("%s\t",p->name);

printf("%s\t",p->tel);

printf("%s\t",p->id);

printf("\n");

p=p->next;

}

}

void sort(struct list *p){

struct list *p1,*p2,*p3,*p4,a;

p1=&a;

p1->next=p;

for(;p->next->next=NULL;p=p->next,p1=p1->next)

for(p2=p->next,p4=p;p2->next!=NULL;p2=p2->next,p4=p4->next) if(strcmp(p->name,p2->name)>0){

p3=p->next;

p->next=p2->next;

p2->next=p3;

p1->next=p2;

p4->next=p;

}

}

void f(){

exit(-1);

}

void main(){

int i;

char *s;

struct list *p,*h,*p1;

creat(&p);

h=p;

printf(" ①录入每个联系人的基本信息\n"

" ②从磁盘文件中读取记录到内存 \n"

" ③保存记录到磁盘文件 \n"

" ④修改记录; \n"

" ⑤插入一条记录;\n"

" ⑥删除一条记录;\n"

" ⑦显示所有的记录\n"

" ⑧按姓名对记录升序排序 \n"

" ⑨退出\n");

scanf("%d",&i);

while(1){

switch(i){

case 1:input(h);

h=p;

break;

case 2:out(h);

h=p;

break;

case 3:save(h);

h=p;

break;

case 4:gets(s);

change(h,s);

h=p;

break;

case 5:p1=(struct list *)malloc(sizeof(struct list));

insert(h,p1);

h=p;

break;

case 6:gets(s);

del(h,s);

h=p;

break;

case 7:show(h);

h=p;

break;

case 8:sort(h);

h=p;

break;

case 9:f();

default:printf("error");

}

}

}

四、实验体会

通过本次试验,我熟悉文本文件和二进制文件在磁盘中的存储方式;熟练掌握流式文件的读写方法。

Python 实验8 函数1

实验8 函数(一)实验目的: 1、理解自定义函数过程的定义与调用方法; 2、掌握自定义函数的定义与调用方法; 3、理解函数中的参数的作用; 实验内容: 1、编写一函数Fabonacci(n),其中参数n代表第n 次的迭代。While循环 def fib(n): if n==1 or n==2: return 1 a=1 b=1 i=2 while True: c=a+b a=b b=c i+=1 #第i次迭代,也就就是第i个数 if i==n: return c break def main(): n=input("Enter a number of generation:") print fib(n) main() 或者用for循环 def fib(n): a=1 b=1 c=0 if n==1 or n==2: return 1 else: for i in range(3,n+1): c=a+b a=b b=c return c def main(): n=input("enter n:") print fib(n) main() 2、编写一函数Prime(n),对于已知正整数n,判断该数就是否为素数,如果就是素数,返回True,否则返回 False。 def prime(n): if n<2: return False a=0 for i in range(1,n+1): if n%i==0: a+=1 if a>2: return False else: return True def main(): n=input("Enter a number:") print prime(n) main() Or: def prime(n): if n<2: return False if n==2: return True for i in range(2,n): if n%i==0: return False return True def main(): n=input("Enter a number:") print prime(n) main()

数据库实验大全

数据库实验报告 实验内容数据库实验 学院信息工程学院 班级 12级应用电子技术2班 学号 学生姓名 指导教师 2015年3 月29 日

实验1 数据库的定义实验 一、实验目的: 熟练掌握和使用SQL、T-SQL、SQL Server 企业管理器(Enterpriser Manager Server )创建数据库、表、索引和修改表结构,并学会使用查询分析器(SQL Server Query Analyzer),接收T-SQL语句和进行结果分析。 二、实验内容: 1)创建数据库和查看数据库属性。 2)创建表、确定表的主码和约束条件,为主码建索引。 3)查看和修改表结构。 4)熟悉SQL Server 企业管理器(Enterpriser Manager)和查询分析器(Query Analyzer)工具的使用方法。 三、具体实验步骤及实验结果: 1)启动SQL Server200下的企业管理器(Enterpriser Manager)点击“数据库”右键,利用“新建数据库”建立图书读者数据库; 2)通过企业管理器(Enterpriser Manager),在建好了图书数据库中建立图书、读者和借阅3个表,方法是点击“图书_读者”右键“新建”下的“表”,如图所示:

3)建立关系于定义约束 定义UNIQUE(惟一性)约束:

定义CHECK约束: 实验2 数据库的建立和维护实验 一、实验目的: 要求学生熟练掌握使用SQL、T-SQL和SQL Server 企业管理器(Enterpriser Manager)向数据库输入数据、修改数据和删除数据的操作。 二、实验内容: 利用SQL Server2000企业管理器实现: (1)查看数据库的基本表的结构和数据约束,并将它们调整到正确。 (2)在数据库的基本表中正确输入数据。 (3)在数据库的基本表中插入、删除和修改数据。 (4)浏览数据库中基本表中的数据。 三、实验要求: 1.基本操作实验 1)通过企业管理器,在图书借阅数据库的图书、读者和借阅3个表中各输入10条记录。要求记录不仅满足数据约束要求,还要有表间关联的记录。 实验结果如图所示:

信号与系统实验

《信号与系统及MATLAB实现》实验指导书

前言 长期以来,《信号与系统》课程一直采用单一理论教学方式,同学们依靠做习题来巩固和理解教学内容,虽然手工演算训练了计算能力和思维方法,但是由于本课程数学公式推导较多,概念抽象,常需画各种波形,作题时难免花费很多时间,现在,我们给同学们介绍一种国际上公认的优秀科技应用软件MA TLAB,借助它我们可以在电脑上轻松地完成许多习题的演算和波形的绘制。 MA TLAB的功能非常强大,我们此处仅用到它的一部分,在后续课程中我们还会用到它,在未来地科学研究和工程设计中有可能继续用它,所以有兴趣的同学,可以对MA TLAB 再多了解一些。 MA TLAB究竟有那些特点呢? 1.高效的数值计算和符号计算功能,使我们从繁杂的数学运算分析中解脱出来; 2.完备的图形处理功能,实现计算结果和编程的可视化; 3.友好的用户界面及接近数学表达式的自然化语言,易于学习和掌握; 4.功能丰富的应用工具箱,为我们提供了大量方便实用的处理工具; MA TLAB的这些特点,深受大家欢迎,由于个人电脑地普及,目前许多学校已将它做为本科生必须掌握的一种软件。正是基于这些背景,我们编写了这本《信号与系统及MA TLAB实现》指导书,内容包括信号的MA TLAB表示、基本运算、系统的时域分析、频域分析、S域分析、状态变量分析等。通过这些练习,同学们在学习《信号与系统》的同时,掌握MA TLAB的基本应用,学会应用MA TLAB的数值计算和符号计算功能,摆脱烦琐的数学运算,从而更注重于信号与系统的基本分析方法和应用的理解与思考,将课程的重点、难点及部分习题用MA TLAB进行形象、直观的可视化计算机模拟与仿真实现,加深对信号与系统的基本原理、方法及应用的理解,为学习后续课程打好基础。另外同学们在进行实验时,最好事先预习一些MA TLAB的有关知识,以便更好地完成实验,同时实验中也可利用MA TLAB的help命令了解具体语句以及指令的使用方法。

实验十

实验十类与对象的基本概念 一、实验目的 类是C++扩展数据类型,可以封装不同类型的数据成员和函数成员。类是面向对象程序设计的基础。本次实验内容包括面向对象的基本概念、构造函数与析构函数,从实际问题抽象出类等,通过实验要求掌握以下内容: 1、掌握面向对象的基本概念和类的定义方法。 2、掌握类成员的访问权限以及访问类成员的方法。 3、掌握内联函数和默认函数。 4、掌握构造函数和析构函数的意义及使用方法。 二、实验内容 1、范例:设计并测试一个矩形类(Rectangle)。属性为矩形的左下角与右上角的坐标,矩形水平放置。操作为计算矩形的周长和面积。 程序】 #include #include using namespace std; class Rectangle{ double left,top; double right,bottom; public: Rectangle(double l=0,double t=0,double r=0,double b=0); ~Rectangle(){}; void Assign(double l,double t,double r,double b); void Show();

double Area(); double Perimeter(); }; Rectangle::Rectangle(double l,double t,double r,double b){ left=l;top=t; right=r;bottom=b; } void Rectangle::Assign(double l,double t,double r,double b){ left=l;top=t; right=r;bottom=b; } void Rectangle::Show(){ cout<<"left-top point is("<

实验2:函数的应用

实验项目:函数的应用 实验目的: (1)掌握函数的定义和调用方法 (2)练习重载函数的使用 (3)练习使用系统函数 (4)使用debug调试功能,使用step into追踪到函数内部。 实验任务: 1.编写重载函数MAX1可分别求取两个整数,三个整数,两个双精度,三个双精度数的最大值。 2.用递归的方法编写函数求Fibonacci级数,观察递归调用的过程。 实验步骤: 1.分别编写四个同名的函数max1,实现函数重载,在main()中测试函数功能。 int max1(int x, int y) { return (x>y?x:y); } int max1(int x, int y, int z) { int temp1=max1(x,y); return (y>z?y:z); } double max1(double x, double y) { return (x>y?x:y); } double max1(double x, double y, double z) { double temp1=max1(x,y); return (y>z?y:z); } void main() { int x1, x2; double d1, d2; x1 = max1(5,6); x2 = max1(2,3,4); d1 = max1(2.1, 5.6); d2 = max1(12.3, 3.4, 7.8); cout << "x1=" <

【例10-2】在函数fun中求1+2+3+4+5的和值,在main()函数中输出和值。 源程序: #include "stdio.h" int fun(int n) /*定义函数*/ { int i=1,sum=0; for(;i<=n;i++) sum+=i; return sum; /*通过return语句向main()返回值*/ } main() { int i=5,sum; sum=fun(i); printf("sum=%d\n",sum); } 举一反三 【10-2】从键盘输入一个正整数n,计算n!的值。要求定义和调用函数fac(n),计算n!。源程序: #include “stdio.h” int fac(int m) {/***************begin****************/ /***************end******************/ } int main() { int n; double f; printf(“input n:”); scanf(“%d”,&n); f=fac(n); printf(“%d!=%f\n”,n,f); } 【例10-3】输入x,输出相应的y值。要求定义和调用函数fun,实现下面的分段函数。 0 (x=0) y= sin(x) (x>0) |x| (x<0) 源程序:

实验4-1 函数的应用的答案

实验4 函数的应用 【实验目的】 1掌握函数声明、定义和调用的方法; 2了解函数调用的实参与形参的传递,以及参数默认值的设置。 3掌握重载函数的实现方法。 4理解递归和嵌套函数的概念、定义与调用。 【实验内容】 ⒈分别输入整数半径和实数半径,使用函数重载计算圆的面积。 #include #define PI 3.14 int area(int); float area(float); void main() { int r1; cout<<"Input a integer r="; cin>>r1; cout<<"area="< void fun (int x,int y ); main() {int x=5,y=3; fun(x,y); printf("%d,%d\n",x,y); } void fun (int x,int y ) { x=x+y; y=x-y;

x=x-y; printf("%d,%d\n",x,y); 3.#include int f (int a); main() { int s[ 8 ] = {1,2,3,4,5,6} ,i, d=0; for (i=0; f( s[i] ) ; i++) d+=s[i]; printf("%d\n",d); } int f(int a) { return a%2; } 4.#include long f( int g) { switch(g) { case 0:return 0; case 1: case 2: return 1; } return ( f(g-1)+ f(g-2)); } main ( ) { long int k; k = f(7); printf("\nk= %d\n",k); }

数据库实验1

邮电大学计算机学院 《大型数据库技术》 实验一:MySQL数据库安装配置及基础使用 :侯利萍班级:09 学号:B13040905 2016年 3 月21 日星期一 说明:斜体需要输出的部分。 下载安装MySQL 搜索MySQL下载页面 网址: 查看各种MySQL版本 MySQL主要版本及区别: 所下载版本及版本号: 安装配置MySQL 数据库基本操作 创建数据库 创建一个企业管理系统数据库,命名为enterprisedb,字符集选择utf8. SQL语句:create database enterprisedb; set charset utf8; 输出截图:

创建关系表 创建一雇员表,命名为employee,包括如下字段:雇员工号(从86001 开始递增),,性别,生日,部门名称。(请选择合适的数据类型) SQL语句: create table employe (id int(10) primary key AUTO_INCREMENT,name varchar(10),sex varchar(10),birthday virchar(10)) AUTO_INCREMENT=86001; 输出截图: 插入数据操作 插入10条不同信息的雇员,信息自定,需要符合实际。 SQL语句:insert into employe values("0","zhang","man","1996.1.2","mangager"); insert into employe values("0","","man","1996.1.2","mangager"); insert into employe values("0","","man","1995.1.2","mangager"); insert into employe values("0","胡","woman","1994.1.2","worker"); insert into employe values("0","周","woman","1995.1.1","worker"); insert into employe values("0","","woman","1995.3.1","worker"); insert into employe values("0","王","woman","1995.3.1","seller"); insert into employe values("0","吴","woman","1995.2.1","seller"); insert into employe values("0","吴","man","1995.2.1","seller"); insert into employe values("0","","man","1989.2.1","leader"); insert into employe values("0","田 ","woman","19988.2.1","leader"); 注释:在测试英文中文是否都正常时,多输入一个英文员工。 输出截图:

北京理工大学信号与系统实验实验报告

实验1 信号的时域描述与运算 一、实验目的 1. 掌握信号的MATLAB表示及其可视化方法。 2. 掌握信号基本时域运算的MA TLAB实现方法。 3. 利用MA TLAB分析常用信号,加深对信号时域特性的理解。 二、实验原理与方法 1. 连续时间信号的MATLAB表示 连续时间信号指的是在连续时间范围内有定义的信号,即除了若干个不连续点外,在任何时刻信号都有定义。在MATLAB中连续时间信号可以用两种方法来表示,即向量表示法和符号对象表示法。 从严格意义上来说,MATLAB并不能处理连续时间信号,在MATLAB中连续时间信号是用等时间间隔采样后的采样值来近似表示的,当采样间隔足够小时,这些采样值就可以很好地近似表示出连续时间信号,这种表示方法称为向量表示法。表示一个连续时间信号需要使用两个向量,其中一个向量用于表示信号的时间范围,另一个向量表示连续时间信号在该时间范围内的采样值。例如一个正弦信号可以表示如下: >> t=0:0.01:10; >> x=sin(t); 利用plot(t,x)命令可以绘制上述信号的时域波形,如图1所示。 如果连续时间信号可以用表达式来描述,则还可以采用符号表达式來表示信号。例如对于上述正弦信号,可以用符号对象表示如下: >> x=sin(t); >> ezplot(X); 利用ezplot(x)命令可以绘制上述信号的时域波形 Time(seconds) 图1 利用向量表示连续时间信号

t 图 2 利用符号对象表示连续时间信号 sin(t) 2.连续时间信号的时域运算 对连续时间信号的运算包括两信号相加、相乘、微分、积分,以及位移、反转、尺度变换(尺度伸缩)等。 1)相加和相乘 信号相加和相乘指两信号对应时刻的值相加和相乘,对于两个采用向量表示的可以直接使用算术运算的运算符“+”和“*”来计算,此时要求表示两信号的向量时间范围和采样间隔相同。采用符号对象表示的两个信号,可以直接根据符号对象的运算规则运算。 2)微分和积分 对于向量表示法表示的连续时间信号,可以通过数值计算的方法计算信号的微分和积分。这里微分使用差分来近似求取的,由时间向量[N t t t ,,,21?]和采样值向量[N x x x ,,,21?]表示的连续时间信号,其微分可以通过下式求得 1,,2,1,|)('1-?=?-≈ +=N k t x x t x k k t t k 其中t ?表示采样间隔。MA TLAB 中用diff 函数来计算差分 k k x x -+1。 连续时间信号的定积分可以由MATLAB 的qud 函数实现,调用格式为 quad ('function_name',a,b) 其中,function_name 为被积函数名,a 、b 为积分区间。

相关文档
最新文档