以下选项中,不能对主函数中变量i和j的值进行交换的程序是(  )。

题目
单选题
以下选项中,不能对主函数中变量i和j的值进行交换的程序是(  )。
A



#include <stdio.h>
void swap(int *p, int *q)
{
 int *t;
 *t = *p;
 *p = *q;
 *q = *t;
}
main()
{
 int i=10, j=20,*a=&i,*b=&j;
 swap(a,b);
 printf(i=%d j=%d,i,j);
}

B



#include <stdio.h>
void swap(int *p, int *q)
{
 int t;
 t = *p;
 *p = *q;
 *q = t;
}
main()
{
 int i=10,j=20,*a=&i,*b=&j;
 swap(a,b);
 printf(i=%d j=%d,i,j);
}

C



#include <stdio.h>
#include <stdlib.h>
void swap(int *p, int *q)
{
 int *t;
 t = (int *)malloc(sizeof(int));
 *t = *p;
 *p = *q;
 *q = *t;
 free(t);
}
main()
{
 int i=10,j=20;
 swap(&i,&j);
 printf(i=%d j=%d,i,j);
}

D



#include <stdio.h>
void swap( int *p, int *q)
{
 int t;
 t = *p;
 *p = *q;
 *q = t;
}
main()
{
 int i=10,j=20,*x=&i,*y=&j;
 swap(x,y);
 printf(i=%d j=%d,i,j);
}

参考答案和解析
正确答案: A
解析:
A项,定义了一个临时指针t,实现两个指针地址的交换,而传入的参数是两个变量i和j的地址,但是函数内部交换的是地址值,并没有交换主函数中变量i与j的值;B项,调用函数传入的是i与j地址,函数体内交换的是地址内元素,临时变量t为整型变量,能实现i与j值交换;C项,调用函数传入的是i与j地址,函数体内交换的是地址内元素,临时变量t为整型指针,且已正确开辟内存,能实现i与j值交换;D项与B项相同,能实现i与j值交换。答案选择A选项。
如果没有搜索结果或未解决您的问题,请直接 联系老师 获取答案。
相似问题和答案

第1题:

以下程序中,select函数的功能是:在N行M列的二维数组中,选出一个最大值作为函数值返回,并通过形参传回此最大值所在的行下标,请填空。#define N 3#define M 3select(int a[N][M],int *n){int i,j,row=0,colum=0;for(i=0;i<N;i++)for(j=0;j<M;j++)if(a[i][j]>a[row][colum]){row=i;colum=j;}*n=;return();}


正确答案:row a[row][colum]
函数通过两个循环来实现功能,对每一行每一列进行搜索,发现有比a[row][colum]大的数,就将row,colum赋给行和列下标,n为一个指针,通过改变n的值可以达到改变实参的值的目的,最后返回最大值。

第2题:

下列程序定义了NXN的二维数组,并在主函数中自动赋值。请编写函数fun(int a[][N]),该函数的功能是使数组右上半三角元素中的值全部置成0。例如a数组中的值为

a=4 5 6

1 7 9

3 2 6,

则返回主程序后a数组中的值应为

0 0 0

1 0 0

3 2 0

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

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

试题程序:

include<conio.h>

include<stdio.h>

include<stdlib.h>

define N 5

int fun(int a[ ][N])

{

}

main()

{

int a[N][N],i,j;

clrscr( );

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

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

/*产生—个随机的5*5矩阵*/

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

{a[i][j]=rand( )%10;

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

}

printf(“\n”);

}

fun(a);

printf(“THE RESULT\n”);

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

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

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

printf(“\n”);

}

}


正确答案:int fun (int a[][N)) { int ij; for(i=0;iN;i++) for(j=i;jN;j++) a[i][j]=0; /*将数组右上半三角元素中的值全部置成0*/ }
int fun (int a[][N)) { int i,j; for(i=0;iN;i++) for(j=i;jN;j++) a[i][j]=0; /*将数组右上半三角元素中的值全部置成0*/ } 解析:本题旨在考查控制数组中右上半三角元素的算法,也就是两个千篇一律的循环语句,希望学习者能够掌握消化。

第3题:

若各选项中所用变量已正确定义,函数 fun 中通过 return 语句返回一个函数值,以下选项中错误的程序是

A)

main()

{ …… x=fun(2,10); …… }

float fun(int a,int b){ …… }

B)

float fun(int a,int b){ …… }

main()

{ …… x=fun(i,j); …… }

C)

