用指针作函数参数,编程序求一维数组中的最大和最小的元素值。#define N 10main(){ void maxmin(

题目

用指针作函数参数,编程序求一维数组中的最大和最小的元素值。

#define N 10

main()

{ void maxmin(int arr[],int *pt1,int *pt2,int n);

int array[N]={10,7,19,29,4,0,7,35,-16,21},*p1,*p2,a,b;

p1=&a; p2=&b;

maxmin(array,p1,p2,N);

printf("max=%d,min=%d",a,b);

}

void maxmin(int arr[],int *pt1,int *pt2,int n)

{ int i;

*pt1=*pt2=arr[0];

for(i=1;i<N;I++)

{ if(arr[i]>*pt1) (9) ;

if(arr[i]<*pt2) (10) ;

}

}

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

第1题:

请补充函数fun(),该函数的功能是;交换数组aa中最大和最小两个元素的位置,结果依然保存在原数组中,其它元素位置不变。注意数组aa中没有相同元素。

例如,输入“33,67,42,58,25,76,85,16,41, 56”,则输出“33,67,42,58,25,76,16,85,41,56”。

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

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

试题程序:

include <stdio. h>

define N 10

void fun(int aa[])

{

int i, j, t;

int max=0, min=0;

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

{

if(【 】)

max=i;

if(【 】)

min=i;

}

t=aa [max];

【 】;

aa [min] =t;

}

main()

{

int i;

int aa [N] ={33, 67, 42,58,25, 76, 85,16, 41, 56};

clrscr ();

printf("\n*** original list ***\n");

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

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

fun (aa);

printf ("\n*** new list ***\n");

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

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

}


正确答案:aa[max]aa[i] aa[min]>aa[i] aa[max]=aa[min]
aa[max]aa[i] aa[min]>aa[i] aa[max]=aa[min] 解析:第一空:先假设aa[0]最大,如果找到更大的元素,则将这个元素的下标赋给max。第二空:同理,先假设aa[0]最小,如果找到更小的元素,则将这个元素的下标赋给min。第三空:找到最大值和最小值之后,借助第三个变量t交换这两个元素。

第2题:

请编一个函数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数组中*/ } } 解析:本题中函数的功能是求出二维数组中每列的最大元素。首先,假设各列中的第一个元素最大,然后利用行标值的移动来依次取得各列中其他元素的值,并与假设的最大值进行比较,如果遇到更大的,则把这个更大的元素看做当前该列中最大的元素,继续与该列中其他元素比较。

第3题:

阅读以下说明和C语言函数,将应填入(n)处的字句写在对应栏内。

【说明】

下面一段程序从给定的数组b中找出值最小的元素,并输出该元素的数组下标、内存地址minaddr以及元素值本身。函数findmin负责在给定的数组中查找最小值,并返回最小值所在的内存地址,函数有三个参数:array是所要处理的数组;size是数组的大小;index负责从函数返回具有最大值的元素在数组中的数组下标。请填充空白,使其成为一个合乎要求的完整程序。

【程序】

//程序开始

include<iostream.h>

int *findmin(int *array, int size, int &index);

void main()

{

/****** 变量定义部分 ***********/

int b[10] = {34, 34, 23, 89, 1, 2, 13, 42, 5, 54};

(1);

int idx;

/******* 寻找最小值 ************/

minaddr = findmin(b, sizeof(b)/sizeof(int), idx);

/******* 输出最小值的有关信息 ************/

cout << "Min value index: "<<idx<<end1

<<"Min value address: "<<minaddr<<end1

<<"Min value: "<<(2)<<end1;

}

