国家开放大学电大专科《微积分初步》2025期末试题

试题二(共 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,


正确答案:B


完成下列反应方程式:3Cu+8HNO3(稀)===3Cu(NO3)2+X(I)+4H2O4Zn+10HNO3(稀)===4Zn(NO3)2+Y(II)+5H2O()

A、(I)=NO,(II)=N2O;

B、(I)=NO,(II)=NO2;

C、(I)=NO,(II)=NO;

D、(I)=NO2,(II)=N2O


正确答案:A


下面这个程序段的时间复杂度是( )。 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)


正确答案:D
解析:语句的频度指的是该语句重复执行的次数。一个算法中所有语句的频度之和构成了该算法的运行时间。在本例算法中,语句①的频度是n-1,语句②的频度是(n-1)(2n+1)-2n2-n-1。则该程序段的时间复杂度是T(n)=n-1+2n2-n-1=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)i=1;i5;i++ (2)i!=k&&i!=j&&j!=k (3)a[i]=I (4)a[j]=0 (5)line++
(1)i=1;i5;i++ (2)i!=k&&i!=j&&j!=k (3)a[i]=I (4)a[j]=0 (5)line++ 解析:本题考查用C语言程序对组合数和素数的求解。
在函数2.1中,要求输出由1、2、3、4这些数字组成的互不相同且无重复数字的三位数。程序中是用三重循环来实现的。
第(1)空是三重循环中第一重循环的循环条件,三位数的最高位可以取题目给出的任意一个数,那么应该和其他循环的条件一样,结合程序中变量的应用情况,不难知道这重循环是用变量i,因此,此空答案为i=1;i5;i++。
第(2)空是条件判断语句的条件,此条件判断语句的作用注释中已经给出,是用来确保i,j,k三位互不相同的,即所组成的三位数中无重复数字。因此,此空答案为i!=k&&i!=j&&j!=k。
在函数2.2中,题目要求计算并输出100之内的素数,且每行只能输出10个数,从试题一中我们应该很清楚素数的定义了,最小的素数是2。下面我们来分析程序。
第(3)空是第一个循环下面的执行语句,此循环是从2开始一直到100,结合程序不难发现程序中用了一个数组来存放要参加运算的100个数,但是并没有对数组进行赋初值操作,那么此空的作用应该就是对数组进行赋初值,因此,此空答案为a[i]=i。
第(4)空是在循环中的两个条件判断语句下面,从条件判断语句if(a[j]%a[i]==0)不难推断出此循环是用来求当前最小素数的倍数的,此空是对当前最小素数倍数的处理,结合后面的程序可以知道,如果是素数的倍数,那么在数组中的值要被变为0,因此,此空答案为a[j]=0。
第(5)空是在循环输出语句下面,从条件判断语句if(line==10)及下面的操作可以推断出变量line是用来记录一行中输出素数的个数的,在此空的上面一行程序是输出一个素数,那么接下来应该是将变量line加1,因此,此空答案为line++。


附衰导数基本公式,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));

}


正确答案:(1)错误:int j=1 正确:double j=1.0; (2)错误:y+=1/(i*i); 正确:y+=j/(i*i);
(1)错误:int j=1 正确:double j=1.0; (2)错误:y+=1/(i*i); 正确:y+=j/(i*i); 解析:错误1:为了做后面的除法运算,j要定义为实型数,否则除得的结果将为整数。错误2:题中公式是加减相间的运算,通过来实现。


下列给定的程序中,函数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);

}


正确答案:(1)错误:y=0; 正确:y=1: (2)错误:d=i-a; 正确:d=a-i;
(1)错误:y=0; 正确:y=1: (2)错误:d=i-a; 正确:d=a-i; 解析:这道题是历年的考题经典。也就是验证哥德巴赫猜想之变体,原来的思路是(任意一个大于等于6的偶数都可以分解为两个素数之和)n为大于等于6的任一偶数,可分解为n1和n2两个数,分别检查n1和n2是否为素数,如都是,则为一组解。如n1不是素数,就不必再检查n2是否素数。先从n1=3开始,检验n1和n2(n2=N-n1)是否素数。然后使n1+2 再检验 n1,n2是否素数,…直到n1=n/2为止。该题思路是与“经典猜想”是相同的。