float fun(int,int);

main()

{ …… x=fun(2,10); …… }

float fun(int a,int b) { …… }

D)

main()

{ float fun(int i,int j);

…… x=fun(i,j); …… }

float fun(int a,int b){ …… }


正确答案:A
(20)A) 解析 : 在调用子函数时 , 应对其进行说明。选项 A) 中 , 调用时 , 没有对子函数进行说明 。选项 B) 、 C) 中被调用函数在主调函数之前定义 , 不用说明 ; 选项 D) 中在主调函数中对被调用函数的返回值类型进行了说明。

第4题:

已知i、j、k为iht型变量,若从键盘输入:1,2,3<回车>,使i的值为1、j的值为2、k的值为3,以下选项中正确

已知i、j、k为iht型变量,若从键盘输入:1,2,3<回车>,使i的值为1、j的值为2、k的值为3,以下选项中正确的输入语句是 ______。

A.scanf("%d %d %d",&i,&j,&k);

B.scanf("%d,%d,&d",&i,&i,&k);

C.scanf("%2d %2d %2d",&i,&j,&k);

D.scanf("i=%d,j=%d,k=%d",&i,&j,&k);


正确答案:A
解析:scanf函数中格式控制后面应为变量地址列表,因此选项C和选项D都错误,选项B中“&d”是指针变量d的地址,与题目不符。由题目可知指针变量d中存放的是变量c的地址,所以正确答案为选项A。

第5题:

已知i、j、k为整型变量,若从键盘输入1,2,3<回车>,使i的值为1、j的值为2、k的值为3,以下选项中正确的

已知i、j、k为整型变量,若从键盘输入1,2,3<回车>,使i的值为1、j的值为2、k的值为3,以下选项中正确的输入语句是( )。

A.scanf("%2d%2d%2d",&i,&j,&k);

B.scanf("%d %d %d",&i,&j,&k);

C.scanf("%d,%d,%d",&i,&j,&k);

D.scanf("i=%d,j=%d,k=%d",&i,&j,&k);


正确答案:C
解析:使用scanf()函数时,要求除格式控制符以外的字符都要原样输入,“,”为非格式符,要原样输入。选项A,输入格式描述为“%2d%2d%2d”,意思是输入一个长度为6的数字串,scanf()将每两个为一组读入3个变量中,不满足键盘输入1,2,3的条件,故A错误;选项B中,输入格式描述符为“%d%d%d”,输入要用空格隔开,故错误;选项D中,输入格式描述符为“i=%d,j=%d,k=%d”,应该从键盘输入i=1,j=2,k=3,才能使得i,j,k的值为1,2,3,故选项D错误。4个选项中C正确。

第6题:

请补充函数fun(),该函数的功能是把数组bb中的数按从小到大的排列(数组的值及元素个数从土函数中输入)。

例如,输入2 3 5 4 1,结果为1 2 3 4 5。

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

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

试题程序:

include<stdio. h>

define N 100

void fun(int bb[], int n)

{

int i,j,t;

for (i=0;【 】;i++)

for(j=0;【 】;j++)

if(bb[j]>bb[j+1] )

{

t=bb[j];

bb [j]=bb [j+1];

bb[j+1]=t;

}

}

main()

