C语言/C++常见习题问答集锦(七十四) 之裨补阙漏

C语言/C++常见习题问答集锦(七十四) 之裨补阙漏

程序之美

在这里插入图片描述

1、编写一个函数,从num个字符串中找出最长的一个字符串,并通过形参指针max传回该串地址。(注意: 主函数中用****作为结束输入的标志,函数fun中给出的语句仅供参考。) 注意:部分源程序在文件PROG1.C中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

#include <stdio.h>

#include <string.h>
void fun(char(*a)[81],int num,char **max)
{
/* 以下代码仅供参考 */

int i,k=0,maxlen; /* k为a数组中最长串所在元素的下标,初始为0,maxlen为其串长 */

maxlen=strlen(a[k]);

for(i=1;i<num;i++)
{
/* 以下完成查找最长串 */
if(strlen(a[i])>maxlen)
{
	maxlen=strlen(a[i]);
    k=i;
}
}
*max=a[k];
}

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 ()
{
/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,
   输出数据,关闭文件。 */
  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) ;
}

运行结果:
在这里插入图片描述
2、学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun(),它的学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun(),它的功能是按分数的高低排列学生的记录,低分在前。

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

#include <stdio.h>

#define N 16

typedef struct
{ 
	char num[10];
	int s;

}STREC;

int fun (STREC a[ ])
{
	int i,j;
	STREC tem;
	for (i = 0; i < N - 1; i ++)
	{
		for (j = 0; j < N - i -1; j ++)
		{
			if(a[j].s < a[j+1].s)
			{
				tem = a[j];
				a[j] = a[j+1];
				a[j+1] = tem;
			}
		}
	}

	return 0;
}

int main ()
{
	STREC s[N]={{"GA005",88},{"GA003",64},

	{"CA002",77},{"GA004",89},{"GA001",54},

	{"GA007",72},{"GA008",72},{"GA006",65},

	{"GA015",83},{"GA013",95},{"GA012",55},

	{"GA014",68},{"GA01l",78},{"GA017",53},

	{"GA018",92},{"GA016",82}};

	int i;

	FILE *out;

	fun(s);

	printf("The data after sorted :\n");

	for(i=0;i<N;i++)

	{
		if((i)%4==0)
		/*每行输出4个学生记录*/
		printf("\n");
		printf("%s %4d ",s[i].num,s[i].s);
	}
	printf("\n");

	out=fopen("out21.dat","w");

	for(i=0;i<N;i++)
	{
		if((i)%4==0&&i)
			fprintf(out,"\n");
			fprintf(out,"%4d",s[i].s);
	}

	fprintf(out,"\n");
	fclose(out);

	return 0;
}

运行结果:
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五一编程

程序之路有我与你同行

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值