C语言基本讲义

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《C语言》讲义
余晓春
第一章C语言程序设计初步
一、程序设计思想的发展
面向机器———》面向过程———》面向对象———》面向问题
机器语言—》汇编语言—》高级语言—》面向对象语言—》软件制造工厂
二、各种典型程序设计语言
asm 汇编语言
masm 宏汇编语言
Basic 语言(basica qbasic等)
Pascal 语言语法严谨,作为教学语言
Fortran 语言有强大的科学计算能力
C语言灵活、高效、移植性好
Foxpro 主要用于开发数据库应用程序
Power Builder 主要用于开发数据库应用程序
C++ (BorlandC++ MicroSoft C++等)面向对象设计语言
Object Pascal Pascal的面向对象版本
Visual C++ C++可视化语言
C++ Builder
Delphi Pascal可视化设计语言
Visual Basic 简单易学
Java 在C语言发展起来,移植性好,“一处编程,处处运行”VBScript和JavaScript:脚本语言,可以嵌入到网页中
SQL语言数据库操作语言
三、C语言的使用环境
1、编程的过程
2、使用Turbo C2.0版本
Turbo C2.0提供了集成环境,这些步骤可以透明完成。

文件操作
编译
连接
运行
四、C语言程序的结构
例:
#include<stdio.h>
main()
{ /*主程序开始*/
int x; /*声明变量x */
printf(“3+5=?”); /*提问*/
scanf(“%d”,&x);/*输入*/
if (x!=8) /*评判*/
printf(“笨蛋!”);
else
printf(“聪明!”);
} /*主程序结束*/
1、包括头文件用#include< >
或#include” ”
2、main()函数:main是函数名()是函数的标志,里面放着参数
函数体用{}括起来
3、各种语句
练习1:输入一个整,判断是否自然数。

练习2:输入两个数,求各自的绝对值。

五、函数初步
1、使用系统提供的函数
必须在程序开头加上#include
2、使用自己实现制作好或第三方制作商提供的函数
必须在程序开头加上#include
3、自己设计函数
函数命名:能够望文生义
函数参数:要处理、加工的数据
返回值:函数运算后的结果(可以没有返回值用void),在函数体中用return语句带出。

第二章数据描述与基本操作
一、数据类型
1、计算机中数的表示
采用二进制,存储器(内存和外存)是以字节为单位的,一个字节8位。

表示字符:用8位
表示整数:用两个字节即16位
表示小数:用4个字节即32位
这些数的表示范围P21表
这些数可以是有符号数、也可以是无符号数
2、C语言有丰富的数据类型P16
带符号和不带符号
各种类型长度的测试P21
二、常量和变量
1、量是指在程序执行期间值不能发生变化、具有固定值的量。

分为直接
常量和符号常量
直接常量:
正数:十进制、八进制(以0打头)、十六进制(以0x打头)
实数:
字符:以单引号标识、一些特殊符号的表示P24
字符串:以双引号标识,可以有0个、一个或多个字符,结束的标志
符号常量:定义常量的方法#define
符号常量的作用
2、变量
使用前要先声明(预先为该变量分配存储空间、可以一次声明多个、可
以在声明的同时赋初值)
命名方法(以字母或下划线开头的字符序列、不能是关键字、长度无规
定、大小写敏感)
变量的赋值
三、运算符
1、分类P29
算术运算符:+、-、*、/、%、++、--
关系运算符:>、<、==、>=、<=、!=
逻辑运算符:!、&&、||
位运算符:<<、>>、~、|、^、&
赋值运算符:=
条件运算符:( ?:)
逗号运算符:,
指针运算符:*、&
求字节运算符:sizeof
强制类型转换运算符:(类型)
分量运算符:. 、->
下标运算符:[下标]
2、操作数个数(单目、双目运算)
3、优先级
4、结合方向:左结合、右结合,看运算的先后顺序是先左到右(左结合)
还是先右到左(右结合)
5、算术运算:
*/+-%、+=、-=
自加和自减
6、关系运算、逻辑运算与条件运算
关系运算:大小比较(大于>、小于<、等于==、不等于!=、大于等于>=、小于等于<=),其值只有两个:真1、假0
逻辑运算:与&&、或||、非! P34
&&并且的意思,在A&&B中,如果A为假,则不用判断B
||或者的意思,在A||B中,如果A为真,则不用判断B 条件运算:在两个表达式中的值选择一个的操作。

