C语言实验报告 下载本文

内容发布更新时间 : 2024/4/28 14:13:34星期一 下面是文章的全部内容请认真阅读。

实验八 指针程序设计

【实验目的】

1.掌握变量的指针及其基本用法。 2.掌握一维数组的指针及其基本用法。

3.掌握指针变量作为函数的参数时,参数的传递过程及其用法。

【上机实习指导】

1.对以下程序进行单步运行,并从中了解变量的指针和指针变量的概念。 # include “stdio.h” void main()

{ int a=5,b=5,*p; p=&a;

*p=8; p=&b; b=10; }

按以下步骤操作:

①输入程序后,连续按三次F8,使绿条停留在P=&a诵句行上。

②用Ctrl一F7操作分别将a,b,&a,&b,p及*p显示出来。

③查看观察窗口中的内容,可发现此时a、b己有确定的地址(&a和&b)和确定的值,而p还没荷确定的值(此时语句p=&a还未执行),即p还没有明确的指向,因而它所指向的内存单元(*p)中的内容也是不确定的。

④按F8往下执行一步后再查看观察窗中的内容,可发现p已有确定的值,它与&a的值一致,说明p中存放了变量a的地址,也就是说p是指向变量a的指针变量。同时可发现,*p的内容与a的内容一致,

即p所指向的内存单元中的内容就是a的内容;从而可以理解*p等效于a,表示同一内存单元。

⑤按F8往下执行一步后再查看观察窗中的内容,可发现*p和a的内容都已发生变化,从而可理解通过改变指针变量p所指向的内存单元中的内容可以间接地改变a中的内容。

⑥再按F8往下执行一步,可发现p的值己发生变化,它与&b的值一致,说明p已经是指向变量b的指针变量,它不再是指向a,*p的内容也已变为b的内容,从而可理解指针变量的指向是随时可以改变的。

⑦再按F8往下执行一步,可发现,b的值和*p的值都已发生变化,即改变b的内容就等于改变指针变量p所指向的内存单元中的内容。

2.单步运行以下程序,观察&a[0],&a[i])和P的变化,然后回答以下问题: ①程序的功能是什么?

②在开始进入循环体之前,p指向谁?

③循环每增加一次,p的值(地址)增加多少?它指向谁? ④退出循环后,p指向谁?

⑤你是否初步掌握了通过指针变搔引用数组元素的方法? # include “stdio.h” void main()

{ int i,*p,s=0,a[5]={5,6,7,8,9}; p=a;

for(i=0;i<5;i++,p++)

41

s+=*p;

printf(“\\n s=%d”,s); }

3.先分析以下程序的运行结果,然后上机验证,并通过此例掌握通过指针变量引用数组元素的各种方法。

# include “stdio.h”

void main( )

{ int i,s1=0, s2=0, s3=0, s4=0,*p,a[5]={1,2,3,4,5}; p=a;

for(i=0;i<5;i++) s1+=p[i]; for(i=0;i<5;i++) s2+=*(p+i); for(p=a;p

p=a;

for(i=0;i<5;i++) s4+=*p++;

printf(“\\n s1=%d, s2=%d, s3=%d, s4=%d”s1,s2,s3,s4); }

【自编程序上机】

1.编写函数实现计算一元二次方程的两个实根,然后编写主函数调用此函数。

要求:在同一个函数内求出方程的两个实根,此函数不准使用全局变量进行数据传递,也不能使用return语句,只能通过指针进行数据传递。

2.编写函数,将n个数按原来的顺序的逆序排列(要求用指针实现),然后编写主函数完成:①输入10个数;②调用此函数进行重排;③输出重排后的结果。

42

【实验报告】

实习时间: 实习地点: 实习机号: 具 体 实 验 内 容 43

程 序 调 试 过 程 实 习 小 结 44

实验九 结构体程序设计

【实验目的】

1.掌握结构体类型变量与结构体数组的定义和使用。 2.学会使用结构体指针变量和结构体指针数组。

3.掌握链表的概念,初步学会对链表进行操作。

【上机实习指导】

1.输入出10个学生的学号、姓名和成绩,求出其中的高分者和低分者。 # include “stdio.h” struct student { int num;

char name[20]; int score; };

void main( ) { int i;

struct student st,stmax,stmin; stmax.score=0; stmin.score=100; printf(“\\n input data”); for(i=0;i<10;i++)

{ scanf(“%d%s%d”,&st.num,st.name,&st.score);

if(st.score>stmax.score) stmax=st; if(st.score

printf(“\\n hight:]s]”,stmax.num,stmax.name,stmax.score); printf(“\\n low:]s]”,stmin.num,stmin.name,stmin.score); }

①分析程序,上机运行程序。

②程序中,哪些是对结构体变量的成员引用,哪些是整体引用? ③对于此例来说,用结构体变量作为数据结构有何优越性?

【自编程序上机】

1.有一学生情况如下表所示。编制一个C程序,用冒泡法对该学生情况表按成绩(grade)从低到高进行排序。

45