当前位置:首页 >> 工学 >>

2010年福建省专升本C语言课件


考试要求
1. 对 C 语言的语法、语义有较好的理解。 2. 能熟练地阅读 C 源程序,并具有初步分析程序 的能力。 3. 初步掌握结构化程序设计的方法和技巧,能从 分析问题入手,设计可行的算法,进而用 C 语言 编写结构良好的面向过程的程序。 4. 通过上机实验,掌握程序的调试和测试方法。

考题类型 ? 选择题(概念、语法等): 60% ? 程序阅读题: 20% ? 程序设计题(或程序填空): 20% 参考用书 《程序设计基础》,张杰敏编,高等教育出版社出版 《 C 语言程序设计》,谭浩强编,清华大学出版社出版

第一章 C语言概述
C语言发展历史与特点(了解) C程序格式和结构特点(掌握) TC 环境下 C 程序的上机步骤(掌握)

结构特点
函数与主函数
程序由一个或多个函数组成 必须有且只能有一个主函数main() 程序执行从main开始,在main中结束,其它函数通过嵌 套调用得以执行。

程序语句
C程序由语句组成 用“;”作为语句终止符 /* */为注释,不能嵌套 不产生编译代码

非法

注释 例: /*This is the main /* of example1.1*/ */

编译预处理命令

C程序的上机步骤

编辑 编译 链接 执行

程序代码的录入, 生成源程序*.c 语法分析查错,翻译 生成目标程序*.obj 与其它目标程序或库 链接装配,生成可执行 程序*.exe

第二章 算法
? 算法的概念(理解) ? 算法的表示方法(了解) ? 组成结构化程序的三种基本结构(理解) ? 结构化程序设计的过程(了解)

算法——操作步骤 解决: 解决 做什么? 怎么做?

有限的操作步骤且每一步均应在合 算法的特点 理的时间内完成,无“死循环”

有穷性 确定性
有多种输入途径可供输入数 每一条指令必须有确定 据,以进行数据处理 可行性/有效性 的含义,无“二义性”

有零个或多个输入 每一步骤通过已经实现的基本
运算执行后,在有限次内得到 有效的效果,无“死语句” 有一个或多个输出 有多种输出途径 可将运行结果输 出

算法的表示方法
自然语言 流程图 N-S流程图 伪代码 计算机程序语言

第三章 数据类型、运算符与表达式
? C 语言中数据类型的分类(了解) ? 整型、实型、字符型、字符串常量的表示方法(掌握) ? 符号常量的定义和使用(掌握) ? 变量的定义、初始化(掌握) ? 算术、赋值、复合赋值、自增、自减、逗号运算符及表 达式(掌握) ? 各类数值型数据间的混合运算(掌握)

预备知识
计算机中数的表示及进制转换
各种进制之间的转换
二进制、八进制、十六进制转换成十进制

字节和位
内存以字节为单元组成 每个字节有一个地址 一个字节一般由8个二进制位组成 每个二进位的值是0或1

数值的表示方法——原码、反码和补码
原码:最高位为符号位,其余各位为数值本身的绝对值 反码:
正数:反码与原码相同 负数:符号位为1,其余位对原码取反

补码:
正数:原码、反码、补码相同 负数:最高位为1,其余位为原码取反,再对整个数加1

基本数据类型

学习运算符应注意:
运算符功能 与运算量关系
要求运算量个数 要求运算量类型

运算符优先级别 结合方向 结果的类型

短路特性:逻辑表达式求解时,并非所有的逻辑运算 符都被执行,只是在必须执行下一个逻辑运算符才能 求出表达式的解时,才执行该运算符

附加格式说明符(修饰符)

例 scanf(“%3d%*4d%f”,&k,&f); 例 scanf(“%3c%2c”,&c1,&c2); 例 scanf(“%2d%*3d%2d”,&a,&b); 例 scanf(“%4d%2d%2d”,&yy,&mm,&dd); 输入 12345678765.43? 输入 abcde 输入 1234567? ? 输入 19991015 8765.43?f 则123?k, ? 则12?a, 67?b‘d’ ?c2 则‘a’?c1, 则1999?yy, 10 ?mm, 15 ?dd

输入分隔符的指定 一般以空格、TAB或回车键作为分隔符 其它字符做分隔符:格式串中两个格式符间字符

