指针与整型数组

1. 输入10个整数,将其中最小的数与第一个数对换,把最大的一个数与最后一个数对换。

复制代码
#include <stdio.h>
int main()
{
    void in_num(int *x);
    void out_num(int *x);
    void exchange(int *x);
    int a[10];
    in_num(a);
    exchange(a);
    out_num(a);
    return 0;
}
void in_num(int *x)
{
    int i;
    for(i=0;i<10;i++)
    {
        scanf("%d",x+i);
    }
}
void out_num(int *x)
{
    int j;
    for(j=0;j<10;j++)
    {
        printf("%d ",*(x+j));
    }
}
void exchange(int *x)
{
    void swap(int *p1,int *p2);
    int min,max,k,m,note_min,note_max;
    min=*x;
    for(k=0;k<10;k++)
    {
        if(*(x+k)<min)
        {
            min=*(x+k);
            note_min=k;//记住最小值在数组中的位置
        }
    }
    swap(x+note_min,x);
     max=*x;
     for(m=0;m<10;m++)
     {
         if(*(x+m)>max)
         {
             max=*(x+m);
            note_max=m;//记住最大值在数组中的位置
         }
     }
     swap(x+note_max,x+9);
}
void swap(int *p1,int *p2)
{
    int tmp;
    tmp=*p1;
    *p1=*p2;
    *p2=tmp;
}
复制代码

2. 通过指针变量输出整型数组的10个元素。
要求:用指针变量指向数组元素,通过改变指针变量的值,先后指向数组各元素。

复制代码
#include <stdio.h>
int main()
{
    int a[10],*p,i;
    p=&a[0];
    for(i=0;i<10;i++)
    {
        scanf("%d",&a[i]);
    }
    for(i=0;i<10;i++,p++)
    {
        printf("%d ",*p);
    }    
    return 0;
}
复制代码

3. 将数组a中n个整数按相反顺序存放。

复制代码
#include <stdio.h>
int main()
{
    void swap(int *p1,int *p2);
    int a[100],*p,i,note;
    p=&a[0];
    for(i=0;i<100;i++)
    {
        scanf("%d",&a[i]);
        if(getchar()=='\n')//处理不定数组,若等于字符串\n时停下
        {
            note=i+1;//标记数组长度
            break;
        }
    }
    for(i=0;i<=note/2;i++)
    {
        swap(&a[i],&a[note-1-i]);//交换索引之和为n-1的元素对
    }
    for(i=0;i<note;i++)
    {
        printf("%d ",*(p+i));
    }
    return 0;
}
void swap(int *p1,int *p2)
{
    int tmp;
    tmp=*p1;
    *p1=*p2;
    *p2=tmp;
}
复制代码

4. 用指针方法对10个整数按由大到小排序。(附前缀代码)

复制代码
//StudybarCommentBegin
#include <stdio.h>
int main()
{
void input(int *p);
void sort(int *p);
void output(int *p);
int a[10],*p=a;
input(p);
sort(p);
output(p);
return 0;
}
//StudybarCommentEnd
void input(int *p)
{
    int i;
    for(i=0;i<10;i++)
    {
        scanf("%d",p+i);
    }
}
void sort(int *p)
{
    int i,j,tmp;
    for(j=0;j<9;j++)//冒泡排序,避免索引i,j写反,及终止条件为n-1
    {
        for(i=0;i<9-j;i++)
        {
            if(*(p+i)<*(p+i+1))
            {
                tmp=*(p+i);
                *(p+i)=*(p+i+1);
                *(p+i+1)=tmp;
            }
        }
    }
}
void output(int *p)
{
    int i;
    for(i=0;i<10;i++)
    {
        printf("%d ",*(p+i));
    }
}
复制代码

-END

posted @   找回那所有、  阅读(118)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)
这里到底了哦~(●'◡'●)
点击右上角即可分享
微信分享提示