{

int i=0, n=0;

int bb[N];

clrscr ();

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

scanf ("%d", &n);

printf ("\nInput data: \n");

while (i<n)

{

printf ("bb [%d] =", i);

scanf ("%d", &bb [i]);

i++;

}

fun (bb, n);

printf("\n*** the result ***\n");

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

printf ( "%4d'', bb [i]);

}


正确答案:in jn-1
in jn-1 解析:第一空:本题采用冒泡法进行排序。冒泡法的思路是:如果对n个数从小到大排序,则要进行n轮比较,在每一轮比较中要进行n-1次两两比较。所谓两两比较就是从头到尾依次将相邻两个数进行比较并将其中大的数放在后面,即两两比较后这两个数要形成题中所要求的顺序。理解了冒泡法的思路,则此空应填in。

第7题:

请补充main函数,该函数的功能是:输出一个3×3的矩阵,要求必须使用行指针表示输出变量。

注意;部分源程序给出如下.

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

试题程序:

include<s tdio. h>

main()

{

static int array[3] [3]={{9,8,7}, {6,5,

4}, (3,2,1}};

iht (*p) [3],j,i;

p=【 】

clrscr ();

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

{

printf (" \n\n" );

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

printf("%4d",【 】);

}

}


正确答案:array *(*(p+i)+j)
array *(*(p+i)+j) 解析:第一空:p是一个指针,指向大小为3的一维数组。首先要使指针p指向数组array的首地址,而数组名array即表示数组slray的首地址,所以将array赋给p。第二空:*(*(p+i+j)表示数组的第i行第j列元素,即array[i][j]。

第8题:

若有以下程序includevoidf(intn);main(){voidf(intn);f(5);}voidf(intn){printf("%d\n",n);}则以下叙述中不的是()。

A、若只在主函数中对函数f进行说明,则只能在主函数中调用函数f

B、若在主函数前对函数f进行说明,则在主函数和其后的其它函数中都可以调用函数f

C、对于以上程序,编译时系统会提示出错信息:提示对对f函数重复说明

D、函数f无返回值,所以可用void将其类型定义为无值型


参考答案:C

第9题:

程序定义了N×N的二维数组,并在主函数中自动赋值。

请编写函数fun(int a[][N],int n),该函数的功能是使数组左下半三角元素中的值加上n。

例如:若n的值为3,a数组中的值为

a=2 5 4

1 6 9

5 3 7

则返回主程序后a数组中的值应为

5 5 4

4 9 9

8 6 10

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

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

试题程序:

include <stdio.h>

include <conio.h>

include <stdlib.h>

define N 5

fun(int a[][N],int n)

{

}

main()

{

int a[N][N],n,i,j;

clrscr();

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

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

/*产生—个随机5*5矩阵*/

{

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

{

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

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

}

printf("\n");

}

do

n=rand()%10;

/*产生一个小于5的随机数n*/

while(n>=5);

printf("n=%4d\n",n);

fun(a,n);

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

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

{

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

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

printf("\n");

}

}


正确答案:fun (int a[ ][N] int n) { int ij; for(i=0; iN; i++) for(j=0; ji; j++) a[i][j]=a[i][j]+n /*使数组左下半三角元素中的值加上n*/ }
fun (int a[ ][N], int n) { int i,j; for(i=0; iN; i++) for(j=0; ji; j++) a[i][j]=a[i][j]+n /*使数组左下半三角元素中的值加上n*/ } 解析:首先从数组中找出要被加上n的那部分元素,找的过程其实就是找出将被挑出的那部分元素在原数组中的分布规律的过程。通过观察得出,要被处理的那部分元素的下标值的范围是每行中从第一个元素开始,直到列数等于该行行数时为止。找到这个规律后,依次从数组中取得合乎要求的元素,然后再加上n。

第10题:

下列程序定义了N×N的二维数组,并在主函数中赋值。请编写函数fun(),函数的功能是:求出数组周边元素的平均值并作为函数值返回给主函数中的s。例如:若a数组中的值为

a= 0 1 2 7 9

1 9 7 4 5

2 3 8 3 1

4 5 6 8 2

5 9 1 4 1

则返回土程序后s的值应为3.375。

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

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

试题程序:

include <stdio.h>

include<conio.h>

include<stdlib.h>

define N 5

double fun (int w[] [N])

{

}

main()

{

int a[N] [N]={0,1,2,7,9,1,9,7,4,5,2,

3,8,3,1,4,5,6,8,2,5,9,1,4,1};

int i, j;

double s;

clrscr();

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

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

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

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

printf("\n ");

}

s=fun(a);

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

printf("The sum is : %lf\n ",s);

}


正确答案:double fun (int w[][N]) { int ijk=0; double av=0.0; for(i=0;iN;i++) for(j=0;jN;j++) if(i==0||i==N-1||j==0||j==N-1) /*只要下标中有一个为0或N-1则它一定是周边元素*/ {av=av+w[i][j]; /*将周边元素求和*/ k++; } return av/k; /*求周边元素的平均值*/ }
double fun (int w[][N]) { int i,j,k=0; double av=0.0; for(i=0;iN;i++) for(j=0;jN;j++) if(i==0||i==N-1||j==0||j==N-1) /*只要下标中有一个为0或N-1,则它一定是周边元素*/ {av=av+w[i][j]; /*将周边元素求和*/ k++; } return av/k; /*求周边元素的平均值*/ } 解析:该题采用逐一判断的方式,周边元素的下标一定有一个是0或N-1,且只要下标中有一个为0或N-1,则它一定是周边元素。计算周边元素个数的方式是当给av加一个值时,则k加1。k也可用2*N+2*N-4求得。

更多相关问题