工学

问答题机械参数优选的目标及目标函数中的J、S、E、F、J/S的物理意义?

题目
问答题
机械参数优选的目标及目标函数中的J、S、E、F、J/S的物理意义?
如果没有搜索结果,请直接 联系老师 获取答案。
如果没有搜索结果,请直接 联系老师 获取答案。
相似问题和答案

第1题:

有以下程序:int f(int b[][4]){int i,j,s=0;for(j=0;i<4;i++){i=j;if(i>2)i=3-j;s+=b[i][j];}ret

有以下程序: int f(int b[][4]) { int i,j,s=0; for(j=0;i<4;i++) { i=j; if(i>2) i=3-j; s+=b[i][j]; } return s; } main() { int a[4][4]={{1,2,3,4,},{0,2,4,6},{3,6,9,12},{3,2,1,0}}; printf("%d\n",f(a)); } 执行后的输出结果是( )。

A.12

B.11

C.18

D.16


正确答案:D
解析:在主函数中首先定义了一个4行4列的二维数组a,并用该数组的数组名作为实参调用函数f()。函数f()中的for循环作用,是将数组前3行中的对角线上的元素,即b[0][0]、b[1][1]、b[2][2]和第一行的第四列元素即b[0][3]累加到变量s中, s=a[0][0]+a[1][1]+a[2][2]+a[0][3]=1+2+9+4=16。然后将s的值返回在主函数中输出。

第2题:

以下程序的输出结果是【 】。include defineN 5 int fun(int *s,int a,int n) {int j; *s=

以下程序的输出结果是【 】。

include <stdio.h>

define N 5

int fun(int *s,int a,int n)

{ int j;

*s=a j=n;

while(a!=s[j]) j-;

return j;

main()

{ int s[N+1]; int k:

for(k=1 ;k<=N;k++) s[k]=k+1:

print f("%d\n",fun(s,4,N));

}


正确答案:3
3 解析:本题主函数中定义了一个一维数组s,并通过for循环给s[1]到s[5]的元素分别赋值为2、3、4、5、6。然后调用 fun函数,使指针变量s与数组s共用同一存储单元。在函数fun中,a=4,n=5,所以while的条件表达式首先判断的是 4!=s[5]是否成立,由于s[5]=6,所以成立,执行j-;接着判断4!=s[4]是否成立,由于s[4]=5,所以成立,执行j-;然后判断4!=s[3]是否成立,由于s[3]=4,所以条件表达式不成立,返回j的值3。

第3题:

●试题四

阅读下列函数说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。

【说明】

函数QuickSort是在一维数组A[n]上进行快速排序的递归算法。

【函数】

void QuickSort(int A[],int s,int t)

{int i=s,j=t+1,temp;

int x=A[s];

do{

do i++;while (1) ;

do j--;while(A[j]>x);

if(i<j){temp=A[i]; (2) ; (3) ;}

}while(i<j);

A[a]=A[j];A[j]=x;

if(s<i-1) (4) ;

if(j+1<t) (5) ;

}


正确答案:

●试题四

【答案】(1)Ai<x(2)Ai=Aj(3)Aj=temp(4)QuickSort(Asj-1)

(5)QuickSort(Aj+1t)

【解析】快速排序的思想是:任取待排序序列中的某个元素作为基准(一般取第一个元素),通过一趟排序,将待排元素分为左右两个子序列,左子序列元素的排序码均小于或等于基准元素的排序码,右子序列的排序码则大于基准元素的排序码,然后分别对两个子序列继续进行排序,直至整个序列有序。快速排序是对冒泡排序的一种改进方法,算法中元素的比较和交换是从两端向中间进行的,排序码较大的元素一次就能够交换到后面单元,排序码较小的记录一次就能够交换到前面单元,记录每次移动的距离较远,因而总的比较和移动次数较少。

 

第4题:

阅读下列函数说明和C代码,将应填入(n)处的字句写在对应栏内。

【说明】

函数QuickSort是在一维数组A[n]上进行快速排序的递归算法。

【函数】

void QuickSort( int A[ ],int s,int t)

{ int i=s,j=t+1,temp;

int x=A[s];

do{

do i ++ ;while (1);

do j -- ;while(A[j]>x);

if(i<j){temp=A[i];(2);(3);}

}while(i<j);

A[a] =A[j];A[j] =x;

if(s<i-1) (4);

if(j+1<t) (5);

}


正确答案:(1)A[i]x (2)A[i]=A[j] 3)A[j]=temp (4)QuickSort(Asj-1) (5)QuickSort(Aj+1t);
(1)A[i]x (2)A[i]=A[j] 3)A[j]=temp (4)QuickSort(A,s,j-1) (5)QuickSort(A,j+1,t); 解析:快速排序的思想是:任取待排序序列中的某个元素作为基准(一般取第一个元素),通过一趟排序,将待排元素分为左右两个子序列,左子序列元素的排序码均小于或等于基准元素的排序码,右子序列的排序码则大于基准元素的排序码,然后分别对两个子序列继续进行排序,直至整个序列有序。快速排序是对冒泡排序的一种改进方法,算法中元素的比较和交换是从两端向中间进行的,排序码较大的元素一次就能够交换到后面单元,排序码较小的记录一次就能够交换到前面单元,记录每次移动的距离较远,因而总的比较和移动次数较少。

第5题:

请补充函数fun(),该函数的功能是:计算N×N维矩阵元素的方差,结果由函数返回。维数N在主函数中输入。例如:

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。

试题程序:

include <stdio.h>

include <conio.h>

include <stdlib.h>

include <math.h>

define N 20

double fun(【 】,int n)

{

int i,j;

int k;

double s=0.0;

double f=0.0;

double aver=0.0;

double sd=0.0;

for(i=0;i<n;i++)

for(j=0;j<n;j++)

s+=a[i][j];

aver=【 】;

for(i=0;i<n;i++)

for(j=0;i<n;j++)

f+=(a[i][j]-aver)*(a[i][j]-aver);

f/(n*n);

sd=【 】;

return sd;

}

main()

{

int a[N][N];

int n;

int i,j;

double s;

clrscr();

printf("***+Input the dimension of

array N*****\n");

scanf("%d",&n);

printf("***** The array *****\n");

for(i=0;i<n;i++)

{

for(j=0;j<n;j++)

{

a[i][j]=rand()%50;

while(a[i][j]=0)

a[i][j]=rand()%60;

printf("%4d",a[i][j]);

}

printf("\n\n");

}

s=fun(a,n);

printf("******* THE RESULT *******\n");

printf("%4.3f\n",s);

}


正确答案:int a[][N] s/(n*n) sqrt(f)
int a[][N] s/(n*n) sqrt(f) 解析:第一空;由主函数main()中对函数fun()的调用格式,可以知道,函数fun()的第一个参数是N×N的二维整型数组。第二空:平均值等于所有元素的累加和除以个数。第三空;根据公式,方差sd等于对变量f开平方,这里注意对数学库函数的调用。

第6题:

现在有如下程序

#include "stdio.h"

main()

{char s[80];

int i,j;

gets(s);

for(i=j=0;s[i]!=′\0′;i++)

if(s[i]!=′H′______)

s[j]=′\0′;

puts(s);}

这个程序段的功能是删除输入的字符串中字符′H′,则空线上应当添入的是

A.s[j++]=s[i];j++;

B.s[j]=s[i++];j++;

C.s[j++]=s[i];

D.s[j]=s[i];


正确答案:C

第7题:

学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fjun(),该函数的功能是:把高于等于平均分的学生数据放在b所指的数组中,高于等于平均分的学生人数通过形参n传回,平均分通过函数值返回。

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

include <stdio.h>

define N 12

typede f struct

{ char num[10];

double s;

} STREC;

double fun (STREC *a,STREC *b, int *n)

{

}

main ( )

STREC s IN] = { { "GA05", 85 }, { "GA03", 76 },

{"GA02", 69}, {"GA04", 85}, {"GA01", 91},

{"GA07", 72}, {"GA08", 64}, {"GA06", 87},

{"GA09", 60}, { "GAll", 79 }, { "GA12", 73},

{"GA10", 90 } };

STREC h[N],t;

FILE *out;

int i ,j,n;

double ave;

ave=fun (s, h, &n);

printf("The %d student data which is

higher than %7.3f: In", n, ave);

for(i=0; i<n; i++)

printf ("%s %4.1f\n",h[i] .num, h[i] .s);

printf ("\n");

out=fopen ("out90.dat", "w");

fprintf(out, "%dkn %7.3f\n",n,ave);

for(i=0; i<n-1; i++)

for (j=i+l; j<n; j ++)

if (h[i] .s<h[j ] .s)

{t=h Ii] ;h[i]=h[j] ;h[j]=t; }

/*分数从高到低排列*/

for(i=0; i<n; i++)

fprintf(out, "%4.1f\n",h[i] .s);

fclose (out);

}