/******* 函数findmin的定义部分 ************

int *findmin(int *array, int size, int &index)

{

int min = 0;//max 是当前具有最小值的数组元素下标值

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

{

if(array[i]<(4))

min = i;

}

(5);

return array + min;//返回最小值所在内存地址

}


正确答案:(1)int *minaddr (2) b[idx] (3)isize (4) array[min] (5) index = min
(1)int *minaddr (2) b[idx] (3)isize (4) array[min] (5) index = min

第4题:

若有函数 void fun(double a[]。int*n) {…} 以下叙述中正确的是( )。

A.调用fun函数时只有数组执行按值传送,其他实参和形参之间执行按地址传送

B.形参a和n都是指针变量

C.形参a是一个数组名,n是指针变量

D.调用fun函数时将把double型参数组元素一一对应地传送给形参a数组


正确答案:B
本题考查函数中数组和指针的传值,数组a[]在参数传递时,是传递的数组a的首地址,所以形参a和n都是指针变量。。

第5题:

请编写一个函数void fun(int p[],int n,int c),其中数组p的元素按由小到大的顺序排列,其元素个数为n。函数fun()的功能是将c插入到数组p中,且保持数组的升序排列。

注意:部分源程序已存在文件PROC9.cpp中。

请勿修改主函数和其他函数中的任何内容,仅在函数fun()的花括号中填写若干语句;

文件PROC9.cpp的内容如下:

//PROC9.cpp

include <iostream>

include <string>

using namespace std;

define M 30

void fun(int p[ ],int n,int c);

int main ()

{

int pp[M],n,i;

int fg, c;

cout<<"Please input n:\n";

cin>>n;

cout<<"Please input the n data:\n";

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

cin>>pp [i];

cout<<"Please input c:\n";

cin>>c;

fun (pp, n, c);

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

cout<<pp [i] << " " ;

cout<<end1;

return 0;

}

void fun(int p[ ],int n, int c)

{

//* * * * * * * * *

}


正确答案:

第6题:

阅读以下说明和流程图,回答问题将解答填入对应栏。

[说明]

本流程图实现采用递归函数来求一个整数数组中从元素0到元素n中的最小值。该算法思想是这样的,首先我们假设有一个求数组中最小元素的函数,然后,在求某一具有n的元素的数组的最小值时,只要求将前n-1的元素的最小值与第n个元素比较即可。不断地重复这一过程,直到数组中只剩下一个元素,那么它必定是最小值。

注:int min(int X,int y)为返回两数中最小数的函数。

int minInArray(int a[],int n)为返回数组中最小数的函数。

minA为数组中最小值。

[问题l]

将流程图的(1)~(4)处补充完整。

[问题2]

min()函数的定义为(5)。


正确答案:(1) minInArray(an); (2) 1; (3) minA=a[n-1]; (4) minA=min(minInArray(an-1)a[n]); (5) xy?x:y;
(1) minInArray(a,n); (2) 1; (3) minA=a[n-1]; (4) minA=min(minInArray(a,n-1),a[n]); (5) xy?x:y; 解析:本题目考查流程图。
题目是利用递归来求数组中的最小值,则一定是反复的调用一个求数组最小值的函数,直到比较数组中最后只剩下两个数,则(1)中填入的应是“minlnArray(a,n)”,然后,判断n的值是否为1,如果是,则说明数组中只有一个数,则它一定就是最小值,可以直接输出,所以(2)应填入“1”,(3)应填入“minA=a[n]”;如果n的值不是1,则说明要继续递归,则再次调用求数组最小值的函数,把数组前n-1项的最小值同第n项做比较,所以(4)填入“minA=min(minInArray(a,n-1),a[n])”,由于min()是一个比较函数,返回两数中较小的数,我们可以用三元运算符直接定义为x y?x:y。

第7题:

请补充main函数,该函数的功能是:把一维数组中的元素逆置。结果仍然保存在原数组中。

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

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

试题程序:

include <stdio.h>

define N 10

main ( )

{

int i, j, t;

int bb[N];

clrscr ();

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

bb[i]=i;

printf("\n*** original list ***\n");

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

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

for(【 】; j<=i;【 】)

{

t=bb [j ];

bb [j ] =bb [i];

bb[i]=t;

}

printf("\n****** new list ******\n");

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

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

}


正确答案:j=0--I j++i-
j=0,--I j++,i-, 解析:第一空:逆置一维数组元素的思路是,将第一个元素与最后一个元素对调,将第二个元素与倒数第二个元素对调,依此类推,直到中间的元素。所以第一次执行循环时,第一个元素的下标为0,最后一个元素的下标为N-1,而此时i等于N,故要将i减1。第二空:每执行一次循环,顺方向元素向后移动一个,反方向元素向前移动一个,故下标j要加1,下标i要减1。

第8题:

请编一个函数void proc(int ttEM][N],int pp[N]),tt 指向一个M行N列的二维数组,求出二维数组每行中最大元素,并依次放入pp所指的一维数组中。二维数组中的数已在主函数中给出。 注意:部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数proc的花括号中填入所编写的若干语句。 试题程序: include<stdio.h> include<conio.h> include<stdlib.h> define M 3 define N 4 void proc(int ttrM3rN]。int pp[N]) {

} void main { int str[M][N]={ {34,56,84,78}, {23,84,93,12), {28,38,39,93}}; int p[N],i,j,k; system("CLS"); printf("The riginal data is:\n"); for(i=0;i<M;i++) { for(j=0;j<N;j++) printf("%6d",str[i][j]); printf("\n"); } proc(str,p); printf("\nThe result is:\n");for(k=0:k<M;k++) printf("%4d",p[k]); printf("n");}


正确答案:

void proc(int tt[M][N],int pp[N])
int i,j,max;
for(i=0;i<M;i++)//i控制行的下标
{
max=tt[i][c]; //max存放每行中最大的数
for(j=0;j<N;j++)
if(tt[i][j]>max)
max=tt[i][j];
pp[i]=max;//把大的数放到PP数组中,经过i来控制pp数组的下标
}
}
【解析】按照题目中要求,求出二维数组每行中最大元素,并依次放入PP所指的一维数组中。首先比较二维数组中每一行的元素,找出每一行中的最大元素,放入一维数组pp中,返回到主函数当中。

第9题:

下面程序的功能是:用Array函数建立一个含有8个元素的数组,然后查找并在文本框Textl中输出该数组中各元素的最小值。请填空。

End Sub


正确答案:
arrl(1)Min=arrl(i)【解析】本题考查VBA中程序设计的知识。对于这个问题,需要把数组元素依次与最小值比较,如果比当前的最小值还小,则让这个数组元素成为新的最小值,然后继续比较,直至数组元素都比较一遍为止。由于比较的循环从2开始,显然是预先设置最小值为数组的第一个元素即arrlfl);在比较循环内部如果符合If语句的条件,则让这个数组元素成为新的最小值,即Min=arrl(i)。

第10题:

以下程序中,函数 sumColumM的功能是:求出M行N列二维数组每列元素中的最小值,并计算它们的和值。和值通过形参传回主函数输出。请填空。

define M 2

define N 4

void SumColumMin(int a[M][N],int *sum)

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

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

{ k=0;

for(j=1;j<M;j++)

if(a[k][i]>a[j][i])k=j;

s+=【 】;

}

【 】 =s;

}

main( )

{ int x[M][N]={3,2,5,1,4,1,8,3},s;

SumColumMin(【 】);

printf("%d\n",s);

}


正确答案:a[k][i] *sum x[M][N]&s
a[k][i] *sum x[M][N],&s 解析:本题中if(a[k][I] >a [j] [I]) k=j;把一列中值较小的一个元素的索引存储到k中,所以[18]填[k] [i],[19]填返回值,右值为整型,所以应该填。sum,SnmColumMin(  )函数第一个参数为数组a[M][N],第二个参数为一个整型指针,所以[20]填x[M][N],&s。

更多相关问题