例 scanf(“%d%o%x”,&a,&b,&c); 例例 scanf(“%d,%d”,&a,&b) scanf(“%d:%d:%d”,&h,&m,&s); printf(“a=%d,b=%d,c=%d\n”,a,b,c); 输入 12:30:45? 输入 3,4 ? 例 scanf(“a=%d,b=%d,c=%d”,&a,&b,&c); 输入则3?a,30 ?b 45 ?s 123 4 123? 则12 ?h,123?m, 输入 a=12,b=24,c=36 ? 输出 a=123,b=83,c=291

说明: 用“%c”格式符时,空格和转义字符作为有 效字符输入 输入数据时,遇以下情况认为该数据结束: 如 scanf(“%c%c%c”,&c1,&c2,&c3); 遇空格、TAB、或回车 若输入abc? 遇宽度结束 则a?c1, ?c2, b ?c3 遇非法输入 例 int x; 如 scanf(“%d%c%f”,&a,&b,&c); 输入函数留下的“垃圾”: char ch; 例 int x; 若输入1234a123o.26 ? 例 int x; scanf(“%d”,&x); charchar ch; ?a, ‘a’ ?b, 123 ?c ch; 1234 则 scanf(“ %c”,&ch); scanf(“%d”,&x); scanf(“%d”,&x); 或 scanf(“%*c%c”,&ch); ch=getchar(); scanf(“%c”,&ch); printf(“x=%d,ch=%d\n”,x,ch); printf(“x=%d,ch=%d\n”,x,ch); 执行:123? 执行:123? 输出:x=123,ch=10 输出:x=123,ch=10

C语句分类

程序控制语句(9种):
分支

if( )~else~ switch for( )~ 循环 while( )~ 复合语句:用 {…}括起来的一组语句 ) do~while( 一般形式: { [数据说明部分;] continue 执行语句部分; break 辅助控制 } goto 说明: return
“}”后不加分号 语法上和单一语句相同 复合语句可嵌套

一维数组的初始化
初始化方式

int a[5]={1,2,3,4,5}; 在定义数组时,为数组元素赋初值 等价于:a[0]=1; (在编译阶段使之得到初值) a[1]=2; a[2]=3; a[3]=4; a[4]=5;
说明: 数组不初始化,其元素值为随机数 对static数组元素不赋初值,系统会自动赋以0值 只给部分数组元素赋初值 当全部数组元素赋初值时,可不指定数组长度

如 int a[5]; static int a[5]={6,2,3}; (不用static初值也可为0) int a[]={1,2,3,4,5,6}; 等价于: a[0]=6; a[1]=2;a[2]=3; a[3]=0; a[4]=0; 等价于:a[0]=0; a[1]=0; a[2]=0; a[3]=0; a[4]=0; 如 编译系统根据初值个数确定数组维数 int a[3]={6,2,3,5,1}; (×)

二维数组元素的引用
形式: 数组名[下标][下标]

二维数组元素的初始化
分行初始化:

部分初始化 全部初始化 第一维长度省略初始化

部分初始化 按元素排列顺序初始化 第一维长度省略初始化 全部初始化 例 int a[2][3]={{1,2,3},{4,5,6}}; 例 int a[2][3]={{1,2},{4}}; 例 int a[][3]={{1},{4,5}}; 例 intint2a[2][3]={1,2,4}; 1例 a[2][3]={1,2,3,4,5,6}; 5 3 4 6 1 2 0 4 0 0 例 int 0 a[][3]={1,2,3,4,5}; 1 0 4 5 0 a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2] a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2] 11 22 34 40 50 60 a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2] 1 2 3 4 5 0 a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2] a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2] a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2]

字符数组和字符串
字符数组
定义 例 char c[10], ch[3][4]; 字符数组的初始化 逐个字符赋值 用字符串常量 字符数组的引用

用字符串常量 用字符串常量 逐个字符赋值 逐个字符赋值

例 char ch[5]=“Boy”; ch[6]={“Hello”}; 例 char ch[5]={‘B’,’o’,’y’}; 例 char ch[5]={‘H’,’e’,’l’,’l’,’o’}; char ch[6]=“Hello”; charoch[]=“Hello”; \0 HB e ly l o \0
H e l l o \0 ch[0] ch[1] ch[2] ch[3] ch[4] ch[1] ch[2] ch[3] ch[4] ch[0] ch[0] ch[1] ch[2] ch[3] ch[4] ch[5]

二维字符数组初始化 二维字符数组初始化

