题目:定义10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个对换。
但我这个输出就很诡异,数组除了最后一个变成了32,别的都没变。我觉得没问题啊,可能是低级错误吧。我在备考计算机二级c语言。求解惑。
int main()
{
int a[10]={1,3,4,6,9,8,5,3,4,7};
int i,n=a[0],x=a[0];
for(i=0;i<10;i++)
{
if(a[++i]<n) n=a[++i];
else if(a[++i]>x) x=a[++i];
}
a[0]=n;
a[9]=x;
for(i=0;i<10;i++)
printf("%d",a[i]);
}
#include <stdio.h>
int main()
{
int a[10] = {1, 3, 4, 6, 9, 8, 5, 3, 4, 7};
int i, min = a[0], max = a[0];
int min_index = 0, max_index = 0;
for (i = 0; i < 10; i++)
{
if (min > a[i])
{
min = a[i];
min_index = i;
}
if (max < a[i])
{
max = a[i];
max_index = i;
}
}
int temp;
temp = a[0];
a[min_index] = temp;
a[0] = min;
temp=a[9];
a[max_index]=temp;
a[9]=max;
for (i = 0; i < 10; i++)
printf("%d ", a[i]);
}
有帮助望采纳
#include<iostream>
using namespace std;
/*
* 用符号常量定义数组长度(const:constant)
*
* 说明:
* 由于使用 const 语句定义符号常量带有数据类型,以便系统进行类型检查,
* 同时该语句具有计算初值表达式和赋初值的功能,所以比宏命令(#define)定义符号常量要优越得多,
* 因此提倡使用 const 语句。
*/
const int arrayLength=10;
void main()
{
void inputNum(int number[],int temp_length);
void outputNum(int number[],int temp_length);
void swap(int number[],int temp_length);
int number[arrayLength];
cout<<"请输入10个整数:"<<endl;
//number为数组地址
inputNum(number,arrayLength);
swap(number,arrayLength);
outputNum(number,arrayLength);
}
/*
* 输入整数
*/
void inputNum(int number[],int temp_length)
{
int length=0;
length=temp_length;
for(int i=0;i<length;i++)
{
cin>>number[i];
}
}
/*
* 交换
*/
void swap(int number[],int temp_length)
{
int *max,*min,*pointer,temp,length;
//将数组首地址赋值给指针变量,即指针变量指向数组的第一个元素
max=min=number; //因为是右结合,所以这样写;一右而不右,三右赋值右
temp=0;
length=temp_length;
/*
* 循环变量初始值:数组第2个值的地址;循环条件:数组最后一个值的地址(number+length-1);循环变量增值:地址+1
*/
for(pointer=number+1;pointer<number+length;pointer++)
{
if(*pointer>*max)
{
//将大数地址赋给max
max=pointer;
}
else if(*pointer<*min)
{
//将小数地址赋给min
min=pointer;
}
}
//将最小数与第一个数交换
temp=number[0];
//把指针变量min所指向的值赋值给number数组的第一个值;
//'*':为指针运算符
number[0]=*min;
*min=temp;
//将最大数与最后一个数交换
temp=number[9];
number[9]=*max;
*max=temp;
}
/*
* 输出整数
*/
void outputNum(int number[],int temp_length)
{
int length=0;
length=temp_length;
for(int i=0;i<length;i++)
{
cout<<number[i]<<"\t";
}
}
运行结果
https://pic002.cnblogs.com/images/2012/397707/2012050515103261.jpg
#include<stdio.h>
int main(){
void input(int *);//定义readin来录入10个整数//
int comp(int *);//定义comp来处理10个整数//
void print(int *);//定义print来输出10个整数//
int a[10];
input(a);
comp(a);
print(a);
}
void input(int *p){
int i=0;
printf("please input ten numbers:\n");
for(i=0;i<10;i++)
scanf("%d",p++);//注意请勿要将p++误写成*p++或&p++,因为p已经定义成//
} //指针类型了,p本身就已经是指向地址了的,故不必再加*或&,否则出错//
int comp(int *f){
int i,j=0,k=9,t,r;//用j来记录最小的数的下标,用k来记录最大的数的下标//
for(i=0;i<10;i++){
if(*(f+j)<*(f+i)) continue;//找出数组中最小的数//
j=i; //这个最小的数的下标用j来记录//
}
for(i=8;i>=0;i--){
if(*(f+k)>*(f+i)) continue; //找出数组中最大的数//
k=i; //这个最大的数的下标用k来记录//
}
t=*(f+j);*(f+j)=*f;*f=t; //将最小的数与第一个数对换//
r=*(f+k);*(f+k)=*(f+9);*(f+9)=r; //将最大的数与最后一个数对换//
}
void print(int *u){
int i;
printf("the result after comping:\n");
for(i=0;i<10;i++)
printf("%d ",*u++);
printf("\n");
}