这个程序哪里有问题
#include <stdio.h>int main (void)
{
int a,max,min,n,i,temp1,temp2,x,y;
printf("请输入数据的个数\n");
scanf("%d",&n);
printf("请输入数据\n");
for (i=0;i<n;i++)
scanf ("%d",&a);
max=a;
min=a;
for (i=0;i<n;i++)
{
if (a>max)
{
temp1=i;
max=a;
}
else if (a<min)
{
temp2=i;
min=a;
}
else
continue;
}
x=a;
y=a;
a=a;
a=a;
a=y;
a=x;
for (i=0;i<n;i++)
printf("%3d",a);
}
功能是:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组
但是为啥运行的结果和预想的不一样,求大佬解答
先给你我的程序,再来看你的
#include<stdio.h>
int main()
{
void max(int *p, int n);
void min(int *p, int n);
int a;
int i, n = 10, *p;
p = a;
printf("输入10个整数:\n");
for (i = 0;i < 10;i++)
{
scanf("%d", &a);
}
max(a, n);
min(a, n);
for (i = 0;i < n;i++)
{
printf("%d ", a);
}
printf("\n");
}
void max(int *p, int n)
{
int i, j, temp;
temp = *p; // 将首个元素设为最大值
j = 0; // 记录其所在的位置
for (i = 9;i >= 0;i--)
{
if (temp < *(p + i))
{
temp = *(p + i);
j = i;
}
}
*(p + j) = *p;
*p = temp;
}
void min(int *p, int n)
{
int i, j, temp;
temp = *(p + 9); // 将最后的元素设为最小值
j = 9; // 记录其所在的位置
for (i = 1;i < n;i++)
{
if (temp > *(p + i))
{
temp = *(p + i);
j = i;
}
}
*(p + j) = *(p + 9);
*(p + 9) = temp;
} 你的程序只用一只循环,而且是最大值与最小值同时进行遍历数组,所以不能将所有元素都互相比较。举个例子:当 a[ i ] < a 时, 将 a 作为新的最大值这没有问题,但却跳过了 a[ i ] > a 对最小值的比较,故而,为了做到每一个元素都能与最大值和最小值互相比较,需要用双重循环。你的程序不是用指针,也没有用函数,我就给你一个既不用指针,也不用函数的程序。如下:
#include<stdio.h>
int main()
{
int i, j, temp, a;
printf("输入10个整数:\n");
for (i = 0;i < 10;i++)
{
scanf("%d", &a);
}
temp = a; // 假设最大的数在最后一个单元
for (i = 9;i >= 0;i--)
{
if (temp < a) // 数组中每一个元素都与假设的最大数比较
{
temp = a; // 找到大于假设的最大的数
j = i; // 记录该数的位置
}
}
a = a; // 最大的数与最后一个单元交换
a = temp;
temp = a; // 假设最小的数在第一个单元
j = 0; //
for (i = 1;i < 10;i++)
{
if (temp > a) // 数组中每一个元素都与假设的最小数比较
{
temp = a; // 找到小于假设的最小的数
j = i; // 记录该数的位置
}
}
a = a; // 最小的数与第一个单元交换
a = temp;
for (i = 0;i < 10;i++) // 输出交换后的数组
{
printf("%d ", a);
}
printf("\n");
}
对第25行的说明:前面 j 的记录是最大值的位置,如果查找最小值时不让它回到初始位置,那么如果最小值原本就在a 处,第28行到第31行就不会有任何动作,所查找的最小值的位置就会出错 我的回答是你的最佳答案 #include <stdio.h>
int main()
{
int n,max,min,k,t;
printf("请输入数组的个数:");
scanf("%d",&n);
int *p,a;
printf("Please input 当前数值:\n");
for(int i=0;i<n;i++)
{
scanf("%d",&a);
}
max=a;
for(int i=0;i<n;i++)
{
if(max<a)
{
k=i;
max=a;
}
}
min=a;
for(int j=0;j<n;j++)
{
if(min>a)
{
t=j;
min=a;
}
}
printf("max=%d,min=%d",max,min);
printf("\n");
for(int i=0;i<n;i++)
{
if(i==0)
{
int temp;
temp=a;
a=a;
}
if(i==n-1)
{
int temp1;
temp1=a;
a=a;
}
printf("%d ",a);
}
printf("\n");
return 0;
}
#include <stdio.h>
int main()
{
int n,max,min,k,t;
printf("请输入数组的个数:");
scanf("%d",&n);
int a;
printf("Please input 当前数值:\n");
for(int i=0;i<n;i++)
{
scanf("%d",&a);
}
max=a;
for(int i=0;i<n;i++)
{
if(max<a)
{
k=i;
max=a;
}
}
min=a;
for(int j=0;j<n;j++)
{
if(min>a)
{
t=j;
min=a;
}
}
printf("max=%d,min=%d",max,min);
printf("\n");
for(int i=0;i<n;i++)
{
if(i==0)
{
int temp;
temp=a;
a=a;
a=temp;
}
if(i==n-1)
{
int temp1;
temp1=a;
a=a;
a=temp1;
}
}
for(int i=0;i<n;i++)
{
printf("%d ",a);
}
printf("\n");
return 0;
}
页:
[1]