文档库 最新最全的文档下载
当前位置:文档库 › C语言实验3_指针与结构体

C语言实验3_指针与结构体

实验报告三

(四学时)

一【实验目的】

(1)了解指针的概念,理解指针的本质及特征。

(2)掌握指针变量的声明、表示、引用及赋值方法。

(3)掌握指针变量的常用运算规则和实际应用。

(4)结构体极其变量的定义和使用。

(5)指针操作结构体变量的使用方法。

二【实验内容】

第一部分:指针

【实验1—基础题】

要求:定义和实现一个函数void swap(int *p , int *q),该函数实现两个整数的交换。

在main函数中构造两个整型变量,通过调用swapt函数实现这两个整型变量的数值交换,并显示交换前和交换后的数据。

目的:地指作为形式参数的用法(传址)

实验结果:#include

void swap(int*p,int*q);

int main()

{

int a,b;

printf("请输入数a,b:");

scanf("%d,%d",&a,&b);

printf("交换前的数据:a=%d,b=%d\n",a,b);

swap(&a,&b);

printf("交换后的数据:a=%d,b=%d\n",a,b);

return 0;

}

void swap(int*p,int*q)

{

int temp;

temp=*p;

*p=*q;

*q=temp;

}

【实验2—验证题】

要求:运用指针的知识实现计算学生平均分的函数编写

(1)设数组score[]保存若干学生的某一课程的成绩,定义一个函数float aver_score(float *p,int n),计算该课程的平均成绩(形式参数n表示学生个数)。

(2)在main函数中用数组存放多个学生成绩,成绩由键盘输入,然后通过调用aver_score函数计算其平均成绩并输出。

目的:指针与数组的关系及应用

实验结果:

#include

#define N 40

float Averscore(float *p,int n);

int main()

{

int n,i=-1;

float score[N],aver,*p;

p=score;

do

{

i++;

printf("Input score:");

scanf("%f",p+i);

}while(p[i]>=0);

n=i;

aver=Averscore(p,n);

printf("aver=%.2f\n",aver);

return 0;

}

float Averscore(float *p,int n)

{

int j;

float sum=0;

for(j=0;j

{

sum=sum + *(p+j);

}

return sum/n;

}

【实验3—延伸训练】

要求:定义一个函数void reverse_str(char *p),实现字符串的逆序排列。

(1)调用函数reverse_str(char *p)时,把一个字符串的地址传递给指针p,由指针p对字符串进行交换,得到逆序排列的字符串。

(2)在main函数中构造一个字符串,通过调用reverse_str函数实现该字符串的逆序排列,并显示源字符串和逆序排列后的字符串。

例如:用户输入的原字符串为asdfgh,调用函数reverse_str后,输出逆序字符串为hgfdsa。

目的:指针操作字符数组的应用

实验结果:

#include

#define N 40

void Reverse_ste(char*p);

int main()

{

char Str[N];

char *p=Str;

printf("请输入字符:");

gets(p);

Reverse_ste(p);

printf("逆序排列的字符:\n");

puts(p);

return 0;

}

void Reverse_ste(char*p)

{

char temp;

int i=-1, n, j;

do{

i++;

}while(*(p+i)!='\0');

i=i-1;

n=i/2;

for(j=0;j<=n;j++)

{

temp=*(p+j);

*(p+j)=*(p+i-j);

*(p+i-j)=temp;

}

}

三【实验小结】

编程不熟练,还需要勤加练习。

第二部分:结构体

【实验1—基础题】

要求:

(1)定义关于学生信息的结构体:

每个学生信息有:学号、姓名、三门课程的成绩、总分、平均分;

(2)定义结构体类型的变量:定义一个学生结构体类型的变量、通过键盘输入该学生的信息;提示:其中,学号、姓名、三门课程的成绩由键盘输入;

总分和平均分通过用户输入的学生信息计算得到。

(3)分别使用“.”运算和“->”运算实现结构体数据成员的访问,输出学生的各项信息。目的:掌握结构体的定义、结构体变量定义、结构体数据成员访问

实验结果:

#include

typedef struct

{

long studentID;

char studentName[10];

int score[4];

}STUDENT;

int main()

{

int i;

float sum=0,aver;

STUDENT stu1;

STUDENT*pt;

pt=&stu1;

printf("Input a record:\n");

scanf("%ld",&stu1.studentID);

scanf("%s",stu1.studentName);

for(i=0;i<3;i++)

{

scanf("%d",&stu1.score[i]);

}

for(i=0;i<3;i++)

{

sum+=stu1.score[i];

}

aver=sum/3;

printf("%10ld%8s%4d%4d%4d%6.1f%6.1f\n",

pt->studentID,

pt->studentName,

pt->score[0],

pt->score[1],

pt->score[2],sum,aver);

return 0;

}

【实验2—选做】

要求:(1)在实验1的基础上对程序进行改进,实现多个学生信息的处理提示:定义该类型的数组,可以处理多个学生的信息

(2)通过键盘输入N个学生的信息并输出;

目的:

实验结果:

#include

#define N 40

typedef struct

{

long studentID;

char studentName[10];

int score[4];

}STUDENT;

int main()

{

int i,j,n;

float sum[N],aver[N];

STUDENT stu[N];

STUDENT*pt;

pt=&stu[0];

printf("请输入学生人数:");

scanf("%d",&n);

for(j=0;j

{

printf("Input a record %d:\n",j+1);

scanf("%ld",&stu[j].studentID);

scanf("%s",stu[j].studentName);

for(i=0;i<3;i++)

{

scanf("%d",&stu[j].score[i]);

}

}

for(j=0;j

{

sum[j]=0;

for(i=0;i<3;i++)

{

sum[j]=sum[j]+stu[j].score[i];

}

aver[j]=sum[j]/3;

}

printf("结果为:\n");

for(j=0;j

{

printf("%10ld%8s%4d%4d%4d%6.1f%6.1f\n",

(pt+j)->studentID,

(pt+j)->studentName,

(pt+j)->score[0],

(pt+j)->score[1],

(pt+j)->score[2],

sum[j],

aver[j]);

}

return 0;

}

三【实验小结】

编程不熟练,还需要勤加练习。

相关文档
相关文档 最新文档