开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第7天,点击查看活动详情
计算机二级C语言程序设计题
题目:
编写一个函数fun(),从num个字符串中找出最长的一个字符串,并通过形参指max传回该串地址(注意:主函数用****作为结束输入的标志)。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void fun(char(*a)[81], int num, char **max)
{
?
}
main()
{
char ss[10][81], *ps;
void NONO();
int n, i=0;
printf("输入若干个字符串:");
gets(ss[i]);
puts(ss[i]);
while(!strcmp(ss[i],"****")==0)
{
i++;
gets(ss[i]);
puts(ss[i]);
}
n=i;
fun(ss, n, &ps);
printf("\nmax=%s\n", ps);
NONO();
}
void NONO ()
{/* 请在此函数内打开文件,输入测试数据,
调用函数,输出数据,关闭文件。 */
char ss[20][81], *ps;
int n, i=0;
FILE *rf, *wf;
rf=fopen("in.dat","r");
wf=fopen("out.dat","w");
fgets(ss[i], 81, rf);
while(!strncmp(ss[i],"****",4)==0)
{
i++;
fgets(ss[i], 81, rf);
}
n=i;
fun(ss, n, &ps);
fprintf(wf, "%s", ps);
fclose(rf);
fclose(wf);
system("pause");
}
题目分析:
调用fun函数,fun函数中传递了两个参数,一个是保存的字符型二维数组,一个是字符串个数,子函数中初始化一个形参max,用来执行最长的地址空间,遍历字符串的个数,如形参max指向的字符串长度小于当前历到的字符串的长度,则形参max指向当前遍历到的字符串的地址空间。
解题思路:
设置一个指针变量maxlen,使它的初值为第一个字符串,再与其他字符串的长度进行比较,若其他字符串的长度大于maxlen,则将其他字符串的地址赋值给max。
参考答案如下:
void fun(char(*a)[81], int num, char **max)
{
int i,maxlen;
maxlen=strlen(a[0]);
for(i=1;i<num;i++)
{
if(maxlen<strlen(a[i]))
{
maxlen=strlen(a[i]);
*max=a[i];
}
}
}
结果如下:
补充:
ss是一个指向一维数组的指针变量,max是指向指针变量的指针变量。所以引用时要注意加上*。我们不可能只用max,因为ss[0]是一个数组地址而不是一个指针的地址