正确答案:double fun (STREC *a STREC *b int *n) { int i; double ay=0.0; *n=0; for(i=0;iN;i++) av=av+a[i].s; ay=ay/N; /*求平均值*/ for(i=0;iN;i++) if(av=a[i].s) { b[*n]=a[i];*n-*n+l;} /*将高于等于平均分的学生存从所指存储单元中并统计人数*/ return ay; /*返回严均分*/ }
double fun (STREC *a, STREC *b, int *n) { int i; double ay=0.0; *n=0; for(i=0;iN;i++) av=av+a[i].s; ay=ay/N; /*求平均值*/ for(i=0;iN;i++) if(av=a[i].s) { b[*n]=a[i];*n-*n+l;} /*将高于等于平均分的学生存从所指存储单元中,并统计人数*/ return ay; /*返回严均分*/ } 解析:本题中第1个循环的作用求出所有分数的总和,只有进行了av=av/N后才得到平均值(我们在前面的程序中碰到过类似问题)。第2个循环的作用是将高于等于平均分的学生存入b所指存储单元中。同一结构体变量之间可以互相赋值。
本程序中直接用*n来表示b的下标,注意开始时要给,*n赋0,且使用时不能少*号。因为单独的n是一个指针变量,而我们要用的是它所指向的那个存储单元中的值。