e1?e2:e3
相当于:x=e1?e2:e3;
if e1= =1
x = e2;
else
x=e3;
p36例2.9、2.10
练习:求下列表达式的值
1<4 && 4<7
!(2<=5)
!(1<3)||(2<5)
!(4<=6)&&(3<=7)
四、类型转换
1、转换形式
短变长:无符号数则用零扩展,有符号为则用符号位扩展,能够使数值
保持不变。

长变短:小数变整数---》截取整数部分、如果整数部分超出整数的表示范围则截去高位。

double变float----》四舍五入
相同长度转变:有符号—》无符号
无符号—》有符号
数据存储形式不变,理解上的不同。

2、隐式转换
(1)、一般算术转换:当运算符两边的数据类型不一致时,运算结果向长看齐例P41
(2)、赋值转换:等于号左右边的类型不同,自动转换为左边的类型
(3)、输出转换:在输出语句中指定输出的类型。

3、显式转换
强制类型转换
(类型名) 要转换的数
五、数据的输入输出
1、标准的输入输出函数的函数原型放在stdio.h中
输入输出都跟外设打交道,可以是数据文件,也可以是外围设备(设备文件,例如可以把输出重定向“>”到打印机、文件中)
2、printf函数
格式(函数原型):printf(格式化控制参数,输出项1,输出项2,…);
格式化控制参数中,用%引出的格式:
% - 0 m.n l或h 格式字符
其中%为格式化串的标志
-为左对齐
0填0标志
m.n为域宽及精度,m指总长度,包括小数点;n指小数位数,默认为6位
l:长整数、双精度
h:短整数
格式字符见P44表
比较常用的是%d %ld %lf %10.3f等形式
3、scanf函数
格式:scanf(格式控制参数,地址1,地址2,…);
(1)、多个变量的分隔问题
i、自动分隔。

当输入流中数据类型与格式字符要求不符时,就认为这一数据项结束,如:scanf(“%d%c%f”,&a,&b,&c);
输入:1234r1234.567
则a=1234 b=r c=1234.567
ii、指定宽度
如:scanf(“%2d%3f%4f”,&a,&b,&c);
输入:12345678987654321
则:a=12 b=345.000000 c=6789.000000
iii 、指定分隔符
例如:scanf(“%d,%d,%d”,&a,&b,&c);
输入:12,34,56
iv 、虚读
scanf(“%3d%*4d%f”,&a,&f);
输入:12345678765.43
则a=123 虚读4个字符后(4567),f=8765.43
(2)、scanf()函数的返回值是成功匹配的项数。

例如P49
(3)、关于输入缓冲区
输入结束后,按回车键scanf 函数才能接收数据,如果输入的数据太多,则余下的数据保存在缓冲区中,下一个scanf 函数可以接着使用。

4、其他输入输出函数
(1)、getchar() 从键盘获得一个字符,并把该字符返回,按回车才有效 putchar(char ch) 把字符ch 显示出来
(2)、getch() 无回显输入,不用按回车就可以接收,包含在conio.h 中。

作业:(1)、输入角度A,判断并输出角A 是第几象限的角。

(2)、输入三角形三条边的长度a 、b 、c ,判断该三角形的类型,并计算该三角形的面积。

(3)、输入一坐标值,按照(x,y)的格式输入,计算该坐标值到原点的距离、并计算该点到原点的连线与X 轴夹角a 的sin(a)、cos(a)、tg(a)、ctg(a)值。

