关于C语言指针的几个经典例题及其解析

作者在 2011-10-10 21:36:12 发布以下内容

阅读后,大家不妨做以下几件事情:

1.  对程序进行正确注释

2.画出程序流程图

3.写出程序运行的结果(模拟程序的要求)

 

题目1用指针方法处理,输入3个整数,按由小到大的顺序输出  

#include <stdio.h>    //库函数说明

void main()   //main函数定义

{

        void swap(int * pt1 , int * pt2);  //自定义函数swap说明

        int n1, n2, n3;   /* 定义3整型变量 */

        int *p1, *p2, *p3; /* 定义3整型指针变量 */

        printf("Please input three integers n1, n2, n3: \n");

        scanf("%d, %d, %d", &n1, &n2, &n3);  //从键盘输入3个整数给3个整型变量

        p1 = &n1;  //p1指向n1

        p2 = &n2;  //p2指向n2

        p3 = &n3;  //p3指向n3

        if(n1 > n2) swap(p1, p2);   //如果n1> n2,则调用swap函数进行交换

        if(n1 > n3) swap(p1, p3);

        if(n2 > n3) swap(p2, p3);

        printf("Now, the order is %d, %d, %d\n", n1, n2, n3); //输出交换后的3个新整数

void swap(int * pt1, int * pt2)  //swap函数定义,形式参数为两个整型指针变量

{

        int temp;

        temp = *pt1;   //交换所指对象

        *pt1 = *pt2;

        *pt2 = temp;

}

 

题目2输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。编写3个函数:(1)输入10个数 (2) 进行处理 (3)输出10个数

#include <stdio.h>

 

void main()

{

        void input(int *number) ;

        void max_min_value(int *number);

        void output(int *number);

        int number[10];

        input(number);            // call the input function

        max_min_value(number);    // call the exchange function

        output(number);          // call the output function

// input function

void input(int *number)

{

        int i;

        printf("please input 10 nubers:\n");

        for(i = 0; i < 10; i++)

               scanf("%d", number+i);

}  

// exchange function

void max_min_value(int *number)

{

        int * max, * min, *p, temp;

        max = min = number;

        for(p = number+1; p < number+10; p++)

        {

               if(*p > *max)

                      max = p;

               else if(*p < *min)

                      min = p;

        }

        // exchange the smallest one with the first element

        {

               temp = *number;

               *number = *min;

               *min = temp;

        }

        // exchange the bigest one with the last element

        {

               temp = *(number+9);

               *(number+9) = *max;

               *max = temp;

        }

}

 

// output function

void output(int * number)

{

        int * p;

        printf("Now ,they are: ");

        for(p = number; p < number+10; p++)

               printf("%3d", *p);

        printf("\n");

 

}

 

题目34 n个数,使其前面个数顺序向后移m个位置,最后m个数变成前面m个数。

#include <stdio.h> 

void main()

{

        void move(int *, int, int);

        int number[20], n, m, i;

        printf("how many numbers?\n");

        scanf("%d", &n);

        printf("input %d numbers:\n", n);

        for(i = 0; i < n; i++)

               scanf("%d", number+i);  //数组名的又一种应用

        printf("how many place you want move?\n");

        scanf("%d", &m);

        move(number, n, m);//调用自定义函数

        printf("Now, they are: \n");

        for(i = 0; i < n; i++)

               printf("%3d", *(number+i));  //指针法输出数组的新内容

        printf("\n");

void move(int * array, int n, int m)

{

        int *p, array_end;

        array_end = *(array+n-1);

        for(p = array+n-1; p > array; p--)

               *p = *(p-1);

        *array = array_end;

        m--;

        // recursive call the move function until m reduce to 0

        if(m>0)

               move(array, n, m);  //递归调用

}

 


http://zlgc.usx.edu.cn/kc/dgdz/news_more.asp?id=1473

C语言指针 | 阅读 6596 次
文章评论,共1条
产今略对(游客)
2021-11-21 16:01
1
借鉴一下,作业用
游客请输入验证码
文章归档
最新评论