本人新手,错误很多,请大神耐心解答
我写的代码哪错了,一运行无响应
# include <stdio.h>
int main ()
{
void input (int * p);
void paixu (int * p);
void print (int * p);
int a[10];
input (a);
paixu (a);
print (a);
return 0;
}
void input (int * p)
{
while (p < p + 10)
{
scanf("%d",*p++);
}
}
void paixu (int * p)
{
int * i = p;
int max = *p,min = *p,q = 0;
for (;p < p + 10;p++)
{
if (*i > *p)
max = *i;
else
{
max = *p;
q = 1;
}
if (q == 1)
min = *i;
else
min = *p;
}
*p = min;
* (p + 9) = max;
}
void print (int * p)
{
while (p < p + 10)
{
printf("%d",*p++);
}
}
#include<iostream>
using namespace std;
void enter(int*m)
{
for(int i=0;i<10;i++)
cin>>m<i>;
}
void key(int*m)
{
int max=m[0],min=m[0],n=0,k=0,z;
for(int i=1;i<10;i++)
{
if(max<m<i>)
{
max=m<i>;
n=i;
}
}
for(int i=1;i<10;i++)
{
if(min>m<i>)
{
min=m<i>;
k=i;
}
}
if(n==0&&k==9)
{
z=m[0];m[0]=m[9];m[9]=z;
}
else if(n==0&&k!=9)
{
z=m[9];m[9]=m[n];m[n]=z;
z=m[0];m[0]=m[k];m[k]=z;
}
else
{
z=m[0];m[0]=m[k];m[k]=z;
z=m[9];m[9]=m[n];m[n]=z;
}
}
void print(int*m)
{
for(int i=0;i<10;i++)
cout<<m<i><<'';
}
int main()
{
int ans[10];
enter(ans);
key(ans);
print(ans);
return 0;
}
include用法:
#include命令预处理命令的一种,预处理命令可以将别的源代码内容插入到所指定的位置;可以标识出只有在特定条件下才会被编译的某一段程序代码;可以定义类似标识符功能的宏,在编译时,预处理器会用别的文本取代该宏。
插入头文件的内容
#include命令告诉预处理器将指定头文件的内容插入到预处理器命令的相应位置。有两种方式可以指定插入头文件:
1、#include<文件名>
2、#include"文件名"
以上是把最大、最小,两个数,掉换位置。
----------------------
下面的,符合题目要求:
//输入10个整数,将其中最小的数与第一个数对换,关于你那死循环的问题,你可以这样理解,p <p+10;首先你得承认你的p一直在做自增操作是吧,那么p+10也一定在不断变化,而中间的差值正好是10,所以是死循环。
我们暂且看出常量来做,a<a+10 ,a初值为1,你本来的意思是想a<11(a=1)来结束,但是你a在自增,所那个判断条件会变成a<12(a=2),a<13(a=3)等等。
下面是按照你题目意思来做的。三个函数分别是输入,最小与第一个交换,最大与最后一个交换。
#include <stdio.h>while (p < q + 10)
{
scanf("%d",p++);
不应该是scanf("%d",*p++);吗
while (p < p + 10)
{
scanf("%d",*p++);
}
不是p++了吗?为什么不会结束,
*p++就是先取出指针p指向的地址单元的数据,之后再将该值加1。
由于运算符 * 的优先级高于运算符 ++,所以是先取指针p指向的地址单元的数据。
若果是*(p++),那么就是先将地址加1,之后取出新地址中的数据
就算如你所说p++了 那p+10中的p难道就没变吗?
举个例子吧 不说指针 换成变量a
a < a+10; a++ ;之后呢 a+10还是要比a大10对吗?