1.3 数据结构与 C 语言表示
【数据结构与程序设计的关联性】
良好的数据结构可以提高程序的效率。
问题描述
欲求 1 名学生 10 次 C 语言程序设计的测试成绩总分与平均分。其中 10 次测
验的成绩分别为:80,85,77,56,68,83,90,92,80,98。
程序示例 1-1
main()
{ int sum,verage; /*总分,平均分*/
int t1,t2,t3,t4,t5,t6,t7,t8,t9,t10; /*10 个变量存 10 次成绩*/
t1=80;t2=85;t3=77;t4=56; t5=68; /*分别赋值*/
t6=83;t7=90;t8=92;t9=80;t10=98;
sum= t1+t2+t3+t4+t5+t6+t7+t8+t9+t10; /*计算总分*/
average=sum/10; /*计算平均分*/
printf(“总分=%d\n”,sum); printf(“平均分=%d\n”, average);
}
要用该程序计算另一名学生的10次成绩就得修改程序;如考试测验次数改变也要修改程序,程序扩充性与通用性较差。
程序示例 1-2
根据测试次数与测试成绩的关系,采用数组结构存储测验成绩,提高了程序的适用范围。
main()
{ int sum,erage;int i;
int t[10] ={80,85,77,56,68,83,90,92,80,98}; /*分别赋值*/
sum=0; /*总分置初值*/
for (i=0; i<10; i++)
sum=sum+t[i];
average=sum/10; /*计算平均分*/
printf(“总分=%d\n”,sum); printf(“平均分=%d\n”, average);
}
分析以上两个程序,虽然都可以正确解决问题,但采用不同的方式存储成绩数据,可以生成不同的程序设计方式。因此,选择最佳的数据结构,并提供策略方法有效地利用这些数据,可以达到高效、低耗地解决问题。学习数据结构正是要学习前人程序设计的学问。
【结构化程序设计与函数的模块化】
结构化程序设计是一套规范程序设计方法,它采用合理的结构以确保程序的正确执行。
结构化程序设计由顺序结构、选择结构和重复结构构成。此外需要注意:应该尽可能少的使用 GOTO 语句,因为 GOTO语句会使程序的静态结构与动态执行不一致。
结构化程序设计的主要思想是“自顶向下,逐步求精”,每一个模块具有独立的功能,设计过程中仅使用三种基本结构。
【用 C 语言实现抽象数据模型】
抽象数据模型是由数据对象、结构关系和数据操作构成的。
课件中以线性表的抽象数据类型为例子。数据对象的定义可以使用现有的数据类型或者自定义的数据类型。用 C 语言实现抽象数据模型一方面需要使用 typedef 定义新的结构体类型,另一方面对于每一个数据操作使用一个函数来实现。
【算法描述规范与设计风格】
算法的规范描述方法是使用 C 中函数定义形式,每一个函数可以实
现特定的功能。算法描述要点有很多,比如必须对相关的功能、参数增加必要的注释以增强可读性。
【参数传递的相关技术】
在函数调用中可使用单向值传递或地址传递
下面是关于参数传递示例源程序:
#include <stdio.h>
viod swap1(int a,int b)
{
int c;
c=a; a=b; b=c;
printf(“swap1 中的 a= %d,b=%d”,a,b);
}
viod swap2(int *a,int *b)
{
int c;
c=*a, *a=*b, *b=c;
}
void main()
{
int x=100,y=800;
swap1(x,y); /*调用函数 swap1()*/
printf(“\n 调用 swap1 后 x= %d,y=%d”,x,y); /*输出调用 swap1 后的数据*/
x=100;y=800;
swap2(&x,&y); /*调用函数 swap2()*/
printf(“\n 调用 swap2 后 x=%d,y=%d”,x,y); /*输出调用 swap2 后的数据*/
}
程序的输出结果为:
- swap1 中的 a=800,b=100
- 调用 swap1 后 x=100,y=800
- 调用 swap2 后 x=800,y=100
调用 swap1 时,采用的是单向值传递,即便在 swap1 函数体中实现了两个变量互换内容的操作,但是当函数 swap1 调用结束后,由于变量 a,b 是自动局部变量,所以 a,b 值的变化结果无法带出。
调用 swap2 时,采用的是地址传递,实参传递的是变量 x 和 y 的地址, 在 swap2 的函数体中,通过访问指针变量 a 和 b 所指向的实参单元, 实现了主函数中变量 x 和 y 中值的交换。x 和 y 变量相对于 swap2 而言,是全程有效的。
本文探讨了C语言中数据结构的应用,对比了两种不同程序设计方法处理学生测试成绩的效率,强调了数组在提高程序通用性和适用性方面的作用。同时,文章介绍了结构化程序设计的原则,包括使用顺序、选择和重复结构,以及避免过度使用GOTO语句的重要性。此外,还讨论了如何在C语言中实现抽象数据模型,并概述了算法描述规范、设计风格以及参数传递的技术。

被折叠的 条评论
为什么被折叠?



