C语言练习四:指针与多维数组的相关练习

1、学习c语言的第十五天小总结:

从最开始的基本数据类型、运算符与表达式、选择结构if else、循环结构while、do…while、for循环还有辅助循环的break、continue语句、数组到函数。小小的收获也能给自己带来满足感,从最开始的hello,world到现在自己也能编一个简易的计算器了,但自己也清楚地意识到这些都是基础的知识,想真正能运用到工作上,还有很长的路要走。bilibili的codesheep大佬曾经说过:检验自己学好c语言的两个重要指标:指针和内存管理。之前在学习地时候我都会尽可能的去想变量、数组在内存中存储的区别,尽量往内存那块去想。这样理解一些概念也比较轻松。现在终于到了指针了,呼~,干巴爹,撸他!奥利给!

2、相关知识

c语言在处理数组时都是转化为同类型指针来访问的。例如int a[3]数组,在函数内部,无论是使用下标法a[i]还是指针法*(a+i),编译器都是将其转化为"星号(a+i)“来处理的。
而一维数组与多维数组的区别在于,一维数组在处理时是转化为指向同类型的变量的指针,而多维数组在处理时是转化为指向同类型的数组的指针。即可理解为"数组的数组”。特别要注意的是多维数组的"星号(p+i)+j"表示的是a[i][j]的地址。(星号不知道要怎么打,用文字代替了)

练习目的

熟悉指向数组的指针作为函数参数的用法

3、程序功能

录入学生各科成绩,计算其总成绩和平均分。

4、程序代码

//指向数组的指针作为函数参数的运用示例 
#include<stdio.h>
int main()
{
	void count(float (*p)[],int);                                //声明指向数组指针处理函数 
	int i,j,m;                                                    //定义相关变量 
	printf("请输入要处理五科成绩的学生人数:");
	scanf("%d",&m);                                          //存入要计算成绩的学生人数 
	float a[m][5];                                   //定义存储成绩的二维浮点型数组,行+1表学号,列表各科成绩 
	for(i=0;i<m;i++)
	{
		printf("\n请输入学号为%d的学生的五科成绩\n",i+1);
		for(j=0;j<5;j++)
		{
			scanf("%f",&a[i][j]);     //把成绩存入二维数组 注意输入输出格式一定要与定义的类型相对应,因为浮点型与整型存储方式是不同的。 
		}
	 } 
	float (*p)[5]=a;                               //定义指向数组的指针变量p并由二维数组的首地址赋初值 
	printf("计算结果为:\n");
	count(a,m);
	return 0;	 
 } 
void count(float (*p)[5],int n)                             //定义count函数 
{
	int i,j;                                            //定义循环变量 
	for(i=0;i<n;i++)
	{
		float sum=0;                                 //定义累加变量并赋初值为0 
		printf("学号为%d的学生各科成绩为:\n",i+1);
		for(j=0;j<5;j++)
		{
			printf("%.1f ",*(*(p+i)+j));       //再次输出成绩好对比计算结果是否正确 
			sum+=*(*(p+i)+j);
		}
		printf("\n总成绩为:%.1f\n",sum);
		printf("平均分为:%.1f\n",sum/5);
	}
}

5、运行示例

在这里插入图片描述

发布了5 篇原创文章 · 获赞 0 · 访问量 184
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 游动-白 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览