如果改为num[0]=max, num[0]=min,那数组第一个元素的值就被设置为max或min的值,这就会让求数组最大值和最小值出现错误,因为数组第一个元素的值改变了,有很大可能不是原来第一个元素的值,因为max和min都未赋初始化,其值就是内存位置的随机值,所以这就会出现错误;
而如果让max=num[0],和min=num[0],然后再拿这个max和min与数组其他元素的值比较,将较大的值赋值给max,较小的值赋值给min,循环结束,就可得出数组的最大值和最小值。
测试代码如下:
#include <stdio.h>
int main(void){
int num[100];
int i,a,min,max;
printf("输入数组长度:\n");
scanf("%d",&a);
printf("请输入数组中的元素:\n");
for(i=0;i<a;i++){
scanf("%d",&num[i]);
}
// 赋值前先备份数组第一个元素的值
int tnum0=num[0];
num[0]=min;
for(i=0;i<a;i++){
if(num[i]<min){
min=num[i];
}
}
num[0]=max;
for(i=0;i<a;i++){
if(num[i]>max){
max=num[i];
}
}
printf("\nnum[0]=max, num[0]=min,求得数组最大值最小值为:\n");
printf("max=%d,min=%d",max,min);
// 将数组第一个元素的值复原
num[0]=tnum0;
min=num[0];
for(i=0;i<a;i++){
if(num[i]<min){
min=num[i];
}
}
max=num[0];
for(i=0;i<a;i++){
if(num[i]>max){
max=num[i];
}
}
printf("\n\nmax=num[0], min=num[0],求得数组最大值最小值为:\n");
printf("max=%d,min=%d",max,min);
return 0;
}
不能互换,除非你定义的min,max有初始值
不知道你这个问题是否已经解决, 如果还没有解决的话:(注意:函数的实现包括文件打开的相关代码,个人复制代码可能实现不了运行结果所示的效果。主要关注函数fun的代码实现即可)
代码实现:
#include<conio.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char *fun(char (*a)[81], int num, char *max)
{
int i;//定义循环变量
max = a[0];//将形参数组a的第一个元素赋值给max
for(i = 0; i < num; i++)//循环num次
{
if(strlen(max)<strlen(a[i]))//判断数组中a[i]与max的字符串长度
max = a[i]; //将判断的两者中长的字符串放入max中
}
return max;//返回max
}
void main()
{
FILE *wf;
char ss[10][81],*ps=NULL;
char s[3][81]={"abcd","deg","diegns"},*p=NULL;
int i=0,n;
system("CLS");
printf("输入若干个字符串:");
gets(ss[i]);
puts(ss[i]);
while(!strcmp(ss[i], "****")==0) /*用4个星号作为结束输入的标志*/
{
i++;
gets(ss[i]);
puts(ss[i]);
}
n=i;
ps=fun(ss,n,ps);
printf("\nmax=%s\n",ps);
/******************************/
wf=fopen("out.dat","w");
p=fun(s,3,p);
fprintf(wf,"%s",p);
fclose(wf);
/*****************************/
}
运行结果:
回答:
如果把max=num[0]和min=num[0]的等号两边互换,则程序不会出现语法上的错误,但运行结果可能会出现问题,因为max和min的初值应该是相反的,当互换后可能会导致结果出现偏差。
具体上下文信息需要根据具体的情况来确定,但一般来说,这段代码应该是在求一个数组中的最大值和最小值,这时候可以使用以下的代码框架。
// 假设要求的数组是num
int max = num[0];
int min = num[0];
for(int i=1; i<num.length; i++){
if(num[i] > max){
max = num[i];
}
if(num[i] < min){
min = num[i];
}
}
// max和min即为所求
这段代码中,max和min的初值都应该是num[0],然后通过遍历数组来更新他们的值。如果将它们的初值互换,可能会让程序出现偏差,例如如果数组中所有元素都比num[0]小,但是max和min的初值互换了,会导致max一直等于num[0],无法得到正确的结果。
代码示例使用的是Java语言。