实验存在的问题:
1、编程环境
几个热键:<F9>、<Ctrl>+<F9>、<Alt>+<F5>、<F2>
编译后,在源程序目录下生成目标文件、可执行文件
2、注意一些书写
例如scan f 、print f
3、程序中计算表达式的表示 例如:)(2
1b a 应表示为:1/2*(a+b)
4、scanf(“格式化串”,参数1,参数2,…)
参数必须用地址,要注意输入的格式
而printf(“格式化串”,参数1,参数2,…)
参数不必用地址,主要看格式化串中的类型
5、函数
一般要在main函数前面声明一下自编函数的原型
#include<stdio.h>
int fnMax(int x, int y)
{
if (x>y)
return(x);
else
return(y);
}
main()
{
int a,b,c,iMax;
printf(“\nPlease input 3 integer:”);
scanf(“%d,%d,%d”,&a,&b,&c);
iMax = fnMax(a,b);
iMax = fnMax(iMax,c);
printf(“\nThe max of %d,%d,%d is:%d”,a,b,c,iMax); }
第三章C语言的流程设计
一、算法
算法+数据结构=程序
算法的基本结构有:顺序、选择、循环
算法的描述方法有:流程图、N-S图、PAD图、伪代码
二、选择型语句
1、if…else结构
格式:if (条件表达式){
语句组1
}
else{
语句组2
}
else部分可选
P69例3.3
2、if…else结构的嵌套
上例中的语句组也可以是一个if语句
要注意if和else的匹配
例如:
if (条件表达式1){
其他语句
if (条件表达式2){
}
else{
语句组
}
其他语句
}
else if (条件表达式3){
其他语句
if(条件表达式4){
语句组
}
其他语句
}
else{
语句组
}
p97练习3.3
例子:求一元二次方程ax2+bx+c=0的根。

分析:
例子:全班100个同学,求《C语言程序设计》的平均分,并求每个分数段的人数。

分析:
不及格1—59::i0
60—69::i6
70—79:i7
80—89:i8
90—99:i9
100:i10
总人数:iCount
总分:iSum;
平均分:fAvg;
算法:输入—》合法性检查—》分数加入总分,判断该分数所属分数段,该分数段变量+1,
3、switch结构
注意break和default
三、循环语句
1、for(初始化语句;条件表达式;修正语句){
循环体
}
一般用在循环次数比较固定的情况
特点:循环体有可能没有执行到
break:退出循环
continue:
例如:求1+2+…+100
死循环:for(;;)
2、while(条件表达式){
循环体
}
特点:循环体有可能没有运行到
P85例3.18搬砖问题
P87例3.19阶梯问题
例3.20最大公约数问题
例3.21牛顿迭代求平方根问题
关键是推导出迭代关系式、循环条件的设置
3、do{
循环体
}(不能加分号)
while(条件表达式);
特点:循环体最少运行一次
4、循环的嵌套
循环体中出现循环语句。

for语句的嵌套、循环体中也可以出现for语句
P87阶梯问题
求三个符合条件的阶梯
main()
{
int ladders=7;
while(ladders%3!=2 || ladders%5!=4 || ladders%6!=5) ladders+=14;
printf(“flight of stairs=%d\n”,ladders);
}
第四章模块化程序设计
一、思想
把复杂的问题分而治之,分为一些小问题,小问题解决了,复杂的问题也就解决了,我们只要把精力集中在每个小问题的解决
模块化的必要性
二、C语言中的函数
C语言是函数驱动的,main()函数就是一个主控函数,调用其它函数
软件系统中的菜单(弹出式、下拉式)、按钮
P102例4.1
1、函数的概念
功能较独立的程序块,独立出来,用一个名字来表示,使用该功能时,用该名字就可以了。

减少程序长度、便于修改
函数名字起得好,可以增加程序的可读性,使程序的结构清晰。

fnMax()、fnMin()、fnSetValue()、fnPrint()等
2、自定义函数
C语言中有些函数是系统提供的,只要知道其功能(用在什么地方)和调用形式(怎么用),就可以直接使用
也可以自己设计函数
(1)、函数声明
对函数的特征(返回值、参数类型、参数个数)进行说明
函数参数:要处理的数据,可以是0个、1个或者多个(参数间用逗号)
返回值:处理后的结果或者操作后的状态,可以没有返回值(要用void说明)例如:sin(x)
函数的声明可以放在所有函数外面、也可以放在main()函数内。

求整数绝对值的函数:
int fnIntAbsolute(int a);
制作函数求1+2+…+n
int fnSum(int n);
打印n个空格的函数:
void fnPrintSpace(int n);
打印n个“*”号的函数:
void fnPrintStar(int n);
这两个函数可以合并:
(2)、函数的定义
编写函数的代码
返回值用return()语句
例如:上面各个函数的实现
(3)、函数的使用
注意调用时的形式要跟声明的形式一致。

关于实参和形参
实参是定义在调用者中的变量
形参是实参的一个替身
3、函数的嵌套和递归
嵌套:函数中可以调用别的函数
递归:直接递归:函数中可以调用自己(名字与调用者一样的函数)间接递归:A调用B,B调用A
例如:P111例4.9
练习:P136 4.1 4.2 4.3 4.4
三、变量的作用域
变量的有效范围
1、全局变量:定义在所有函数之外的变量,所有的函数都可以访问到,其默认初值为0
例如:
#include<stdio.h>
int x;
void fnPrint();
main()
{
for(x=0;x<5;x++)
printf(“%d”,x);
fnPrint();
}
void fnPrint()
{
printf(“%d”,x);
}
2、局部变量:定义在函数里面,只有函数内部可以访问到,没有默认初值。

把int x定义函数内。

注意:i)在一个函数内,相同名字的变量名不能声明两次
ii)系统碰到一个变量名时,先在函数内部查找,找不到就在全局变量里查找。

