下面是一个对整数数组A中的前n个元素求最小值的C程序,函数返回最小元素的位置。 Int minValue(int A[],int n){ int k=0: for(int j=1;j<=n-1;j++) if(A[j]<a[k])k=j; return k: 当n=4时,程序中可能的执行路径数为______。A.2B.4C.8D.16

题目

下面是一个对整数数组A中的前n个元素求最小值的C程序,函数返回最小元素的位置。 Int minValue(int A[],int n){ int k=0: for(int j=1;j<=n-1;j++) if(A[j]<a[k])k=j; return k: 当n=4时,程序中可能的执行路径数为______。

A.2

B.4

C.8

D.16

如果没有搜索结果或未解决您的问题,请直接 联系老师 获取答案。
相似问题和答案

第1题:

阅读下列程序说明和C代码,把应填入其中n处的字句写在答卷的对应栏内。

【说明】

程序利用选择排序算法对数组a中的N个整数按照从小到大的顺序排列,并将排序结果显示出来。

【程序】

define N 10

main()

{

void (1);

int i,a[N];

for(i=0;i<10,i++) /*输入*/

scanf(“%d”,&a[i]);

(2);

for(i=0;i<N,i++) /*输出*/

printf(“%3d”,a[i]);

}

void selectSon(int x[],int n)

{

int i,j,k,t;

for(int i=0; (3);i++)

{

k=i;

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

if (4) k=j;

if (5)

{t=x[i];x[i]=x[k];x[k] =t;}

}

}


正确答案:(1)selectSort()
(1)selectSort() 解析:main函数中对selectSort函数的调用在定义之前,所以要进行说明。

第2题:

以下程序段是函数返回a所指数组中最大的值所在的下标值,横线处的语句为( )。 fun(int*a, int n) { int i,j=0,k; k=j; for(i=j;i<n;i++) if[a[i]>a[k])______; return(k); }

A.k=i

B.k=j

C.i=j

D.i=n


正确答案:A
解析:函数fun中首先定义整型变量k用来存放返回最大值的下标,并将其首先指向第一个元素,即k=j。然后在for循环中依次将当前元素a[i]与标识为最大值的元素进行比较,如果当前元素大于这个标识元素,那么将最大值标识为当前元素,即k=i。

第3题:

试题二(共 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,或其等价形式

第4题:

下列给定程序中,函数fun()的功能是:根据形参m的值(2≤m≤9),在m行m列的二维数组中存放如下所示的数据,由 main()函数输出。

例如,若输入2,则输出1 2

2 4

输入4,则输出1 2 3 4

2 4 6 8

3 6 9 12

4 8 12 16

请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构.

试题程序:

include <conio.h>

include <stdio. h>

define M 10

int aiM] [MI={0};

/***************found*******************/

fun( int **a, int m)

{int j,k;

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

for (k=0; k<m; k++)

/***************found*******************/

a[j] [k]=k*j;

}

main ( )

{int i, j, n;

clrscr ();

printf ("Enter n\n"); scanf ("%d", &n);

fun (a, n);

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

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

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

printf ("\n ");

}

}


正确答案:(1)错误:fun(int**a int m) 正确:void fun(int(*a)[M]int m) (2)错误:a[j][k]=k*j; 正确:a[j][k]=(k+1)*(j+1);
(1)错误:fun(int**a, int m) 正确:void fun(int(*a)[M],int m) (2)错误:a[j][k]=k*j; 正确:a[j][k]=(k+1)*(j+1); 解析:对于二维数组,应该理解成为是由几个一维数组作元素组成的一维数组,或者说,二维数组实际是一个一维数组,只不过它的每个数组元素又都是一个一维数组。我们先来看看指针数组的表示形式:
(1)p+i和a+i均表示a[i]的地址,或者讲,它们均指向数组第i号元素,即指向a[i]。
(2)*(p+i)和*(a+i)都表示p+i和a+i所指对象的内容,即为a[i]。
(3)指向数组元素的指针,也可以表示成数组的形式,也就是说,它允许指针变量带下标,如p[i]与*(p+i)等价。因此,二维数组元素a[i][j]可表示成*(a[i]+j)或*(*(a+i)+j),它们都与a[i][j]等价,或者还可写成(*(a+i))[j]。了解了以上这些内容后本题就好解决了。

第5题:

以下程序的输出结果是【 】。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。

第6题:

[说明1]

函数void convelt(chal *a,int n)是用递归方法将一个正整数n按逆序存放到一个字符数组a中,例如,n=123,在a中的存放为'3'、'2'、'1'。

[C函数1]

void convert(char *a,int n)

{ int i;

if((i=n/10)!=0; convert( (1) ,i);

*a= (2) ;

}

[说明2]

函数int index(char *s,char *t)检查字符串s中是否包含字符串t,若包含,则返回t在s中的开始位置(下标值),否则返回-1。

[C函数2]

int index(char *s,char *t)

{ int i,j=0;k=0;

for(i=0;s[i]!:'\0';i++)

( for( (3) ;(t[k]!='\0')&&(s[j]!='\0')&&( (4) );j++,k++);

if( (5) ) return(i);

}

return(-1);

}


正确答案:(1) A+1 (2) n%10+'\0' (3) j=ik=0 (4) t[k]==s[j] (5) t[k]=='\0'或!t[k]
(1) A+1 (2) n%10+'\0' (3) j=i,k=0 (4) t[k]==s[j] (5) t[k]=='\0'或!t[k] 解析:函数1采用递归方法将一个正整数n按逆序存放到一个字符数组a中,递归调用为convert(a+1,i),所以(1)“a+1”。按逆序输出字符保存在数组a中为*a=n%10+'\0',即(2)填“n%10+'\0'”。
函数2检查字符串s中是否含有字符串t是在for循环中实现的。空(3)应填“j=i,k=0”。如果两个字符串中含有相同的字符,则字符串s和字符串t都指向下一个字符,循环继续,直到字符串t结束。所以空(4)应填“t[k]=s[j]”,空(5)应填“t[k]='\0'”或“!t[k]”。

第7题:

该程序运行的结果是( )。

#include

#include

#define M 100

void fun(int m, int *a, int *n)

{ int i,j=0;

for(i=1;i<=m;i++)

if(i%7==0||i==0)

a[j++]=i;

*n=j;}

main()

{ int aa[M],n,k;

clrscr();

fun(10,aa,&n);

for(k=0;k

if((k+1) ==0)printf("\n");

else printf("M",aa[k]);

printf("\n");}


正确答案:
7

第8题:

●试题一

阅读下列函数说明和C代码,把应填入其中n处的字句写在答卷的对应栏内。

【函数1.1说明】

函数strcpy(char*to,char*from)将字符串from复制到字符串to。

【函数1.1】

void strcpy(char*to,char*from)

{while( ( 1 ) );}

【函数1.2说明】

函数merge(int a[ ],int n,int b[ ],int m,int *c)是将两个从小到大有序数组a和b复制合并出一个有序整数序列c,其中形参n和m分别是数组a和b的元素个数。

【函数1.2】

void merge(int a[ ],int n,int b[ ],int m,int *c)

{ int i,j;

for(i=j=0;i<n && j<m;)

*c++=a[i]<b[j]? a[i++]:b[j++];

while( (2) )*c++=a[i++];

while( (3) )*c++=b[j++];

}

【函数1.3说明】

递归函数sum(int a[ ],int n)的返回值是数组a[ ]的前n个元素之和。

【函数1.3】

int sum(int a[ ],int n)

{ if(n>0)return (4) ;

else (5) ;

}


正确答案:

●试题一

【答案】(1)*to++=*from++ 或 (*to++=*from++)!=′\0

(2)i<n i!=n(3)j<m 或 j!=m

(4)an-1+sum(an-1);或 a0+sum(a+1n-1)(5)return 0

【解析】(1)完成字符的复制,并使指针指向下一元素。(2)当出现某一数组所有元素均已合并完成,则将另一数组其他元素直接进行复制。b串已复制完。(3)判断a串是否已复制完。(4)递归函数sun()完成数组n个元素的累加,当n>0时,使用规模为n-1的函数进行递归。(5)n<=0时,返回0即可。

 

第9题:

请编一个函数void fun( int tt[M][N], int pp[N], tt指向一个M行N列的二维数组,求出二维数组每列中最大元素,并依次放入pp所指的一维数组中。二维数组中的数已在主函数中给出。

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

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

试题程序:

include <conio.h>

include <stdio.h>

define M 3

define N 4

void fun(int tt[M][N],int pp[N])

{

}

main()

{

int t[M] [N]={{68,32,54,12},{14,24,88,

58},{42, 22, 44, 56}};

int p[N],i,j,k;

clrscr();

printf("The riginal data is:\n");

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

{

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

printf("%6d",t[i][j]);

printf("\n");

}

fun(t,p);

printf("\nThe result is:\n");

for(k=0;k<N;k++)

printf("%4d",p[k]);

printf("\n");

}


正确答案:void fun(int tt[M][N]int pp[N]) { int iimax; for(j=0;jN;j++) { max=tt[0][j]; /*假设各列中的第一个元素最大*/ for(i=0;iM;i++) if(tt[i][j]>max) /*如果各列中的其他元素比最大值大则将这个更大的元素看作当前该列中最大元素*/ max=tt[i][j]; pp[j]=max; /*将各列的最大值依次放入pp数组中*/ } }
void fun(int tt[M][N],int pp[N]) { int i,i,max; for(j=0;jN;j++) { max=tt[0][j]; /*假设各列中的第一个元素最大*/ for(i=0;iM;i++) if(tt[i][j]>max) /*如果各列中的其他元素比最大值大,则将这个更大的元素看作当前该列中最大元素*/ max=tt[i][j]; pp[j]=max; /*将各列的最大值依次放入pp数组中*/ } } 解析:本题中函数的功能是求出二维数组中每列的最大元素。首先,假设各列中的第一个元素最大,然后利用行标值的移动来依次取得各列中其他元素的值,并与假设的最大值进行比较,如果遇到更大的,则把这个更大的元素看做当前该列中最大的元素,继续与该列中其他元素比较。

第10题:

以下fun函数的功能是:找出具有N个元素的一维数组中的最小值,并作为函数值返回,请填空。(设N己定义)

int fun(int x[N])

{int i,k=0

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

if(x[i]<x[k])k=_____;

return x[k];

}


正确答案:i
i 解析:循环语句依次查找数组的元素,下标从0到N-1,当x[i]的值小于k时,记录i值即此元素的下标,然后再将其余元素与新的k元素比较,最终求得最小值。所以填i。

更多相关问题