设为n个已知正数。求n元函数在约束条件下的最大值与最小值。
设为n个已知正数。求n元函数
在约束条件
下的最大值与最小值。
设为n个已知正数。求n元函数
在约束条件
下的最大值与最小值。
已知在文件IN.dat中存有若干个(少于200个)四位数字的正整数,函数ReadDat()读取这若干个正整数并存入数组number中。请编写函数CalValue(),其功能要求是:①求出文件中共有的正整数个数totNum;②求这些数右移1位后,产生的新数是奇数的数的个数totCnt以及满足此条件的这些数(右移前的值)的算术平均值totAve。最后调用函数writeDat()把所求的结果输出到OUT.dat文件中。
注意:部分源程序已经给出。请勿改动主函数main()、读函数ReadDat()和写函数writeDat()的内容。
include <stdio.h>
include <conio. h>
define MAXNUM 200
int number [MAXNUM];
int totNum = 0; /* 文件IN.dst 中共有的正整数个数*/
int totCnt = 0; /* 符合条件的正整数的个数*/
double totAve = 0.0; /* 平均值 */
int ReadDat (void);
void writeDat(void);
void CalValue(void)
{
}
void main ()
{ int i;
for (i=0; i<MAXNUM; i++)
number [i] = 0;
if (ReadDat())
{ printf (" 数据文件 IN.dst 不能打开! \007\n");
return;
}
CalValue ();
printf(" 文件 IN.dst 中共有的正整数个数=%d个\n", totNum);
printf (" 符合条件的正整数的个数 =%d个\n", totCnt);
printf("平均值=%.2f\n", totAve);
writeDat ();
}
int ReadDat (void)
{ FILE *fp;
int i = 0;
if ((fp = fopen("IN.dat", "r")) == NULL)
return 1;
while (!feof(fp))
fscanf(fp, "%d,", &number [i++]);
fclose (fp);
return 0;
}
void writeDat (void)
{ FILE *fp;
fp = fopen("OUT.dat", "w");
fprintf(fp, "%d\n%d\n%6.2f\n", totNum, totCnt, totAve);
fclose (fp);
}
试题(53)、(54)
线性规划问题就是求出一组变量,在一组线性约束条件下,使某个线性目标函数达到极大(小)值。满足线性约束条件的变量区域称为可行解区。由于可行解区的边界均是线性的(平直的),属于单纯形,所以线性目标函数的极值只要存在,就一定会在可行解区边界的某个顶点达到。因此,在求解线性规划问题时,如果容易求出可行解区的所有顶点,那么只要在这些顶点处比较目标函数的值就可以了。
例如,线性规划问题:max S=x+y(求S=x+y的最大值);2x+y≤7,x+2y≤8,x≥0,y≥0的可行解区是由四条直线2x+y=7,x+2y;8,x=0,y=0围成的,共有四个顶点。除了原点外,其他三个顶点是(53)。因此,该线性规划问题的解为 (54) 。
(53)A. (2,,(0,7),(3.5,0)
B. (2,3),(0,4),(8,0)
C. (2,3),(0,7),(8,O)
D. (2,3),(0,4),(3.5,0)
(54)A. x=2, y=3
B.x=0, y=7
C.x=0, y=4
D.x=8, y=0
以下关于线性规划问题的叙述中,不正确的是______。
A.若D有界,则F必能在D的某个顶点上达到极值
B.在F在D中A、B两点上都达到极值,则在AB线段上也都能达到极值
C.若D有界,则该线性规划问题一定有一个或无穷多个最优解
D.若D无界,则该线性规划问题没有最优解
(63)
A. 若D有界,则F必能在D的某个顶点上达到极值
B. 若F在D中A、B点上都达到极值,则在AB线段上也都能达到极值
C. 若D有界,则该线性规划问题一定有一个或无穷多个最优解
D. 若D 无界,则该线性规划问题没有最优解
阅读下列程序说明和C程序,已知其输出为“1 2 3 4 5 6 7 8 9 10”。将应填入(n)处的字句写在对应栏内。
[说明]
本程序包含的函数及其功能说明如下:
(1)函数first_insert()的功能是在已知链表的首表元之前插入一个指定值的表元;
(2)函数reverse_copy()的功能是按已知链表复制出一个新链表,但新链表的表元链接顺序与
已知链表的表元链接顺序相反;
(3)函数Print_link()用来输出链表中各表元的值;
(4)函数free_link()用来释放链表全部表元空间。
[程序]
include <stdio. h >
include <malloe. h >
typodef struct node {
int val;
struct node * next;
} NODE;
void first_insert(NODE * * p,int v)
{ NODE *q = (NODE *) malloe(sizeof(NODE));
q->val = v; q->next = *p; /* 为新表元赋值*/
* p =(1); }
NODE * reverse_copy(NODE * p)
{ NODE * u;
for(u=NULL; p!=NULL; p=p->next) first_insert((2));
return u;
}
void printlink(NODE * p )
{ for(;(3)) prinff("%d\t", p->val);
printf(" \n");
}
void free_link(NODE * p)
{ NODE * u;
while(p! =NULL) { u=p->next;free(p);(4); }
void main() { NODE * link1 , * link2;
int i;
link1 = NULL;
for(i=1; i<= 10; i+ + )first_insert(&linkl, i);
link2 = reverse_copy(link1 );
(5);
free_link(linkl ) ;free_link(link2); }
设为向量值函数。
(1)如果坐标分量函数,证明f的导数是单位阵;
(2)写出坐标分量函数的一般形式,使f的导数是单位阵;
(3)如果已知f的导数是对角阵,那么坐标分量函数应该具有什么样的形式?
阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。
[说明]
已知r[1...n]是n个记录的递增有序表,用折半查找法查找关键字为k的记录。若查找失败,则输出“failure",函数返回值为0;否则输出“success”,函数返回值为该记录的序号值。
[C函数]
int binary search(struct recordtype r[],int n,keytype k)
{ intmid,low=1,hig=n;
while(low<=hig){
mid=(1);
if(k<r[mid].key) (2);
else if(k==r[mid].key){
printf("succesS\n");
(3);
}
else (4);
}
printf("failure\n");
(5);
}
试题四(共15分)
阅读以下说明和C函数,填充函数中的空缺,将解答填入答题纸的对应栏内。
【说明】
已知两个整数数组A和B中分别存放了长度为m和n的两个非递减有序序列,函数Adjustment(A,B,m,n)的功能是合并两个非递减序列,并将序列的前m个整数存入A中,其余元素依序存入B中。
合并过程如下:从数组A的第一个元素开始处理。用数组B的最小元素B[0]与数组A的当前元素比较,若A的元素较小,则继续考查A的下一个元素;否则,先将A的最大元素暂存入temp,然后移动A中的元素挪出空闲单元并将B[0]插入数组A,最后将暂存在temp中的数据插入数组B的适当位置(保持B的有序性)。如此重复,直到A中所有元素都不大于B中所有元素为止。
【C函数】
void Adjustment(int A[],int B[],int m,int n)
{ /*数组A有m个元素,数组B有n个元素*/
inti,k,temp;
for(i=0;i<m;i++)
{
if(A[i]<=B[0]) continue,
temp= (1) ;/*将A中的最大元素备份至temp*/
/*从后往前依次考查A的元素,移动A的元素并将来自B的最小元素插入A中*/
for(k= m-1; (2) ;k--)
A[k]=A[k-1];
A[i]=(3) ;
/*将备份在temp的数据插入数组B的适当位置*/
for(k=1; (4) &&k<n;k++)
B[k_1]=B[k];
B[k-1]= (5) ;
}
}
在图2-16所示结构中,已知个构件的长度,构件1以角速度1逆时针方向回转.现已给出求受解机构在图示位置时构件5上E点的速度vE的速度多边形图.试写出求解vE的过程.(包括求解时所用的矢量方程式,各量的方向及大小的表达式)