admin 管理员组文章数量: 1184232
2024年4月22日发(作者:电脑滚动代码)
实验八 数组、指针和函数综合编程练习
打印最高分和学号
假设每班人数最多不超过40人,具体人数由键盘输入,试编程打印最高分及其学号。
程序1:用一维数组和指针变量作函数参数,编程打印某班一门课成绩的最高分和学号。
程序2:用二维数组和指针变量作函数参数,编程打印3个班学生(假设每班4个学生)
的某门课成绩的最高分,并指出具有该最高分成绩的学生是第几个班的第几个学生。
程序3:用指向二维数组第0行第0列元素的指针作函数参数,编写一个能计算任意m
行n列的二维数组中的最大值,并指出其所在的行列下标值的函数,利用该函数计算3个班
学生(假设每班4个学生)的某门课成绩的最高分,并指出具有该最高分成绩的学生是第几
个班的第几个学生。
程序4:编写一个能计算任意m行n列的二维数组中的最大值,并指出其所在的行列下
标值的函数,利用该函数和动态内存分配方法,计算任意m个班、每班n个学生的某门课
成绩的最高分,并指出具有该最高分成绩的学生是第几个班的第几个学生。
实验授课提示:
熟悉数组、指针和函数的综合编程方法。
初学者通常都会对指针望而生畏,其实只要从原理上掌握了指针的概念,它就会变得如
此简单而易用。首先,指针不过是C语言提供的一种比较特殊的数据类型而已,定义为指
针类型的变量与其它类型的变量相比,主要差别在于指针变量的值是一个内存地址。其次,
在C语言中,指针和数组之间有着密不可分的关系,不带下标的数组名就是一个指针,它
代表数组元素的首地址,只要让声明为相同基类型的指针变量指向数组元素的首地址,那么
对数组元素的引用,既可以用下标法,也可以用指针法,用指针法存取数组比用数组下标存
取数组速度快一些。反之,任何指针变量也可以取下标,可以像对待数组一样来使用。虽然
多维数组的地址概念稍微麻烦些,但只要知道它的元素在内存中是如何存放的,使用也就不
难了,由于C语言中的多维数组都是按列存放的,因此,用指针法引用时,必须知道数组
的一行有多长(即列的维数)。在某种意义上,二维数组类似于一个由指向行数组的指针构
成的一维指针数组。多于二维的数组可以通过类似方法进行降维处理。
指针的一个重要应用是用指针作函数参数,为函数提供修改调用变元的手段。当指针作
函数参数使用时,需要将函数外的某个变量的地址传给函数相应的指针变元,这时,函数内
的代码可以通过指针变元改变函数外的这个变量的值。
指针的另一个重要应用是同动态内存分配函数联用,使得定义动态数组成为可能。
本题程序1中,用到了一维数组作为函数参数,程序2用到了指向二维数组的行指针作
函数参数,程序3用到了指向二维数组的列指针作函数参数,程序4用到了动态内存分配实
现动态数组。
参考答案:
实验八 数组、指针和函数综合编程练习
程序1参考答案:
#include
#define ARR_SIZE 40
int FindMax(int score[], long num[], int n, long *pMaxNum);
main()
{
int score[ARR_SIZE], maxScore, n, i;
long num[ARR_SIZE], maxNum;
printf("Please enter total number:");
scanf("%d", &n); /*从键盘输入学生人数n*/
printf("Please enter the number and score:n");
for(i=0; i { scanf("%ld%d", &num[i], &score[i]); } maxScore = FindMax(score, num, n, &maxNum); /*计算最高分及其学号*/ printf("maxScore = %d, maxNum = %ldn", maxScore, maxNum); } /* 函数功能:计算最高分及最高分学生的学号 函数参数:整型数组score,存储学生的成绩 长整型数组num,存储学生的学号 长整型指针变量pMaxNum,存储求出来的最高分学生的学号 函数返回值:最高分 */ int FindMax(int score[], long num[], int n, long *pMaxNum) { int i; int maxScore; maxScore = score[0]; *pMaxNum = num[0]; /*假设score[0]为最高分*/ for (i=1; i if (score[i] > maxScore) { maxScore = score[i]; /*记录最高分*/ *pMaxNum = num[i]; /*记录最高分学生的学号num[i]*/ } return (maxScore); /*返回最高分maxScore*/ } 程序运行结果如下: Please enter total number:5↙ Please enter the number and score: 99011 84↙ 99012 83↙ 99013 88↙ 99014 87↙ 99015 61↙ maxScore = 88, maxNum = 99013 程序2参考答案: #include #define CLASS 3 #define STU 4 int FindMax(int score[CLASS][STU], int m, int *pRow, int *pCol); main() { int score[CLASS][STU], i, j, maxScore, row, col; printf("Please enter score:n"); for (i=0; i { for (j=0; j { scanf("%d", &score[i][j]); /*输入学生成绩*/ } } /*计算最高分及其所在班号和学号*/ maxScore = FindMax(score, CLASS, &row, &col); printf("maxScore = %d, class = %d, number = %dn", maxScore, row+1, col+1); } /* 函数功能: 计算任意m行STU列的二维数组中的最大值、并指出其所在行列下标值 函数入口参数:二维整型数组score,存储学生的成绩 整型变量m,二维整型数组的行数,代表班级数 函数出口参数:整型指针变量pRow,指向数组最大值所在的行 整型指针变量pCol,指向数组最大值所在的列 函数返回值: 数组元素的最大值 */ int FindMax(int score[][STU], int m, int *pRow, int *pCol) { int i, j, maxScore; maxScore = score[0][0]; /*置初值,假设第一个元素值最大*/ *pRow = 0; *pCol = 0; for (i = 0; i { for (j = 0; j { if (score[i][j] > maxScore) { maxScore = score[i][j]; /*记录当前最大值*/ *pRow = i; /*记录行下标*/ *pCol = j; /*记录列下标*/ } /*if结束*/ } /*内层for结束*/ } /*外层for结束*/ return (maxScore); /*返回最大值*/ } 程序3参考答案: #include #define CLASS 3 #define STU 4 int FindMax(int *p, int m, int n, int *pRow, int *pCol); main() { int score[CLASS][STU], i, j, maxScore, row, col; printf("Please enter score:n"); for (i=0; i { for (j=0; j { scanf("%d", &score[i][j]); /*输入学生成绩*/ } } /*计算最高分及其所在班号和学号*/ maxScore = FindMax(*score, CLASS, STU, &row, &col); printf("maxScore = %d, class = %d, number = %dn", maxScore, row+1, col+1); } /*函数功能: 计算任意m行n列的二维数组中的最大值、并指出其所在的行列下标值 函数入口参数:整型指针变量p,指向一个二维整型数组的第0行第0列 整型变量m,二维整型数组的行数 整型变量n,二维整型数组的列数 函数出口参数:整型指针变量pRow,指向数组最大值所在的行 整型指针变量pCol,指向数组最大值所在的列 函数返回值: 数组元素的最大值 */ int FindMax(int *p, int m, int n, int *pRow, int *pCol) { int i, j, maxScore; maxScore = p[0]; /*置初值,假设第一个元素值最大*/ *pRow = 0; *pCol = 0; for (i = 0; i { for (j = 0; j { if (p[i*n+j] > maxScore) { maxScore = p[i*n+j]; /*记录当前最大值*/ *pRow = i; /*记录行下标*/ *pCol = j; /*记录列下标*/ } /*if结束*/ } /*内层for结束*/ } /*外层for结束*/ return (maxScore); /*返回最大值*/ } 程序运行结果如下: Please enter score: 81 72 73 64↙ 65 86 77 88↙ 91 90 85 92↙ max = 92, class = 3, number = 4 程序4参考答案: #include #include int FindMax(int *p, int m, int n, int *pRow, int *pCol); main() { int *pScore, i, j, m, n, maxScore, row, col; printf("Please enter array size m,n:"); scanf("%d,%d", &m, &n); /*输入班级数m和学生数n*/ /*申请m*n个sizeof(int)字节的存储空间*/ pScore = (int *) calloc(m*n, sizeof (int)); if (pScore == NULL) { printf("No enough memory!n"); exit(0); } printf("Please enter the score:n"); for (i = 0; i { for (j = 0; j { scanf("%d", &pScore [i*n+j]); /*输入学生成绩*/ } } maxScore = FindMax(pScore, 3, 4, &row, &col); /*调用函数FindMax*/ /*输出最高分max及其所在的班级和学号*/ printf("maxScore = %d, class = %d, number = %dn", maxScore, row+1, col+1); free(pScore); /*释放向系统申请的存储空间*/ } /* 函数功能: 计算任意m行n列的二维数组中的最大值,并指出其所在行列下标值 函数入口参数:整型指针变量p,指向一个二维整型数组的第0行第0列 整型变量m,二维整型数组的行数 整型变量n,二维整型数组的列数 函数出口参数:整型指针变量pRow,指向数组最大值所在的行 整型指针变量pCol,指向数组最大值所在的列 函数返回值: 数组元素的最大值 */ int FindMax(int *p, int m, int n, int *pRow, int *pCol) { int i, j, max; max = p[0]; /*置初值,假设第一个元素值最大*/ *pRow = 0; *pCol = 0; for (i = 0; i { for (j = 0; j { if (p[i*n+j] > max) { max = p[i*n+j]; /*记录当前最大值*/ *pRow = i; /*记录行下标*/ *pCol = j; /*记录列下标*/ } /*if结束*/ } /*内层for结束*/ } /*外层for结束*/ return (max); /*返回最大值*/ } 程序运行结果如下: Please enter array size m,n:3,4↙ Please enter the score: 81 72 73 64↙ 65 86 77 88↙ 91 90 85 92↙ maxScore = 92, class = 3, number = 4
版权声明:本文标题:实验八数组、指针和函数综合编程练习 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1713799426a652013.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论