问答题 请编写函数fun:在形参指针所指的4个整数中找出最大值和最小值,最大的放在a中,最小的放在d中。
注意:部分源程序存在PROG1. C中,请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
#include <stdio. h>
void NONO( );
void fun(int *a, int *b, int*c, int *d)
{
}
main( )
{int a, b, c, d;
printf("请输入4个整数: ");
scanf("%d%d%d%d", &a, &b, &c, &d);
printf("原始顺序: %d, %d, %d, %d/n", a, b, c, d);
fun(&a, &b, &c, &d);
printf("处理后: %d, %d, %d, %d/n", a, b, c, d);
NONO( );
}
void NONO( )
{/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/
FTLE *fp, *wf;
int i, a, b, c, d;
fp=fopen
("C://WEXAM//24990001//in. dat", "r");
wf=fopen
("C://WEXAM//24990001//out. dat", "w");
for(i=0; i<5; i++)
{
fscanf(fp, "%d%d%d%d", &a, &b, &c, &d);
fun(&a, &b, &c, &d);
fprintf(wf, "a=%d, d=%d/n", a, d);
}
fclose(fp);
fclose(wf);
}
【正确答案】
【答案解析】#include <stdio. h>
void NONO( );
void fun
(int *a, int *b, int *c, int *d)
{ int t;
if(*a<*b) {t=*a; *a=*b; *b=t;}
if(*a<*c) {t=*a; *a=*c; *c=t;}
if(*a<*d) {t=*a; *a=*d; *d=t;}
if(*b<*c) {t=*b; *b=*c; *c=t;}
if(*b<*d) {t=*b; *b=*d; *d=t;}
if(*c<*d) {t=*c; *c=*d; *d=t;}
}
main( )
{int a, b, c, d;
printf("请输入4个整数:");
scanf("%d%d%d%d", &a, &b, &c, &d);
print"原始顺序: %d, %d, %d, %d/n", a, b, c, d);
fun(&a, &b, &c, &d);
printf("排序后:%d, %d, %d, %d/n", a, b, c, d);
NONO( );
}
void NONO( )
{FILE *fp, *wf;
int i, a, b, c, d;
fp=fopen
("c://WEXAM//24990001//in. dat", "r");
wf=fopen
("c://WEXAM//24990001//out. dat", "w");
for(i=0, i<5; i++)
{
fscanf(fp, "%d%d%d%d", &a, &b, &c, &d);
fun(&a, &b, &c, &d);
fprintf(wf, "a=%d, d=%d/n", a, d);
}
fclose(fp);
fclose(wf);
} [解析] 本题中的函数功能主要是在形参指针所指的4个整数中找出最大值和最小值,最大的放在a中,最小的放在d中。这个题目类似于排序,但是又不是严格的排序,只要重新排序最大值和最小值的位置即可。所以类似于排序,这一题需要相互比较4个数字,然后进行位置的调换。基本思路就是比较相邻的两个数字,如果靠近a的数字比靠近d的数字要大,就不用进行交换,如果靠近a的数字比靠近d的数字小,就进行交换,这样的话最大的数字就会慢慢交换到a的位置,然后最小的数字就会慢慢交换到d的位置。所以根据分析我们就要用到if语句来进行判断和处理,只要经过几轮的if判断大小然后交换,就能实现题目条件所给出的位置的重置,得到要求的结果。
首先在主函数main中我们需要的就是四个数字,这四个数字需要手动输入,件程序代码第13~15行,四个数字输入完城后就可以进入fun函数进行数据处理了。进入到fun函数中,只要从a到d进行比较,按照一开始的规则即可,如果a大于b,不变,比较a与c,若a小b,a与b交换位置,交换过后a就大于b了,这样就进行a与c的比较;a与c的比较同理,这样的循环比较,就能发现,每比较一次,较大的数字就能交换到a的位置,较小的数字就离a越来越远,也就是到了d的位置,这样就完成了题目所给出的要求了,最大的数字放在a中,最小的数字放在d中。当新的排序排好后,就可以返回主函数进行输出了。
[考点] if循环语句、排序