十个整数排序
#include<stdio.h>
float max=0,min=0;
int main()
{
float average(float array[ ],int n);
float ave,score[10];
int i;
printf("请输入10个数:");for(i=0;i<10;i++)
scanf("%f",&score[i]);ave=average(score,10);
printf("max=%6.2f\nmin=%6.2f\naverage=%6.2f\n",max,min,ave);
return 0;
}
float average(float array[ ],int n)
{
int i;
float aver,sum=array[0];
max=min=array[0];
for(i=1;i<n;i++)
{
if(array[i]>max)max=array[i];
else if(array[i]<min)min=array[i];
sum=sum+array[i];
}
aver=sum/n;
return(aver);
}
从小到大排序
#include<stdio.h>
int main()
{
int a[10],temp;
int i,j;
printf("输入10个数字:\n");
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<10;i++)
{
for(j=i+1;j<10;j++)
{
if(a[i]>a[j])
{
temp=a[j];
a[j]=a[i];
a[i]=temp;
}
}
}
printf("从小到大排序为\n");
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
return 0;
}
指针法从小到大排序
#include <stdio.h>
int main()
{
void sort(int x[],int n);
int i,a[10];
int *p=a;
printf("input 10 numbers:\n");
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);//scanf("%d",p++);
}
sort(p,10);
printf("the sorted numbers:\n");
for(p=a;p<a+10;p++)
{
printf("%d ",*p);
}
printf("\n");
return 0;
}
void sort(int x[],int n)
{
int i,j,k,t;
for(i=0;i<n-1;i++)//选择排序
{
k=i;
for(j=i+1;j<n;j++)
if(x[j]>x[k]) k=j;
if(k!=i)
{
t=x[i];
x[i]=x[k];
x[k]=t;
}
}
}指针法从大到小排序
#include<stdio.h>
#include<conio.h>
int main(){
void sort(int x[],int n);
int i,*p,a[10];
p=a;
printf("输入10个整数:\n");
for(i=0;i<10;i++)
scanf("%d",p++);
p=a;
sort(p,10);
printf("由大到小排序为:\n");
for(p=a,i=0;i<10;i++){
printf("%d ",*p);
p++;
}
getch();
}
void sort(int x[],int n){
int i,j,k,t;
for(i=0;i<10;i++){
k=i;
for(j=i+1;j<n;j++)
if(x[j]>x[k])
k=j;
if(k!=i){
t=x[i]; x[i]=x[k]; x[k]=t;
}
}}
法二:
void sort(int *x,int n){
int i,j,k,t;
for(i=0;i<10;i++){
k=i;
for(j=i+1;j<n;j++)
if(*(x+j)>*(x+k))
k=j;
if(k!=i){
t=*(x+i); *(x+i)=*(x+k); *(x+k)=t;
}
}
}
8.3.3 通过指针引用数组元素
指向数组元素的指针变量也可以带下标。
由于++
和*
同优先级,结合方向为自右而左,因此它等价于* (p++)
。先引用p
的值,实现* p
的运算,然后再使p
自增1。
8.3.5通过指针引用多维数组
”int(*p)[4]
“表示定义p
为一个指针变量,它指向包含4个整型元素的一维数组。注意,*p
两侧的括号不可缺少。
a[3][4]
行指针*(a+2)---->a[2]
*(*(a+2)) a[2]+3 第三列第四个元素
行指针前加* 就变成了列指针*(a+i)
a[i]+j i行j列元素的地址
*(a[i]+j) a[i][j]
*(*(a+2))
指针指向多维数组事
1.指向数组元素的指针变量
int a[3][4]
int *p;
for
for
scanf("%d%d",&a[i][j])
p=a; 错误
p=*a
逐个访问个元素
for(p=a[0];p<a[0]+12;p++) p++前加*
控制换行 {if((p-a[0]%4==0 printf("/n")); &&p!!=a[0]
2.指向m个元素组成的一维数组
输出二维数组 任一行任一列元素的值
int a[10][20]
int(*p)[20]
p=a p在这里是行指针
*(*(a+i)+j)