例 char diamond[][5]={{'.', '.','*'},{'.','*','.','*'}, {'*', '.', '.', '.' ,'*'},{'.','*', '.','*'},{'.', 例 char fruit[][7]={“Apple”,”Orange”, '.','*'}};
diamond[0] . . p * p r . a

”Grape”,”Pear”,”Peach”};
* \0 \0 .l .n .p *r c e* g. e* \0 e \0 \0 \0 * \0 \0 \0 \0 \0 \0

diamond[1] A fruit[0] . diamond[2] O fruit[1] * diamond[3] G fruit[2] . diamond[4] P fruit[3] . fruit[4] P

r * a e . e a a

\0\0 \0 h \0

字符串的输入输出 逐个字符I/O: %c 整个字符串I/O: %s 例 用%c main() { char str[5]; int i; for(i=0;i<5;i++) 例 用%s scanf(“%c”, &str[i]); main() for(i=0;i<5;i++) { char printf(“%c”, str[i]); str[5]; } scanf(“%s”, str); printf(“%s”, str);
} 用字符数组名,不要加& 输入串长度<数组维数 遇空格或回车结束 自动加‘\0’

用字符数组名, 遇‘\0’结束

例 对于以下字符串,strlen(s)的值为: (1)char s[10]={‘A’,‘\0’,‘B’,‘C’,‘\0’,‘D’}; (2)char s[ ]=“\t\v\\\0will\n”; (3)char s[ ]=“\x69\082\n”;

main() 例 无返回值函数 函数的返回值 void swap(int x,int y ) { float a,b; 返回语句 { int temp; int c; 形式: return(表达式); temp=x; scanf("%f,%f",&a,&b); 或 return 表达式; x=y; c=max(a,b); y=temp; 或 return; printf("Max is %d\n",c); } 功能:使程序控制从被调用函数返回到调用函数中, } 同时把返值带给调用函数 max(float x, float y) 说明: 函数中可有多个return语句 { float z; 若无return语句,遇}时,自动返回调用函数 z=x>y?x:y; 若函数类型与return语句中表达式值的类型不一致,按前者 return(z); 为准,自动转换------函数调用转换 void型函数 }

例 函数说明举例 /*ch7_5.c*/ main() /*ch7_5.c*/ main() { add(float,float); /*function declaration*/ { float add(float x, float y) float float a,b; {float intz; float c; a,b,c; float add(); scanf("%f,%f",&a,&b); z=x+y; scanf("%f,%f",&a,&b); c=max(a,b); return(z); c=add(a,b); 被调函数出现在主调函数 printf("Max is %d\n",c); }printf("sum is %f",c); 之前,不必函数说明 } } main() int型函数可不作函数说明 { max(float x, float y) floatfloat a,b,c;x, float y) add(float (Borland C++不行) { z; scanf("%f,%f",&a,&b); { float float z; z=x>y?x:y; c=add(a,b); z=x+y; return(z); printf("sum is %f",c); return(z); }} }

例 交换两个数

例 求二维数组中最大元素值

例 不同函数中同名变量 例 复合语句中变量

main() #define N 5 { main() f1(int a) int float a,b; { int b,c; a=3; ……. { int i; a,b,c有效 b=4; a[N]={1,2,3,4,5}; int } printf("main:a=%d,b=%d\n",a,b); for(i=0;i<N/2;i++) sub(); int temp; y) { char f2(int x,int { int i,j; printf("main:a=%d,b=%d\n",a,b); temp=a[i]; x,y,i,j有效 …… } a[i]=a[N-i-1]; } sub() a[N-i-1]=temp; { int main() } a,b; { a=6; int m,n; for(i=0;i<N;i++) m,n有效 b=7; ……. printf("%d ",a[i]); } printf("sub:a=%d,b=%d\n",a,b); } }

扩 展 后 后 展



c1,c2 c1,c2 的 的 作 作 用 用 范 范 围 围

int p=1,q=5; extern char c1,c2; float f1(int a) { int b,c; extern char c1,c2; ……. } int f3() {….. } char c1,c2; char f2(int x,int y) { int i,j; …… } main() { int m,n; ……. }

p,q的作用范围

c1,c2的作用范围

宏定义
不带参数宏定义

宏体可缺省,表示宏名 定义过或取消宏体

一般形式: #define 宏名 [宏体] 功能:用指定标识符(宏名)代替字符序列(宏体)

