试题一1. [说明]
下面的流程图用于计算一个英文句子中最长单词的长度(即单词中字母个数)MAX。假设该英文句子中只含字母、空格和句点“.”,其中句点表示结尾,空格之间连续的字母串称为单词。
[流程图]
(1)MAX←0 (2)←L+1 (3)MAX←L (4)≠ (5)L←0
[解析] 本题用到的三个变量及其作用分别为:A,存放输入的一个字符;MAX,存放当前为止最长单词的长度;L,存放当前单同的长度。
(1)使用变量MAX应先赋予初值,由上下文知其初值为0;
(2)读取当前单词时,每读入一个字母,单词长度值L应增1;
(3)当前单词长度L比MAX时,应更新MAX的值;
(4)若当前字符不是句点,应当继续读取字符;
(5)读取下一个单词前,应当重置L的值。
试题二1. 阅读以下函数说明和C语言函数,将应填入
(n) 处的字句写在对应栏内。
[说明1]
函数int factors(int n)的功能是判断整数n(n>=2)是否为完全数。如果n是完全数,则函数返回0,否则返回-1。
所谓“完全数”是指整数n的所有因子(不包括n)之和等于n自身。例如:28的因子为1,2,4,7,14,而28=1+2+4+7+14,因此28是“完全数”。
[C函数1]
int factors(int n)
{ int i,S;
for(i=l,s=0;i<=n/2;i++)
if(n%i==O)
;
if(
)return 0;
rerurn -1;
}
[说明2]
函数int maxint(int a[],int k)的功能是用递归方法求指定数组中前k个元素的最大值,并作为函数值返回。
[C函数2]
int maxint(int a[],int k)
{ int t;
if(
)return
;
t=maxint(a+1,
)j
return(a[0]>t) ? a[0] :t;
}
(1) s+=i (2) n==s (3) k-1或k-1==0 (4) a[0]或*a或a[k-1]
(5) k-1或--k
[解析]
对于函数1,是判断整数n(n>=2)是否为完全数。首先用for循环求该整数的所有因子之和,所以(1)填“s+=i”若其和等于整数本身,则为完全数,返回值为0,则(2)填“n==s”;否则返回值为-1。
对于函数2,是用递归方法找出数组中的最大元素。该递归的出口条件为k=1,即(3)填“k==1”或“k-1==0”:只有一个数时,它本身就是最大的,(4)填“a[0]”或“*a”或“a[k-1]”;对于多个数的情况,在剩下的k-1个元素中找到最大的,并与首元素值比较,返回最大的一个,所以(5)填“k-1”或“--k”。
试题三1. 阅读以下函数说明和C语言函数,将应填入
(n) 处的字句写在对应栏内。
[说明]
函数int psort(int a[],int n)实现将含n个整数的数组a[]的不同元素按从小到大顺序存于数组a[]中。实现方法是从未确定的元素列中找到最小元素并将a[]的第i最小元素交换至a[i]位置。如该最小元素比已确定的最后一个最小元素大,则将它接在已确定的元素序列的后面;否则,忽视该元素。
[C函数]
int psort(int a[],int n)
{int i,J,k,P;
for(i=0,k=0;i<
;i++){
for(j=i+1,
;j<n; j++)
if(a[p]>a[j])
p=j;
if(p!=i){
t=a[p];
a[p]=a[i];
a[i]=t;
}
if(
) k++;
else if(
<a[i])
=a[i];
}
return k;
}
int a[]={5,7,5,6,4,3,4,6,7};
main()
{int k,n;
for(k=0;k<(Sizeof a)/Sizeof(int);k++)
printf("%5d",a[k]);
printf ("\n\n");
n=psort(a,(sizeof(a))/sizeof(int));
for(k=0;k<n;k++)
printf("%5d",a[k]);
printf("\n\n");
}
(1) n-1 (2) P=i (3) k==0 (4) a[k-1] (5) a[k++]
[解析]
本程序排序方法是从未确定的元素列中找到最小元素并将a[]的第i最小元素交换至a[i]位置。如该最小元素比已确定的最后一个最小元素大,则将它接在已确定的元素序列的后面;否则,忽视该元素。这是采用选择法对数组元素进行排序,因此空(1)填“n-1”,空(2)填“p=i”。若该最小元素比已确定的最后一个最小元素大,则将它接在已确定的元素序列的后面;否则,忽视该元素。因此,空(3)填“k==0”;而当a[k-1]<a[i]时”,则a[k++]=a[i];否则忽略元素a[i]。所以空(4)填“a[k-1]”空(5)填“a[k++]”。
试题四1. [说明]
下面程序的功能是将多个文件的内容同时输出在屏幕上,文件名都作为参数传入,命令执行为:cat file1 file2 file3,即同时输出file1、file2、file3的内容。
[程序]
#include <stdio.h>
#include <stdlib.h>
void fileeopy(FILE * ifp, FILE *ofp)
{ int c;
while((c=getc(
))!=EOF) pute(c,
); }
int main(int arge, char *argv[])
{ FILE *fp;
while(
>0)
if((fp=fopen(
,"r"))= =NULL){
printf("Can't open file\n");
return 1;
}
else {
filecopy(fp, stdout);
fclose(
);
}
return 0;
}
(1) ifp (2) ofp (3) - -argc (4) * ++argv (5) fp
[解析]
(1)~(2):此处while循环用于复制两个文件中的信息,即从ifp中读取,向ofp中写入;
(3)此处对多个参数(文件名)进行循环,其中argc代表参数的个数,并且计数时包括了最前面的可执行文件名,以cat filel file2 file3为例,argc=4。因此应该填入- -argc才符合循环的判断条件;
(4)此处用于获取文件名并将其打开。字符串数组 argv保存了全体参数的值,以cat filel file2 file3为例, argv[0]=cat,argv[1]=file1…,于是应排除argv[0],即填入* ++argv才能正确获取文件名;
(5)在对文件操作完毕后应对文件句柄做关闭的动作,此处即调用fclose函数来关闭已经打开的文件句柄fp。