数据结构中用到的 C 语言基本知识
《数据结构》中必要的 C 语言基本知识
有必要将数据结构所必须使用的 C 语言语法在此做简单介绍。根据多年教学实践,学 生完成上机实验练习时遇到的主要问题是,不能正确的输入数据,结构体概念陌生,函数 的传址调用概念不清,指针与链表有的没有学过。由于篇幅所限,这里仅对前三个问题加 以介绍。如果学生基础好,可以越过这一部分内容不看。
一、基本输入和输出
对于重要的数据结构算法,均要求进行上机实验。而上机实践中离不开数据的输入 / 输出。看起来简单的输入 / 输出,往往是上机实验最容易出错的地方,尤其是输入。对于 一个算法程序,如果数据不能正确输入,算法设计得再好也无法正常运行。
1 . 输入
C 语言的输入是由系统提供的 scanf() 等函数实现, 在程序的首部一般要求写入: # include
因为标准输入 / 输出函数都存在于头文件 stdio.h 之中,现将其包含进来方可使用这 些常用的输入 /输出函数。有的系统允许不使用上述包含语句,可以直接使用标准输入 / 输 出函数。
函数 scanf() 的功能很丰富,输入格式也是多种多样,这是大家较为熟悉的知识,这 里不做详细介绍。在使用中需要注意以下几个问题。
( 1) 一条 scanf() 语句有多个变量、并且都是数值型( int, float, double )时, 在输入数
据时应该在一行之内键入多个数据,数据之间空格分隔。例如:
int n; float x;
scanf ( “%d %f ” , &n, &x);
正确的输入应是:整数 空格 实数 回车。例如:
就是在两个数据之间使用空格键为分隔符,最后打回车键。
如果语句中在%d和%f之间有一个逗号:
scanf ( “%d ,%f ” , &n, &x);
正确的输入应是:整数 逗号 实数 回车。例如:
100 , 3.14
(2) 在需要字符型变量或字符串输入时,要单独写一条输入语句,这样不易出错。 如果在同一条 scanf() 语句中将字符型和数值型混合输入常常会出错。因为键盘输入时在 数值型数据之间‘空格键'起‘分隔符'作用,但是在字符或字符串之间,‘空格'会被 当做一个字符,而不能起到‘分隔符'的作用。所以将它们混在一起容易出错。
( 3)在 scanf() 语句中变量写法应该是该变量的地址,这一点常被忽视。 请看下列 程序:
1: viod main()
2: { char name[10], ch ;
3: int num; float x;
4: printf( “ \n 请输入姓名:” ); scanf( “%s” , name);
5: printf( “ \n 请输入性别:” ); scanf( “%c” , &ch);
6: pr intf( “ \n 请输入学号和成绩:” ); scanf( “ %d%f” , &n, &x);
}
为了方便说明问题程序中加了行号,运行时当然不允许行号。一般情况下在 scanf() 语句中的变量名之前要加上求地址符 &,上述程序第 5,6 行之中就是这样。为什么第 4 行 的 name 前面不加 &呢?因为 name 代表字符串,即是一维字符数组,一维数组名本身就是 一个地址,是该数组的首地址,所以 name 前面不加 &。
在本程序中把字符串、字符、数值型变量分别写入不同的 scanf() 语句,输入数据的 具体形式如下:
请输入姓名: ZhangHua
请输入性别: v
请输入学号和成绩: 101 90.5
请考虑如果姓名输入成: Zhang Hua ,会出现什么现象?那样只会读入 Zhang 做姓名, 而 Hua 被忽略,还会影响后面的输入语句无法正确读入数据。
因此,应该充分重视数据的输入技术。
输出
C 语言的输出是由系统提供的 printf() 等函数来实现, 在程序的首部一般要求写入: # include
因为标准输入 / 输出函数都存在于头文件 stdio.h 之中,现将其包含进来方可使用这 些常用的输入 /输出函数。有的系统允许不使用上述包含语句,可以直接使用标准输入 / 输 出函数。
输出函数 printf() 的语法一般容易掌握,这里强调的是怎样合理巧妙的使用它。
在连续输出多个数据时,数据之间一定要有间隔,不能连在一起。
int n=10, m=20, p=30;
printf( “ n %d%d%”d ,n,m,p);
prin tf( “ n %6d%6d%6”d,n,m,p); // 提倡使用的语句
第一行输出是: 102030
第二行输出是: 10 20 30
在输入语句 scanf() 之前先使用 printf() 输出提示信息,但是在 printf() 最后不 能使用换
行符。
int