阅读下列函数说明和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");

}


正确答案:(1)x2--; (2)s=-1; (3)x1++; (4)a[i][j]=m--; (5)j--; (6)y2--;
(1)x2--; (2)s=-1; (3)x1++; (4)a[i][j]=m--; (5)j--; (6)y2--; 解析:自然数排列的回旋矩阵是一个经典程序设计题目。本题中生成的是一个从里到外是连续的自然数排列的回旋矩阵。仔细阅读代码,能够发现(1)处应该为矩阵下边界递减;(2)处应该为数组元素递减状态,即为降;(3)处应该为矩阵上边界递增;(4)处应该为存放矩阵元素的数组中的数据递减;(5)处应该为数组元素的列序号递减,即j--;(6)矩阵右边界递减。


请编写函数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");

}


正确答案:int fun( int a [M] [N]) { int ijsum=0; for(i=0;iM;i++) for(j=0;iN;j++) if(i==0||i==M-1||j==0||j==N-1) /*只要下标中有一个为0或M-1或N-1则它一定是周边元素*/ sum=sum+a[i][j]; /*将周边元素相加*/ return sum; }
int fun( int a [M] [N]) { int i,j,sum=0; for(i=0;iM;i++) for(j=0;iN;j++) if(i==0||i==M-1||j==0||j==N-1) /*只要下标中有一个为0或M-1或N-1,则它一定是周边元素*/ sum=sum+a[i][j]; /*将周边元素相加*/ return sum; } 解析:本题采用逐一判断的方式,周边元素的下标一定有一个是0或M-1或N-1,且只要下标中有一个为0或M-1或N-1,则它一定是周边元素。


有以下程序: #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,


正确答案:B
Fun函数功能是把数组a的每一行的最大值赋给b,a的第一行的最大值是3,第二行的最大值是6,第三行的最大值是9,所以答案是3,6,9。

更多 “国家开放大学电大专科《微积分初步》2025期末试题” 相关考题
考题 已知α= i + αj -3k, β= αi -3 j + 6k, y = -2i + 2j + 6k,若α,β, Y 共面,则α等于: (A) 1 或 2 (B) -1 或 2 (C) -1 或-2 (D) 1 或-2答案:C解析:

