文档库 最新最全的文档下载
当前位置:文档库 › 上机实验题目

上机实验题目

上机实验题目
上机实验题目

上机实验题目、内容和要求

实验1:熟悉上机环境和顺序结构编程练习

1. 键盘输入与屏幕输出练习

问题1 要使下面程序的输出语句在屏幕上显示1, 2, 34,则从键盘输入的数据格式应为以下备选答案中的。

#include

main()

{

char a,b;

int c;

scanf("%c%c%d",&a,&b,&c);

printf("%c,%c,%d\n",a,b,c);

}

A)1 2 34 B)1, 2, 34

C)’1’,’2’,34D)12 34

问题2 在与上面程序的键盘输入相同的情况下,要使上面程序的输出语句在屏幕上显示12 34,则应修改程序中的哪条语句?怎样修改?

问题 3 要使上面程序的键盘输入数据格式为1,2,34,输出语句在屏幕上显示的结果也为1,2,34,则应修改程序中的哪条语句?怎样修改?

问题4 要使上面程序的键盘输入数据格式为1,2,34,而输出语句在屏幕上显示的结果为'1', '2',34,则应修改程序中的哪条语句?怎样修改?

[提示:利用转义字符输出字符单引号字符。]

问题5 要使上面程序的键盘输入无论用下面哪种格式输入数据,程序在屏幕上的输出结果都为'1', '2',34,则程序应修改程序中的哪条语句?怎样修改?

第1种输入方式:1,2,34↙(以逗号作为分隔符)

第2种输入方式:1 2 34↙(以空格作为分隔符)

第3种输入方式:1 2 34↙(以Tab键作为分隔符)

第4种输入方式:1↙

2↙

34↙(以回车符作为分隔符)

[提示:利用忽略输入修饰符。]

2. 计算定期存款本利之和

设银行定期存款的年利率rate为2.25%,并已知存款期为n年,存款本金为capital元,试编程计算n年后的本利之和deposit。要求定期存款的年利率rate、存款期n和存款本金capital 均由键盘输入。

实验2:选择结构编程练习

1. 身高预测

每个做父母的都关心自己孩子成人后的身高,据有关生理卫生知识与数理统计分析表明,影响小孩成人后的身高的因素包括遗传、饮食习惯与体育锻炼等。小孩成人后的身高与其父母的身高和自身的性别密切相关。

设faHeight为其父身高,moHeight为其母身高,身高预测公式为

男性成人时身高=(faHeight + moHeight)×0.54cm

女性成人时身高=(faHeight×0.923 + moHeight)/2cm

此外,如果喜爱体育锻炼,那么可增加身高2%;如果有良好的卫生饮食习惯,那么可增加身高1.5%。

编程从键盘输入用户的性别(用字符型变量sex存储,输入字符F表示女性,输入字符M 表示男性)、父母身高(用实型变量存储,faHeight为其父身高,moHeight为其母身高)、是否喜爱体育锻炼(用字符型变量sports存储,输入字符Y表示喜爱,输入字符N表示不喜爱)、是否有良好的饮食习惯等条件(用字符型变量diet存储,输入字符Y表示良好,输入字符N表示不好),利用给定公式和身高预测方法对身高进行预测。

2. 简单的计算器

用switch语句编程设计一个简单的计算器程序,要求根据用户从键盘输入的表达式:

操作数1 运算符op 操作数2

计算表达式的值,指定的算术运算符为加(+)、减(-)、乘(*)、除(/)。

本实验程序是在例4.8的基础上,增加如下要求:

(1)如果要求程序能进行浮点数的算术运算,程序应该如何修改?如何比较实型变量data2和常数0是否相等?

(2)如果要求输入的算术表达式中的操作数和运算符之间可以加入任意多个空白符,那么程序如何修改?

(3)(选作题)如果要求连续做多次算术运算,每次运算结束后,程序都给出提示:

Do you want to continue(Y/N or y/n)?

用户输入Y或y时,程序继续进行其他算术运算;否则程序退出运行状态。那么,程序如何修改?

[提示:利用空格加%c(或者%1s)格式符输入用户回答,利用do-while语句实现反复运算直到用户输入N或n。]

【思考题】比较实型变量data2和常数0是否相等,能用if (data2 == 0)吗?为什么?

实验3:循环结构编程练习

猜数游戏

在这个实验中,我们将尝试编写一个猜数游戏程序,这个程序看上去有些难度,但是如果按下列要求循序渐进地编程实现,会发现其实这个程序是很容易实现的。那么,现在就开始吧,先编写第1个程序,然后试着在第1个程序的基础上编写第2个程序,……

程序1 编程先由计算机“想”一个1~100之间的数请人猜,如果人猜对了,则计算机给出提示“Right!”,否则提示“Wrong!”,并告诉人所猜的数是大(Too high)还是小(Too low),然后结束游戏。要求每次运行程序时机器所“想”的数不能都一样。

程序2 编程先由计算机“想”一个1~100之间的数请人猜,如果人猜对了,则结束游戏,并在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平;否则计算机给出提示,告诉人所猜的数是太大还是太小,直到人猜对为止。

程序3 编程先由计算机“想”一个1~100之间的数请人猜,如果人猜对了,则结束游戏,并在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平;否则计算机给出提示,告诉人所猜的数是太大还是太小,最多可以猜10次,如果猜了10次仍未猜中的话,结束游戏。

程序4 编程先由计算机“想”一个1~100之间的数请人猜,如果人猜对了,在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平,则结束游戏;否则计算机给出提示,告诉人所猜的数是太大还是太小,最多可以猜10次,如果猜了10次仍未猜中的话,则停止本次猜数,然后继续猜下一个数。每次运行程序可以反复猜多个数,直到操作者想停止时才结束。

【思考题】如果用scanf输入用户猜测的数据时,如果用户不小心输入了非法字符,如字符a,那么程序运行就会出错,用什么方法可以避免这样的错误发生呢?请读者编写程序验证方法的有效性。

实验4:函数编程练习

1. 给小学生出加法考试题

编写一个程序,给学生出一道加法运算题,然后判断学生输入的答案对错与否,按下列要求以循序渐进的方式编程。

程序1 通过输入两个加数给学生出一道加法运算题,如果输入答案正确,则显示“Right!”,否则显示“Not correct! Try again!”,程序结束。

程序2 通过输入两个加数给学生出一道加法运算题,如果输入答案正确,则显示“Right!”,否则显示“Not correct! Try again!”,直到做对为止。

程序3 通过输入两个加数给学生出一道加法运算题,如果输入答案正确,则显示“Right!”,否则提示重做,显示“Not correct! Try again!”,最多给三次机会,如果三次仍未做对,则显示“Not correct! Y ou have tried three times! Test over!”,程序结束。

程序4 连续做10道题,通过计算机随机产生两个1~10之间的加数给学生出一道加法运

算题,如果输入答案正确,则显示“Right!”,否则显示“Not correct!”,不给机会重做,10道题做完后,按每题10分统计总得分,然后打印出总分和做错的题数。

程序5 通过计算机随机产生10道四则运算题,两个操作数为1~10之间的随机数,运算类型为随机产生的加、减、乘、整除中的任意一种,如果输入答案正确,则显示“Right!”,否则显示“Not correct!”,不给机会重做,10道题做完后,按每题10分统计总得分,然后打印出总分和做错题数。

【思考题】如果要求将整数之间的四则运算题改为实数之间的四则运算题,那么程序该如何修改呢?请读者修改程序,并上机测试程序运行结果。

2.掷骰子游戏

编写程序模拟掷骰子游戏。已知掷骰子游戏的游戏规则为:每个骰子有6面,这些面包含1、2、3、4、5、6个点,投两枚骰子之后,计算点数之和。如果第一次投的点数和为7或11,则游戏者获胜;如果第一次投的点数和为2、3或12,则游戏者输;如果第一次投的点数和为4、5、6、8、9或10,则将这个和作为游戏者获胜需要掷出的点数,继续投骰子,直到赚到该点数时算是游戏者获胜。如果投掷7次仍未赚到该点数,则游戏者输。

[提示:由于这个游戏的游戏规则相对较为复杂,游戏者第一次投骰子时可能输,也可能赢,还可能再投很多次才能确定胜负。因此,设置一个枚举型变量gameStatus来跟踪这个状态,游戏者获胜时,将gameStatus置为WON,游戏者失败时,将gameStatus置为LOST,否则游戏不能结束,需通过再次投掷确定胜负,先将gameStatus置为CONTINUE,同时,将sum 保存在myPoint中,在后续的while循环中,再次调用rollDice产生新的sum,当sum等于myPoint时,将gameStatus置为WON,如果又投掷了7次,sum仍未等于myPoint,则将gameStatus置为LOST。在程序的最后,根据gameStatus的值,打印胜负结果。] 【思考题】将游戏规则改为:计算机想一个数作为一个骰子掷出的点数(在用户输入数据之前不显示该点数),用户从键盘输入一个数作为另一个骰子掷出的点数,再计算两点数之和。其余规则相同,然后请读者重新编写该程序。

实验5:数组编程练习

1. 检验并打印魔方矩阵

在下面的5×5阶魔方矩阵中,每一行、每一列、每一对角线上的元素之和都是相等的,试编写程序将这些魔方矩阵中的元素读到一个二维整型数组中,然后检验其是否为魔方矩阵,并将其按如下格式显示到屏幕上。

