[华中科技大学标准C语言程序设计上机试题、答案及报告格式
《C语言程序设计》
实验七 指针及函数结构体初步程序设计
专业:班级:学号:
姓名:1
实验目的
进一步理解指针的概念,掌握指针变量间接地址访问的本质;
掌握利用指向数组的指针变量表示一维数组元素及元素地址的方法;
掌握利用指向二维数组的行指针变量表示二维数组元素及其地址的方法;
掌握字符串的指针和指向字符串的指针变量;
掌握指针数组和二级指针;
熟悉通过动态内存分配实现动态数组,并体会指针在其中的作用。
理解函数定义、原型和调用,掌握函数参数的传递(传值、传指针和传引用)
实验内容及要求(鼓励一题多解)
深入理解《上机实践训练教程》2.6实验六案例示范和有关概念 文字描述中的知识点,给出你的理解。#include
#include
#include
#define N 3
struct student
{
int rank;
char name[20];
double score[3];
double aver;
};
void input(struct student *p,int n);
void sort(struct student *p,int n);
double average (struct student *p,int n);
void output(struct student *p,int n,double aver);
void main()
{
struct student stu[N];
double aver;
input(stu,N);
sort(stu,N);
aver=average(stu,N);
output(stu,N,aver);
}
void input(struct student *p,int n)
{
int i,j;
double a;
char str[20];
for(i=0;i
{
printf("请输入考生姓名:\n");
gets(p->name);
printf("请依次输入学生线性代数、通信原理、c语言分数:\n");
for(a=0,j=0;j<3;j++)
{
gets(str);
p->score[j]=atof(str);
a+=p->score[j];
}
p->aver=a/3;
}
return;
}
void sort(struct student *p,int n)
{
struct student temp;
int i,j;
for(i=0;i
{
for(j=0;j
{
if(p[j].aver
{
temp=p[j];
p[j]=p[j+1];
p[j+1]=temp;
}
}
}
}
double average(struct student *p,int n)
{
int i;
double temp;
for(i=0,temp=0;i
temp=temp+p[i].aver;
return temp/n;
}
void output(struct student *p,int n,double aver)
{
int i;
printf("姓名 线性代数 通信原理 c语言 平均分\n");
printf("-----------------------------------------\n");
for(i=0;i
{
printf("%-10s%8.2lf%8.2lf%8.2lf%8.2lf\n",p[i].name,p[i].score[0],p[i].score[1],p[i].score[2],p[i].aver);
}
}
运行结果:
利用指向指针的指针方法对N个整数排序并输出。(N个整数保存在数组num中,定义指针数组pnum分别指向num数组的N个元素,定义二级指针pp指向pnum入口元素,排序代码只运行使用pp指针)
………指向指针的指针就是二级指针int **pp;
#include
#define N 5
void main()
{
int num[N],*pnum[N],**pp,i,j,temp;
printf("请输入数组中的元素:\n");
for(i=0;i
{
scanf("%d",&num[i]);