• C语言实验十一 指针(一)


    一、实验目的

    (一)掌握指针的概念,会定义和使用指针变量;

    (二)了解或掌握指针与数组的关系,指针与数组有关的算术运算、比较运算。

    (三)学会用指针作为函数参数的方法。

    二、预习要求

    (一)地址和指针的概念;

    (二)数组和指针的关系;

    (三)字符串和指针的关系;

    (四)函数的定义、函数类型、函数参数、函数调用的基本概念。

    三、实验内容

    1. /*   c10-2.c   输入两个整数,并使其从大到小输出,用指针变量实现数的比较 */
    2. #include "stdio.h"
    3. void main()
    4. {
    5. int *p1,*p2,*p,a,b,c;
    6. scanf("%d %d",&a,&b);
    7. p1=&a;
    8. p2=&b;
    9. p=&c;
    10. if(*p1<*p2)
    11. {
    12. *p=*p1,*p1=*p2,*p2=*p;
    13. }
    14. printf("a=%d,b=%d\n",a,b);
    15. printf("max=%d,min=%d\n",*p1,*p2);
    16. }

    (2)输入数据:5,9

    (3)结果输出:a=9,b=5;max=9,min=5

    1. /*   c10-3.c   输入两个整数,并使其从大到小输出,用函数实现数的交换*/
    2. #include "stdio.h"
    3. void main()
    4. {
    5. int as(int *p1,int *p2);
    6. int a,b,*p,*q;
    7. scanf("%d %d",&a,&b);
    8. p=&a;
    9. q=&b;
    10. if(*p<*q)
    11. {
    12. as(p,q);
    13. }
    14. printf("a=%d b=%d\n",a,b);
    15. printf("max=%d min=%d\n",*p,*q);
    16. }
    17. int as(int *p1,int *p2)
    18. {
    19. int t;
    20. t=*p1;
    21. *p1=*p2;
    22. *p2=t;
    23. }

    (2)输入数据:5,9

    (3)结果输出:a=9,b=5;max=9,min=5

    (4) 如果将 swap 函数修改为如下形式,分析如何调试和修改?

    1. void swap(int *p1, int *p2)
    2. int *p;
    3. *p=*p1;
    4. *p1=*p2;
    5. *p2=*p;
    6. }

    用指针法输入 12 个数,然后按每行 4 个数输出

    (1)编程提示:定义一个整型数组和一个整型指针,这样通过数组就可以静态分配 内存空间,存储数据;然后将指针与数组相关,使指针指向与数组相同的首地址处,这样就可以通过指针或者数组都可以对存储空间加以操作。

    (2)源程序:

    1. /*   c10-4.c  用指针法输入 12 个数,然后按每行 4 个数输出  */
    2. #include "stdio.h"
    3. void main()
    4. {
    5. int a[12]={1,2,3,4,2,3,4,5,3,4,5,6};
    6. int *p,i;
    7. p=a;
    8. for(i=0;i<12;i++)
    9. {
    10. printf("%d ",*(p+i));
    11. if((i+1)%4==0)
    12. printf("\n");
    13. }
    14. }

    四、实验注意事项

    (一)注意变量、变量的指针、变量的地址间的相互关系;

    (二)注意传地址与传值的区别。

    五、思考题

    (一)从键盘输入十个整数,要求用冒泡法(或选择法)实现从大到小的排列输出。

    1. #include "stdio.h"
    2. int input(int *num);
    3. int oppo(int *num);
    4. int output(int *num);
    5. void main()
    6. {
    7. int num[10];
    8. input(num);
    9. oppo(num);
    10. output(num);
    11. }
    12. int input(int *num)
    13. {
    14. int i;
    15. printf("请输入10个数字:");
    16. for(i=0;i<10;i++)
    17. scanf("%d",&num[i]);
    18. }
    19. int oppo(int *num)
    20. {
    21. int i,temp;
    22. int *max,*min,*p;
    23. max=min=num;
    24. for(p=num;p10;p++)
    25. {if(*p>*max) *max=*p;}
    26. {temp=num[9];
    27. num[9]=*max;
    28. *max=temp;}
    29. for(p=num;p10;p++)
    30. {if(*p<*min) *min=*p;}
    31. {temp=num[0];
    32. num[0]=*min;
    33. *min=temp;}
    34. }
    35. int output(int *num)
    36. {
    37. int i;
    38. printf("请输出10个数字");
    39. for(i=0;i<10;i++)
    40. printf("%d ",num[i]);
    41. }

    (二)将指针作为函数参数:一个数组有10个元素{1,8, 10, 2,-5, 0, 7, 15, 4, -5}, 利用指针作为函数参数编程,输出数组中最大和最小的元素值。

    1. #include "stdio.h"
    2. void main()
    3. {
    4. int a[10]={1,8,10,2,-5,0,7,15,4,-5};
    5. int *p,*q,i,j;
    6. p=a,q=a;
    7. for(i=0;i<10;i++)
    8. if(*p
    9. {
    10. *p=a[i];
    11. }
    12. printf("max=%d\n",*p);
    13. for(j=0;j<10;j++)
    14. if(*q>a[j])
    15. {
    16. *q=a[j];
    17. }
    18. printf("min=%d\n",*q);
    19. }

  • 相关阅读:
    【秋招】最全算法岗面试,吃透offer拿到手软!
    python-数据可视化(总)
    SpringBoot启动扩展应用:干预优化+加快启动时间
    【C++】string笔记
    如何搭建自己的图床
    12.7.1 实验7:实施路由器密码恢复
    【若依】前后端分离版本部署到Tomcat完整过程
    【OpenCV实现图像:图像处理技巧之空间滤波】
    一图读懂「五度易链」企业创新服务解决方案,打造卓越营商环境!
    在量化交易市场中常见的对冲策略类型有哪些?
  • 原文地址:https://blog.csdn.net/qq_64314976/article/details/126123133