17 24 1 8 15

23 5 7 14 16

4 6 13 20 22

10 12 19 21 3

11 18 25 2 9

2. 餐饮服务质量调查打分

在商业和科学研究中,人们经常需要对数据进行分析并将结果以直方图的形式显示出来。例如,一个公司的主管可能需要了解一年来公司的营业状况,比较一下各月份的销售收入状况。如果仅给出一大堆数据,这显然太不直观了,如果能将这些数据以条形图(直方图)的形式表示,将会大大增加这些数据的直观性,也便于数据的分析与对比。下面以顾客对餐饮服务打分为例,练习这方面的程序编写方法。假设有40个学生被邀请来给自助餐厅的食品和服务质量打分,分数划分为1~10这10个等级(1表示最低分,10表示最高分),试统计调查结果,并用*打印出如下形式的统计结果直方图。

Grade Count Histogram

1 5 *****

2 10 **********

3 7 *******

...

[ 提示:定义一个含有40个元素的数组score,40个学生打的分数存放在这个数组中,再定义一个含有11个元素的数组count,作为计数器使用(count[0]不用)。第一步是计算统计结果,设置一个循环,依次检查数组score中的元素值,是1则将数组元素count[1]加1,是2则将数组元素count[2]加1,依次类推,将各等级分数的统计结果存放在count数组中。第二步是打印统计结果,设置一个循环,按数组count中元素值的大小,依次打印相应个数的星号'*'。计算统计结果时,既可以用switch语句,也可以不用switch语句,请分别考虑这两种编程方法。]

3. 文曲星猜数游戏

模拟文曲星上的猜数游戏,先由计算机随机生成一个各位相异的4位数字,由用户来猜,根据用户猜测的结果给出提示:xA yB

其中,A前面的数字表示有几位数字不仅数字猜对了,而且位置也正确,B前面的数字表示有几位数字猜对了,但是位置不正确。

最多允许用户猜的次数由用户从键盘输入。如果猜对,则提示“Congratulations!”;如果在规定次数以内仍然猜不对,则给出提示“Sorry, you haven't guess the right number!”。程序结束之前,在屏幕上显示这个正确的数字。

[提示:用数组a存储计算机随机生成的4位数,用数组b存储用户猜的4位数,对a 和b中相同位置的元素进行比较,得到A前面待显示的数字,对a和b的不同位置的元素进行比较,得到B前面待显示的数字。]

实验6:一维数组和函数综合编程练习

学生成绩统计

从键盘输入一个班(全班最多不超过30人)学生某门课的成绩,当输入成绩为负值时,输入结束,分别实现下列功能:

(1)统计不及格人数并打印不及格学生名单;

(2)统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单; (3)统计各分数段的学生人数及所占的百分比。 [提示:

(1)用num[i]存放第i+1个学生的学号,用score[i]存放第i+1个学生的成绩。设置计数器count ,当score[i]<60时,计数器count 计数一次,并打印num[i]和score[i]。 (2)先计算全班平均分aver ,当第i 个学生的成绩score[i]>=aver 时,打印num[i]和score[i]。 (3)将成绩分为6个分数段,60分以下为第0段,60~69分为第1段,70~79分为第2段,80~89分为第3段,90~99分为第4段,100分为第5段,因此成绩与分数段的对应关系为:

??

?-<=时

成绩成绩时成绩分数段60≥10

/)50(600

各分数段的学生人数保存在数组stu 中,用stu[i]存放第i 段的学生人数。对于每个学生的成绩,先计算出该成绩所对应的分数段,然后将相应的分数段的人数加1,即stu[i]++。从本次实验开始,所有实验都使用函数来编程。]

【思考题】 在编程实现对数据的统计任务时,需要注意什么问题?

实验7:二维数组和函数综合编程练习

成绩排名次

某班期末考试科目为数学(MT )、英语(EN )和物理(PH ),有最多不超过30人参加考试。考试后要求:

(1)计算每个学生的总分和平均分;

(2)按总分成绩由高到低排出成绩的名次;

(3)打印出名次表,表格内包括学生编号、各科分数、总分和平均分;

(4)任意输入一个学号,能够查找出该学生在班级中的排名及其考试分数。

[提示:用二维数组score 存放每个学生各门课程的成绩,用一维数组num 存放每个学生的学号,用一维数组sum 存放每个学生的总分,用一维数组aver 存放每个学生的平均分。 ① 用函数编程实现计算每个学生的总分。

② 用函数编程实现按总分由高到低对学生成绩排序。注意:排序时,一维数组sum 元素的变化应连同二维数组score 及一维数组num 和aver 一起变化。

③ 用函数编程实现查找学号为k 的学生在班级中的排名及相关成绩等信息,找不到时返回-1值。]

【思考题】 请读者思考如下问题。

① 如果增加一个要求:要求按照学生的学号由小到大对学号、成绩等信息进行排序,那么程序如何修改呢?

② 如果要求程序运行后先打印出一个菜单,提示用户选择:成绩录入、成绩排序、成绩查找,在选择某项功能后执行相应的操作,那么程序如何修改呢?

实验8:数组、指针和函数综合编程练习

打印最高分和学号

假设每班人数最多不超过40人,具体人数由键盘输入,试编程打印最高分及其学号。

程序1 用一维数组和指针变量作为函数参数,编程打印某班一门课成绩的最高分及其学号。程序2 用二维数组和指针变量作为函数参数,编程打印3个班学生(假设每班4个学生)的某门课成绩的最高分,并指出具有该最高分成绩的学生是第几个班的第几个学生。

程序3 用指向二维数组第0行第0列元素的指针作为函数参数,编写一个计算任意m行n 列二维数组中元素的最大值,并指出其所在的行列下标值的函数,利用该函数计算3个班学生(假设每班4个学生)的某门课成绩的最高分,并指出具有该最高分成绩的学生是第几个班的第几个学生。

程序4 编写一个计算任意m行n列二维数组中元素的最大值,并指出其所在的行列下标值的函数,利用该函数和动态内存分配方法,计算任意m个班、每班n个学生的某门课成绩的最高分,并指出具有该最高分成绩的学生是第几个班的第几个学生。

【思考题】请读者思考:

①编写一个能计算任意m行n列的二维数组中的最大值,并指出其所在的行列下标值的函数,能否使用二维数组或者指向二维数组的行指针作为函数参数进行编程实现呢?为什么?

②请读者自己分析动态内存分配方法(题目要求中的程序4)和二维数组(题目要求中的程序3)两种编程方法有什么不同?使用动态内存分配方法存储学生成绩与用二维数组存储学生成绩相比,其优点是什么?

实验9:结构体编程练习

在屏幕上模拟显示一个数字式时钟

按如下方法定义一个时钟结构体类型:

struct clock

{

int hour;

int minute;

int second;

};

typedef struct clock CLOCK;

然后,将下列用全局变量编写的时钟模拟显示程序改成用CLOCK结构体变量类型重新编写。已知用全局变量编写的时钟模拟显示程序如下:

#include

#include

int hour, minute, second; /*全局变量定义*/

/*

函数参数:无

函数返回值:无

*/

void Update(void)

{

second++;

if (second == 60) /*若second值为60,表示已过1分钟,则 minute值加1*/ {

second = 0;

minute++;

}

if (minute == 60) /*若minute值为60,表示已过1小时,则 hour值加1*/ {

minute = 0;

hour++;

}

if (hour == 24) /*若hour值为24,则hour的值从0开始计时*/

{

hour = 0;

}

}

/*函数功能:时、分、秒时间的显示

函数参数:无

函数返回值:无

*/

void Display(void) /*用回车符'\r'控制时、分、秒显示的位置*/

{

printf("%2d:%2d:%2d\r", hour, minute, second);

}

/*函数功能:模拟延迟1秒的时间

函数参数:无

函数返回值:无

*/

void Delay(void)

{

long t;

for (t=0; t<50000000; t++)

{

/*循环体为空语句的循环,起延时作用*/

}

}

main()

{

long i;

hour = minute = second = 0; /*hour,minute,second赋初值0*/

for (i=0; i<100000; i++) /*利用循环结构,控制时钟运行的时间*/

{

Update(); /*时钟更新*/

Display(); /*时间显示*/

Delay(); /*模拟延时1秒*/

}

}

[提示:用指向CLOCK结构体类型的指针作为函数Update和函数Display的参数,即void Update(CLOCK *t);

void Display(CLOCK *t); ]

【思考题】请读者思考:

①用结构体指针作为函数参数与用结构体变量作为函数参数有什么不同?本题可以用结构体变量作为函数参数编程实现吗?

②请读者自己分析下面两段程序代码,并解释它们是如何实现时钟值更新操作的。

void Update(struct clock *t)

{

static long m = 1;

t->hour = m / 3600;

t->minute = (m – 3600 * t->hour) / 60;

t->second = m % 60;

m++;

if (t->hour == 24)

{

m = 1;

}

}

void Update(struct clock *t)

{

static long m = 1;

t->second = m % 60;

t->minute = (m / 60) % 60;

t->hour = (m / 3600) % 24;

m++;

if (t->hour == 24)

{

m = 1;

}

}