考题 阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。【函数2.1】void sort(char *s,int num){int i,j--num;char t;while(j-->1)for(i=0;i<j;i++)if(s[i]>s[i+1]){t=s[i];s[i]=s[i+1];s[i+1]=t;}void main(){char *s="CEAedea";sort(s,5);printf("%s",s);}上述程序的结果是(1)【函数2.2】void main(){ union {int ig[6];Char s[12];} try;try. ig[0]=0x4542; try.ig[1]=0x2049;try. ig[2]=0x494a; try.ig[3]=0x474e;try. ig[4]=0x0a21; try.ig[5]=0x0000;pintf("%s",try, s);}上述程序的结果是(2)【函数2.3】void main(){ char *letter[5]= { "ab","efgh","ijk","nmop","st"};char **p;int i;p=letter;for(i=0;i<4;i++) .printf("%s",p[i]);}上述程序的结果是(3)【函数2.4】main(){int i=4,j=6,k=8,*p=&I,*q=&j,*r=&k;int x,y,z;x=p==&i;y=3*-*p/(*q)+7;z=*(r=&k)=*p**q;printf("x=%d,y=%d,z=%d",x,y,z);}上述程序的结果是(4)【函数2.5】int a[]={5,4,3,2,1 };void main(){int i;int f=a[0];int x=2;for(i=0;i<5;i++)f+=f*x+a[i];printf("%d",f);}上述程序的结果是(5)正确答案:(1)ACEdeea (2) BEI JING!(3) abefghijkmnop (4) x=1y=5z=24(5) 129(1)ACEdeea (2) BEI JING!(3) abefghijkmnop (4) x=1,y=5,z=24(5) 129

考题 填空题已知列表x=[1,2,3]和y=[4,5,6],那么表达式[(i,j)for i,j in zip(x,y)if i==3]的值为()。正确答案:[(3, 6)]解析:暂无解析

考题 单选题若有以下程序#include #define N 4void fun(int a[][N], int b[], int flag){ int i,j; for(i=0; i a[i][j]) : (b[i] < a[i][j]))  b[i] = a[i][j]; }}main(){ int x[N][N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}, y[N],i; fun(x,y,1); for (i=0; i A 1,2,3,4,13,14,15,16,B 4,8,12,16,1,5,9,13, C 1,5,9,13,4,8,12,16,D 13,14,15,16,1,2,3,4,正确答案:A解析:考查数组名作为函数参数。函数fun的作用是如果flag为1则用b[i]记录a[i][0]至a[i][3](即当前行)中最小的值,若flag为0,则用b[i]记录a[i][0]至a[i][3](即当前行)中最大的值。答案选择C选项。

考题 填空题设向量u(→)=3i(→)-4j(→),v(→)=4i(→)+3j(→),且二元可微函数f(x,y)在点P处有∂f/∂u(→)|P=-6,∂f/∂v(→)|P=17,则df|P=____。正确答案:10dx+15dy解析:{e(→)u={3/5,-4/5},e(→)v={4/5,3/5}。由∂f/∂u(→)|P=-6,∂f/∂v(→)|P=17,得∂f/∂x|P×(3/5)+∂f/∂y|P×(-4/5)=-6,∂f/∂x|P×(4/5)+∂f/∂y|P×(3/5)=17,所以∂f/∂x|P=10,∂f/∂y|P=15。故df|P=∂f/∂x|Pdx+∂f/∂y|Pdy=10dx+15dy。

考题 有以下程序: #include<stdio.h> #define N 4 void fun(int a[][N],int[]) { int i; for(i=o;i<N;i++)b[i]=a[i][i]-a[i][N-1-i-]}; } main( ) { int x[N][N]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}},y[N],i; fun(X,y); for(i=0;i<N;i++)printf("%d,",y[i]);printf("\n"); } 程序运行结果为( )。A.-l2,-3,0,0,B.-3,-l,1,3,C.0,1,2,3,D.-3,-3,-3,-3,正确答案:B此题考查函数的调用以及数组的用法,由函数fun可知,当i=0,i<N且N=4,执行i++和b[i]=a[i][i]-a[i][N-1-i],经过运算得出结果为-3,-l,1,3。

考题 2 . W i n d o w s 基本操作题( 共5 小题,每小题l 分,共5 分。)( 1 ) 在E 盘的T R Y Y 文件夹中新建一个文件夹,名为H A N l 2 3 。( 2 ) 将E 盘的Y Y 文件夹中的所有文件移到H A N l 2 3 中。 .( 3 ) 彻底删除文件夹Y Y ,将文件夹T R Y Y 中文件H A P P Y .e x e 的属性设置为只读。( 4 ) 在E 盘中查找R A D l 0 .x l s 文件。( 5 ) 将R A D l 0 .x l s 复制到H A N l 2 3 中。正确答案:2 . 【参考答案】本题为上机操作题,具体略。 【考点1 W i n d o w s 基本操作

考题 有下列程序:#include<stdi0.h>#defineN4voidfun(inta[][N],intb[]){inti;for(i=0;i<N,i++)b[i]=a[i][i];}voidmain( ){intx[][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,正确答案:BB。【解析】本题考查数组的初始化,在对二维数组元素赋初值时,如果只对部分元素赋初值,那未赋初值的元素自动取0。fun函数是将二维数组a中主对角线上的元素赋给数组b,所以y[4]=(1,0,7,0)。

考题 有以下程序 include define N 4 void fun(int a[][N],int b[]) { int有以下程序 #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,正确答案:B解析:在主函数中,定义并初始化了4行4列的二维数组x。对于二维数组元素的赋值,可以只对部分元素赋初值,未赋初值的元素自动取0。x数组元素赋初值后各元素为:fun函数的作用是将二维数组a中主对角线元素赋给数组b,由于数组a与数组x共用同一存储单元,也即将数组x中主对角线元素赋给了数组b。又因为数组b与数组y共用同一存储单元,所以主函数中通过语句“printf("%d,"y[i]);”输出的即为数组b中的值,所以程序运行结果为“1,0,7,0,”。

考题 已知列表x=[1,2,3]和y=[4,5,6],那么表达式[(i,j)for i,j in zip(x,y)if i==3]的值为()。正确答案:[(3, 6)]