试题二(共 15分)
阅读以下说明和C函数,将应填入 (n) 处的字句写在答题纸的对应栏内。
【说明 1】
函数Counter(int n, int w[])的功能是计算整数n的二进制表示形式中1的个数,同时用数组w记录该二进制数中1所在位置的权。
例如,十进制数22的二进制表示为10110。对于该二进制数,1的个数为3,在w[0]中存入2(即21)、w[1]中存入4(即22)、w[2]中存入16(即24)。
【C函数 1】
int Counter(int n, int w[])
{ int i = 0, k = 1;
while ( (1) ) {
if (n % 2) w[i++] = k;
n = n / 2; (2) ;
}
return i;
}
【说明 2】
函数 Smove(int A[], int n)的功能是将数组中所有的奇数都放到所有偶数之前。其过程为:设置数组元素下标索引i(初值为0)和j(初值为n-1),从数组的两端开始检查元素的奇偶性。若 A[i]、A[j]都是奇数,则从前往后找出一个偶数,再与 A[j]进行交换;
若 A[i]、A[j]都是偶数,则从后往前找出一个奇数,再与A[i]进行交换;若 A[i]是偶数而A[j]是奇数,则交换两者,直到将所有的奇数都排在所有偶数之前为止。
【C函数 2】
void Smove(int A[], int n)
{ int temp, i = 0, j = n-1;
if ( n < 2 ) return;
while ( i < j ) {
if ( A[i] % 2 == 1 && A[j] % 2 == 1 ) { (3) ; }
else if ( A[i] % 2 == 0 && A[j] % 2 == 0 ) { (4) ; }
else {
if ( (5) ) {
temp = A[i]; A[i] = A[j]; A[j] = temp;
}
i++, j--;
}
}
}
试题二参考答案
(1)n!=0,或其等价形式 (3分)
若考生解答为n>0,给1分
(2)k=k*2,或k*=2,或k+=k,或k=k +k,或其等价形式 (3分)
(3)i++,或++i,或i+=1,或i=i+1,或其等价形式 (3分)
(4)j--,或--j,或j-=1,或j=j-1,或其等价形式 (3分)
(5)A[i]%2==0&&A[j]%2==1 (3分)
或A[i]%2==0&&A[j]%2
或!(A[i]%2)&&A[j]%2,或其等价形式
有以下程序
#include <stdio.h>
#define N 4
void fun(int a[][N], int b[])
{ int i;
for(i=0;i<N;i++) b[i] = a[i][i];
}
main()
{ int x[][N]={{1,2,3},{4},{5,6,7,8},{9,10}},y[N],i;
fun(x,y);
for(i=0;i<N;i++) printf("%d,",y[i]);
printf("\n");
}
程序的运行结果是
A)1,2,3,4,
B)1,0,7,0,
C)1,4,5,9,
D)3,4,8,10,
A、(I)=NO,(II)=N2O;
B、(I)=NO,(II)=NO2;
C、(I)=NO,(II)=NO;
D、(I)=NO2,(II)=N2O
下面这个程序段的时间复杂度是( )。 for (i=1; i<n; i++) { y=y+3; for (j=0;j<=(2*n);j++) x++; }
A.O(log2n)
B.O(n)
C.O(nlog2n)
D.O(n2)
阅读以下函数说明和C语言函数,将应填入(n)处的语句写在对应栏内。
【函数2.1说明】
有1、2、3、4四个数字,输出由这些数字组成的互不相同且无重、复数字的三位数。
【函数2.1】
main()
{
int i,j,k;
printf("\n");
for((1)) /*以下为三重循环*/
for(j=1; j<5;j++)
for (k=1;k<5;k++)
{
if ((2)) /*确保i, j, k 三位互不相同*/
printf("%d,%d,%d\n",i,j,k);
}
}
【函数2.2说明】
计算并输出100之内的素数,每行输出10个,超过10个则换行。
【函数2.2】
include <stdio.h>
include "math.h"
define N 101
main()
{
int i,j,line,a[N];
for(i=2;i<N;i++)(3);
for(i=2;i<sqrt(N);i++)
for(j=i+1;j<N;j++)
{
if(a[i]!=0&&a[j]!=0)
if(a[j]%a[i]==0)
(4);
}
printfC\n");
for(i=2,line=0;i<N;i++)
{
if(a[i]!=0)
{
prinff("%5d",a[i]);
(5);
}
if(line==10)
{
prinff("\n");
line=0;
}
}
}
附衰导数基本公式,1(0 11 a# 1)(iDfcJ =、一(口 0 旦以尹 1)X(sitxr co”(cojlt)* stnxr /1(tonjr) =jcos x(colt) r-v-sn r单项选择题(每小题4分,本题共20分)盗传必究枳分基本公式,OcLr =uJ = In | x | + csinrd.T = cgr + r w|*cosjrd.T sinx + c1.ft /(T)- |n(2 j 4的定义域是().A(2+8)C(2,3)U(3,52.dy=(A看5七IL D. (2.3)U0)厂(jr)cLr=( ).D. .r1 + 号 H It5. 分方程的通耕为( ).:A,y=OB.C. y=r+rIX二、填空题(每小题4分,本题共20分)6. 函散 “ 1 2)=直 一4jt+2 则 /(x) =.qxsin 三+ I xO7. 若函数/()=2在i=。4=I工=0&曲线、=&在点”.1)处的切线斜率是.9. J (&i!urcos2x x: Lr =?10-微分方程/尸十土匚产-寸汛口的阶数为.三、计算题(本题共44分,每小题11分)H.计算极限临亡毕匚 1 j4912. 役 =jt & + CO53 r 求 dy.13计算不定枳分J (2x-!)h,cLr.14. itW定枳分 J xCAx.四、应用题【本题16分)15. 用钢板焊接一个容积为4 trl3的底为正方形的无盖水箱,已知钢板每平方米10元,焊接费40元,问水箱的尺寸如何选择,可使总费用最低?最低总费用是多少?试题答案及评分标准(仅供参考)一、单项选择题(每小题4分,本题共20分)1. D 2. A 3. B 4. C 5. D二、填空题(每小题4分,本题共20分)H8- 79.三. as H分)11分礼原式=姬岩粉驾12. 制应3m3x9 分3sin3rLr11 分13. Ml 2-心 ;1 .Dds -1)-1 -1尸+n 分14解 I Jxc*d.r rt, J/dr ? ?, 1分四、应用11(本H9 W分)I :.斜,眩水带的Jltiil K为 5 为,&面枳为S I1 h所以 S = F+,1_r/i=F 十孩. X令S =0制上=2.因为本问题存在最小值,且雨数的驻点唯一,所以.当# = 2.人=1时水箱的表面枳显小,即A9m&低.此肘的费用为s X1O + 4O16O(元)16分
下列给定程序中,函数fun()的功能是根据整型形参m,计算如下公式的值。
y=1-1/(2×2)+1/(3×3)-1/(4×4)+…+(-1)(m+1)/(m×m)
例如:m中的值为5,则应输出0.838611。
请改正程序中的错误,使它能得到正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
include <conio.h>
include <stdio.h>
double fun(int m)
{double y=1.0;
/**********found*************/
int j=1;
int i;
for(i=2;i<=m;i++)
{
j=-1*j;
/****************found*******+******/
y+=1/(i*i);
}
return(y);
}
main()
{
int n=5;
clrscr();
printf("\n The result is %lf\n",fun(n));
}
下列给定的程序中,函数hn()的功能是:为一个偶数寻找两个素数,这两个素数之和等于该偶数,并将这两个素数通过形参指针传回主函数。
请改正函数fun()中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
include <stdio.h>
include <math.h>
void fun(int a, int *b, int *c)
{ int i,j,d,y;
for (i=3;i<=a/2;i=i+2)
/*************found**************/
{y=0;
for (j=2;j<=sqrt((double)i);j++)
if (i%j==0) y=0;
if (y==1)
/*************found**************/
{ d=i-a;
for (j-2;j<=sqrt((double)d);
j++)
if (d%j==0) y=0;
if (y=-1)
{*b=i; *c=d;}
}
}
}
main ()
{ int a,b,c;
do
{ printf("\nInput a: ");
scanf ("%d", &a); }
while (a%2);
fun (a, &b, &c);
printf ("\n\n%d=%d+%d\n", a,b,c);
}
阅读下列函数说明和C代码,填入(n)处。
[说明]
以下C语言程序实现了生成从里到外是连续的自然数排列的回旋矩阵,矩阵形式如下:
7 6 5 16
8 1 4 15
9 2 3 14
10 11 12 13
程序的变量说明如下:
x1:矩阵上边界;
x2:矩阵下边界;
y1:矩阵左边界;
y2:矩阵右边界;
s:数组元素升降标记,s等于1为升,s等于-1为降;
a[]:存放矩阵元素的数组。
仔细阅读C语言程序源码,将(n)处的语句补充完整。(注:每处仅一个语句)
[C程序]
include<stdio.h>
void main ( )
{
const int N=20;
int i=0,j=0,a[N][N],n;
int m,x1,x2,y1,y2,s;
while (1)
{
Printf ("\ninput matrix row N( N>=2): ");
scanf ("%d",&n);
printf ("\n");
if (n>=2)
break;
}
m=n*n;
x1=0; y1=0; x2=n; y2=n;
if(n%2==0)
{j=n-1; y2=n-1; s=1;}
else
{i=n-1; y1=1; s=-1; }
while (1)
{
if (s==1)
{
for (i; i<x2; i++) a[i][j]=m--;
i--;
j--;
(1)
for (j;j>=y1;j--) a[i][j]=m--;
j++;
i--;
y1++;
(2)
}
else
{
for (i;i>=x1;i--)
a[i][j]=m--;
i++;
j++;
(3)
for (j;j<y2;j++)
(4)
(5)
i++;
(6)
S=i;
}
if (m<1) break;
}
for (i=O;i<n; i++)
{
for (j=O;j<n;j++)
printf ("%6d",a[i][j]);
printf ("\n");
}
printf ("\n");
}
请编写函数fun(),函数的功能是求出二维数组周边元素之和,作为函数值返回。二维数组中的值在主函数中赋予。
例如:若二维数组中的值为
1 3 5 7 9
2 9 9 9 4
6 9 9 9 8
1 3 5 7 0
则函数值为61。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
include<conio.h>
include<stdio.h>
define M 4
define N 5
int fun( int a [M][N])
{
}
main()
{
int aa[M][N]={{1,3,5,7,9},{2,9,9,9,4},
{6,9,9,9,8},{1,3,5,7,0}};
int i, j, y;
clrscr();
printf ("The original data is :\n ");
for(i=0; i<N;i++)
{for (j=0; j<N;j++)
printf("%6d ",aa[i][j]);
printf("\n ");
}
y=fun(aa);
printf("\nThe sun:%d\n ",y);
printf("\n");
}
有以下程序: #include<stdio.h> #define N 3 void fun(int a[][N],int b[]) { int i,j; for(i=0;i<N;i++) { b[i]=a[i][0]; for(j=i;j<N;j++) if(b[i]<a[i][j]) b[i]=a[i][j]; } } main( ) { int x[N][N]={1,2,3,4,5,6,7,8,9},y[N],i; fun(x,y); for(i=0;i<N;i++)printf("%d,",y[i]); printf("\n"); } 程序运行后的输出结果是(,)。
A.2,4,8,
B.3,6,9,
C.3,5,7,
D.1,3,5,