实验10:文件编程练习

文件复制与追加

程序1 根据程序提示从键盘输入一个已存在的文本文件的完整文件名,再输入一个新文本文件的完整文件名,然后将已存在的文本文件中的内容全部复制到新文本文件中,利用文本

编辑软件,通过查看文件内容验证程序执行结果。

程序2 模拟DOS命令下的COPY命令,在DOS状态下输入命令行,以实现将一个已存在的文本文件中的内容全部复制到新文本文件中,利用文本编辑软件查看文件内容,验证程序执行结果。

程序3(选做)根据提示从键盘输入一个已存在的文本文件的完整文件名,再输入另一个已存在的文本文件的完整文件名,然后将第一个文本文件的内容追加到第二个文本文件的原内容之后,利用文本编辑软件查看文件内容,验证程序执行结果。

程序4(选做)根据提示从键盘输入一个已存在的文本文件的完整文件名,再输入另一个已存在的文本文件的完整文件名,然后将源文本文件的内容追加到目的文本文件的原内容之后,并在程序运行过程中显示源文件和目的文件中的文件内容,以此来验证程序执行结果。

【思考题】如果要复制的文件内容不是用函数fputc()写入的字符,而是用函数fprintf()写入的格式化数据文件,那么如何正确读出该文件中的格式化数据呢?还能用本实验中的程序实现文件的拷贝吗?请读者自己编程验证。

上机实验题目的参考答案

实验一熟悉上机环境和顺序结构编程练习

1键盘输入与屏幕输出练习参考答案:

问题1参考答案:D

问题2参考答案:

#include

main()

{

char a, b;

int c;

scanf("%c%c%d", &a, &b, &c);

printf("%-2c%-2c%d\n", a, b, c);

}

问题3参考答案:

#include

main()

{

char a, b;

int c;

scanf("%c,%c,%d", &a, &b, &c);

printf("%c,%c,%d\n", a, b, c);

}

问题4参考答案:

#include

main()

{

char a, b;

int c;

scanf("%c,%c,%d", &a, &b, &c);

printf("\'%c\',\'%c\',%d\n", a, b, c);

}

问题5参考答案:

#include

main()

{

char a, b;

int c;

scanf("%c%*c%c%*c%d", &a, &b, &c);

printf("\'%c\',\'%c\',%d\n", a, b, c);

}

2计算定期存款本利之和程序参考答案:

#include

#include

main() /*主函数首部*/

{

int n; /*存款期变量声明*/

double rate; /*存款年利率变量声明*/

double capital; /*存款本金变量声明*/

double deposit; /*本利之和变量声明*/

printf("Please enter rate, year,capital:");/*打印用户输入的提示信息*/ scanf("%lf,%d,%lf", &rate, &n, &capital); /*输入数据*/

deposit = capital * pow(1+rate, n); /*计算存款利率之和,pow为幂函数*/

printf("deposit = %f\n", deposit); /*打印存款利率之和*/

}

程序的运行情况如下:

Please enter rate, year, capital: 0.0225,1,10000↙

deposit = 10225.000000

实验二选择结构编程练习

1身高预测程序参考答案:

#include

main()

{

char sex; /*孩子性别*/

char sports; /*是否喜欢体育运动*/

char diet; /*是否有良好的饮食习惯*/

float myHeight; /*孩子身高*/

float faHeight; /*父亲身高*/

float moHeight; /*母亲身高*/

printf("Are you a boy(M) or a girl(F)?");

scanf("%1s", &sex);

printf("Please input your father's height(cm):");

scanf("%f", &faHeight);

printf("Please input your mother's height(cm):");

scanf("%f", &moHeight);

printf("Do you like sports(Y/N)?");

scanf("%1s", &sports);

scanf("%1s", &diet);

if (sex == 'M')

myHeight = (faHeight + moHeight) * 0.54;

else

myHeight = (faHeight * 0.923 + moHeight) / 2.0;

if (sports == 'Y')

myHeight = myHeight * (1 + 0.02);

if (diet == 'Y')

myHeight = myHeight * (1 + 0.015);

printf("Your future height will be %f(cm)\n", myHeight);

}

程序运行结果如下:

Are you a boy(M) or a girl(F)?F↙

Please input your father's height(cm):182↙

Please input your mother's height(cm):162↙

Do you like sports(Y/N)?Y↙

Do you have a good habit of diet(Y/N)?Y↙

Your future height will be 170.817261(cm)

2 简单的计算器程序参考答案:

问题1参考答案:

#include

#include

main()

{

float data1, data2; /*定义两个操作符*/

char op; /*定义运算符*/

printf("Please enter the expression:\n");

scanf("%f%1s%f", &data1, &op, &data2); /*输入运算表达式*/

switch (op) /*根据输入的运算符确定要执行的运算*/

{

case '+': /*处理加法*/

printf("%f + %f = %f \n", data1, data2, data1 + data2);

break;

case '-': /*处理减法*/

printf("%f - %f = %f \n", data1, data2, data1 - data2);

break;

case '*': /*处理乘法*/

printf("%f * %f = %f \n", data1, data2, data1 * data2);

break;

case '/': /*处理除法*/

if (fabs(data2) <= 1e-7) /*与实数0比较*/

printf("Division by zero!\n");

else

printf("%f / %f = %f \n", data1, data2, data1 / data2);

break;

default:

printf("Unknown operator! \n");

}

}

程序六次测试的运行结果分别如下:

①Please enter the expression: 2.0 + 4.0↙

2.000000 + 4.000000 = 6.000000

②Please enter the expression: 2.0 - 4.0↙

2.000000 - 4.000000 = -2.000000

③Please enter the expression: 2.0 * 4.0↙

2.000000* 4.000000 = 8.000000

④Please enter the expression: 2.0 / 4.0↙

2.000000/ 4.000000 = 0.500000

⑤Please enter the expression: 2.0 / 0↙

Division by zero!

⑥Please enter the expression: 2.0 \ 4.0↙

Unknown operator!

比较实型变量data2和常数0是否相等不能用if (data2 == 0),应该用if (fabs(data2) <= 1e-7)。

问题2参考答案:上面程序中的语句scanf("%f%1s%f", &data1, &op, &data2);可以使输入算术表达式中的操作数和运算符之间加入任意多空白符。

问题3参考答案:

#include

#include

main()

{

float data1, data2; /*定义两个操作符*/

char op; /*定义运算符*/

char reply; /*用户键入的回答*/

do

{

printf("Please enter the expression:\n");

scanf("%f%1s%f", &data1, &op, &data2); /*输入运算表达式*/

switch (op) /*根据输入的运算符确定要执行的运算*/

{

case '+': /*处理加法*/

printf("%f + %f = %f \n", data1, data2, data1 + data2);

break;

case '-': /*处理减法*/

printf("%f - %f = %f \n", data1, data2, data1 - data2);

break;

case '*': /*处理乘法*/

printf("%f * %f = %f \n", data1, data2, data1 * data2);

break;

case '/': /*处理除法*/

if (fabs(data2) <= 1e-7) /*与实数0比较*/

printf("Division by zero!\n");

else

printf("%f / %f = %f \n",

data1, data2, data1/data2);

break;

default:

printf("Unknown operator!\n");

}

printf("Do you want to continue(Y/N or y/n)?");

scanf("%1s", &reply);

}while (reply == 'Y' || reply == 'y');

printf("Program is over!\n");

}

程序运行结果如下:

Please enter the expression:2.0 + 4.0↙

2.000000 + 4.000000 = 6.000000

Do you want to continue(Y/N or y/n)?y↙

Please enter the expression:2.0 - 4.0↙

2.000000 - 4.000000 = -2.000000

Do you want to continue(Y/N or y/n)?y↙

Please enter the expression:2.0 * 4.0↙

2.000000 * 4.000000 = 8.000000

Do you want to continue(Y/N or y/n)?y↙

Please enter the expression:2.0 / 4.0↙

2.000000 / 4.000000 = 0.500000

Do you want to continue(Y/N or y/n)?y↙

Please enter the expression:2.0 \ 4.0↙

Unknown operator!

Do you want to continue(Y/N or y/n)?n↙

Program is over!

实验三循环结构编程练习

程序1参考答案:

#include

#include

#include /*将函数time所需要的头文件time.h包含到程序中*/

main()

{

int magic; /*计算机“想”的数*/

int guess; /*人猜的数*/

srand(time(NULL)); /*用标准库函数srand为函数rand设置随机数种子*/ magic = rand() % 100 + 1;

printf(“Please guess a magic number:”);

scanf(“%d”, &guess);

if (guess > magic)

{

printf(“Wrong!Too high!\n”);

}

else if (guess < magic)

{

printf(“Wrong!Too low!\n”);

}

else

{

printf(“Right!\n”);

printf(“The number is:%d\n”, magic);

}

}

程序运行结果如下:

Please guess a magic number:40↙

Wrong!Too low!

程序2参考答案:

#include

#include

#include

main()

{

int magic; /*计算机"想"的数*/

int guess; /*人猜的数*/

int counter; /*记录人猜的次数*/

srand(time(NULL));

magic = rand() % 100 + 1;

counter = 0;

do

{

printf("Please guess a magic number:");

scanf("%d", &guess);

counter ++;

if (guess > magic)

{

printf("Wrong!Too high!\n");

}

else if (guess < magic)

{

printf("Wrong!Too low!\n");

}

}while (guess != magic); /*直到人猜对为止*/ printf("Right!\n");

printf("counter = %d\n", counter);

}

