第1题:
试题二
下面程序中函数fun的功能是:在含有10 个元素的s数组中查找最大数,及最大数所在位置(即,下标值),最大数可能不止一个。最大数作为函数值返回,最大数的个数通过指针变量n传回,所在位置由数组pos传回。
例如:
若输入 2 8 5 7 8 4 5 3 2 8
则应输出:
The max: 8
Total: 3 //最大数出现次数
The positions: 1 4 9
请补充下列空缺:
include<stdio.h>
include<conio.h>
define M 10
int fun(int *a, int *n, int pos[])
{int i, k,max=-32767;
(1)
for(i=0; i<M; i++)
if( (2) ) max=a[i];
for(i=0; i<M; i++)
if( (3) )pos[k++]=i;
*n=k;
return max;
}
main()
{int a[M], pos[M], i=0, j, n;
clrscr();
printf("Enter 10 number :");
for(i=0; i<M; i++)scanf("%d", (4));
j=fun( (5) );
printf("The max: %d\n", j);
printf("Total: %d",n);
printf("The position:");
for(i=0; i<n; i++ ) printf("%4d", pos[i]);
printf("\n");
}
试题分析:
正确代码:
#include<stdio.h>
#include<conio.h>
#define M 10
int fun(int *a, int *n, int pos[])
{int i, k, max=-32767;
k=0;//因为后面有k++,所以要在这里先给k赋初值。
for(i=0; i<M; i++)
if(a[i]>max) max=a[i];//用于求出数列中的最大数。
for(i=0; i<M; i++)
if(a[i]== max) pos[k++]=i;//用于记录最大数的下标
*n=k;
return max;
}
main()
{int a[M], pos[M], i=0, j, n;
clrscr();
printf("Enter 10 number :");
for(i=0; i<M; i++)scanf("%d", a+i);
j=fun(a, &n, pos);
printf("The max: %d\n", j);
printf("Total: %d\n",n);
printf("The position:");
for(i=0; i<n; i++ ) printf("%4d", pos[i]);
printf("\n");
}
此程序算法非常简单,先循环找出最大数,再循环找出最大数的下标。但要注意的是一些细节方面的问题,如在形参中int *a 和int pos[]两种写法都可以用来传递数组名。由于形参有:int *n ,所以对应实参应为指针,所以只能写&n不能用n。
参考答案:
(1) k=0
(2) a[i]>max
(3) a[i] == max
(4) a+i 或 &a[i]
(5) a, &n, pos
第2题:
分析下列程序,其最终执行结果是______。 main() { int n[3],i,j,k; for(i=0;i<3;i++)n[i]=O; k=2; for(i=0;i<k;i++) for(j=0;j<k;j++) n[j]=n[i]-1; printf("%d\n",n[0]); }
A.-2
B.-1
C.0
D.-3
第3题:
●试题四
【说明】
下面程序的功能是:在含有10个元素的数组中查找最大数,及最大数所在位置(即下标值),最大数可能不止一个。
例如:若输入
2857848328
则应输出
The max:8
Total:4∥最大数出现次数
The positions:1469
【函数】
#include<stdio.h>
#define M 10
int fun(int*a,int*n,int pos[])
{
int i,k max=-32767;
(1)
for(i=0;i<M;i++)
if( (2) )max=a[i];
for(i=0;i<M;i++)
if( (3) )pos[k++]=i;
*n=k;
return max;
}
main()
{
int a[M],pos[M],i=0,j,n;
printf("Enter 10 number:");
for(i=0;i<M;i++)scanf("%d", (4) );
j=fun( (5) );
printf("The max:%d\n",j);
printf("Total:%d",n);
printf("The position:");
for(i=0;i<n;i++)printf("%4d",pos[i]);
printf("\n");
}
●试题四
【答案】(1)k=0(2)a[i]>max(3)a[i]=max(4)a+i或&a[i](5)a,&n,pos
【解析】先分析(4)、(5)空。(4)空所在语句是从键盘中读入数据并存放在数组a[]之中,循环变量为I。(4)空处应填写存放地址,循环变量有两种表示方法,一种是"a+i",另一种是"&a[i]"。(5)空处需要填写调用函数fun()的实参,从函数fun()的形参可以看出,第1个参数是要处理的数组a[],第2个参数要返回的最大元素的个数n,第3个参数最大元素的下标数组pos[]。因此(5)空处应填写"a,&n,pos"。
再来分析(1)~(3)空。(1)~(3)空所在函数是找最大数,并将其下标存放在数组pos[]中,其实现的思路是先遍历一次数组,从数组中找出最大数max,再将遍历一次数组,依次将这些最大数的下标存放在数组pos[]中。(2)空所在的循环就是找最大数max,因此(2)空处应填写"a[i]>max"。(3)空所在的循环是将这些最大数的下标存放在数组pos[]中,因此(3)空处应填写"a[i]==max"。(1)空应填写什么呢?从语句"pos[k++]=i"和"*n=k"可知,变量k是用来指出当前要存放在数组pos[]中的位置,但这个变量要进行初始化,因此(1)空处应填写"k=0"。
第4题:
对
错
第5题:
假定输入28,那么程序运行的结果是【 】。
include<iostream.h>
void main() {
int n, i,k=0;
cout<<“请输入整数”;
cin>>n; for(i=1;i<n;i++)
if(n%i= =0) k=k+i;
if(n= =k)cout<<n<<“是完数\n”;
else cout<<n<<“不是完数\n”;
}
第6题:
已知有一维数组A[0...m*n-1],若要对应为m行、n列的矩阵,则下面的对应关系______可将元素A[k](0≤k<m*n)表示成矩阵的第i行、第j列的元素(0≤i<m,0≤j<n)。
A.i=k/n,j=k%m
B.i=k/m,j=k%m
C.i=k/n,j=k%n
D.i=k/m,j=k%n
第7题:
请读程序: # include<srdio.h> main( ) { int n[2],i,j,k; { for(i=0,i<2;i + + )n[i]=0; k=2; for(i=0;i<k;i+ +) {for(j=0;j<k;j+ +)n[j]=n[i]+l; print{("%d\n",n[k]); } 上面程序片段输出结果是 ( )
A.不确定的值
B.3
C.23
D.1
第8题:
2、读拼音写词语。(8分)
Pái huái wǔ rǔ miǎo shì duàn liàn
( ) ( ) ( ) ( )
dù jì kāng kǎi téng xiě kuí wǔ
( ) ( ) ( ) ( )
答案:徘徊 侮辱 藐视 锻炼 妒忌 慷慨 誊写 魁梧
第9题:
已知有一维数组A(0..m*n-1],若要对应为m行、n列的矩阵,则下面的对应关系(4)可将元素A[k](0≤k<m*n)表示成矩阵的第i行、第j列的元素(0≤i<m,0≤j<n)。
A.i=k/n,j=k%m
B.i=k/m,j=K%m
C.i=k/n,j=k%n
D.i=k/m,j=k%n
第10题:
天气预报
电影
话剧