内容发布更新时间 : 2025/1/11 12:09:22星期一 下面是文章的全部内容请认真阅读。
实验八 指针程序设计
【实验目的】
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