ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C语言——指针(1.5用指针变量作函数参数的程序实例)

2021-10-30 18:02:03  阅读:200  来源: 互联网

标签:1.5 num int pMaxScore 函数参数 score maxNum maxScore 指针


上一小节,我们了解了什么是按值调用和模拟按引用调用,简单回顾一下,按值调用是通过变量的地址存储值,通过变量名访问值;模拟按引用调用则是采用指针解决问题的方式。在这一小节,我们将对指针变量作为函数参数的一些程序做一些实现。

练习:

例题1.5从键盘输入某班学生某门课的成绩(每班人数最多不超过40人,具体人数由键盘输入),试分析下面的程序能否实现计算并输出最高分及相应的学生的学号。

#include <stdio.h>
#define N 40
void FindMax(int score[],long num[],int n,int pMaxScore,long pMaxNum)
{
    int i;
    pMaxScore=score[0];//假设第一个同学为最高分
    pMaxNum=num[0];//记录当前学生学号
    for (i=1;i<n;i++)
    {
        if (score[i]>pMaxScore)//获得最高分
        {
            pMaxScore=score[i];//不用交换,直接覆盖值
            pMaxNum=num[i];
        }
    }
}

int main()
{
    int score[N],maxScore;
    int n,i;
    long num[N],maxNum;
    printf("How many students?\n");
    scanf("%d",&n);
    printf("Input students's ID and score:\n");
    for (i=0;i<n;i++)
    {
        scanf("%ld%d",&num[i],&score[i]);
    }
    FindMax(score,num,n,maxScore,maxNum);
    printf("maxScore=%d,maxNum=%ld\n",maxScore,maxNum);
    return 0;
}
其运行结果如下:

How many students?
2
Input students's ID and score:
2020212100 85
2020212101 95
maxScore=16,maxNum=0

很显然,这并不是我们想要的答案,我们试着找一下程序问题所在,发现函数并没有返回值,并且我们需要的应该是两个返回值,上一小节,我们说了,如果单一返回值时,可以用按值调用且加return 变量 的形式,但是FindMax这个函数,我们要返回两个值,maxScore和maxNum,显然,我们只能用模拟按引用调用,调试程序如下:

#include <stdio.h>
#define N 40
void FindMax(int score[],long num[],int n,int *pMaxScore,long *pMaxNum)
{
    int i;
    *pMaxScore=score[0];//假设第一个同学为最高分
    *pMaxNum=num[0];//记录当前学生学号
    for (i=1;i<n;i++)
    {
        if (score[i]>*pMaxScore)//获得最高分
        {
            *pMaxScore=score[i];//不用交换,直接覆盖值
            *pMaxNum=num[i];
        }
    }
}

int main()
{
    int score[N],maxScore;
    int n,i;
    long num[N],maxNum;
    printf("How many students?\n");
    scanf("%d",&n);
    printf("Input students's ID and score:\n");
    for (i=0;i<n;i++)
    {
        scanf("%ld%d",&num[i],&score[i]);
    }
    FindMax(score,num,n,&maxScore,&maxNum);
    printf("maxScore=%d,maxNum=%ld\n",maxScore,maxNum);
    return 0;
}

其结果运行如下:

How many students?
2
Input students's ID and score:
2020212100 85
2020212101 95
maxScore=95,maxNum=2020212101

显然,程序结果是对的,模拟按引用调用的方案解决了这个问题。这一小节加深了我们对单一返回值和多个返回值之间区别的印象,和按值调用和模拟按引用调用之间的区别。有兴趣的小伙伴可以自己敲一下代码感受一下哦!

标签:1.5,num,int,pMaxScore,函数参数,score,maxNum,maxScore,指针
来源: https://blog.csdn.net/qq_58460876/article/details/121053606

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有