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;
}
运行结果: