计算机二级C语言程序设计题

86 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 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];
		}
	}
}

结果如下:

4.png

补充:

ss是一个指向一维数组的指针变量,max是指向指针变量的指针变量。所以引用时要注意加上*。我们不可能只用max,因为ss[0]是一个数组地址而不是一个指针的地址