程序设计与 C 语言
1.计算机语言与编译
机器语言:一串仅由 0 和 1 序列表示的语言。计算机只能识别和接受 0 和 1 组成的指令。
符号语言(汇编语言):用一些英文字母和数字表示一个指令。
符号语言(汇编语言)——>机器语言
低级语言:完全依赖于具体机器特性的,是面向机器的语言。例:机器语言,汇编语言等。
高级语言:语言功能很强,且不依赖于具体的机器,用它写出的程序对任何型号的计算机都适用(或只须作很少的修改),同时它与具体的机器距离较远。
C 语言是面向过程的语言。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x8oA1QXl-1678017528386)(2023-03-02-16-55-14.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HzrKtC5M-1678017528388)(2023-03-02-16-55-41.png)]
2.数位及其表示、数制之间的转换
十进制 0 1 2 3 4 5 6 7 8 9
表示:0b 二进制 0 1
表示:0 八进制 0 1 2 3 4 5 6 7
表示:0x 十六进制 0 1 2 3 4 5 6 7 8 9 A B C D E F
3.C 语言程序的结构
(1)函数是 C 程序的基本单位。
(2)一个 C 语言程序是由一个或多个函数组成的,其中必须包含一个 main
函数,而且有且仅有一个 main 函数,main 函数=主函数。
(3)程序总是从 main 函数开始执行,而不论 main 函数在整个程序中的位
置,同时也是在 main 函数的最后一条语句 结束执行。
(4)在每个数据声明和语句的最后必须有一个分号,分号表示语句的结束。
(5)C 语言本身不提供输入输出语句。输入和输出的操作是由库函数 scanf
和 printf 等函数来完成的。
(6)英文输入法输入。
#include<stdio.h>
int main(void)
{
return 0;
}
5.算法
(1)程序=算法+数据结构
算法:对操作的描述,即要求计算机进行操作的步骤。
数据结构:在程序中要指定用到哪些数据以及这些数据的类型和数据的组
织形式。
(2)算法的特性
①有穷性。
②确定性。
③有零个或多个输入。
④有一个或多个输出。
⑤有效性。
(3)描述或者表述算法的方法:自然语言,流程图,伪代码。
6.三种基本结构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ESILAhGl-1678017528388)(2023-03-02-17-14-39.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rDEF4Mvl-1678017528389)(2023-03-02-17-19-06.png)]
以上 3 种基本结构,有以下共同特点:
① 只有一个入口。
② 只有一个出口。一个判断框有两个出口,而一个选择结构只有一个出口。
③ 结构内的每一部分都有机会被执行到。
④ 结构内不存在“死循环”(无终止的循环)。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3tbFnZQa-1678017528389)(2023-03-02-17-29-43.png)]
标识符
(1)定义:用来对变量、符号常量名、函数、数组、类型等命名的有效字符序列。
(2)规则:①标识符只能由数字、字母和下划线组成。
②第一个字符必须是字母或者下划线。
③标识符区分大小写。
④关键字不能作为标识符。
auto break case char const
continue default do double else
enum extern float for goto
if inline int long register
restrict return short signed sizeof
static struct switch typedef union
unsigned void volatile while
注:main,define,scanf,printf 均不是关键字。
数据类型
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xS5xMBVN-1678017528390)(2023-03-02-17-36-53.png)]
整型在存储单元中的存储方式是:用整数的补码形式存放。
①一个正数的补码是该数的二进制形式。
②求一个负数的补码,先将此数的绝对值写成二进制形式,然后对其后面所有各二进制数按位取反,再加一。如-5 的补码。
5 的原码 0000 0101
按位取反 1111 1010
-5 的补码 1111 1011
实数是以指数形式存放在存储单元的。
4.3 算术表达式和运算符的优先级与结合性
用算术运算符和括号将运算对象连接起来的、符合 C 语法规则的式子,称为 C 算术表达式。运算对象包括常量、变量、函数等。
C 语言规定求表达式时,先按运算符的优先级别顺序进行,若一个运算对象两侧的运算符的优先级别相同时,则按规定的“结合方向”处理。
“左结合性”:结合方向自左向右,即运算对象先与左边的运算符结合。
例:算术运算符。
“右结合性”:结合方向自右向左,即运算对象先与右边的运算符结合。
例:赋值运算符。
4.4 不同类型之间的混合运算
如果一个运算符的两侧的数据类型不同,则先自动进行类型转换,使二者具
有同一种类型,然后进行运算。因此整型、实型、字符型数据间可以进行混合运
算。
规律为:
①+、-、*、/运算的两个数中有一个数为 float 或 double 型,结果为 double
型,因为系统将所有 float 型数据都先转换为 double 型,然后进行运算。
②如果 int 型与 float 或 double 型数据进行运算,先把 int 型和 float 型
数据转换为 double 型,然后进行运算,结果是 double 型。
③字符型数据与整型数据进行运算,就是把字符的 ASCII 代码与整型数据
进行运算。
4.5 强制类型转换运算符:将一个表达式转换成所需类型。
其一般形式为 (类型名)(表达式)
注意:在进行强制类型转换时,得到一个所需类型的中间变量,而原来变量
的类型并未发生变化。
4.6 C 运算符
①算术运算符 + - * / % ++ –
②关系运算符 > < == >= <= !=
③逻辑运算符 ! && ||
④赋值运算符 =
⑤条件运算符 ?: 例:a>b?c:d
⑥逗号运算符 , 例:r=(a,b,c)
⑦指针运算符 * &
⑧求字节数运算符 sizeof
⑨强制类型转换运算符 (类型)
C 语句
5.1 C 语句的作用和分类
(1)控制语句。控制语句用于完成一定的控制功能。
①if()……else…… 条件语句
②for()…… 循环语句
③while()…… 循环语句
④do……while() 循环语句
⑤continue 结束本次循环语句
⑥break 中止执行 switch 或循环语句
⑦switch 多分支选择语句
⑧return 从函数返回语句
以上语句中()表示括号中是一个“判别条件”,“……”表示内嵌的语句。
(2)函数调用语句。函数调用语句由一个函数调用加一个分号构成。
(3)表达式语句。表达式语句由一个表达式加一个分号构成。
(4)空语句。可以用来作为流程的转向点,也可用来作为循环语句中的循
环体。
(5)复合语句。可以用{ }把一些语句和声明括起来称为复合语句。
注意:复合语句中最后一个语句中最后的分号不能忽略不写。
5.2 赋值语句
(1)赋值运算符
赋值符号 = 就是赋值运算符,它的作用是将一个数据赋给一个变量,也
可以将一个表达式的值赋给一个变量。变量必须先定义,后使用。
int x; ①定义:数据类型 变量名;
float y;
x=1; ②赋值:变量名=常量;
int a=2; ③初始化:数据类型 变量名=常量;
int b=3,c=4;
试问:double m=n=1.0; 这条语句的初始化是否正确?
(2)复合的赋值表达式
在赋值符 = 之前加上其他运算符,可以构成复合的运算符。
a+=b 等价于 a=a+b
注意:如果 b 是包含若干项的表达式,则相当于它有括号。
x%=y+3 等价于 x=x%(y+3)
(3)赋值表达式
赋值语句是在赋值表达式的末尾加上一个分号构成的。
由赋值运算符将一个变量和一个表达式连接起来的式子称为“赋值表达
式”。它的一般形式为
变量 赋值运算符 表达式
蜂考系统课 官方公众号:蜂考官微 学习交流加 QQ 群:975047395
28
扫码领答案 精讲系统课
注意:赋值运算符的左侧只能是变量,而不能是常量或者表达式。
(4)赋值过程中的类型转换
①如果赋值运算符两侧的类型一致,则直接进行赋值。
②如果赋值运算符两侧的类型不一致,但都是算术类型时,在赋值时要进
行类型转换。转换的规则是:
将浮点型数据赋给整型变量时,先对浮点数取整,即舍弃小数部分,然后
赋给整型变量。
将整型数据赋给实型变量时,数值不变,但以浮点型形式存储到变量中。
字符型数据赋给整型变量时,将字符的 ASCII 代码赋给整型变量。
将一个占字节多的整型数据赋给一个占字节少的整型变量或字符变量
时,只将其低字节原封不动地送到被赋值的变量。
printf
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HX4wnLYO-1678017528390)(2023-03-02-23-45-36.png)]
scanf
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2883oHnf-1678017528390)(2023-03-02-23-44-36.png)]
字符数组
字符型数据是以字符的 ASCII 代码存储在存储单元中的,一般占一个字节。
C 语言中没有字符串类型,字符串是存放在字符型数据中的。
3.1 定义字符数组
用来存放字符数据的数组是字符数组。字符数组中一个元素存放一个字节。
3.2 字符数组的初始化
对字符数组初始化,把各个字符依次赋给数组中各元素。
如果在定义字符数组时不进行初始化,则数组中各元素的值是不可预料的。
如果花括号中提供的初值个数大于数组长度,则出现语法错误。如果初值个数小
于数组长度,则只将这些字符赋给数组中前面那些元素,其余元素自动定为空字
符(即‘\0’)。
如果提供初值的个数与预定的数组长度相同,在定义时可以省略数组长度,
系统会自动根据个数确定数组长度。
3.3 引用字符数组的元素
可以引用字符数组中的一个元素,得到一个字符。
3.4 字符串和字符串结束标志
在 C 语言中,是将字符串作为字符数组来处理的。
C 语言规定了一个“字符串结束标志”,以字符‘\0’作为结束标志。
再对字符数组初始化的方法补充一种方法,即用字符串常量来使字符数组
初始化。
例如:
char c[]={“I am happy”};
也可以省略花括号,直接写成
char c[]=“I am happy”;
等价于
char c[]={‘I’,‘ ’,‘a’,‘m’,‘ ’,‘h’,‘a’,‘p’,‘p’,‘y’,
‘\0’};
而不与下面的等价:
char c[]={‘I’,‘ ’,‘a’,‘m’,‘ ’,‘h’,‘a’,‘p’,‘p’,‘y’};
说明:字符数组并不要求它的最后一个字符为‘\0’,甚至可以不包含‘\0’,
像以下这样是完全合法的:
char c[5]={‘C’,‘h’,‘i’,‘n’,‘a’};
3.5 字符数组的输入输出
(1)逐个字符输入输出。用格式符“%c”输入或输出一个字符。
(2)将整个字符串一次输入或输出。用格式符“%s”,意思是对字符串
(string)的输入输出。
说明:
①输出的字符中不包括结束符‘\0’。
②用“%s”格式符输出字符串时,printf 函数中的输出项是字符数组名,
而不是数组元素名。
③如果数组长度大于字符串的实际长度,也只输出到遇‘\0’结束。
④如果一个字符数组包含一个以上‘\0’,遇第一个‘\0’时输出就结束。
⑤可以用 scanf 函数输入一个字符串。
scanf(“%s”,c);
scanf 函数中的输入项 c 是已定义的字符数组名,输入的字符串应短于
已定义的字符数组的长度。
注意:
scanf 函数中的输入项如果是字符数组名,不要再加地址符&,因为在 C
语言中数组名代表该数组的起始地址。
蜂考系统课 官方公众号:蜂考官微 学习交流加 QQ 群:975047395
81
扫码领答案 精讲系统课
⑥前面介绍的输出字符串的方法:
printf(“%s”,c);
实际上是这样执行的:按字符数组名 c 找到其数组起始地址,然后逐个
输出其中的字符,直到遇‘\0’为止。
使用字符串处理数据
(1)puts 函数——输出字符串的函数
其一般形式为
puts(字符数组)
其作用是将一个字符串(以‘\0’结束的字符串序列)输出到终端。
题 1.若有声明:char a[10]=“123456”;则 puts(a+3)的结果为 。
答案:456
(2)gets 函数——输入字符串的函数
其一般形式为
gets(字符数组)
其作用是从终端输入一个字符串到字符数组,并且得到一个函数值。该函
数值是字符数组的起始地址。
注:用 puts 和 gets 函数只能输入或者输出一个字符串,不能写成
puts(str1,str2)或 gets(str1,str2)
(3)strcat——字符串连接函数
其一般形式为
strcat(字符数组 1,字符数组 2)
其作用是把两个字符数组中的字符串连接起来,把字符串 2 接到字符串
1 的后面,结果放在字符数组 1 中,函数调用后得到一个函数值——字符数组 1
的地址。
函数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4bc58wk3-1678017528391)(2023-03-03-00-02-24.png)]
局部变量和全局变量
7.1 局部变量
在一个函数内部定义的变量只在本函数范围内有效。在复合语句内定义的
变量只在本复合语句范围内有效。以上这些称为“局部变量”。
注意:
(1)主函数中定义的变量也只在主函数中有效,并不因为在主函数中定义而
在整个文件或程序中有效。主函数也不能使用其他函数中定义的变量。
(2)不同函数中可以使用同名的变量,它们代表不同的对象,互不干扰。
(3)形式参数也是局部变量。
(4)在一个函数内部,可以在复合语句中定义变量,这些变量只在本复合语
句中有效。
7.2 全局变量
在函数内定义的变量是局部变量,而在函数之外定义的变量称为全局变量。
全局变量可以为本文件中其他函数所共用。它的有效范围为从定义变量的位置
开始到本源文件结束。
题 1.在 C 语言中,一定是在所有函数之外声明的是( )。
A.全局变量 B.局部变量
C.形参 D.实参
答案:A
蜂考系统课 官方公众号:蜂考官微 学习交流加 QQ 群:975047395
106
扫码领答案 精讲系统课
题 2.以下叙述错误的是( )。
A.不同的函数中可以使用相同的变量名。
B.形式参数也是局部变量。
C.一个函数内部定义的变量只能在本函数范围内有效。
D.在一个函数内部的复合语句中定义的变量可以在本函数范围内有效。
答案:D
变量的存储方式和生存期
8.1 动态存储方式与静态存储方式
从变量的作用域(即从空间)的角度来观察,变量可以分为全局变量和局部
变量。
从变量值存在的时间(即生存期)来观察,变量的存储可以分为静态存储方
式和动态存储方式。静态存储方式是指在程序运行期间由系统分配固定的存储
空间的方式,而动态存储方式则是在程序运行期间根据需要进行动态的分配存
储空间的方式。
全局变量全部存放在静态存储区中,在程序开始执行时给全局变量分配存
储区,程序执行完毕就释放。
每一个变量和函数都有两个属性:数据类型和数据的存储类别。存储类别指
的是数据在内存中存储的方式。
C 的存储类别包括 4 种,自动的(auto)、静态的(static)、寄存器的
(register)、外部的(extern)。
扫码领答案 精讲系统课
8.2 局部变量的存储类别
(1)自动变量(auto)
函数中的局部变量,若不专门声明为 static(静态)存储类别,都是动
态地分配存储空间的,数据存储在动态存储区中。函数中的形参和在函数中定义
的局部变量,都属于此类。
实际上,关键字“auto”可以省略,不写 auto 则隐含指定为“自动存储
类别”,它属于动态存储方式。
(2)静态局部变量(static 局部变量)
函数中的局部变量的值在函数调用结束后不消失而继续保留原值,即其
占用的存储单元不释放,在下一次再调用该函数时,该变量已有值(就是上一次
函数调用结束时的值)。这时指定该局部变量为“静态局部变量”,用关键字
static 声明。
(3)寄存器变量(register 变量)
将局部变量的值放在 CPU 的寄存器中,这样的变量叫做寄存器变量。
自动变量存储在动态存储区;静态局部变量存储在静态存储区;寄存器变
量存储在寄存器。
8.3 全局变量的存储类别
外部变量是在函数的外部定义的全局变量,它的作用域是从变量的定义处
开始,到本程序文件的结尾。
(1)在一个文件内扩展外部变量的作用域。
(2)将外部变量的作用域扩展到其他文件。
(3)将外部变量的作用域限制在本文件中。
题 1.以下叙述错误的是( )。
A.在函数外可以声明变量。
B.变量声明的位置决定了该变量名的使用范围。
C.函数调用时在函数内声明的变量所得到的值将无法保存到该函数的下一次
调用。
D.在函数外声明的变量,其值可以保存到该程序运行结束。
答案:C
题 2.C 语言中形参的默认存储类别是( )。
A.自动(auto) B.外部(extern)
C.寄存器(register) D.静态(static)
答案:A
题 3.执行以下程序后,输出结果是 。
#include<stdio.h>
int fun(int n)
{
static int a=5;
a+=n;
return a;
}
int main()
{
printf(“%d\n”,fun(2)+fun(3)+fun(4));
return 0;
}
答案:31
定义和使用结构体变量
自己建立结构体类型
C 语言允许用户自己建立由不同类型数据组成的组合型的数据结构,它称为
结构体。例如:
struct Student
{
int num;
char name[20];
char sex[2];
int age;
float score;
char addr[30];
}; //注意最后有个分号
声明一个结构体类型的一般形式为
struct 结构体名
{成员表列};
注意:
结构体类型的名字是由一个关键字 struct 和结构体名组合而成的。结构
体名是由用户指定的,又称“结构体标记”,以区别于其他结构体类型。
花括号内是该结构体所包含的子项,称为结构体的成员。
对各成员都应进行类型声明,即
类型名 成员名;
成员名命名规则与变量名相同。
说明:成员可以属于另一个结构类型。
C 文件的有关基本知识
1.1 什么是文件
文件有不同的类型,在程序设计时,主要用到两种文件:
(1)程序文件。包括源程序文件(后缀为.c)、目标文件(后缀.obj)、可执
行文件(后缀.exe)等。这种文件的内容是程序代码。
(2)数据文件。文件的内容不是程序,而是供程序运行时读写的数据。
1.2 文件名
一个文件要有一个唯一的文件标识,以便用户识别和引用。
文件标识包括 3 部分:(1)文件路径
(2)文件名主干
(3)文件后缀
文件路径表示文件在外部存储设备中的位置。
蜂考系统课 官方公众号:蜂考官微 学习交流加 QQ 群:975047395
137
扫码领答案 精讲系统课
1.3 文件的分类
根据数据的组织形式,数据文件可分为 ASCII 文件和二进制文件。
二进制文件:数据在内存中是以二进制形式存储的,如果不加转换地输出到
外存,就是二进制文件。
ASCII 文件:如果要求在外存上以 ASCII 代码形式存储,则需要在存储前
进行转换,就是 ASCII 文件,ASCII 文件又称文本文件。
1.4 文件类型指针
每个被使用的文件都在内存中开辟一个相应的文件信息区,用来存放文
件的有关信息(如文件的名字、文件状态及文件当前位置等)。这些信息是存
放在一个结构体变量中的。该结构体类型是由系统声明的,取名为 FILE。
一般不对 FILE 类型变量命名,也就是不通过变量的名字来引用这些变
量,而是设置一个指向 FILE 类型变量的指针变量,然后通过它来引用这些
FILE 类型变量。
FILE *fp;
题 1.C 语言中系统默认的文件类型有文本文件和二进制文件。(判断题)
答案:正确
2.打开与关闭文件
2.1 用 fopen 函数打开数据文件
fopen 函数的调用方式为
fopen(文件名,使用文件方式);
蜂考系统课 官方公众号:蜂考官微 学习交流加 QQ 群:975047395
138
扫码领答案 精讲系统课
表 1 使用文件方式
文件使用方式 含义 文件不存在
“r”(只读) 为了输入数据,打开一个已存在的文本文件 出错
“w”(只读) 为了输出数据,打开一个文本文件 建立新文件
“a”(追加) 向文本文件尾添加数据 出错
“rb”(只读) 为了输入数据,打开一个二进制文件 出错
“wb”(只写) 为了输出数据,打开一个二进制文件 建立新文件
“ab”(追加) 向二进制文件尾添加数据 出错
“r+”(读写) 为了读和写,打开一个文本文件 出错
“w+”(读写) 为了读和写,建立一个新的文本文件 建立新文件
“a+”(读写) 为了读和写,打开一个文本文件 出错
“rb+”(读写) 为了读和写,打开一个二进制文件 出错
“wb+”(读写) 为了读和写,建立一新的二进制文件 建立新文件
“ab+”(读写) 为读写打开一个二进制文件 出错
如果不能实现“打开”的任务,fopen 函数将会带回一个出错信息。此时
fopen 函数将带回一个空指针值 NULL。
常用下面的方法打开一个文件:
if((fp=fopen(“file1”,“r”))==NULL)
{
printf(“cannot open this file\n”);
exit(0);
}
蜂考系统课 官方公众号:蜂考官微 学习交流加 QQ 群:975047395
139
扫码领答案 精讲系统课
2.2 用 fclose 函数关闭数据文件
“关闭”就是撤销文件信息区和文件缓冲区,使文件指针变量不再指向该
文件,也就是文件指针变量与文件“脱钩”,此后不能再通过该指针对原来与
其相联系的文件进行读写操作。
关闭文件用 fclose 函数。fclose 函数调用的一般形式为
fclose(文件指针);
fclose 函数也带回一个值,当成功地执行了关闭操作,则返回值为 0;否
则返回 EOF(-1)。
题 1.定义 FILE *fp;以写方式打开文件 C:\aa.dat 的正确语句是( )。
A.fp=fopen(“C:\aa.dat”,“w”);
B.fp=fopen(“C:\aa.dat”,“r”);
C.fp=fopen(“C:\\aa.dat”,“w”);
D.fp=fopen(“C:\\aa.dat”,“r”);
答案:C
题 2.若 fp 已正确定义为一个文件指针,d.txt 为 C 盘根目录下的文本文件。
请填空,以便为“读”而打开此文件:
fp=fopen(“ ”,“ ”);
答案:C:\\d.txt,r
蜂考系统课 官方公众号:蜂考官微 学习交流加 QQ 群:975047395
140
扫码领答案 精讲系统课
3.顺序读写数据文件
3.1 向文件读写一个字符
表 2 读写一个字符的函数
函数名 调用形式 功能 返回值
fgetc fgetc(fp)
从 fp 指向的文件读
入一个字符
读成功,带回所读的字符,失
败则返回文件结束标志EOF(即
-1)
fputc fputc(ch,fp)
把字符 ch 写到文件
指针变量 fp 所指向
的文件中
输出成功,返回值就是输出的
字符;输出失败,则返回EOF(即
-1)
3.2 向文件读写一个字符串
表 3 读写一个字符串的函数
函数名 调用形式 功能 返回值
fgets fgets(str,n,fp)
从 fp 指向的文件读入一个
长度为(n-1)的字符串,存
放到字符数组 str 中。
读成功,返回地址
str,失败则返回
NULL
fputs fputs(str,fp)
把 str 所指向的字符串写到
文件指针变量 fp 所指向的
文件中
输出成功,返回 0;
输出失败,否则返
回非 0 值
蜂考系统课 官方公众号:蜂考官微 学习交流加 QQ 群:975047395
141
扫码领答案 精讲系统课
3.3 用格式化的方式读写文件
一般的调用方式为:
fprintf(文件指针,格式字符串,输出列表);
fscanf(文件指针,格式字符串,输入列表);
3.4 用二进制方式向文件读写一组数据
C 语言允许用 fread 函数从文件中读一个数据块,用 fwrite 函数向文件写
一个数据块。在读写时是以二进制形式进行的。再想磁盘写数据时,直接将内
存中一组数据原封不动、不加转换地复制到磁盘文件上,在读入也是将磁盘文
件中若干字节的内容一批读入内存。
它们的一般调用形式为
fread(buffer,size,count,fp);
fwrite(buffer,size,count,fp);
题 1.C 语言中,调用 函数来检测文件位置指针有没有到文件尾。
答案:feof
题 2.以下叙述中错误的是( )。
A.gets 函数用于从键盘输入字符串。
B.getchar 函数用于从文件读入字符。
C.fputs 函数用于把字符串输出到文件。
D.fwrite 函数用于以二进制形式输出数据到文件。
答案:B
蜂考系统课 官方公众号:蜂考官微 学习交流加 QQ 群:975047395
142
扫码领答案 精讲系统课
题 3.将整型数组 a 中各元素存入文件 data.txt 中。(改错题)
#include<stdio.h>
int main()
{
int a[]={1,2,3,4,5,6,7,8};
FILE *fp;
fp=fopen(“E:\data.txt”,w);
if(fp!=NULL)
{
for(i=0;i<8;i++)
fprintf(“%d”,a[i]);
}
fclose(fp);
}
答案:fp=fopen(“E:\\data.txt”,”w”);
fwrite(&a[i],sizeof(int),1,fp);
蜂考系统课 官方公众号:蜂考官微 学习交流加 QQ 群:975047395
143
扫码领答案 精讲系统课
课时十二 练习题
1.C 语言中的文件类型有( )。
A.索引文件和文本文件两种
B.二进制文件一种
C.文本文件一种
D.ASCII 文件和二进制文件两种
2.若要打开名为 abc.txt 的文本文件进行读、写操作,下面符合此要求的函数
调用的是( )。
A.fopen(“abc.txt”,“r”);
B.fopen(“abc.txt”,“r+”);
C.fopen(“abc.txt”,“rb”);
D.fopen(“abc.txt”,“w”);
3.若执行 fopen()函数时发生错误,则函数的返回值是( )。
A.地址值 B.NULL
C.1 D.EOF
4.fscanf 函数的正确调用形式是( )。
A.fscanf(fp,格式控制符,输出列表);
B.fscanf(格式控制符,输出列表,fp);
C.fscanf(格式控制符,文件指针,输出列表);
D.fscanf(文件指针,格式控制符,输入列表);
5.在向文件写时,下列哪个函数名是写单字符函数( )。
A.fread B.fgetc C.fputc D.fwrite
蜂考系统课 官方公众号:蜂考官微 学习交流加 QQ 群:975047395
144
扫码领答案 精讲系统课
6.在 C 语言中,对文件操作的一般步骤是( )。
A.打开文件,读文件,写文件,关闭文件
B.定义文件指针,读文件,写文件,关闭文件
C.定义文件指针,打开文件,读写文件,关闭文件
D.操作文件,定义文件指针,修改文件,关闭文件
7.以下程序的功能是,从键盘输入一组字符,将字符本身及字符 ASCII 码写入
D 盘中 test.txt 文本文件保存,输入字符以#结束。
#include<stdio.h>
#include<stdlib.h>
int main()
{
;
char ch;
fp=fopen(“D:\\test.txt”,“ ”);
while((ch=getchar())!=‘#’)
fprintf(fp,“%c %d”, );
fclose(fp);
return 0;
}