2012年自考“高级语言程序设计”经典习题及答案(23)
5.输入一个3×6的二维整型数组,输出其中的更大值、更小值及其所在的行列下标。
“解”找出其更大值和更小值,及它们的行列位置。采用按行按列顺序遍历数组的方法找出数组的更大值、更小值,以及它们在数组中的位置指针。输出时,将位置指针转换成行下标和列下标。程序如下:
# include
# define N 3
# define M 6
main()
{ int a[N][M],*maxp,*minp,*q,t;
printf(“输入%d个整数\n”, N*M);
for(q=a[0];q<*a+N*M;q++) {
scanf(“%d”,&t);*q=t;
}
maxp=minp=*a;
for(q=a[0];q<*a+ N*M; q++) {
if(*maxp<*q) maxp=q;
if(*minp>*q) minp=q;
}
printf(“更大值:%d它的行下标是%d它的列下标是%d\n”,
*maxp,(maxp-*a)/M,(maxp-*a)%M);
printf(“更小值:%d它的行下标是%d它的列下标是%d\n”,
*minp,(minp-*a)/M,(minp-*a)%M;
}
6.输入三个字符串,找出其中更大的字符串。
“解”将输入的三个字符率分别存于三个一维字符数组中,另用一个字符指针数组,分别指向这三个字符串,然后用循环控制这三个字符串的比较,找出更大的字符串。两字符串比较时,程序不用标准库函数,而用两字符串的对应字符比较来实现。完整程序如下:
# include
# define N 120
# define M 3
mian()
{ char s1[N], s2[N],s3[N],*strs[M]={s1,s2,s3},*p,*q,*ms;
int i;
printf(“输入%d个字符串\n”, M) ;
for(i= 0; i
scanf(“%s”,strs);
ms=strs[0];
for(i=1;i
for( p=ms,q=strs;*p! =‘\0’ && *p==*q;p++,q++);
if(*p<*q) ms=strs;
}
printf(“更大字符串:%s\n”,ms);
}
7.输入两个字符串,将它们连接后输出。
“解”程序设有两个存储字符串的数组,先输入两个字符串,然后找到第一个字符串的末尾,接着将第二个字符串复制在第一个字符串的后面,然后输出。程序如下:
# include
# define N 120
main()
{ char s1[N+N],s2[N],*p,*q;
printf(“输入2个字符串\n”);
scanf(“%s%s”,s1,s2);
for(p=sl;* p!=‘\0’; p++);
for(q=s2;*p++=*q++;);
printf(“两字符串连接后:%s\n” ,sl);
}
8.比较两个字符串是否相等。
“解”程序设两个存储字符串的数组,先输入两个字符串,两字符率比较时,直接用两字符串的对应字符比较来实现。完整程序如下:
# include
# define N 120
main()
{ char sl[N] ,s2[N],*p,*q;
char *result[]={“小于”,“相等” ,“大于”};
int comp;
printf(“输入 2个字符串\n”);
scanf(“%s%s”,s1,s2);
for(p=sl,q=s2;*q!=‘\0’&& *p==*q; p++, q++);
comp=*P <* q? 0:*P==*q? l:2;
printf(“字符串1与字符串2比较:%s\n”,result[comp]);
}
9.输入10个整数,将其中更大数与更后一个数交换,更小数与第一个数交换。
“解”程序设一个一维数组存储输入的10个整数。然后遍历数组,找出更大元素和更小元素的指针。接着按要求先将更大元素与更后一个元素交换,然后将更小元素与第一个元素交换。更后,输出数组中的全部整数。程序应考虑到这样一种特殊情况,即更后一个元素正是更小元素,它在与更大元素交换后,位置已移到原先存储更大元素的位置。程序应保证更大元素移到末尾,更小元素移到更前端。
程序如下:
# include
# define N 10
main()
{ int a[N],*maxp,*minp,*q,t;
printf(“入%d个整数\n,N);
for(q=a;q
scanf(“%d”,&t);*q=t;
}
maxp= minp= a;
for(q=a;q
if(*maxp<*p) maxp=q;
if(*minp>*q) minp=q;
}
t=*maxp; *maxp=a[N-1]; a[N-l]=t;
if(minp==&a[N-l]) minp=maxp;
t=* minp;*minp= a[0]; a[0]= t;
for(q=a;q
printf(“%d”,*q);
printf(“\n”);
}