程序运行结果如下:

Please guess a magic number:50↙

Wrong!Too low!

Please guess a magic number:90↙

Wrong!Too high!

Please guess a magic number:70↙

Wrong!Too high!

Please guess a magic number:60↙

Wrong!Too high!

Please guess a magic number:55↙

Wrong!Too high!

Please guess a magic number:52↙

Right!

counter = 6

程序3参考答案:

#include

#include

#include

main()

{

int magic; /*计算机"想"的数*/

int guess; /*人猜的数*/

int counter; /*记录人猜的次数*/

srand(time(NULL));

magic = rand() % 100 + 1;

counter = 0;

do

{

printf("Please guess a magic number:");

scanf("%d", &guess);

counter ++;

if (guess > magic)

{

printf("Wrong!Too high!\n");

}

else if (guess < magic)

{

printf("Wrong!Too low!\n");

}

else

{

printf("Right!\n");

}

}while ((guess!=magic) && (counter<10));/*猜不对且未超过10次时继续猜*/ printf("counter = %d\n", counter);

}

程序两次测试的运行结果分别如下:

①Please guess a magic number:50↙

Wrong!Too low!

Please guess a magic number:80↙

Wrong!Too high!

Please guess a magic number:60↙

Wrong!Too high!

Please guess a magic number:55↙

Right!

counter = 4

②Please guess a magic number:40↙

Wrong!Too low!

Please guess a magic number:90↙

Wrong!Too high!

Please guess a magic number:80↙

Wrong!Too high!

Please guess a magic number:70↙

Wrong!Too high!

Please guess a magic number:60↙

Wrong!Too high!

Please guess a magic number:55↙

Wrong!Too high!

Please guess a magic number:50↙

Wrong!Too high!

Please guess a magic number:45↙

Wrong!Too high!

Please guess a magic number:44↙

Wrong!Too high!

Please guess a magic number:43↙

Wrong!Too high!

counter = 10

程序4参考答案:

#include

#include

#include

main()

{

int magic; /*计算机"想"的数*/

int guess; /*人猜的数*/

int counter; /*记录人猜的次数*/

char reply; /*用户键入的回答*/

srand(time(NULL));

do

{

magic = rand() % 100 + 1;

counter = 0;

do

{

printf("Please guess a magic number:");

scanf("%d", &guess);

counter ++;

if (guess > magic)

{

printf("Wrong!Too high!\n");

}

else if (guess < magic)

{

printf("Wrong!Too low!\n");

}

else

{

printf("Right!\n");

}

}while ((guess!=magic) && (counter<10));/*猜不对且未超过10次时继续猜*/

printf("counter = %d\n", counter);

printf("Do you want to continue(Y/N or y/n)?");

scanf("%1s", &reply);

}while ((reply == 'Y') || (reply == 'y'));

printf("The game is over!\n");

}

程序运行结果如下:

Please guess a magic number:50↙

Wrong!Too low!

Please guess a magic number:80↙

Wrong!Too low!

Please guess a magic number:90↙

Wrong!Too high!

Please guess a magic number:85↙

Wrong!Too high!

Please guess a magic number:83↙

Right!

counter = 5

Do you want to continue(Y/N or y/n)?y↙

Please guess a magic number:50↙

Wrong!Too low!

Please guess a magic number:80↙

Wrong!Too low!

Please guess a magic number:90↙

Wrong!Too low!

Please guess a magic number:95↙

Wrong!Too low!

Please guess a magic number:99↙

Right!

counter = 5

Do you want to continue(Y/N or y/n)?n↙

The game is over!

实验四函数编程练习

程序1参考答案:

#include

/* 函数功能:计算两整型数之和,如果与用户输入的答案相同,则返回1,否则返回0 函数参数:整型变量a和b,分别代表被加数和加数

函数返回值:当a加b的结果与用户输入的答案相同时,返回1,否则返回0

*/

int Add(int a, int b)

{

int answer;

printf("%d+%d=", a, b);

scanf("%d", &answer);

if (a+b == answer)

return 1;

else

return 0;

}

/* 函数功能:打印结果正确与否的信息。

函数参数:整型变量flag,标志结果正确与否

函数返回值:无

*/

void Print(int flag)

{

if (flag)

printf("Right!\n");

else

printf("Not correct!\n");

}

main() /*主函数*/

{

int a, b, answer;

printf("Input a,b:");

scanf("%d,%d", &a, &b);

answer = Add(a, b);

Print(answer);

}

程序两次测试的运行结果分别如下:

①Input a,b:1,2↙

1+2=3↙

②Input a,b:1,2↙

1+2=4↙

Not correct!

程序2参考答案:

#include

/* 函数功能:计算两整型数之和,如果与用户输入的答案相同,则返回1,否则返回0 函数参数:整型变量a和b,分别代表被加数和加数

函数返回值:当a加b的结果与用户输入的答案相同时,返回1,否则返回0

*/

int Add(int a, int b)

{

int answer;

printf("%d+%d=", a, b);

scanf("%d", &answer);

if (a+b == answer)

return 1;

else

return 0;

}

/* 函数功能:打印结果正确与否的信息。

函数参数:整型变量flag,标志结果正确与否

函数返回值:无

*/

void Print(int flag)

{

if (flag)

printf("Rright!\n");

else

printf("Not correct. Try again!\n");

}

main() /*主函数*/

{

int a, b, answer;

printf("Input a,b:");

scanf("%d,%d", &a, &b);

do

{

answer = Add(a, b);

Print(answer);

}while (answer == 0);

}

程序运行结果如下:

Input a,b:1,2↙

1+2=4↙

Not correct. Try again!

1+2=5↙

Not correct. Try again!

1+2=3↙

Rright!

程序3参考答案:

#include