第8题:

请编写一个函数prim(int num),该函数实现判别参数num是否为素数,在主函数中利用prime()函数验证哥德巴猜想——任何比2大的偶数都可表示为两个素数之和基本功能,根据main函数的调用情况给出正确的返回值。

注意:部分源程序已存在文件test36_2.cpp中。

请勿修改主函数main和其他函数中的任何内容,仅在函数prim的花括号中填写若干语句。

文件test36_1.cpp的内容如下:

include <iostream.h>

const LEN=100;

int prim(int num)

{

}

void main()

{

int a=7;

int cnt=0;

cout<<"a is 7:\n";

int *s;

s=new int[LEN];

for(int i=2;i<a;i++)

{

if(!prim(i))

{

s[cnt]=i;

cnt++;

}

}

for (i=0;i<cnt;i++)

{

for (int j=i+1;j<cnt;j++)

{

if (s [i] +s [j] ==a)

cout<<s[i]<<'\t'<<s[j]<<'\t'<<end1;

}

}

}


正确答案:int prim(int num) { int halfflag; flag =0; half=num/2; for (int i=2;i=half;i++) { if(num%i==O) flag=1; else continue; } if (flag==1) return 1; else return 0; }
int prim(int num) { int half,flag; flag =0; half=num/2; for (int i=2;i=half;i++) { if(num%i==O) flag=1; else continue; } if (flag==1) return 1; else return 0; } 解析:本题考查的是考生对一般应用的综合考查,主要是对于for函数使用的应用。其基本算法如下:从2开始到该数的一半进行穷举,每个数都对参数nam进行整除,如果发现有任何一个数能够整除num,则标志变量flag变为1,最后返回的时候,返回值根据标志flag分别返回——能整除flag为1,返回“不能整除flag为0,返回0。

