试题二(共 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,或其等价形式
●下面算法是实现对n个整数的序列进行选择排序,其中序列的"长度"n为问题的规模。该算法的时间复杂度为 (23) 。
void select_sort(int a[],int n)
{
//将a中整数序列重新排列成从小到大有序的整数序列
for(i=0;i<n-1;++i){
j=i;
for(k=i+1;k<n;++k)
if(a[k]<a[j])j=k;
if(j!=i){w=a[j];a[j]=a[i];a[i]=w;}
}//select- sort
(23) A.O(n3)
B.O(n2)
C.O(n)
D.O(n4)
【解析】算法中的控制结构是两重循环,所以基本操作是在内层循环中的"比较",它的重复执行次数是:
对时间复杂度而言,只需要取最高项,并忽略常数系数。
阅读分析本题程序段后回答问题:
(1)程序实现了什么功能?(3分)
(2)写出程序的输出结果;(4分)
(3)写出算法的时间复杂度。(3分)
#include "stdio.h"
#define N 7
typedef int datatype;
void main(void)
{ int 1,j,t;
datatype data[N]={1,2,3, 4,5,6, 7}; /*处理的数据
*/
i=0;
j=N-1;
while (i<j)
{ t=data[i];
data[i++ ]=data[j];
data[j--]=t;
}
printf(”运行结果为: \n");
for(i= =0;i<N-1;i++)
printf("%d; ",data[i]);
}
答案:
(1)实现的功能:将数组里的数组逆序输出
(2)7;6;5;4;3;2
(3)时间复杂度为n
解析:
因为i<N-1,所以最后输出的结果中不会有1
下面算法是实现对n个整数的序列进行选择排序,其中序列的“长度”n为问题的规模。该算法的时间复杂度为(11)。 void select_sort(int a[],int n){ //将a中整数序列重新排列成从小到大有序的整数序列 for(i=0;i<n-1;++i){ j=i; for(k=i+1;k<n;++k)if(a[k]<a[j])j=k; if(j!=i){w=a[j];a[j];a[i];a[i]=w} )//select_sort
A.O(n2)
B.O(n3)
C.O(n4)
D.O(n)
下列程序的输出结果是 #include"stdio.h" #define N3 #define M3 void fun(int a[M][N]) { printf("%d\n",*(a[1]+2));} main() { int a[M][N]; int i,j; for(i=0;i<M;i++) for(j=0;j<N;j++) a[i][j]=i+j-(i-j); fun(a);}
A.3
B.4
C.5
D.6
30国家开放大学电大专科微积分初步期末试题及答案(试卷号:2437)盗传必究评卷人L afitt成吉g的定gK u e矿 FX (- UO U C0a5)2. i? y l*2r dy =(A. -dx七而A Fff蛤论中( ,不正A. Ti /(r)在 内慎帘 fCx) ft. x =f ttJLtt!定在 j 4t nJ fll4.天嫉教。叫厂A.x + 77+cH+tC. A号/ +r壮/ 十/ +A.2心U4U5得5ifAz.tasaiQ小n i分共也分)6.通欢+J / 2.jQIO.会分力程的沼(为怦&人三,计鼻(率共u分.每小 n分)12 或,“ 3, +cou?,.求 d*I,it W Si IP 分J rvirA件.用钢散付假一个祥割力Im的吱为正万形的无31水IR巳知例&籍孚方兑2元.M1 co4(lr ”irusituritr 一十+ e?u十IId =(3!n3 mirf13- *泌=_卜四位用(本忆分)15.设水箱的底IUKA,两为力.&101为Sll h =点10分代为小同日存衣也小依0所敢的R4喧.所以.当了 = 20 -I时水KI的&血改H小16分此岬郊费川为S2 10-r 10 = 1601 *)
津津有味jÿn jÿn yǒu wâi
2斤
3斤
6斤
8点30分
8点40分
8点50分