/* 函数功能:计算两整型数之和,如果与用户输入的答案相同,则返回1,否则返回0

系统辨识实验1实验报告

实验报告 --实验1.基于matlab的4阶系统辨识实验 课程:系统辨识 题目:基于matlab的4阶系统辨识实验 作者: 专业:自动化 学号:11351014 目录 实验报告 (1) 1.引言 (2) 2.实验方法和步骤 (2) 3.实验数据和结果 (2) 4.实验分析 (4)

1、 引言 系统辨识是研究如何确定系统的数学模型及其参数的理论。而模型化是进行系统分析、仿真、设计、预测、控制和决策的前提和基础。 本次实验利用matlab 工具对一个简单的4阶系统进行辨识,以此熟悉系统辨识的基本步骤,和matlab 里的一些系统辨识常用工具箱和函数。 这次实验所采取的基本方法是对系统输入两个特定的激励信号,分别反映系统的动态特性和稳态特性。通过对输入和输出两个系统信号的比较,来验证系统的正确性。 2、 实验方法和步骤 2.1 实验方法 利用matlab 对一个系统进行辨识,选取的输入信号必须能够反映系统的动态和稳态两个方面的特性,才能更好地确定系统的参数。本次实验采取了两种输入信号,为反映动态特性,第一个选的是正弦扫频信号,由下面公式产生: 选定频率范围 ,w(t)是时间t 的线性函数,具有扫频性质,可以反映系统的动态特性。 为反映稳态特性,选的输入信号是阶跃信号。以上的到两组数据,利用matlab 的merge()函数,对两组数据融合,然后用matlab 系统辨识工具箱中的基于子空间方法的状态空间模型辨识函数n4sid()来对系统进行辨识 2.2 实验步骤 (1)建立一个4阶的线性系统,作为被辨识的系统,传递函数为 3243211548765 ()125410865 s s s G s s s s s -+-+=++++ (2)产生扫频信号u1和阶跃信号u2 (3)u1、u2作为输入对系统进行激励,分别产生输出y1和y2 (4)画出稳态测试输入信号u1-t 的曲线,和y1-t 的曲线 画出动态测试输入信号u2-t 的曲线,和y2-t 的曲线 (5)使用merge()函数对u1-y1数据和u2-y2数据进行融合,并使用n4sid()函数对系统进行辨识。 (6)画出原系统和辨识出的系统的零极点图,画出原系统和辨识出的系统的阶跃响应特性曲线,通过对比,验证辨识出的系统的准确性。 3、 实验数据和结果 (1) 分别以扫频正弦函数、阶跃函数作为系统的激励,得到的输出:

操作系统上机实验报告(西电)

操作系统上机题目 一、题目 实验1:LINUX/UNIX Shell部分 (一)系统基本命令 1.登陆系统,输入whoami 和pwd ,确定自己的登录名和当前目录; 登录名yuanye ,当前目录/home/yuanye 2.显示自己的注册目录?命令在哪里? a.键入echo $HOME,确认自己的主目录;主目录为/home/yuanye b.键入echo $PA TH,记下自己看到的目录表;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games c.键入which abcd,看看得到的错误信息; 再键入which ls 和which vi,对比刚刚得到的结果的目录是否在a.、b. 两题看到的目录表中; /bin/ls /usr/bin/vi 3.ls 和cd 的使用: a.键入ls,ls -l ,ls -a ,ls -al 四条命令,观察输出,说明四种不同使用方式的区别。 1. examples.desktop 公共的模板视频图片文档音乐桌面; 总计32 2.-rw-r--r-- 1 yuanye yuanye 357 2011-03-22 22:15 examples.desktop drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 公共的 drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 模板 drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 视频 drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 图片 drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 文档 drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 音乐 drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 桌面 3. . .fontconfig .local .Xauthority .. .gconf .mozilla .xsession-errors .bash_logout .gconfd .nautilus 公共的 .bashrc .gksu.lock .profile 模板 .cache .gnome2 .pulse 视频 .chewing .gnome2_private .pulse-cookie 图片 .config .gnupg .recently-used.xbel 文档 .dbus .gstreamer-0.10 .scim 音乐 .dmrc .gtk-bookmarks .sudo_as_admin_successful 桌面 .esd_auth .gvfs .update-manager-core

系统辨识实验二

《系统辨识与自适应控制》实验报告 题目:最小二乘法在系统辨识中的应用 班级:工控08.1 指导老师: 学生姓名: 学号: 时间:2011.5.19 成都信息工程学院控制工程系

实验目的: 1、掌握系统辨识的基本步骤。 2、熟悉matlab 下系统辨识编程(M 文件)。 3、M 序列的产生方法。 4、用最小二乘法对系统进行辨识。 实验设备: 硬件:计算机一台(参数:主频2.8G 、奔腾4核处理器、内存512M ) 软件:matlab6.5 实验原理: 1、最小二乘法系统辨识结构: 把待辨识的过程看作“黑箱”。只考虑过程的输入输出特性。 图中,输入u(k)和输出z(k)是可测的;G (错误!未找到引用源。)是系统模型,用来描述系统的输入输出特性;N (错误!未找到引用源。)是噪声模型,v(k)是白噪声,e(k)是有色噪声,根据表示定理: 可以表示为 )()()()()(11k v k u q B k z q A +=-- (1) + + e (k ) 图1 SISO 系统辨识“黑箱” y (k ) u (k ) z (k ) v (k ) )(1-z N )(1-z G

???+++=++++=-------nb nb na na q b q b b q B q a q a q a q A ...21)(...211)(11211 (2) 由上两式可以表示: l k k v i k u bi i k z ai k z nb i na i ,...,2,1)....()(*)(*)(11=+-+--=∑∑== (3) 上式可以描述成如下最小二乘法格式: )()()(k v k h k z +=θ (4) 2、准则函数 设一个随机序列{}),,2,1(),(L k k z ∈的均值是参数θ的线性函数: {}θ)()(k h k z E T =,其中)(k h 是可测的数据向量,那么利用随机序列的一个实现,使准则函数: 21])()([)(∑=-=L k T k h k z J θθ (5) 达到极小的参数估计值∧ θ称作θ的最小二乘估计。 最小二乘格式: )()()(k e k h k z t +=θ,θ为模型参数向量,()k e 为零均值随机噪声。 3、最小二乘问题的解 考虑系统模型: )()()(k e k h k z t +=θ (6) 准则函数可写成: ()()()θθθL L L T L L H z H -Λ-=z J (7) 极小化准则函数得到:

系统辨识实验报告30288

一、相关分析法 (1)实验原理 图1 实验原理图 本实验的原理图如图1。过程传递函数()G s 中12120,8.3, 6.2K T Sec T Sec ===;输入变量()u k ,输出变量()z k ,噪声服从2(0,)v N σ,0()g k 为过程的脉冲响应理论 值,?()g k 为过程脉冲响应估计值,()g k 为过程脉冲响应估计误差。 过程输入()u k 采用M 序列,其输出数据加白噪声()v k 得到输出数据()z k 。利 用相关分析法估计出过程的脉冲响应值?()g k ,并与过程脉冲响应理论值0()g k 比较,得到过程脉冲响应估计误差值()g k 。 M 序列阶次选择说明:首先粗略估计系统的过渡过程时间T S (通过简单阶跃响应)、截止频率f M (给系统施加不同周期的正弦信号或方波信号,观察输出)。本次为验证试验,已知系统模型,经计算Hz T T f M 14.01 2 1≈= ,s T S 30≈。根据式M f t 3 .0≤ ?及式S T t N ≥?-)1(,则t ?取值为1,此时31≥N ,由于t ?与N 选择时要求完全覆盖,则选择六阶M 移位寄存器,即N =63。

(2)编程说明 图2 程序流程图 (3)分步说明 ① 生成M 序列: M 序列的循环周期63126=-=N ,时钟节拍1t Sec ?=,幅度1a =,移位寄存器中第5、6位的内容按“模二相加”,反馈到第一位作为输入。其中初始数据设为{1,0,1,0,0,0}。程序如下:

② 生成白噪声序列: 程序如下: ③ 过程仿真得到输出数据: 如图2所示的过程传递函数串联,可以写成形如1212 11 ()1/1/K G s TT s T s T = ++, 其中112 K K TT = 。 图2 过程仿真方框图 程序如下: ④ 计算脉冲响应估计值:

《 Windows7 操作系统》实验报告

实验(一) Windows 7基本操作 一、实验目的 1.掌握文件和文件夹基本操作。 2.掌握“资源管理器”和“计算机”基本操作。 二、实验要求 1.请将操作结果用Alt+Print Screen组合键截图粘贴在题目之后。 2.实验完成后,请将实验报告保存并提交。 三、实验内容 1.文件或文件夹的管理(提示:此题自行操作一遍即可,无需抓图)★期末机试必考题★ (1) 在D:盘根目录上创建一个名为“上机实验”的文件夹,在“上机实验”文件夹中创建1个名为“操作系统上机实验”的空白文件夹和2个分别名为“2.xlsx”和“3.pptx”的空白文件,在“操作系统上机实验”文件夹中创建一个名为“1.docx”的空白文件。 (2) 将“1.docx”改名为“介绍信.docx”;将“上机实验”改名为“作业”。 (3) 在“作业”文件夹中分别尝试选择一个文件、同时选择两个文件、一次同时选择所有文件和文件夹。 (4) 将“介绍信.docx”复制到C:盘根目录。 (5) 将D:盘根目录中的“作业”文件夹移动到C:盘根目录。 (6) 将“作业”文件夹中的“2.xlsx”文件删除放入“回收站”。 (7) 还原被删除的“2.xlsx”文件到原位置。 2.搜索文件或文件夹,要求如下: 查找C盘上所有以大写字母“A”开头,文件大小在10KB以上的文本文件。(提示:搜索时,可以使用“?”和“*”。“?”表示任意一个字符,“*”表示任意多个字符。)

3. 在桌面上为C:盘根目录下的“作业”文件夹创建一个桌面快捷方式。★期末机试必考题★ 3.“计算机”或“资源管理器”的使用 (1) 在“资源管理器”窗口,设置以详细信息方式显示C:\WINDOWS中所有文件和文件夹,使所有图标按类型排列显示,并不显示文件扩展名。(提示:三步操作全部做完后,将窗口中显示的最终设置结果抓一张图片即可) (2) 将C:盘根目录中“介绍信.docx”的文件属性设置为“只读”和“隐藏”,并设置在窗口中显示“隐藏属性”的文件或文件夹。(提示:请将“文件夹”对话框中选项设置效果与C:盘根目录中该文件图标呈现的半透明显示效果截取在一整张桌面图片中即可) 4.回收站的设置 设置删除文件后,不将其移入回收站中,而是直接彻底删除功能。

数据库上机实验题目和答案

试用SQL的查询语句表达下列查询: 1.检索王丽同学所学课程的课程号和课程名。 select Cno ,Cname from c where Cno in (select cno from sc where sno in (select sno from s where sname='王丽' )) 2.检索年龄大于23岁的男学生的学号和姓名。 select sno,sname from s where sex='男' and age>23 3.检索‘c01’课程中一门课程的女学生姓名 select sname from s where sex='女' and sno in (select sno from sc where cno='c01') 4.检索s01同学不学的课程的课程号。 select cno from c where cno not in (select cno from sc where sno ='s01') 5.检索至少选修两门课程的学生学号。 select sc.sno from s,sc where s.sno=sc.sno group by sc.sno having count(https://www.wendangku.net/doc/c85471438.html,o)>=2 6.每个学生选修的课程门数。 解法一: select so.sno sno,https://www.wendangku.net/doc/c85471438.html,ount,s.sname from(select sc.sno sno,count(sc.sno) ccount from sc,s where s.sno=sc.sno group by sc.sno ) so,s where s.sno=so.sno 解法二: select sc.sno sno,s.sname,count(sc.sno) ccount from sc,s where s.sno=sc.sno group by sc.sno,sname

系统辨识实验报告

南京理工大学 电加热炉动态特性辨识实验报告 作者: 张志鹏(94)学号:813001010014 实验时间2013年11月24日 组员: 刘心刚(63)李昊(88)倪镭(90) 任课老师:郭毓教授 2013 年 11 月

1.熟悉对实际控制系统的辨识与参数估计,并利用所得模型进行控制仿真,进而控制实际系统。 2.掌握实际工程中常用的辨识方法,如LS,RLS,RLES等。 二、实验平台: 嵌入式温度控制系统主要由嵌入式温度控制器、立式RGL-9076A 型温箱、NETGEAR 无线路由器和24V 开关电源等组成。系统电气连接如图1 所示。系 统采用CS(客户端—服务器)模式实现了一对一的服务器、客户端的数据通信。 嵌入式控制系统软软硬件运行平台. 硬件:PC 机、嵌入式温度控制器、NETGEAR 无线路由器等。 软件:Windows XP、Microsoft Visual C++ 6.0、Matlab 2007a 等。 图1 实验硬件平台

1.设置硬件。根据实验手册上的连接方式,确认硬件连接是否正确。根据使用手册进行IP设置、系统参数设置,直至软件可以实时显示温度曲线。 2.达到稳态。我们首先采用81V的加热电压加热使系统尽快到达某一较稳定温度。使用3S的采样周期进行采样温度信号。当温箱实际温度达到135度左右时,温度变化曲线几乎持平,我们认定此时温箱系统处于稳态。 3.加入辨识信号。这里选选取M序列进行辨识,在试验阶段我们组做了一组数据:选取M序列幅值为+20,-20,,辨识信号的采样周期为40s。加入辨识信号后继续进行数据采集。 4.数据处理、辨识系统模型。 5.分析辨识结果得出结论。 四、辨识算法及过程 经过分析研究,确定使用计算残差平方和的RELS方法验证模型的阶次及延时并辨识系统模型参数。 1、确定系统的延迟d

操作系统上机实验报告

大连理工大学实验报告 学院(系):专业:班级: 姓名:学号:组:___ 实验时间:实验室:实验台: 指导教师签字:成绩: 实验名称:进程控制 一、实验目的和要求 (1)进一步加强对进程概念的理解,明确进程和程序的区别 (2)进一步认识并发执行的实质 二、实验环境 在windows平台上,cygwin模拟UNIX运行环境 三、实验内容 (1) getpid()---获取进程的pid 每个进程都执行自己独立的程序,打印自己的pid; (2) getpid()---获取进程的pid 每个进程都执行自己独立的程序,打印自己的pid; 父进程打印两个子进程的pid;

(3)写一个命令处理程序,能处理max(m,n), min(m,n),average(m,n,l)这几个命令(使用exec函数族)。 Max函数 Min函数 Average函数 Exec函数族调用 四、程序代码 五、运行结果 六、实验结果与分析 七、体会 通过这次上机,我了解了fork函数的运行方法,同时更深刻的了解了进程的并行执行的本质,印证了在课堂上学习的理论知识。同时通过编写实验内容(3)的命令处理程序,学会了exec函数族工作原理和使用方法。通过这次上机实验让我加深了对课堂上学习的理论知识的理解,收获很多。

大连理工大学实验报告 学院(系):专业:班级: 姓名:学号:组:___ 实验时间:实验室:实验台: 指导教师签字:成绩: 实验名称:进程通讯 一、实验目的和要求 了解和熟悉UNIX支持的共享存储区机制 二、实验环境 在windows平台上,cygwin模拟UNIX运行环境 三.实验内容 编写一段程序, 使其用共享存储区来实现两个进程之间的进程通讯。进程A创建一个长度为512字节的共享内存,并显示写入该共享内存的数据;进程B将共享内存附加到自己的地址空间,并向共享内存中写入数据。 四、程序代码 五、运行结果 六、实验结果与分析 七、体会

操作系统实验报告生产者与消费者问题模拟

操作系统上机实验报告 实验名称: 生产者与消费者问题模拟 实验目的: 通过模拟生产者消费者问题理解进程或线程之间的同步与互斥。 实验内容: 1、设计一个环形缓冲区,大小为10,生产者依次向其中写入1到20,每个缓冲区中存放一个数字,消费者从中依次读取数字。 2、相应的信号量; 3、生产者和消费者可按如下两种方式之一设计; (1)设计成两个进程; (2)设计成一个进程内的两个线程。 4、根据实验结果理解信号量的工作原理,进程或线程的同步\互斥关系。 实验步骤及分析: 一.管道 (一)管道定义 所谓管道,是指能够连接一个写进程和一个读进程的、并允许它们以生产者—消费者方式进行通信的一个共享文件,又称为pipe文件。由写进程从管道的写入端(句柄1)将数据写入管道,而读进程则从管道的读出端(句柄0)读出数据。(二)所涉及的系统调用 1、pipe( ) 建立一无名管道。 系统调用格式 pipe(filedes) 参数定义 int pipe(filedes); int filedes[2]; 其中,filedes[1]是写入端,filedes[0]是读出端。 该函数使用头文件如下: #include #inlcude #include 2、read( ) : 系统调用格式 read(fd,buf,nbyte) 功能:从fd所指示的文件中读出nbyte个字节的数据,并将它们送至由指针buf 所指示的缓冲区中。如该文件被加锁,等待,直到锁打开为止。 参数定义:

int read(fd,buf,nbyte); int fd; char *buf; unsigned nbyte; 3、write( ) 系统调用格式 read(fd,buf,nbyte) 功能:把nbyte 个字节的数据,从buf所指向的缓冲区写到由fd所指向的文件中。如文件加锁,暂停写入,直至开锁。 参数定义同read( )。 (三)参考程序 #include #include #include int pid1,pid2; main( ) { int fd[2]; char outpipe[100],inpipe[100]; pipe(fd); /*创建一个管道*/ while ((pid1=fork( ))==-1); if(pid1==0) { lockf(fd[1],1,0); /*把串放入数组outpipe中*/ sprintf(outpipe,child 1 is using pipe!); /* 向管道写长为50字节的串*/ write(fd[1],outpipe,50); sleep(5); /*自我阻塞5秒*/ lockf(fd[1],0,0); exit(0); } else { while((pid2=fork( ))==-1); if(pid2==0) { lockf(fd[1],1,0); /*互斥*/ sprintf(outpipe,child 2 is using pipe!); write(fd[1],outpipe,50); sleep(5); lockf(fd[1],0,0);

系统辨识内容与要求

系统辨识实验内容与要求 实验题目:三温区空间晶体生长炉温度系统建模 实验对象:三温区空间晶体生长炉 单晶体是现代电子设备制造技术的一个必不可少的部分,它应用广泛,如二极管、三极管等半导体器件都需要用到单晶体。组分均匀(compositional uniformity)、结晶完整(crystallographic perfection)的高质量晶体材料是保证电子设备性能重要因素。 目前,单晶体制备主要靠晶体生长技术完成。其主要过程是:首先在坩埚等加热器皿中对籽晶进行加热,使其由固相转变为液相或气相,再降低器皿中温度,使液相或气相的籽晶材料冷却结晶,就可得到最终的单晶体。这个过程中,为保证晶体的组分均匀和结晶完整,必须使晶体内部各晶格的受力均匀。因此,为减小重力对晶体生长的影响,研究者提出在空间微重力环境下进行晶体生长的方案。我们研究的空间晶体生长炉就是该方案中的晶体加热设备。 我们研究的空间晶体生长炉采用熔体Bridgman生长方式,其结构如图1所示。炉身由三部分构成:外筒、炉管以及炉管外部的隔热层。炉管由多个加热单元组成,每个加热单元组成一个温区。加热单元由导热性能良好的陶瓷材料制成,两个加热单元之间有隔热单元隔开。加热单元的外测均匀缠绕加热电阻丝,内侧中间部位安装有测温热电偶。炉管外部的隔热层由防辐射绝热材料制成。 微重力环境下,晶体内部各晶格之间的热应力是影响晶体生长质量的关键因素,而热应力是由炉内温场决定的。因此,必须对晶体炉内各温区的温度进行控制,以构造一个具有一定的梯度的、满足晶体生长需要的温场。工作时,将装有籽晶的安瓿管按一定的速度插入晶体炉炉膛内,通过控制流过各温区加热电阻丝的电流控制炉内温场,通过热电偶在线获取各温区的实时温度值,进行闭环控制,。其中,流过电阻丝的电流通过PWM(脉宽调制)方式进行控制。另外,由于晶体炉工作温度的变化范围比较大,传感器热电偶难以在全量程范围内保持很高的线性度,因此,使用的热电偶的电压读数与实际温度值间需要进行查表变换。 本实验内容是运用系统辨识的方法建立晶体炉中某个温区的动力学模型,辨识数据已给出,见SI_Data.xls文件。

C#上机实验题目和答案10

1、创建一个控制台应用程序,要求用事件每10秒报告机器的当前时间。 2、编写一个掷筛子100次的程序,并打印出各种点数的出现次数。 3、兔子繁殖问题。设有一对新生的兔子,从第三个月开始他们每个月都生一对兔子,新生的兔子从第三个月开始又每个月生一对兔子。按此规律,并假定兔子没有死亡,20个月后共有多少个兔子?要求编写为控制台应用程序。 1. using System; using System.Threading; namespace ConsoleApplication1 { class michael { public void TimerHandlerA(object obj, EventArgs e) // Event handler { Console.WriteLine(DateTime.Now.ToString()); } } class Program { static void Main() { michael m = new michael(); MyTimerClass mc = new MyTimerClass(); mc.Elapsed += m.TimerHandlerA; Thread.Sleep(30000); } } public class MyTimerClass { public event EventHandler Elapsed; private void OnOneSecond(object a, EventArgs i) { if (Elapsed != null) Elapsed(a, i); } private System.Timers.Timer MyPrivateTimer; public MyTimerClass() { MyPrivateTimer = new System.Timers.Timer(); MyPrivateTimer.Elapsed += OnOneSecond; MyPrivateTimer.Interval = 10000; MyPrivateTimer.Enabled = true; } }

系统辨识报告

系统辨识实验报告

实验一 最小二乘法 1 最小二乘算法 1.1 基本原理 系统模型 )()()()()(11k n k u z B k z z A +=-- a a n n z a z a z a z A ----++++= 221111)( b b n n z b z b z b z B ----+++= 22111)( 最小二乘格式 )()()(k n k h k z T +=θ [][] ?????=------=T n n T b a b a b b a a n k u k u n k z k z k h 11)()1()()1()(θ 对于L k ,,2,1 =,构成线性方程组 L L L n H z +=θ 式中, []T L L z z z z )()2()1( = []T L L n n n n )()2()1( = ? ????? ???? ??--------------= ??????????????=)()1()()1()2()1()2()1()1() 0() 1()0()()2()1(b a b a b a T T T L n L u L u n L z L z n u u n z z n u u n z z L h h h H 参数估计值为 ()L T L L T L LS z H H H 1 ?-=θ 1.2 Matlab 编程 % 基本最小二乘法LS clear;clc A=ones(5,1);B=ones(4,1);%A 为首1多项式,B 中体现时滞(d=1) na=length(A)-1;nb=length(B); load dryer2

系统辨识基础实验指导书

实验一 离散模型的参数辨识 一、实验目的 1. 掌握随机序列的产生方法。 2. 掌握最小二乘估计算法的基本原理。 3. 掌握最小二乘递推算法。 二、实验内容 1. 基于Box--Jinkins 模型模拟一个动态过程,动态过程取为各种不同的情况,输入信号采用M 序列,实验者可尝试不同周期的M 序列。信噪比、观测数据长度也由实验者取为各种不同情况。 2. 模拟生成输入输出数据。 3. 根据仿真过程的噪声特性,选择一种模型参数估计算法,如RLS 、RIV 、RELS 、RGLS 、COR-LS 、STAA 、RML 或MLS 等,估计出模型的参数。 三、实验器材 计算机 1台 四、实验原理 最小二乘法是一种经典的有效的数据处理方法。它是1795年高斯(K.F.Guass )在预测行星和彗星运动的轨道时提出并实际使用的。 最小二乘法也是一种根据实验数据进行参数估计的主要方法。这种方法容易被理解,而且由于存在唯一解,所以也比较容易实现。它在统计学文献中还被称为线性回归法,在某些辨识文献中还被称为方程误差法。正如各个学科都用到系统辨识技术建立模型一样,最小二乘法也用于很多场合进行参数估计,虽然不一定是直接运用,但很多算法是以最小二乘为基础的。 在系统辨识和参数估计领域中,最小二乘法是一种最基本的估计方法。它可用于动态系统,也可用于静态系统;可用于线性系统,也可用于非线性系统;可用于离线估计,也可用于在线估计。在随机的环境下利用最小二乘法时,并不要求知道观测数据的概率统计信息,而用这种方法所获得的估计结果,却有相当好的统计性质。 在系统辨识和参数估计领域中,应用最广泛的估计方法是最小二乘法和极大似然法,而其他的大多数算法都与最小二乘法有关。最小二乘法采用的模型为 11()()()()()A z y k B z u k e k --=+ 最小二乘估计是在残差二乘方准则函数极小意义下的最优估计,即按照准则函数 ????()()min T T J e e Y Y ΦθΦθ==--= 来确定估计值?θ。求J 对?θ的偏导数并令其等于0,可得 ????()()()()0??T T T J Y Y Y Y ΦθΦθΦΦθΦΦθθ θ??=--=----=?? 即?T T Y ΦΦθΦ=。当T ΦΦ为非奇异,即Φ列满秩时,有1?()T T LS Y θΦΦΦ-=,此即参数的最小二乘估计值。 具体使用时不仅占用内存量大,而且不能用于在线辨识。一次完成算法还有如下的缺陷: (1)数据量越多,系统参数估计的精度就越高。为了获得满意的辨识结果,矩阵T ΦΦ的阶数常常取得相当大。这样,矩阵求逆的计算量很大,存储量也很大。 (2)每增加一次观测量,都必须重新计算1,()T ΦΦΦ-。 (3)如果出现Φ列相关,即不满秩的情况,T ΦΦ为病态矩阵,则不能得到最小二乘估计值。 解决这个问题的办法是把它化成递推算法。依观测次序的递推算法就是每获得一次新的观测数据就修正一次参数估计值,随着时间的推移,便能获得满意的辨识结果。递推辨识算法具有无矩阵求逆,以及跟踪时变系统等特点,这样不仅可以减少计算量和储存量,而且能实现在线辨识。

C#上机实验题目和答案8

(1)创建一个控制台应用程序,在程序中定义一个公共接口IMyInterface,该接口中包含两个方法,一个是DoSomething(),另一个是DoSomethingElse();另外再定义一个类MyClass,该类实现了接口IMyInterface,在DoSomething()方法中向控制台输出“Do something.”,在DoSomethingElse()方法中向控制台输出“Do something else.”在Program类中的Main()方法中实例化MyClass 的对象和定义一个接口变量,通过对象和接口变量来访问这两个方法。 (2)创建一个控制台应用程序,在程序中定义了一个接口IIfc1,该接口包含一个无返回值,且带一个字符串类型的参数的方法PrintOut();在程序中定义了另一个接口IIfc2,该接口中也包含一个无返回值,且带一个字符串类型的参数的方法PrintOut();程序中还定义了一个类MyClass,该类以类级别和显式接口成员两种方式实现了这两个接口。在Program类的Main()方法中分别以类对象的引用和两个接口对象的引用来调用PrintOut()方法。 (3)创建一个控制台应用程序,求一个方阵的对角元之和。 1. using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { public interface IMyInterface { void DoSomething(); void DoSomethingElse(); } class MyClass : IMyInterface { public void DoSomething() { Console.WriteLine("Do Something."); } public void DoSomethingElse() { Console.WriteLine("Do Something Else."); } } class Program { static void Main(string[] args) { MyClass MC = new MyClass(); MC.DoSomething();

最优控制实验报告

实验报告 课程名称:现代控制工程与理论实验课题:最优控制 学号:12014001070 姓名:陈龙 授课老师:施心陵

最优控制 一、最优控制理论中心问题: 给定一个控制系统(已建立的被控对象的数学模型),选择一个容许的控制律,使被控对象按预定要求运行,并使给定的某一性能指标达到极小值(或极大值) 二、最优控制动态规划法 对离散型控制系统更为有效,而且得出的是综合控制函数。这种方法来源于多决策过程,并由贝尔曼首先提出,故称贝尔曼动态规划。 最优性原理:在一个多级决策问题中的最优决策具有这样的性质,不管初始级、初始状态和初始决策是什么,当把其中任何一级和状态做为初始级和初始状态时,余下的决策对此仍是最优决策 三、线性二次型性能指标的最优控制 用最大值原理求最优控制,求出的最优控制通常是时间的函数,这样的控制为开环控制当用开环控制时,在控制过程中不允许有任何干扰,这样才能使系统以最优状态运行。在实际问题中,干扰不可能没有,因此工程上总希望应用闭环控制,即控制函数表示成时间和状态的函数。 求解这样的问题一般来说是很困难的。但对一类线性的且指标是

二次型的动态系统,却得了完全的解决。不但理论比较完善,数学处理简单,而且在工际中又容易实现,因而在工程中有着广泛的应用。 一.实验目的 1.熟悉Matlab的仿真及运行环境; 2.掌握系统最优控制的设计方法; 3.验证最优控制的效果。 二.实验原理 对于一个给定的系统,实现系统的稳定有很多途径,所以我们需要一个评价的指标,使系统在该指标下达到最优。如果给定指标为线性二次型,那么我们就可以利用MATLAB快速的计算卡尔曼增益。 三.实验器材 PC机一台,Matlab仿真平台。 四.实验步骤 例题1 (P269)考虑液压激振系统简化后的传递函数方框图如下,其中K a为系统前馈增益,K f为系统反馈增益,w h为阻尼固有频率。(如图5-5所示) 将系统传递函数变为状态方程的形式如下: ,

系统辨识及自适应控制实验..

Harbin Institute of Technology 系统辨识与自适应控制 实验报告 题目:渐消记忆最小二乘法、MIT方案 与卫星振动抑制仿真实验 专业:控制科学与工程 姓名: 学号: 15S004001 指导老师: 日期: 2015.12.06 哈尔滨工业大学 2015年11月

本实验第一部分是辨识部分,仿真了渐消记忆递推最小二乘辨识法,研究了这种方法对减缓数据饱和作用现象的作用; 第二部分是自适应控制部分,对MIT 方案模型参考自适应系统作出了仿真,分别探究了改变系统增益、自适应参数的输出,并研究了输入信号对该系统稳定性的影响; 第三部分探究自适应控制的实际应用情况,来自我本科毕设的课题,我从自适应控制角度重新考虑了这一问题并相应节选了一段实验。针对挠性卫星姿态变化前后导致参数改变的特点,探究了用模糊自适应理论中的模糊PID 法对这种变参数系统挠性振动抑制效果,并与传统PID 法比较仿真。 一、系统辨识 1. 最小二乘法的引出 在系统辨识中用得最广泛的估计方法是最小二乘法(LS)。设单输入-单输出线性定长系统的差分方程为: ()()()()()101123n n x k a x k a k n b u k b u x k n k +-+?+-=+?+-=,,,, (1.1) 错误!未找到引用源。 式中:()u k 错误!未找到引用源。为控制量;错误!未找到引用源。为理论上的输出值。错误!未找到引用源。只有通过观测才能得到,在观测过程中往往附加有随机干扰。错误!未找到引用源。的观测值错误!未找到引用源。可表示为: 错误!未找到引用源。 (1.2) 式中:()n k 为随机干扰。由式(1.2)得 错误!未找到引用源。 ()()()x k y k n k =- (1.3) 将式(1.3)带入式(1.1)得 ()()()()()()()101111()n n n i i y k a y k a y k n b u k b u k b u k n n k a k i n =+-+?+-=+-+?+ -++-∑ (1.4) 我们可能不知道()n k 错误!未找到引用源。的统计特性,在这种情况下,往往把()n k 看做均值为0的白噪声。 设 错误!未找到引用源。 (1.5)

office上机实训任务题库

1、w o r d编辑与排版 (1)打开word2010,输入以下内容: 站在川流不息的十字路口,回望那遥远的尽头,走过的是心情和风景,留下的是记忆。人海茫茫,多少次擦肩而过,若有一次邂逅,那就是缘分。 风速飞驰的车辆,不知哪节车厢里还留着你的身影,在静候,在等待。曾经的温情,记忆虽然有些淡然,有些斑驳。往事,如徐风中的云烟,若隐若现,或左或右,或上或下,总在悠悠的漂浮,若要点燃,依然会有熊熊的火焰在燃烧。既然不能忘却,那就把你的模样,你的名字,你的所有,铭刻在灵魂的深处,直至永远。你若要问;“永远有多远?”其实永远并不遥远,人生苦短,就是生命的尽头,到那时,你可否与我化蝶成双影,饮露品粉茗。翩跹于尘世。 记忆的引擎在搜索,那一段段甜蜜的往事,一幅幅温馨的画面。我把它装订成册,然后做成馨香的风铃,悬挂于眼前,随风漫漫转动,暗香也阵阵流动,每一个画面场景都会让我激动不已,潸然泪下,仿佛就如昨日。 记忆的闸门一直是敞开的,有时像涓涓细流在流淌,有时像淙淙的泉水叮咚,叮咚响够不停,而有时,却像潮水般澎湃激昂,让人撕心,让人裂肺。(2)给文章添加标题,“零碎的记忆”,将标题设为楷体,二号,加粗,红色,居中,浅绿1.5磅细线边框,加红色双实线下划线。 (3)将正文字体设为华文行楷,三号,将第一段中所有的“是”字加粗,字体为蓝色。将第二段的“往事”二字加拼音,对齐方式为0-1-0,偏移2磅,字号为10号。

(4)在正文第一段开始插入一张饼形扇面的剪贴画,将环绕方式设置为“四周型”,左对齐。 剪贴画高2厘米,宽2厘米,形状填充为深蓝,文字2,淡色60%,形状轮廓为粗细1.5磅,红色。 (5)第二段分为三栏,第一栏宽为3厘米,第二栏宽为4厘米,栏间距均为0.75厘米,栏间加分隔线。第二段填充灰色—25%底纹。 (6)三、四段所有的格式均清除,只保留文字内容。 (7)将第三段引用明显参考样式,段前二行,段后1.5行,将第三段文字的第一句话的文本效果设为填充,白色,渐变轮廓,强调文字颜色1。将第二句话的第一个字设为带圈字符,样式为圆圈,增大圈号。 (8)将第四段的前五个字加上拼音,最后一句话采用双行合并效果,并添加-15%的灰色底纹。(9)在第三段和第四段之间添加一艺术字,内容为“计算机基础训练题”,艺术字样式为:渐变填充,蓝色,强调文字1,轮廓,白色;将艺术字形状样式设为:细微效果,红色,强调颜色2;将艺术字文本效果设为倾斜右上,棱台为十字形;环绕方式为四周型。(10)第四段段前1行,段后1行,行间距为30磅。(11)为文章添加一传统型页眉,内容为“考试”,居中,日期为系统当前日期,日期格式为:字体黑体,红色。页眉顶端距离为3厘米。 (12)为文章插入一个堆积型封面,标题为“WORD2010练习题”,副标题为“12013班练习题”,作者为自己的姓名。将封面的布局设为居中,标题采用标题样式,副标题采用副标题样式。 (13)将第四段中的“闸门”二字添加一个批注,内容为“此处为比喻”

matlab实验报告

专业仿真课程设计题目: 学院: 专业班级: 学号: 学生姓名: 指导教师: 设计时间:

专业仿真课程设计题目 主要研究内容: 从所拍摄的多个目标物中检测三角形物,给出三角形物几何中心、三个边长以及边长的方向、面积。 设计要求: (1)提交能够实现题目要求、并通过演示验收的可执行文件。 (2)提交课程设计报告(包括程序清单)。 (3)通过答辩,答辩成绩满分20分,其中个人设计部分10分,非个人设计部分10分。 (4)软件设计要求:有一个人机交互界面,模块化设计,在模块之间通过BMP文件或者文本文件传送数据,可以查看中间结果。 (5)5个人一组,组长协调分工,每个组员一定要有具体任务,以便考核。预期达到的目标: 1、能够通过相关文献查阅、文献综述和总结,给出问题求解的多种可行方案。 2、能够综合运用测控技术与仪器专业理论和技术手段,设计实验方案、分析实验结果,得出有效的结论。 3、能够借助MATLAB仿真软件,进一步掌握高等数学、复变函数与积分变换等相关数学和自然科学知识以及测控技术与仪器专业的基本理论知识,能够结合本专业“自动控制原理”、“数字信号处理”、“误差理论”等相关课程,采用MATLAB软件对复杂工程问题建立模型并进行预测与模拟; 4、能够与团队中其他学科成员合作开展工作,能够与其他队员很好地沟通和交流意见,能够通过口头或书面方式表达自己的设计思路,具有一定的表达能力和人际交往能力。

目录 第一章课程设计相关知识综述 1.1 MATLAB相关知识叙述 1.1.1 MATLAB基本知识介绍 1.1.2 MATLAB的优势特点 1.1.3 MATLAB的发展历程 1.2 MATLAB工具箱与函数 1.2.1 MATLAB图像处理工具箱 1.2.2 课程设计所用图像处理函数介绍第二章课程设计内容和要求 2.1 课程设计主要研究内容 2.2 课程设计要求 2.3 课程设计预期目标 第三章设计过程 3.1 设计方案 3.2 设计步骤及流程图 3.3 程序清单及相关注释 3.4 实验结果分析 3.5 结论 第四章团队情况 第五章总结 第六章参考文献

操作系统实验报告18038

福州大学数学与计算机科学(软件)学院 实验报告 课程名称:计算机操作系统 学号:221100218 姓名: 专业:软件工程 年级:2011级 学期:2012学年第2学期 2013年10 月24 日

实验一 Linux操作系统的使用和分析 一、实验目的 本实验主要学习和掌握Linux操作系统的基本应用。通过本实验,学生能够熟练掌握Linux环境下各种基本操作命令接口的应用。从系统安全角度出发,学习掌握系统的基本安全优化和配置,在操作系统层次进行有效安全加固,提高Linux系统的安全性能。通过本次实验,有助于学生进一步理解操作系统原理中的相关内容,加深认识。 二、实验要求 1、熟练掌握Linux系统的基本操作命令。 2、熟悉Linux 系统的基本配置。 3、实现Linux系统的安全加固。 4、掌握一种以上的网络应用软件的安装、配置与应用。 三、实验内容 系统的启动,如图: 关闭使用shutdowm 还有列出文件夹内的信息ls,cp复制拷贝,touch创建文件命令等等 ①下载文件压缩包pro.gz,解压如图:

②然后修改安装路径: ③之后用make编译文件 ④在安装路径/home/liaoenrui/11里的etc中修改文件的组名和用户名: 将groud 命名也命名为ftp,然后用groudadd和useradd命令将这两个添加在该目录的sbin目录下:

⑤最后运行文件,./profile即可 四、实验总结 通过本次的操作系统的上机实验,我熟练了Linux系统的基本操作命令,并且对安装文件有更深入的了解,比如在上述安装过程中对于通过froftpd来架构linux的ftp,由于之前都是用window系统,所以对于这些非常的生疏,因此在请教了多人和上网查询之后,终于有所了解,并且成功的将此实验顺利完成。在本次实验中,我发现自己的动手能力又有很大的提高,相信以后继续努力的话会有更大的进步,当然这也要归功于老师的教导。 参考文献 [1] Neil Maththew Richard Stones Linux 程序设计第四版人民邮电出版社 [2] 周茜,赵明生.中文文本分类中的特征选择研究[J].中文信息学报,2003,Vol.18 No.3

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