3、关于寄存器变量(用register关键字说明):为了提高运算速度,把变量放在CPU的寄存器中
4、静态变量(用static说明):默认初值为0,提供了一种函数共享局部变量的方法。

例如:(2)中前面再加上static
例如:P120 4.15
例1:交换两个变量的值。

例2:利用随机数生成函数random(),(在stdlib.h中),随机得到两个0到99之间的整数,输入这两个数的和,让计算机判断。

例3:用菜单显示加、减、乘、除功能,让用户选择,并完成相应功能。

四、宏定义
1、用
#define 宏名宏体
的格式,编译时,在程序中碰到该宏名时就用宏体代替。

P127 4.20
好处:增加程序的可读性、便于修改
2、带参数的宏
P130 4.22
P131 4.25
3、定义宏的注意事项
P134 6点
练习P140 4.14 4.17 4.18
作业:1、编程求1!+2!+3!+…+n! n从键盘输入。

2、编程求水仙花数。

水仙花数指一个三位数,其各个数字立方和等于该数。

例如:153=13+53+33
3、编程输出下面图形:
第五章数组
一、基本概念
1、关于内存地址
内存编排是线性连续的,是以字节(8个二进制位)为单位的,每个字节都有一个编号,这个编号就是地址编号。

这些地址并不能随便使用,必须由系统分配后(声明变量或动态申请)才能使用。

如果使用了一个不经分配的地址空间,可能会有灾难性的后果。

2
1
内存的表示图
2、数组是指一组同类型数据组成的序列,每个数据称为数组的元素。

这些数据在内存中是一片连续的空间。

这片空间的最前面一个的内存编号叫做数组的首地址。

数组中用下标来表示该元素与首地址的位置关系。