{…….. printf(“2*PI=%f\n”,PI*2); else if (x==0) printf(“error!\n”); 例 #define MAX MAX+10 (×) 宏定义中使用必要的括号() } 宏展开:printf(“2*PI=%f\n”,3.14159*2);

定义位置:任意(一般在函数外面) 作用域:从定义命令到文件结束 例 #define YES 1 #undef可终止宏名作用域 main() 例例 #undef WIDTH80 #define 格式: #define WIDTH…….. 宏名 80 { YES原作用域 (WIDTH+40) #define LENGTH WIDTH+40 #define LENGTH } 宏展开:预编译时,用宏体替换宏名---不作语法检查 var=LENGTH*2; var=LENGTH*2; #undef YES 如 if(x==YES) (80+40 *2; printf(“correct!\n”); 引号中的内容与宏名相同也不置换 0 ) 宏展开:var= 80+40 *2; 宏展开:var= #define YES else if (x==NO) printf(“error!\n”); max() 宏定义可嵌套,不能递归 YES新作用域 展开后: if(x==1) 3.14159 例 #define PI printf(“correct!\n”);

&与*运算符
含义 含义: 取变量的地址 含义: 取指针所指向变量的内容 两者关系:互为逆运算 单目运算符 单目运算符 i_pointer 优先级: 2 理解 优先级: 2 &i_pointer 2000 结合性:自右向左 结合性:自右向左 …... 2000 2001 2002 2003 2004 2005 2006 …... 2000 变量i_pointer 指针变量 整型变量i *i_pointer 10 i

10

i_pointer = &i = &(*i_pointer) i_pointer &i &(*i_pointer) i i = *i_pointer = *(&i) *i_pointer *(&i)

i_pointer-----指针变量,它的内容是地址量 *i_pointer----指针的目标变量,它的内容是数据 &i_pointer---指针变量占用内存的地址

指针变量
指针变量与其所指向的变量之间的关系
i_pointer 2000 变量i 3 *i_pointer i &i i=3; *i_pointer i_pointer *i_pointer=3

指针变量的定义
一般形式: [存储类型] 例 数据类型 *指针名; int *p1,*p2; 表示定义指针变量 float *q ; 合法标识符 指针变量本身的存储类型 指针的目标变量的数据类型 不是‘*’运算符 static char *name; 注意: 1、int *p1, *p2; 与 int *p1, p2; 2、指针变量名是p1,p2 ,不是*p1,*p2 3、指针变量只能指向定义时所规定类型的变量 4、指针变量定义后,变量值不确定,应用前必须先赋值

指针变量的初始化
一般形式:[存储类型] 数据类型 *指针名=初始地址值; 例 int i; int *p=&i; 赋给指针变量, 不是赋给目标变量 变量必须已说明过 类型应一致



例 int i; int *p=&i; int *p=&i; int i; int *q=p;

用已初始化指针变量作初值

例 main( ) { int i; static int *p=&i; .............. } (×)

不能用auto变量的地址 去初始化static型指针

一级指针变量与一维数组的关系
int *p 与 int q[10] 数组名是指针(地址)常量 p=q; p+i 是q[i]的地址 数组元素的表示方法:下标法和指针法, 即若p=q, 则 p[i] ? q[i] ? *(p+i) ? *(q+i) 形参数组实质上是指针变量,即int q[ ] ? int *q 在定义指针变量(不是形参)时,不能把int *p 写成int p[]; 系统只给p分配能保存一个指针值的内存区(一般2字节);而给 q分配2*10字节的内存区

指针与二维数组
二维数组的地址

字符串指针作函数参数
void copy_string(char from[],char to[]) 例 用函数调用实现字符串复制 { int i=0; void copy_string(char *from,char *to) (1)用字符数组作参数 while(from[i]!='\0') { for(;*from!='\0';from++,to++) {*to=*from; to[i]=from[i]; i++; *to='\0'; } } (2)用字符指针变量作参数 to[i]='\0'; main() } char *a="I am a teacher."; { main() *b="You are a student."; char { printf("string_a=%s\nstring_b=%s\n",a,b); char a[]="I am a teacher."; char b[]="You are a student."; copy_string(a,b); printf("string_a=%s\n string_b=%s\n",a,b); printf("\nstring_a=%s\nstring_b=%s\n",a,b); } copy_string(a,b); printf("\nstring_a=%s\nstring_b=%s\n",a,b); }

指针数组和多级指针
用于处理二维数组或多个字符串 指针数组
定义:数组中的元素为指针变量 定义形式:[存储类型] 数据类型 *数组名[数组长度说明]; 例 int *p[4]; 指针数组赋值与初始化 指针所指向变量的数据类型 b[2][3] int *pb[2] 区分int 指针本身的存储类型 int *pb[2] *p[4]与int (*p)[4] int 赋值: main() 初始化: { int b[2][3],*pb[2]; main() pb[0]=b[0]; { int b[2][3],*pb[ ]={b[0],b[1]}; pb[1]=b[1]; …….. …….. } }
pb[0] pb[1] int b[2][3] 1 2 3 2 4 6 pb[0] pb[1] 1 2 3 2 4 6

指针数组元素的作用相当于二维数组的行名 二维数组存储空间固定 但指针数组中元素是指针变量 字符指针数组相当于可变列长的二维数组 二维数组的行名是地址常量 分配内存单元=数组维数*2+各字符串长度

定义形式:[存储类型] 数据类型 **指针名; 如 char **p;

*p是p间接指向对象的地址 最终目标变量的数据类型 指针本身的存储类型 例 int i=3; **p是p间接指向对象的值 int *p1; i 3 **p2, *p1 int **p2; &i p1 *p2 p1=&i; &p1 p2 p2=&p1; **p=5; 例 int i, **p; p=&i; (×)//p是二级指针,不能用变量地址为其赋值 多级指针 例 三级指针 四级指针 int ***p; char ****p;

结构体变量的定义
先定义结构体类型,再定义结构体变量
struct 结构体名 { 类型标识符 成员名; 类型标识符 成员名; 例 #define ……………. STUDENT struct student }; STUDENT struct student struct 结构体名 变量名表列;

一般形式:



{ int num; int num; char name[20]; char name[20]; char sex; char sex; int age; int age; float score; float score; char addr[30]; char addr[30]; }; }; STUDENT stu1,stu2; struct student stu1,stu2; {

说明
结构体类型与结构体变量概念不同
类型:不分配内存; 类型:不能赋值、存取、运算; 变量:分配内存 变量:可以

结构体可嵌套 结构体成员名与程序中变量名可相同,不会混淆 例 struct 结构体类型及变量的作用域与生存期 date { 例 struct student int month; { int num; int day; int char name[20]; year; struct date }; birthday struct { int month; student num name birthday int day; year num namemonth day { int num; month day year int year; char name[20]; }birthday; struct date birthday; }stu;}stu;

结构体变量的引用
引用规则
结构体变量不能整体引用,只能引用变量成员

引用方式: 结构体变量名.成员名
例 struct 成员(分量)运算符 student 可以将一个结构体变量赋值给另一个结构体变量 例 struct student { stu1.num=10; int num; 优先级: 结构体嵌套时逐级引用 1 { int num; 例 struct student 结合性:从左向右 { char name[20]; int num; 例 struct name[20]; char sex; char student char name[20]; stu1.score=85.5; 例 structchar num; student { int sex; int char sex; age; printf(“%d,%s,%c,%d,%f,%s\n”,stu1); (×) if(stu1==stu2) { int age; num; stu1.birthday.month=12; char name[20]; float score; int …….. (×) stu1.score+=stu2.score; char score; name[20]; int age; struct date float char addr[30]; stu1.age++; float score; char addr[30]; stu1={101,“Wan Lin”,‘M’,19,87.5,“DaLian”}; (×) sex; { int char month; }stu1,stu2; addr[30]; char birthday int age; int }stu1,stu2; day; num name float score; }stu1,stu2; month day year int year; stu2=stu1; ( ) char addr[30]; }birthday; }stu1,stu2; }stu1,stu2;

结构体数组
结构体数组的定义
三种形式: 形式一: struct student 形式二: { int num; struct student 形式三: char name[20]; { int num; struct char sex; char name[20]; { int num; int sex; charage; }; char name[20]; int age; char sex; struct student stu[2]; }stu[2]; int age; }stu[2];
num 25B name sex age num name sex age stu[1] stu[0]

结构体数组初始化
分行初始化: 结构体数组引用 顺序初始化: struct student struct student 引用方式: 结构体数组名[下标].成员名 { int num; 例 { int student struct num; 例 struct num; char { char name[20]; int name[20]; stu[1].age++; struct student { char num; int sex; char sex; name[20]; int age; num; {char name[20]; int int age; char sex; }; char sex; }; int char name[20]; age; struct student stu[ ]={{100,“WangLin”,‘M’,20, int char sex; age; struct student stu[ ]={100,“Wang Lin”,‘M’,20}, }stu[ ]={{……},{……},{……}}; {101,“LiGang”,‘M’,19, Gang”,‘M’,19}, int age; }stu[ ]={{……},{……},{……}}; 101,“Li strcpy(stu[0].name,”ZhaoDa”); {110,“LiuYan”,‘F’,19}; }str[3]; 110,“Liu Yan”,‘F’,19}};
全部初始化时维数可省

结构体和指针
main() 指向结构体变量的指针 { struct student 定义形式:struct 结构体名 *结构体指针名; { 例 struct num; *p; long int student char name[20]; 使用结构体指针变量引用成员形式 struct student 存放结构体变量在内存的起始地址 char sex; p num { score; float int num; (*结构体指针名).成员名 结构体指针名->成员名 例 int n; struct student 结构体变量名.成员名 namestu1; char name[20]; }stu_1,*p; stu int *p=&n; struct student sex *p=&stu1; 例 p=&stu_1;char sex; 指向结构体的指针变量 *p=10; 指向运算符 stu1.num=101; age (*p).num=101 ? n=10 ? int age; stu_1.num=89101; }stu; 优先级: 1 strcpy(stu_1.name,"Li Lin"); 结合方向:从左向右 struct student *p=&stu; p->sex='M'; p->score=89.5; printf("\nNo:%ld\nname:%s\nsex:%c\nscore:%f\n", (*p).num,p->name,stu_1.sex,p->score); }

指向结构体数组的指针
例 指向结构体数组的指针 struct student p num { int num; name char name[20]; sex char sex; age p+1 int age; }stu[3]={{10101,"Li Lin",'M',18}, {10102,"Zhang Fun",'M',19}, {10104,"Wang Min",'F',20}}; main() { struct student *p; for(p=stu;p<stu+3;p++) printf("%d%s%c%d\n",p->num,p->name,p->sex,p->age); }

stu[0]

stu[1]

stu[2]

共用体变量引用
引用方式:
共用体变量名.成员名 共用体指针名->成员名 (*共用体指针名).成员名

引用规则 union data a.i a.ch a.f { 不能引用共用体变量,只能引用其成员 int i; 共用体变量中起作用的成员是最后一次存放的成员 p->i p->ch p->f char ch; 不能在定义共用体变量时初始化 float 例 union f; 例 a.i=1; (*p).i (*p).ch (*p).f }; { 可以用一个共用体变量为另一个变量赋值 a.ch=‘a’; union int i; union例 a,b,c,*p,d[3]; d[0].i d[0].ch d[0].f char a.f=1.5;data{ float x; ch; 例 int i; printf(“%d”,a.i); float f; unionch; (×编译通过,运行结果不对) char }a; { int i; char ch; float f; float a=1; f; (×) }a,b; }a={1,’a’,1.5}; (×) a.i=1; a.ch=‘a’; a.f=1.5; b=a; (√) x=a.f; (√)

用typedef定义类型
功能:用自定义名字为已有数据类型命名 类型定义简单形式: typedef type name;
例 用户定义的类型名 INTEGER a,b,c; 例 typedef int INTEGER; 已有数据类型名 类型定义语句关键字 REAL f1,f2; 例 typedef float REAL; 类型定义后,与已有类型一样使用 int a,b,c; 说明: float f1,f2; 1.typedef 没有创造新数据类型 2.typedef 是定义类型,不能定义变量 3.typedef 与 define 不同 define 预编译时处理 简单字符置换 typedef 编译时处理 为已有类型命名

typedef定义类型步骤
按定义变量方法先写出定义体 如 将变量名换成新类型名 如 最前面加typedef 如 用新类型名定义变量 如 int i; int INTEGER; typedef int INTEGER; INTEGER i,j;

类型定义可嵌套

文件的打开与关闭
例 文件打开与测试 文件使用方式:打开文件-->文件读/写-->关闭文件 “r/rb” (只读) FILE *fp; 为输入打开一个文本/二进制文件 “w/wb” (只写) fp=fopen(“aa.c”,“w”); 系统自动打开和关闭三个标准文件: 为输出打开或建立一个文本/二进制文件 标准输入------键盘 stdin “a/ab” (追加) if(fp==NULL) 向文本/二进制文件尾追加数据 例 FILE printf(“File *fp; 标准输出------显示器 open error!\n”); stdout 例 (读写){ *fp; 为读/写打开一个文本/二进制文件 FILE “r+/rb+” char *filename=“c:\\fengyi\\bkc\\test.dat” exit(0); fp= fopen (“c:\\fengyi\\bkc\\test.dat”,”r”); 标准出错输出-----显示器 stderr “w+/wb+” (读写) fopen(filename,”r”); 为读/写建立一个文本/二进制文件 fp= } 打开文件fopen为读/写打开或建立一个文本/二进制文件 “a+/ab+” (读写) 使用文件方式 函数原型: FILE *fopen(char *name,char *mode) 功能:按指定方式打开文件 要打开的文件名 返值:正常打开,为指向文件结构体的指针;打 开失败,为NULL

C文件操作用库函数实现,包含在stdio.h 含义 文件使用方式

fseek函数
函数原型: int fseek(FILE *fp,long offset,int whence) 功能:改变文件位置指针的位置 返值:成功,返回0;失败,返回非0值 文件指针起始点 位移量(以起始点为基点,移动的字节数) ftell函数 例 fseek(fp,100L,0); 文件开始 SEEK_SET 0 >0 向后移动 ftell(FILE *fp) fseek(fp,50L,1); 函数原型: long 文件当前位置 SEEK_CUR 1 <0 向前移动 fseek(fp,-10L,2); 功能:返回位置指针当前位置(用相对文件开头的位移 2 文件末尾 SEEK_END 量表示) 返值:成功,返回当前位置指针位置;失败,返回-1L,


相关文章:
2010年专升本c语言模拟试题及答案(一)
2010年专升本c语言模拟试题及答案(一)_IT认证_资格考试/认证_教育专区。2010 年专升本 c 语言模拟试题及答案(一) 1. ___D___是合法的用户自定义标识符。 A...
福建专升本C语言复习
搜 试试 帮助 全部 DOC PPT TXT PDF XLS 百度文库 教育专区 高等教育 理学...2010福建专升本真题C语言含... 11页 1财富值 2009福建专升本真题C语言含... ...
2009福建专升本C语言试题
搜 试试 帮助 全部 DOC PPT TXT PDF XLS 百度文库 教育专区 高等教育 哲学...2007年福建专升本C语言模拟... 3页 5财富值 2010福建专升本C语言试题 暂无评价...
2010年辽宁专升本考试真题-C语言部分
2010年辽宁专升本考试真题-C语言部分_研究生入学考试_高等教育_教育专区。2010 辽宁省高职高专毕业生升入本科学校招生考试 计算机试卷 第二部分 计算机高级语言部分(...
2006福建专升本真题C语言含答案
2010福建专升本真题C语言含... 11页 1财富值 考题解答07年福建专升本数... 6页 免费如要投诉违规内容,请到百度文库投诉中心;如要提出功能问题或意见建议,请点击...
福建专升本--2004年《C语言》真题
更多福建专升本资料和辅导信息,麦豆网(www.mydou.com) 福建专升本 2004 年《C 语言》真题 语言》小题, 一、单项选择题(本大题共 30 小题,每小题 2 分,共...
福建专升本--2006年《C语言》真题
搜 试试 7 帮助 全部 DOC PPT TXT PDF XLS 百度文库 教育专区 资格考试/...2010福建专升本真题C语言... 11页 1下载券 福建专升本--2004年《C语... 5...
2010福建省C语言模拟题十套(附带答案)
搜试试 7 悬赏文档 全部 DOC PPT TXT PDF XLS ...2010年福建省C语言模拟题共十套,背后附带答案 ...2010福建专升本真题C语言... 11页 1下载券 计算机...
福建专升本C语言模拟试题及参考答案
专升本C语言100题及答案 23页 2财富值如要投诉违规内容,请到百度文库投诉中心;如要提出功能问题或意见建议,请点击此处进行反馈。 福建专升本C语言模拟试题及参考答案...
2010年专升本真题参考答案《程序设计基础》
2010年C语言专升本考试答案。是2010年C语言专升本考试答案。隐藏>> 福建师范大学 信息技术学院 朱亚华 2010 年真题参考答案《程序设计基础》 年真题参考答案《程序...
更多相关标签: