实验指导书(全14周)

更新时间:2023-11-18 06:59:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验十一 指针的概念、指针的运算以及指针与数组

一.实验目的

1. 熟练掌握指针、地址、指针类型、void指针、空指针等概念;

2. 熟练掌握指针变量的定义和初始化、指针的间接访问、指针的加减运算和指针表达式; 3. 会使用数组的指针和指向的指针变量;

4. 会使用字符串的指针和指向字符串的指针变量

二.实验内容

1. 验证实验:

阅读程序,分析可能产生的结果,并在机器上运行; ⑴

#include main() {

int I,*p; p=&I; *p=5;

printf(“%d\\n”,i); printf(“%d\\n”,*p); printf(“%d\\n”,p); printf(“%d\\n”,&i); }

如果将第三和第四条printf()语句中的%d改为%p,会产生什么结果?为什么? ⑵

#include main() {

int a[5]={1,2,3,4,5}; int *p1,*p2,num; p1=&a[0]; p2=&a[3]; num=p2-p1;

printf(\if (p2==p1) p2++;

printf(\}

修改本程序,将a数组中的元素前后置换,即形成以下的排列:a[5]={5,4,3,2,1}。

提示:用p1指针指向a[0],p2指针指向a[4],利用一个中间变量t,交换p1和p2所指的目标,然后p1和p2指针再进行必要的移动。 ⑶

#include #include #include void main() {

int a[10], sum=0, *p; float ave; randomize();

for(p=a; p

*p=rand()0; printf(“%d”,*p); }

printf(“\\n”);

for(p=a; p

ave=sum/10.0;

printf(\printf(\}

本程序是一个知识的拓展实验,学会使用随机函数的使用方法。请分析该程序,并指出该程序所完成的功能。

2、能力培养实验:

以下的程序是将字符串s2中的内容全部复制到字符串s1中。请阅读该程序,并分别使用求串长的方法、函数调用的方法以及指针的方法改写该程序,使得其亦能完成上述功能。 #include #define N 50 void main() {

char s1[N] , s2[N]; gets(s2);

for( int i=0;s2[i]!=’\\0’;i++) s1[i]=s2[i]; s1[i]=’\\0’;

1

printf(“s1=%s\\n”,s1); puts(s2); }

在输入s2数组时,将gets(s2)改为scanf(\并分别输入带有空格的串和不带空格的串,比较输出的结果。并在实验报告中给出你的解释。

3、综合素质能力拓展实验:

编写程序,从键盘上输入10个任意的整型数到a[10]中,将这10个数按由小到大的顺序排列。强调:一定要求使用指针的方法。

三、问题讨论

1、指针的输入输出格式符是什么?该怎么应用?如果有程序段为: #include main() {

int a[5], I, *p ; p=a;

for(i=0;i<5;i++,p++) sacnf(“%d”,*p); printf(“\\n”); p=a;

for(i=0; i<5; i++,p++) printf(\printf(“\\n”); }

请问该程序有无错误,如果有,该程序应该怎样修改?

2、指针可以进行哪些运算,指针和指针的相减,其结果表示的是什么? 3、到目前为止,数组元素及其地址的表示方法你知道的有哪些? 4、字符串与字符串数组有何相同和不同之处?

2

实验十二 指针的操作

一. 实验目的

1.熟练掌握指针的运算(算术运算、关系运算和赋值运算)。

2.熟练掌握几种不同类型的指针(指向变量的指针、指向数组的指针、指向字符读串的指针、指向函数的 指针、指向指针的指针)。 3. 进一步学会调试程序

二. 预习知识

1. 指针的运算(算术运算、关系运算和赋值运算)

2. 几种不同类型的指针(指向变量的指针、指向数组的指针、指向字符读串的指针、指向函数的指针、指向指针的指针) 3. 指针在更多实际问题中的应用

三. 实验内容及步骤

1.上机运行下列程序,并打印其结果。 ⑴ main()

{int x=2,y=10,z,*p; z=x+y; p=&x;

printf(\p=&y;

printf(\p=&z;

printf(\}

⑵ main() {char *a[5]; int x;

a[0]=\a[1]=\

a[2]=\a[3]=\a[4]=\

for(x=0;x<=4;x++)

3

printf(\}

⑶ #include void test(int_p) int *int_p; {

*int_p=200; }

main()

{ int i=151,*p=&I;

printf(“I before the call to test=%d\\n”,i); test(p);

printf(“I after the call to test=%d\\n”,i); }

⑷ main()

{static int a[]={1,2,3,4,5}; int *p=a;

printf(\printf(\p=a+2;

printf(\}

⑸ main() {int add();

static int a[]={1,2,3,4,5,6,7,8,9,10}; int *p,t; p=&a[1]; t=add(p,10);

printf(\}

add(int *q,int n) {int I,s=0;

for(i=0;i

⑹ main() {

int x,*p1,**p2,***p3,****p4;

4

x=8888; p1=&x; p2=&p1; p3=&p2; p4=&p3;

printf(\printf(\}

⑺ main()

{char *b,c[10]; int x,*a;

strcpy(c,”goodbye”); b=”hello”; a=&b; x=&c[10]; *a=x;

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

⑻ main()

{static int a[9]={1,2,3,4,5,6,7,8,9}; int I,j,x,y,*p=a; scanf(\

for(i=0;i<9;i++,p++) if(x==*p) y=*p-5;

printf(\

for(p=a+1;p

printf(\}

printf(\p-=5;

y=(y

2.用指针方法编写程序,输入三个整数,按由小到大的顺序输出。 3.用指针方法编写程序,输入三个字符串,按由小到大的顺序输出。 4. 输入一行文字,找出大写字母、小写字母、空格、数字以及其他字符 各有多少?

5.将a数组中的n 个整数按相反顺序存放。

6. 将给定字符的第一个字母变成大写字母,其它字母变成小写字母。

5

7.在主函数中输入10个不等长的字符串。用另一个函数对它们排序,然后在主函数中 输出这10个已排序的字符串。

8.编一函数,其功能是删除一个字符串中的所有空格。 例如:输入字符串“This is a string\ 则输出“Thisisastring\。

9.某班有学生30人,开设五门课程,分别用三个函数实现如下操作: ⑴求各门课程的平均分;

⑵找出有两门以上不及格的学生,并输出其学号和不及格课程的成绩; ⑶找出五门课平均成绩在85~90分的学生。

10.用指针型指针对n个整数进行排序,并将结果顺序输出。要求排序用一个函数实现, 主函数只输入n个整数和输出已排序的n个整数。

11.编写一个函数alloc(n),用来在内存新开辟一个连续的空间(n个字节)。再写一 个函数free(p),将以地址p开始的各单元释放。主程序输入10个不等长的大写字符 串,每输入一个字符串,应放在新申请的一片连续的空间。该字符串反序输出后, 释放它所占用的空间。

五.实验要求及总结

1. 结合上课内容,对上述程序先阅读,然后上机并调试程序,并对实验结果写出你自己的分析结论。

2. 整理上机步骤,总结经验和体会。 3. 完成实验报告和上交程序。

6

实验十三 结构体和共用体

一、实验目的

1. 掌握关于预处理的知识

2.掌握C语言中结构体类型的定义和结构体变量的定义和引用。 3.了解关于共用体的相关知识

4.掌握用结构指针传递结构数据的方法。 5.熟悉TC集成环境的调试结构程序的方法

二、实验内容及步骤

1.设计一个保存学生情况的结构,学生情况包括姓名、学号、年龄。输入5个学生的情况,输出学生的平均年龄和年龄最小的学生的情况。要求输入和输出分别编写独立的输入函数input()和输出函数output()。

2.使用结构数组输入10本书的名称和单价,调用函数按照书名的字母顺序序进行排序,在主函数输出排序结果。

3.建立一个有5个结点的单向链表,每个结点包含姓名、年龄和工资。编写两个函数,一个用于建立链表,另一个用来输出链表。

三、实验要求

1.复习结构体类型的定义,结构体变量、数组的定义和使用方法。 2.复习结构指针及其应用,如链表。 3.编写程序,运行程序并记录运行结果。

4.将源程序、目标文件、可执行文件和实验报告存在服务器的指定文件夹中。

四、选做题

1.在上述第3题的基础上,编写插入结点的函数,在指定位置插入一个新结点。 2.在上述第3题的基础上,编写删除结点的函数,在指定位置删除一个结点。

五.实验要求及总结

1.复习结构体类型的定义,结构体变量、数组的定义和使用方法。 2.复习结构指针及其应用,如链表。 3.编写程序,运行程序并记录运行结果。

4.将源程序、目标文件、可执行文件和实验报告存在服务器的指定文件夹中。

5. 结合上课内容,对上述程序先阅读,然后上机并调试程序,并对实验结果写出你自己的分析结论。

6. 整理上机步骤,总结经验和体会。 7. 完成实验报告和上交程序。

7

实验十四 文件

一.实验目的

1.掌握C语言中文件和文件指针的概念

2.掌握C语言中文件的打开与关闭及各种文件函数的使用方法。 3.熟悉TC集成环境的调试文件程序的方法

二. 预习知识

1. 文件和文件指针的概念

2. C语言中文件的打开与关闭及各种文件函数 3. 如何将文件应用到实际问题

三、实验内容

1.编写程序,输入一个文本文件名,输出该文本文件中的每一个字符及其所对应的ASCII码。例如文件的内容是Beijing,则输出:B(66)e(101)i(105)j(106)i(105)n(110)g(103)。 2.编写程序完成如下功能:

⑴ 输入5个学生的信息:学号(6位整数)、姓名(6个字符)、3门课的成绩(3位整数1位小数)。计算每个学生的平均成绩(3位整数2位小数),将所有数据写入文件STU1.DAT;

⑵ 从STU1.DAT文件中读入学生数据,按平均成绩从高到低排序后写入文件STU2.DAT;

⑶ 按照输入学生的学号,在STU2.DAT文件中查找该学生,找到以后输出该学生的所有数据,如果文件中没有输入的学号,给出相应的提示信息。

3.用编辑软件建立一个名为\的文本文件存入磁盘,文件中有18个数。从磁盘上读入该文件,并用文件中的前9个数和后9个数分别作为两个3*3矩阵的元素。求这两个矩阵的和,并把结果按每行3个数据写入文本文件\。用DOS命令TYPE显示d2.txt。

四、选做题

1.建立两个由有序的整数组成的二进制文件f1和f2,然后将它们合并为一个新的有序文件f3。

2.编写程序,功能是从磁盘上读入一个文本文件,将文件内容显示在屏幕上,每一行的前面显示行号。

五.实验要求及总结

1.复习文件的读写方法。

2.编写程序,运行程序并记录运行结果。

8

3.源程序、目标文件、可执行文件和实验报告存在服务器的指定文件夹中。

4. 结合上课内容,对上述程序先阅读,然后上机并调试程序,并对实验结果写出你自己的分析结论。

5. 整理上机步骤,总结经验和体会。 6. 完成实验报告和上交程序。

9

本文来源:https://www.bwwdw.com/article/gctv.html

Top