二、一维数组
只有一个下标的数组
1、格式
数据类型数组名[数组元素个数];
例如:int a[5];
char c[10];
long x[5];
double d[100];
unsigned u[20];
元素个数必须是常整数
int n=10;
char c[n];
#define n 10
char c[n];
下标是从0开始到个数-1
讨论各个数组所占的空间
首地址:(1)用数组名表示
(2)最前面元素的地址
输出地址值用格式化参数“%p”
2、数组赋值
(1)、声明后,程序中赋值
注意不要超出范围
int a[10];
a[0] = 34;
a[1] = 45;
a[10] = 90;
for (x=0;x<=9;x++) a[x] = x*8;
(2)、在声明时赋初值
int a[5]={1,3,5,7,9};
char c[11]={…H‟,‟e‟,‟l‟,‟l‟,‟o‟,‟ …,‟w‟,‟o‟,‟r‟,‟l‟,‟d‟};元素个数可以省略
3、数组作为函数参数
(1)、数组元素作为参数
例如:3个数求平均
(2)、数组名作为参数(传地址)
例如:交换两个数的值
4、应用
(1)、P146 例5.1
(2)、统计各个分数段的成绩
(3)、对n个数排序
冒泡法
有n个数,下标值从0到n-1,即a[0]..a[n-1] 扫描一趟找出一个最大数,则扫描的趟数:n-1 即外循环:for(i=0;i<n-1;i++)
每趟扫描都要从0..n-i-1中交换出最大值:
for(j=0;j<=n-i-1;j++){
if (a[j]>a[j+1]){
temp=a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
(4)、查找
顺序查找:从0到n-1按照顺序查找,效率低
二分查找:对有序表
上机作业:
用数组保存班里同学的成绩,完成的功能:
录入成绩,修改成绩,输出最高分,最低分,平均分,
进行各个分数段人数的统计,成绩排序,显示输出全班成绩。

用菜单实现。

三、二维数组
有两个下标的数组
1、定义格式
类型数组名[下标1][下标2]
2、存放顺序:下标1表示行,下标二表示列
例如:a[3][4]
a[0][0] a[0][1] a[0][2] a[0][3]
a[1][0] a[1][1] a[1][2] a[1][3]
a[2][0] a[2][1] a[2][2] a[2][3]
3、赋值
(1)、定义时赋值
(2)、程序中赋值
例如:P157例5.4
4、举例
P160例5.5
四、字符数组和字符串
1、定义字符数组
char str[12];
2、字符串
概念:若干有效字符的序列
起始和结束标志:
3、字符数组的操作
(1)、初始化
p165
(2)、输入
格式
scanf
gets
(3)、输出
格式化参数%s P167
printf
puts
4、字符串的运算
(1)、字符串拷贝
(2)、字符串的连接
(3)、比较
(4)、长度计算(不包括结束标志)
5、应用举例
P172 例5.12删除字符串中的一个字符
五、使用数组特别要注意的问题
(1)、不能超界
(2)、不能修改数组的地址
如:int a[10], b[10];a = b;正确吗?
上机作业:(1)、把两个字符数组交叉合并,例如a[]=”ABCDEFG”,b[]=”12345”,则合并后为c[]=”A1B2C3D4E5FG”
(2)、把一个字符数组的元素倒置,例如a[]=”ABCDEFG”,倒置后a[]=”GFEDCBA”
第六章指针
一、指针的概述
1、地址与指针
为了对存储器进行访问,以字节为单位给每个存储单元编号,这个编号就是地址。

在说明一片连续内存时,以第一个字节的地址作为该片内存的地址。

存放地址的变量称为指针变量。

通过指针变量也可以访问到该地址单元。

F82C
F82B
F82A
F829
F827
F826
F825
F824
F823
F822
F821
F820
一个指针变量所分配到的空间是固定的,有2个字节,16位。

2、指针的声明
char *p;与char* p
3、指针的赋值
char *p,ch;
p = &ch;
P181 6.1 6.2 6.3
注意:不能给一个没有确定指向的指针赋值
Char *p=‟a‟;
Char *p;
*p = …a‟;
4、指向指针的指针
指针变量指向指针
int x;
int **p;
int *q;
q = &x;
*p = q; 与p=&q
F82C
F82B
F829
F827
F826
F825
F824
F823
F822
F821
F820
二、指针与数组
1、指针与一维数组
P185 6.5
2、指针与字符串
P192 6.10
三、指针的运算
主要看类型
例如:
char a[]={…0‟,‟1‟,‟2‟,‟3‟,‟4‟,‟5‟};
char *p;
p = a;
for(I=0;I<6;I++)
printf(“%c”,*p++);
四、指针与函数
两个数交换数值
p202 6.18 6.19
习题P224 6.2 6.3 6.4 6.7 6.8
第七章结构体
一、结构体的基本概念
1、把一些数据作为一个整体来处理。

2、定义结构体类型的形式:
struct 结构体类型名{
成员项列表
}
特点:(1)、由若干数据项组成
(2)、结构体类型是自定义的数据类型,与基本数据类型一样,是一个生成变量的模板。

(3)、一个结构体类型变量的长度是各个数据项长度之和
(4)、结构体可以作为别的结构体的数据项
例如:描述人员(编号、姓名、性别、出生年月、年龄、政治面目、籍贯)
描述学生信息(学号、姓名、性别、语文、数学、英语)
struct STUDENT{
char xh[10];
char xm[8];
char xb[2];
float yw;
float sx;
float yy;
};
二、结构体类型的基本使用
1、定义变量
格式:struct 结构体类型变量1,…,变量2;
2、结构体变量的初始化P233
3、结构体变量的引用
用.
4、结构体变量的赋值
允许两个相同结构体类型的变量互相赋值:字节对字节拷贝
5、结构体变量的输入和输出
分别输入和输出各个数据项
三、结构体和数组
结构体可以定义数组
用法与普通数组一样
四、结构体和指针
用箭头->存取符
五、结构体和函数
1、结构体变量作为函数参数
2、结构体变量作为函数返回值
第八章文件
文件操作,一般先声明一个类型为FILE的指针变量。

如:FILE *fp;所用函数:
一、打开文件fopen(char 可带路径文件名,char 打开方式);
其中文件名和打开方式都是字符串。

使用方式中,常用的有r(读)、w(写)、b(二进制)、a(追加)、+等参数。

如:
FILE *fp;
fp = fopen("c:\\autoexec.bat", "r");
if ( fp==NULL ){
printf("Sorry, I can't open it.");
exit(1);
}
以读方式打开C:\AUTOECXEC.BAT文件,如果打开失败就退出程序。

二、关闭文件fclose(FILE *)
在程序结束前,一定要关闭打开的文件,否则,还存放在缓冲区而没写在外存中的文件的内容有可能丢失。

三、从文件fp中读取一个字符fgetc(文件指针);
该函数返回一个字符(单前文件指针指向的字符,文件指针向后移一个字符)显示文件a.txt 内容:
#include <stdio.h>
void main(void)
{
FILE *fp;
char ch;
fp = fopen("a.txt", "r");
if(fp==NULL){
printf("I can't open it");
exit(1);
}
ch = fgetc(fp);
while( ch!=EOF ){
putchar( ch );
ch = fgetc(fp);
}
fclose( fp );
}
四、判断文件结束函数feof(FILE *);
上例中判断文件结束是用fgetc(fp)函数的返回值,如为EOF(-1)则表示文件结束,如果该文件里边有字符值为-1(0xff),则该程序认为文件已经结束了,这显然不是我们所希望的,解决这个问题的方法是使用feof(FILE *fp)函数。

如文件结束,则feof(fp)返回0,否则返回1。

故上例可改为:
while( !feof(fp) )
putchar(fgetc(fp));
五、写一个字符到文件fp中fputc(字符,文件指针);
二进制方式和文本方式的区别:主要是回车换行字符的区别,二进制方式可以读到两个字符0x0a,0x0d,而文本方式只读到0x0a,0x0d被跳过。

把原文件source.txt加密成result.txt,使每个字符的高四位和低四位对调。

#include <stdio.h>
#include <stdlib.h>
void main( void )
{
FILE *fp1, *fp2;
unsigned char ch;
unsigned int iTemp;
fp1 = fopen( "source.txt", "rb" );
if (fp1==NULL ){
printf( "\nCan't open source.txt.\n");
exit(1);
}
fp2 = fopen( "result.txt", "wb" );
if ( fp2==NULL ){
printf("\nCan't create file.\n");
exit(1);
}
while( !feof(fp1) ){
ch = (unsigned) fgetc( fp1 );
ch=(unsigned char ) (ch/16+ch%16*16);
fputc( ch, fp2 );
}
fclose( fp1 );
fclose( fp2 );
}
解密则是加密算法的逆过程。

六、指针定位fseek(FILE *fp, long int从当前参照位置起寻找的字节数,int参照位置);其中参照位置可取值:
SEEK_SET 0 文件开始
SEEK_CUR 1 当前位置
SEEK_END 2 文件尾
七、一次读出、写下多个字符:
读:fread( 内存地址,单位长度,单位长度个数,文件指针 )
写:fwrite( 内存地址,单位长度,单位长度个数,文件指针 )
如描述一个人的情况可用结构:
struct person{
char name[9];
int age;
int sex;
}
来表示。

要以一个人为单位进行存取,可用:
FILE *fp;
struct person p1;
fp = fopen( "person.dat", "w" );
if ( fp == NULL ){
printf( "Can't create file.");
exit( 1 );
}
fwrite( &p1, sizeof( p1 ), 1, fp );
fclose( fp );
这样,一个人的信息就写在文件中了。

fread( &p1, sizeof( p1 ), 1, fp );
则读出一个人的信息到结构变量p1中。

八、关于命令行参数
我们接触过一些DOS命令,如:deltree user,在命令行中有一个参数通过空格和命令分开,这个参数就是命令行参数。

C语言中的命令行参数是通过main()函数进行传递的。

定义main()函数时,采用main( int x, char *str[] )的形式,其中x参数传递命令行参数的个数,str是一个字符指针数组,每个元素指向一个命令行参数串,其中str[0]指向命令名,str[1]指向第一个参数。

实验报告格式:
1、题目,要求
2、流程图
3、程序清单(加上必要的注释)
4、程序存在问题。

相关文档
最新文档