第9题:

请补充函数fun(),该函数的功能是:把字符串str中的字符按字符的ASCⅡ码降序排列,处理后的字符串仍然保存在原串中,字符串及其长度作为函数参数传入。

例如,如果输入“cdefgh”,则输出为“hgfedc”。

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。

试题程序:

include <stdio.h>

define N 80

void fun (char s [], int n)

{

int i, j;

char ch;

for (i=0; i<n; i++)

for(j=【 】;j<n;j++)

if (s[i]<s [j])

{

ch=s [j];

【 】;

s [i] =ch;

}

main ( )

{

int i=0, strlen=0;

char str [N];

clrscr ();

printf ("\nInput a string: \n");

gets (str);

while (str [i] !=' \0')

{

strlen++;

i++;

}

fun (str, strlen);

printf ("\n***display string ***\n");

puts (str);

}


正确答案:I s[j]=s[i]
I s[j]=s[i] 解析:第一空:本题采用选择法进行排序。选择法的算法思路是:如果有n个数则从头到倒数的第2个数一个一个往后走动,每走动一个数总是将这个数与其后的所有数进行两两比较,在比较时按题目要求的顺序将进行比较的这两个数排序 (即交换)。理解了选择法的思路,则此空就非常简单了,应该填i。第二空:借助第三个变量交换两数的方法,非常重要也非常基础,必须要求掌握。

第10题:

学生的记录由学号和成绩组成,N名学生的数据已存放在主函数的结构体数组s中,请编写函数fun,它的功能是:把低于平均分的学生数据放在b所指的数组中,低于平均分的学生人数通过形参n传回,平均分通过函数值返回。

[注意] 部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在fun函数的花括号中填入所编写的若干语句。

[试题源程序]

include<stdio.h>

define N 8

typedef struct

{

char num[10];

double s;

}STREC;

double fun(STREC *a, STREC *b, int *n)

{

}

void main()

{

STREC s[N]={{"GA05", 85},

{"GA03", 76}, {"GA02", 69}, {"GA04", 85},

{"GA01", 91}, {"GA07", 72}, {"GA08", 64},

{"GA06", 87}};

STREC h[N], t; FILE *out;

int i, j, n;

double ave;

ave=fun(s, h, &n);

printf("The %d student data which is lower than %7.3 f:\n", n, ave);

for(i=0; i<n; i++)

printf("%s %4.1f\n", h[i]. num, h[i].s);

printf("\n");

ut=fopen("out.dat", "W");

fprintf(out, "%d\n%7.3f\n", n, ave);

for(i=0; 2<n-1; i++)

for(j=i+1; j<n; j++)

if(h[i]. s>h[j].s)

{

t=h[i];

h[i]=h[j];

h[j]=t;

}

for(i=0; 2<n; i++)

fprintf(out, "%4.1f\n", h[i].s);

fclose(out);

}


正确答案:int fun(STREC *a STREC *b int *n) { double ave=0.0; int i j=0; *n=0; for(i=0; iN; i++) ave+=a[i].s; ave/=N; for(i=0; iN; i++) if(a[i]. save) { b[j]=a[i]; (*n)++; j++; } return ave; }
int fun(STREC *a, STREC *b, int *n) { double ave=0.0; int i, j=0; *n=0; for(i=0; iN; i++) ave+=a[i].s; ave/=N; for(i=0; iN; i++) if(a[i]. save) { b[j]=a[i]; (*n)++; j++; } return ave; } 解析:本题的设计思路是:(1)定义两个变量,分别用于保存总分和平均值,定义循环变量并赋初值:(2)利用循环语句遍历所有学生的分数,累加求和并计算初值;(3)再次遍历结构体数组,找出低于平均分的分数,把该学生的记录保存在形参数组b中,并记录其个数;(4)用return语句返回平均值。

更多相关问题