C语言第10章文件

合集下载

C语言程序设计第四版PPT-谭浩强

C语言程序设计第四版PPT-谭浩强

文件f2的 文件信息区
文件f3的 文件信息区
文件的基本知识——文件的操作 写文件:打开-写-关闭 读文件:打开-读-关闭
文件的打开
功能:为文件建立相应的信息区(存放 文件信息)和文件缓冲区(暂时存放输入 输出的数据) 函数: fopen(文件名,使用文件方式); 例: fopen("a1.dat","r");
第10章 文件
本章内容
10.1 文件的基本知识 10.2 打开与关闭文件 10.3 顺序读写数据文件 10.4 随机读写数据文件 10.5 文件读写的出错检测
文件的基本知识——输入输出
之前各章中处理的数据 ➢输入:键盘->内存 ➢输出:内存->显示器 实际上也可能是 ➢输入:外部设备->内存(读文件) ➢输出:内存->外部设备(写文件) 操作系统把各种设备都统一作为文件处理
文件
顺序文件的读写——读写字符串
例10.3 从键盘输入3个字符串,排序,把排
序后的字符串写入文件(P.342-343) 读上面写好的文件(P.344)
顺序文件的读写——格式化读写
fprintf(文件指针,格式字符串,输出表列); fscanf (文件指针,格式字符串,输入表列);
例: fprintf (fp,"%d,%6.2f",i,f); fscanf (fp,"%d,%f",&i,&f);
用文件扩展名”
文件的基本知识——流式文件
C语言把文件看作是字符(或字 节)的序列。
文件以“流”的形式在程序与操 作系统间流动。
文件的基本知识——数据的形式
根据数据的组织形式,数据文件可分为 ASCII文件:数据逐个字符的ASCII码 输出到外存,也称文本文件 二进制文件:内存中二进制形式的数据 直接输出到外存

《C语言程序设计教程》PPT课件

《C语言程序设计教程》PPT课件
② 标准输出文件,文件指针为stdout,系统指定为 显示器。
③ 标准错误输出文件,文件指针为stderr,系统指 定为显示器,输出错误信息。
10.1 文件的概述
11
10.1.2 文件的打开与关闭
操作文件的一般步骤
打开文件 读写文件 关闭文件 打开量文的件函C:语数建配言,立一的用用个输于户文入完程件输成序缓出对与冲函数文区数据件。库文的中件联提的系供建,了立为大、文件分 读写数文据件的:读是写指、对数文据件的的追读加、等写操、作追。加和定位操作。 关闭文件在:程切序断中文调件用与这程些序函的数联时系,,必释须放先文用件缓冲
}
FFIILLE;E *文件指针变量/名* ;This is the FILE object */
10.1 文件的概述
10
10.1.1 文件和文件指针
4. 标准文件
标准文件是外部设备中的三个特殊的设备文件。它们 的文件指针是系统定义的,并由系统自动打开和关闭。这 三个标准文件分别是:
① 标准输入文件,文件指针为stdin,系统指定为 键盘。
include命区令。包含stdio.h文件。
10.1 文件的概述
12
10.1.2 文件的打开与关闭
1. 文件打开函数fopen( )
常用的调用形式: FILE *fp; fp = fopen(文件名, 文件使用方式); 文件名:需要打开的文件名称(字符串)。 文件使用方式:是具有特定含义的符号。
缓冲区cha地r 址和大小f等d; 。 /* File descriptor
*/
FILE在类usnhCso型语irgt是n言ed系中ch统a,r定无hb义os论li的dz;e对;,磁包//**盘含UBnu文g在fefte件scrtcs还dhiazi是reo.i设fh头n备o 文b文uf件*f件/er中*/

C语言完整资料

C语言完整资料
2.2.2 常量
2.2.2.1 字面常量(直接常量)
字面常量是直接表示的常量。
2.2.2.2 符号常量
符号常量是用一个标识符代表一个常量,使用编译预处理命令#define定 义,定义格式为:
#define 常量名 字面常量
精选版ppt
2-311
2.2.3 变量
在程序运行过程中,其值可以改变的量称为变量。 C语言规定,变量要先定义后使用。变量的定义一般在函数的声明部分,格式为:
2. 函数体: 函数体为函数首部下面的花括号{……}内的部分。 函数体一般由声明部分和执行部分构成:声明部分定义所用到的变量,声明所调用的函数等; 执行部分有若干语句组成。
1.2.2.3 C语言程序的执行
C语言程序总是从main()函数的第一条执行语句开始执行,执行完main()函数的最后一 条语句,则整个程序执行结束,而其他函精数选则版通pp过t 嵌套调用得以执行。
1-34
1.2.3 C语言程序书写格式 1. 行的书写格式自由,可从一行的任何位置开始书写。 2. 一行可书写多条语句,一条语句也可分写在几行上。 3. 所有语句都必须以分号“;”结束。 4. 允许使用注释。 C语言的注释格式有两种://,/* …… */。 5. 在书写程序时,通常采用缩格形式书写分层结构的程序。
本章主要介绍C语言的特点,C语言程序的结构与书写规则,C程序上机步骤,编译预 处理,算法的概念及表示。
精选返版回pp目t 录
1-12
1.1 语言的特点
1.语言简洁、紧凑,使用方便、灵活 2.运算符丰富 3.数据类型丰富 4.程序设计结构化、模块化 5.语法限制不太严格,程序设计自由度大 6.C语言允许直接访问物理地址,能进行位(bit)操作 7.生成的目标代码质量高,程序执行效率高 8.可移植性好

计算机二级C语言辅导 10章 字符串

计算机二级C语言辅导 10章 字符串

例2. 删除一个字符串中的一个字符。 字符串由标准输入得到,欲删除的字符也由标准输入得到
main ( ) { char s[20],c; int i,j; gets(s); c=getchar( ); for (i=j=0;s[i]!=„\0‟;i++) if (s[i]!=c) s s[j++]=s[i]; s[j]=„\0‟; c=l }
p
i j
i j
i j
i
j
i
W
0
o
1
r
2
l
3
d
4
\0
5
例2. 删除一个字符串中的一个字符。 字符串由标准输入得到,欲删除的字符也由标准输入得到
main ( ) { char s[20],c; int i,j; gets(s); c=getchar( ); for (i=j=0;s[i]!=„\0‟;i++) if (s[i]!=c) s s[j++]=s[i]; s[j]=„\0‟; c=l }
H o w \0
0 1 2 3 4 5 6 7 8 9 10 11 12
字符数组
五、字符串处理函数: 1.puts(字符数组); 将字符串输出到终端,在输出时将字符串结束标记‘\0‟转换成‘\ char str[ ]={“China\nBeijing”}; puts(str); 输出:China Beijing 2.gets(字符数组)--读入全部字符(包括空格),直到遇到回车符为止 从终端输入一个字符串到字符数 如果输入以下12个字符: 组,并且得到一个函数值,该函 数值是字符数组的起始地址。
第十章 字符串
在C语言中,没有字符串这种数据类型, 因此可以将字符串存放在字符数组中。 这是处理字符串的方法之一。

谭浩强版C语言的第十章《指针》答案

谭浩强版C语言的第十章《指针》答案

谭浩强版C语言的第十章《指针》答案第十章《指针》答案如下inc/testPtr.h#include <string.h>#include <ctype.h>#include <math.h>#include <assert.h>#define SIZE 1024int a2i(char *start, char *end){int size = 0, ret = 0;long base = 0;size = end - start + 1;base = (long)pow(10, size - 1);while(size-- > 0){ret += (*start++ - '0') * base;base /= 10;}return ret;}int extraNum(char *str, int arr[]){int ite = 0, counter = 0;char *start = NULL, *end = NULL;while(*str != '\0'){if(isdigit(*str)){start = end = str;while( isdigit(*end) && *end != '\0'){++end;}arr[ite++] = a2i(start, end-1);str = end;}else{str++;}}return ite;}int sortStr(char *arr[], int size){int ite1 = 0, ite2 = 0, minPos = 0;char *tmp;for(ite1 = 0; ite1 < size - 1; ite1++){minPos = ite1;for(ite2 = ite1 + 1; ite2 < size; ++ite2 ){if( strcmp(arr[ite2], arr[minPos]) < 0 ){minPos = ite2;}}if(minPos != ite1){tmp = arr[minPos];arr[minPos] = arr[ite1];arr[ite1] = tmp;}}return 0;}int sort(int arr[], int size){int minPos = 0, ite1 = 0, ite2 = 0, tmp = 0;for(ite1 = 0; ite1 < size - 1; ite1++){minPos = ite1;for(ite2 = ite1 + 1; ite2 < size; ite2++){if( arr[ite2] < arr[minPos] ){minPos = ite2;}}if(minPos != ite1){tmp = arr[ite1];arr[ite1] = arr[minPos];arr[minPos] = tmp;}}return 0;}int sortPtr(int arr[], int size){int minPos = 0, ite1 = 0, ite2 = 0, tmp = 0;for(ite1 = 0; ite1 < size - 1; ite1++){minPos = ite1;for(ite2 = ite1 + 1; ite2 < size; ite2++){if( *(arr + ite2) < *(arr + minPos) ){minPos = ite2;}}if(minPos != ite1){tmp = *(arr + ite1);*(arr + ite1) = *(arr + minPos);*(arr + minPos) = tmp;}}return 0;}int getMultiArr(int arr[][5], int n){int i = 0, j = 0, min = 0, tmp = 0, size = 5 * n;int *p = NULL, pos[size];/* copy */p = (int *)malloc(size * sizeof(int));assert(p != NULL);memcpy(p, arr, size * sizeof(int));/* sort */for(i = 0; i < size - 1; i++){min = i;for(j = i + 1; j < size; j++){if( *(p + j) < *(p + min)){min = j;}}if(min != i){tmp = *(p + min);*(p + min) = *(p + i);*(p + i) = tmp;}}/* move */for(i = 0; i < n; i++){for(j = 0; j < 5; j++){if( *p == arr[i][j] ){tmp = arr[i][j];arr[i][j] = arr[0][0];arr[0][0] = tmp;continue;}if( *(p + 1) == arr[i][j] ){tmp = arr[i][j];arr[i][j] = arr[0][4];arr[0][4] = tmp;continue;}if( *(p + 2) == arr[i][j] ){tmp = arr[i][j];arr[i][j] = arr[n - 1][0];arr[n - 1][0] = tmp;continue;}if( *(p + 3) == arr[i][j] ){tmp = arr[i][j];arr[i][j] = arr[n - 1][4];arr[n - 1][4] = tmp;continue;}if( *(p + size - 1) == arr[i][j] ){tmp = arr[i][j];arr[i][j] = arr[n/2][2];arr[n/2][2] = tmp;continue;}}}free(p);p = NULL;return 0;}int statStr(char *str){int upper = 0, lower = 0, space = 0, num = 0, other = 0;while(*str != '\0'){if(isdigit(*str)){num++;}else if (isupper(*str)){upper++;}else if (islower(*str)){lower++;}else if (isspace(*str)){space++;}else{other++;}str++;}assert(3 == upper);assert(5 == lower);assert(10 == num);assert(2 == space);assert(6 == other);return 0;}int average(int(*stu)[6], int classNum, int stuNum){int i = 0, ave = 0;for(i = 0; i < stuNum; i++){ave += (*(stu + i))[classNum];}ave /= stuNum;return ave;}int searchStu(int(*stu)[6], int stuNum){int counter = 0, i = 0, j = 1, stuCounter = 0;for (i = 0; i < stuNum; i++){counter =0;for(j = 1; j < 6; j++){if( (*(stu + i))[j] < 60 ){counter++;}}if(counter >= 2){stuCounter++;}}return stuCounter;}int moveInt(int arr[], int n, int m){int i = 0, *p = NULL;p = (int*)malloc(n * sizeof(int));assert(p != NULL);memcpy(p + m, arr, (n - m) * sizeof(int));memcpy(p, arr + n -m , m * sizeof(int));memcpy(arr, p, n * sizeof(int));free(p);p = NULL;return 0;}int myStrcmp(char *p1, char*p2){int ret = 0;while((*p1 != '\0') && (*p2 != '\0') && ( *p1 == *p2 ) ) {p1++;p2++;}if(*p1 == '\0'){ret = -1;}else if (*p2 == '\0'){ret = 1;}else{ret = (*p1 - *p2) > 0 ? 1 : -1;}return ret;}int revArr(int a[], int size){int tmp = 0, *start = NULL, *end = NULL;start = a;end = start + size - 1;size = size / 2;while(size >= 0){tmp = *(start + size);*(start + size) = *(end - size);*(end - size) = tmp;size--;}return 0;}char *getMonth(char *month[], int which) {assert(which <= 12);return ( *(month + which - 1));}int getStr(char *dest, char* src, int m) {int len = 0;len = strlen(src) + 1 - m;src = src + m - 1;memcpy(dest, src, len * sizeof(char));return 0;}int removePer3(int arr[], int size){int i = 0;for(i = 0; i < size; i++){if(((arr[i]) % 3) == 0){arr[i] = 0;}}return 0;}int getMinMax(int a[], int size){int i = 0, min = 0, max = 0, tmp = 0;min = max = 0;for(i = 0; i < size; i++){if (a[i] <= a[min]){min = i;}if(a[i] >= a[max]){max = i;}}tmp = a[0];a[0] = a[min];a[min] = tmp;tmp = a[size - 1];a[size - 1] = a[max];a[max] = tmp;}int test_10_1(){int ite = 0, iRet = 0, arr[5] = {121, 234, 456456, 543, 23};iRet = sortPtr(arr, 5);assert (23 == arr[0]);assert (121 == arr[1]);assert (234 == arr[2]);assert (543 == arr[3]);assert (456456 == arr[4]);printf("\r\nTest_10_1 Passed!");return 0;}int test_10_2(){int ite = 0, iRet = 0;char *arr[10] = { "In the IBM Rational ClearCase environment", \"An auditable history of source files and software builds is maintained in your organization", \"The efforts of your team can be coordinated into a definable"};iRet = sortStr(arr, 3);assert( strcmp(arr[0], "An auditable history of source files and software builds is maintained in your organization") == 0 );assert( strcmp(arr[1], "In the IBM Rational ClearCase environment") == 0);assert( strcmp(arr[2], "The efforts of your team can be coordinated into a definable") == 0);printf("\r\nTest_10_2 Passed!");return 0;}int test_10_3(){int ret = 0, a[10] = {7,2,3,9,1,0,7,6,5,0};ret = getMinMax(a, 10);assert(a[0] == 0);assert(a[9] == 9);printf("\r\nTest_10_3 Passed!");return 0;}int test_10_4(){int ret = 0, arr[9] = {0, 1, 2, 3, 4, 5, 6, 7, 8};ret = moveInt(arr, 9, 3);assert(6 == arr[0]);assert(7 == arr[1]);assert(8 == arr[2]);assert(0 == arr[3]);assert(1 == arr[4]);assert(2 == arr[5]);assert(3 == arr[6]);assert(4 == arr[7]);assert(5 == arr[8]);printf("\r\nTest_10_4 Passed!");return 0;}int test_10_5(){int ret = 0, i = 0, a[12] = {1,2,3,4,5,6,7,8,9,10,11,12};ret = removePer3(a, 12);assert(a[2] == 0);assert(a[5] == 0);assert(a[8] == 0);assert(a[11] == 0);printf("\r\nTest_10_5 Passed!");return 0;}int test_10_7(){int ret = 0;char s2[100] = {0}, *s1 = "hello world!";getStr(s2, s1, 7);assert( strcmp(s2, "world!") == 0);printf("\r\nTest_10_7 Passed!");return 0;}int test_10_8(){int ret = 0;char *str = "a123xABC ??#$%^ 302tab5876";ret = statStr(str);if(ret == 0){printf("\r\nTest_10_8 Passed!");}return 0;}int test_10_10(){int i = 0, j = 0, ret = 0;int arr[5][5] = { \{16, 17, 18, 19, 20}, \{11, 12, 13, 14, 15}, \{1, 2, 3, 4, 5}, \{21, 22, 23, 24, 25}, \{6, 7, 8, 9, 10}, \};ret = getMultiArr(arr, 5);assert(1 == arr[0][0] );assert(2 == arr[0][4] );assert(3 == arr[4][0] );assert(4 == arr[4][4] );assert(25 == arr[2][2] );printf("\r\nTest_10_10 Passed!");return 0;}int test_10_11(){int ite = 0, iRet = 0;char *arr[10] = { "In the", \"An aud", \"The ef", \"Proces", \"Sets o", \"Unifie", \"Out-of", \"Practi", \"Ration", \"Explor" \};iRet = sortStr(arr, 10);assert( strcmp(arr[0], "An aud") == 0 );assert( strcmp(arr[1], "Explor") == 0);assert( strcmp(arr[2], "In the") == 0);assert( strcmp(arr[3], "Out-of") == 0);assert( strcmp(arr[4], "Practi") == 0);assert( strcmp(arr[5], "Proces") == 0);assert( strcmp(arr[6], "Ration") == 0);assert( strcmp(arr[7], "Sets o") == 0);assert( strcmp(arr[8], "The ef") == 0);assert( strcmp(arr[9], "Unifie") == 0);printf("\r\nTest_10_11 Passed!");return 0;}int test_10_12(){int ite = 0, iRet = 0;char *arr[10] = { "In the IBM Rational ClearCase environment", \"An auditable history of source files and software builds is maintained in your organization", \"The efforts of your team can be coordinated into a definable", \"Process by using one of the following", \"Sets of Rational ClearCase features", \"Unified Change Management (UCM),", \"Out-of-the-box process that supports best", \"Practices for change management as described in the IBM", \"Rational Unified Process. Project managers can configure", \"Explorer. For more information about Rational ClearCase"};iRet = sortStr(arr, 10);assert( strcmp(arr[0], "An auditable history of source files and software builds is maintained in your organization") == 0 );assert( strcmp(arr[1], "Explorer. For more information about Rational ClearCase") == 0);assert( strcmp(arr[2], "In the IBM Rational ClearCase environment") == 0);assert( strcmp(arr[3], "Out-of-the-box process that supports best") == 0);assert( strcmp(arr[4], "Practices for change management as described in the IBM") == 0);assert( strcmp(arr[5], "Process by using one of the following") == 0);assert( strcmp(arr[6], "Rational Unified Process. Project managers can configure") == 0);assert( strcmp(arr[7], "Sets of Rational ClearCase features") == 0);assert( strcmp(arr[8], "The efforts of your team can be coordinated into a definable") == 0);assert( strcmp(arr[9], "Unified Change Management (UCM),") == 0);printf("\r\nTest_10_12 Passed!");return 0;}int test_10_14(){int ret = 0, a[11] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};ret = revArr(a, 11);assert(10 == a[0]);assert(9 == a[1]);assert(8 == a[2]);assert(7 == a[3]);assert(6 == a[4]);assert(5 == a[5]);assert(4 == a[6]);assert(3 == a[7]);assert(2 == a[8]);assert(1 == a[9]);assert(0 == a[10]);printf("\r\nTest_10_14 Passed!");return 0;}int test_10_15(){int ave = 0, ret = 0;int student[4][6] = { \{1, 100, 90, 80, 70, 97}, \{2, 34, 45, 56, 78, 97}, \{3, 76, 34, 68, 84, 12}, \{4, 90, 90, 90, 75, 28} \};ave = average(student, 1, 4);ret = searchStu(student, 4);assert(75 == ave);assert(2 == ret);printf("\r\nTest_10_15 Passed!");return 0;}int test_10_16(){int iRet = 0, ite = 0, arr[SIZE] = {0};char *str = "a123x456 17960? 302tab5876";iRet = extraNum(str, arr);assert(123 == arr[0]);assert(456 == arr[1]);assert(17960 == arr[2]);assert(302 == arr[3]);assert(5876 == arr[4]);printf("\r\nTest_10_16 Passed!");return 0;}int test_10_17(){int ret = 0;char *s1 = "abcd", *s2 = "abCd";ret = myStrcmp(s1, s2);assert(ret == 1);char *s3 = "aBcd", *s4 = "abCd";ret = myStrcmp(s3, s4);assert(ret == -1);char *s5 = "abcde", *s6 = "abcd";ret = myStrcmp(s5, s6);assert(ret == 1);char *s7 = "abcd", *s8 = "abcde";ret = myStrcmp(s7, s8);assert(ret == -1);char *s9 = "abcd", *s10 = "abCde";ret = myStrcmp(s9, s10);assert(ret == 1);printf("\r\nTest_10_17 Passed!");return 0;}int test_10_18(){int which = 0;char *month[12] = { \"January", \"February", \"March", \"April", \"May", \"June", \"July", \"August", \"September", \"October", \"November", \"December" \};which = 11;assert( strcmp("November", getMonth(month, which)) == 0 );which = 7;assert( strcmp("July", getMonth(month, which)) == 0 );printf("\r\nTest_10_18 Passed!");return 0;}int test_10_20(){int ite = 0, iRet = 0;char *arr[5] = { "In the IBM Rational ClearCase environment", \"An auditable history of source files and software builds is maintained in your organization", \"The efforts of your team can be coordinated into a definable", \"Process by using one of the following", \"Sets of Rational ClearCase features" \};iRet = sortStr(arr, 5);assert( strcmp(arr[0], "An auditable history of source files and software builds is maintained in your organization") == 0 );assert( strcmp(arr[1], "In the IBM Rational ClearCase environment") == 0);assert( strcmp(arr[2], "Process by using one of the following") == 0);assert( strcmp(arr[3], "Sets of Rational ClearCase features") == 0);assert( strcmp(arr[4], "The efforts of your team can be coordinated into a definable") == 0);printf("\r\nTest_10_20 Passed!");return 0;}int test_10_21(){int ite = 0, iRet = 0, arr[5] = {121, 234, 456456, 543, 23};iRet = sort(arr, 5);assert (23 == arr[0]);assert (121 == arr[1]);assert (234 == arr[2]);assert (543 == arr[3]);assert (456456 == arr[4]);printf("\r\nTest_10_21 Passed!");return 0;}int testPtr(){int iRet = 0;#if 0#endifiRet += test_10_1();iRet += test_10_2();iRet += test_10_3();iRet += test_10_4();iRet += test_10_5();iRet += test_10_7();iRet += test_10_8();iRet += test_10_10();iRet += test_10_11();iRet += test_10_12();iRet += test_10_14();iRet += test_10_15();iRet += test_10_16();iRet += test_10_17();iRet += test_10_18();iRet += test_10_20();iRet += test_10_21();return iRet;}src/#include <stdio.h>#include <stdlib.h>#include <assert.h>#include "../inc/testFile.h" #include "../inc/testBits.h" #include "../inc/testPtr.h"int main(){int iRet = 0;#if 0iRet += testFile();assert(iRet == 0);iRet += testBits();assert(iRet == 0);#endifiRet += testPtr();assert(iRet == 0);return 0;}。

chap10(文件)

chap10(文件)

10.2 文件操作 在对文件读、写之前必须先打开该文件, 在对文件读 、 写之前必须先打开该文件 , 使用结束后 应关闭该文件。 应关闭该文件。 一、 文件打开函数 fopen 函数调用格式: 函数调用格式: FILE *fp; fp=fopen(“文件名”,“使用方式”); 文件名” 使用方式 使用方式” 文件名 打开指定的文件,以指定的使用方式进行访问。 打开指定的文件,以指定的使用方式进行访问。 说明: 说明: 指向打开的文件后, 就可以用它来访问该文件。 用 fp 指向打开的文件后 就可以用它来访问该文件。 文件名”为任何合法的DOS文件名。 文件名。 “文件名”为任何合法的 文件名 有的C 版本只用r、 、 ,或只用rw、 而不用r+、 有的 版本只用 、w、a,或只用 、ra 而不用 、 w+、a+ 、 在程序运行时, 系统自动打开三个标准文件stdin、 在程序运行时 , 系统自动打开三个标准文件 、 stdout、stderr。 、 。
第 10 章
10.1 文件操作库函数
文件
一、 概述 C语言将文件看作是一个字符 字节 序列组成的 。 语言将文件看作是一个字符(字节 序列组成的。 语言将文件看作是一个字符 字节)序列组成的 分为ASCII文件和二进制文件两种。 文件和 两种。 分为 文件 二进制文件两种 C的“缓冲 输出 文件系统” 文件系统 ” 自动 缓冲区 地在内存中开辟 一个文件缓冲区, 程序 一个文件缓冲区 磁盘 在对文件进行处 数据区 文件 理时, 通过文件 输入 缓冲区进行输入 缓冲区 与输出。 与输出。
文本文件中的回车换行符在输入时转换为一个换行符, 文本文件中的回车换行符在输入时转换为一个换行符, 在输出时又转换为回车换行符。 在输出时又转换为回车换行符。 为了可靠地打开指定的文件, 常用下列方法: 为了可靠地打开指定的文件 常用下列方法: if ((fp=fopen(“file1” , “ r ”))==NULL) { printf(“cannot open this file\n”); exit(0); } 二、 文件关闭函数 fclose 使用完一个文件后必须关闭它, 使用完一个文件后必须关闭它 , 以防数据丢失和 被其它操作误用。 被其它操作误用。 fclose函数的调用格式: 函数的调用格式: 函数的调用格式 fclose(文件指针 文件指针); 文件指针 关闭文件时的操作就是使指针与文件“脱钩” 关闭文件时的操作就是使指针与文件“脱钩”。正常 关闭时fclose函数返回 值,关闭有误时返回非 值。 函数返回0值 关闭有误时返回非0值 关闭时 函数返回

C语言入门经典(第四版)10-基本输入和输出操作

C语言入门经典(第四版)10-基本输入和输出操作

C入门经典(第4版) 入门经典( 10.4.2 转义序列
在printf()和wprintf()函数的格式控制字符串中可以包含空白字符.空白字 printf()和wprintf()函数的格式控制字符串中可以包含空白字符.空白字 符有换行符,回车符,换页符,空格和制表符.它们用以\ 符有换行符,回车符,换页符,空格和制表符.它们用以\开头的转义序列表 示.
C入门经典(第4版) 入门经典( 10.3.2 输入格式控制字符串
在scanf()或wscanf()函数中使用的格式控制字符串不完全类似于printf()中 scanf()或wscanf()函数中使用的格式控制字符串不完全类似于printf()中 的格式控制字符串.在格式控制字符串中添加一个或多个空白字符,如空格' ', 的格式控制字符串.在格式控制字符串中添加一个或多个空白字符,如空格' ', 制表符' t'或换行符'n',scanf()会忽略空白字符,直接读入输入中的下一个非空 制表符'\t'或换行符'n',scanf()会忽略空白字符,直接读入输入中的下一个非空 白字符.在格式控制字符串中只要出现一个空白字符,就会造成无数个连续的 空白字符被忽略.因此,可以在格式字符串内加入任意多个的空白字符,使输 入易于理解.注意,scanf()默认忽略空白字符,但使用%c,%[]或%n指定符 入易于理解.注意,scanf()默认忽略空白字符,但使用%c,%[]或%n指定符 读取数据时除外 .
C入门经典(要使用scanf()函数从键盘输入数据,使用printf()函数将数据输 前面章节主要使用scanf()函数从键盘输入数据,使用printf()函数将数据输 出到屏幕上.事实上,使用这些函数指定从哪里输入或输出到哪里去的方式没 有什么特别.因为scanf()函数可以从任何地方接收信息,只要这些信息是字符 有什么特别.因为scanf()函数可以从任何地方接收信息,只要这些信息是字符 流即可.同样,printf()函数也可以将数据输出到任何能接收字符流的地方去. 流即可.同样,printf()函数也可以将数据输出到任何能接收字符流的地方去. 这并不是巧合:C 这并不是巧合:C语言的标准输入输出函数都是独立于设备的,程序员不需要 考虑如何在特定设备上传入传出数据.C 考虑如何在特定设备上传入传出数据.C语言的库函数和操作系统会确保在特 定设备上的操作完全正常.

第10章-编译预处理ppt课件(全)

第10章-编译预处理ppt课件(全)
#include <stdio.h> #define M(x,y,z) x*y+z int main( ) { int a=1,b=2, c=3; printf(“%d\n”,M(a+b,b+c,c+a)); return 0; }
-8-
带参数的宏定义(续)
【例10-3】用宏来定义多个语句的例子。
宏的使用有很多好处,不仅可以简化程序的书写,而且便于程序的 修改和移植,使用宏名来代替一个字符串,可以减少程序中重复书写某 些字符串的工作量。
根据宏定义中是否有参数,可以将宏分为不带参数的宏定义与带参 数的宏定义两种,下面分别讨论这两种宏的定义与调用。
-4-
10.1.1 不带参数的宏定义
不带参数的宏的宏名后面没有参数,不带参数的宏定义又称简单宏 定义。其定义的一般形式为:
宏定义是用一个标识符来表示一个字符串,这个字符串可以是常量、变量或表 达式。在宏替换时,用该字符串代换宏名。根据宏定义中是否有参数,可以将宏分 为不带参数的宏定义与带参数的宏定义两种。在写带有参数的宏定义时,宏名与带 括号参数间不能有空格,否则将空格以后的字符都作为了替换字符串的一部分,这 样就变成不带参数的宏定义了。不要把带参数的宏定义与带参数的函数混淆,带参 的宏定义在预处理时只是字符串的替换,而带参的函数却是将实参的值一一对应的 传递给形参。
#define 宏名 字符串 其中,“#”表示预处理命令。define是关键字,表示该命令为宏定 义。为了与一般的普通变量相区别,宏名一般使用大写。“字符串”一 般为常量、表达式或字符串。 在进行预处理时,系统会将程序中的“宏名”用“字符串”来替换。
-5-Biblioteka 10.1.1 不带参数的宏定义

C语言程序设计第10章文件及其应用

C语言程序设计第10章文件及其应用

学一学
1.定义文件指针 一般形式为: FILE * fp; 其中fp就是所定义文件指针。 FILE类型 以及所有的文件读写函数和相关常量都定 义在文件stdio.h中,在源程序的开头要 包含头文件 stdio.h 。
学一学
2.打开文件 C语言中,使用fopen函数来打开文件。打开文件是使 一个文件指针变量指向被打开文件的结构变量,以便通 过该指针变量访问打开的文件。fopen函数的调用形式 如下: fopen(chFileName,mode); 以mode 方式打开文件chFileName。其中,参数 chFileName 是将要读写文件的文件名,mode为文件 的操作方式。若文件打开成功,返回一个文件指针,若 打开失败,则返回空值NULL,NULL在stdio.h中被定 义为0。文件操作方式mode是一个整数,其取值及含 义如表10-1所示。

流程图
开始 定义文件指针fp,定义整型数组 iArray[5],定义循环变量i 以写二进制文件方式打开文件 fp=fopen("test.dat","wb") N i=0
fp==NULL Y
i<5 Y 输入1个整数存入 数组元素iArray[i]
N
i++
把数组iArray中5 个整数写入文件
显示出错信息 关闭文件 exit(0)
试一试
问题10.1编一程序从键盘输入一串字符“may friendship forever! ”,然后保存在文件myInfo.txt中。 【解题步骤】 1.定义文件指针fp; 2.定义字符数组chInfo用来存输入的字符串; 3.以写文本文件方式打开文件myInfo.txt; 4.如果打开文件失败,则输出错误信息并结束程序; 5.否则,打开文件成功,则从键盘输入数据; 5.将字符数组chInfo中的字符写入文件myInfo.txt; 6.关闭文件。

C_C++程序设计与上机指导010

C_C++程序设计与上机指导010

格式化读写函数(fprintf (fprintf和 10.3.4 格式化读写函数(fprintf和fscanf)
fprintf和fscanf函数与 和 函数与printf和scanf函数的 函数与 和 函数的 功能相似。二者的区别仅在于读写对象不同。 功能相似。二者的区别仅在于读写对象不同。 printf和scanf函数的读写对象是键盘和显示器; 函数的读写对象是键盘和显示器; 和 函数的读写对象是键盘和显示器 函数的读写对象是磁盘文件。 而fscanf 和fprintf函数的读写对象是磁盘文件。 函数的读写对象是磁盘文件
1. 数据块读函数 数据块读函数fread()
函数功能:读指定文件中的数据块 函数形式:fread(buffer,size,count,fp); • 其中: • buffer:指针,指示读入文件数据的首地址。 • size:表示一个数据块的字节数。 • count:表示要读入多少个size字节的数据块。 • fp:文件指针
• • • • • • • • • • • typedef struct{ short level; unsigned char fd; unsigned char short bsize; unsigned char unsigned char unsigned short token; }FILE; /*缓冲区满或空的程度*/ flags; /*文件状态标志*/ /*文件名*/ fold; /*如无缓冲区,则不读取字符*/ /*缓冲区大小*/ *buffer; /*数据缓冲区位置*/ *curp /*当前位置指针*/ istemp; /*临时文件指示器*/ /*用于有效性检验*/
2. 字符串读函数 字符串读函数fgets
函数功能:从指定的文件中读一个字符串到字符数组中。 函数形式:fgets(字符数组名,n,文件指针); 其中:n是一个正整数,指定读出的字符串长度。读入n-1个字符 并在最后一个字符后加一个字符串结束标志&块读写函数(fread (fread和 10.3.3 数据块读写函数(fread和fwrite)

高树芳C语言程序设计--第十章

高树芳C语言程序设计--第十章

[解决方案]定义结构体类型变量存储学生信息,
使用scanf从键盘输入数据,使用fprintf函数按格 式输出数据到文件(生成data3.txt文件)。
程序代码
10
10.2
文件的读写
相关知识:
1.文件的读写 2.格式化读写函数
11
10.2
文件的读写
[课堂训练10-1] 1.使用Windows的记事本建立一个文件,其 中写入15个任意整数,数据之间用逗号分隔。 编程输出该文件所有的奇数。 2.编程以只读方式打开案例10-3中的 data3.txt文件,在屏幕上输出所有学生的数 据。
第10章
文件
知识目标: 1. 理解文件和文件指针的概念 2.掌握文件的打开和关闭方法 3.掌握文件的读写操作 4.掌握文件的定位与随机读写操作
1
第10章 文件 能力目标: 1. 会打开和关闭文件 2.会对文件进行读写和定位等操作
本章内容: 文件的定义,文件型指针,文件的打开与关闭,文件 的读写,文件的定位与随机读写。
2
第10章 10.1 10.2 10.3 10.4
文件
文件的打开与关闭 文件的读写 文件的定位和随机读写 知识拓展
3
10.1 文件的打开与关闭
案例10-1
输出文件中的整数及其和
4
10.1 文件的打开与关闭
案例10-1 [案例任务]
输出文件中的整数及其和
使用Windows的记事本在磁盘上与C程序文件在同一目 录下建立一个文件名为“data1.txt”的文本文件(如 图10-1所示),以空格、制表符或回车为分隔符输入 任意个整数,设计C程序,以只读方式打开此文件,若 该文件不存在,则输出“不能打开文件!”,若打开 成功,则输出所有整数,以及整数的个数和它们之和。

C语言第10章对文件的输入输出 ppt课件

C语言第10章对文件的输入输出  ppt课件
程序中的输入输出都是通过操作系统进行 的 ➢“流”是一个传输通道,数据可以从运行 环境流入程序中,或从程序流至运行环境
PPT课件
11
10.1.1 什么是文件
➢从C程序的观点来看,无论程序一次读写 一个字符,或一行文字,或一个指定的数 据区,作为输入输出的各种文件或设备都 是统一以逻辑数据流的方式出现的。C语 言把文件看作是一个字符(或字节)的序 列。一个输入输出流就是一个字符流或字 节(内容为二进制数据)流。
PPT课件
20
10.1.3 文件的分类
ASCII形式
00110001 00110000 00110000 00110000 00110000
(1) (0) (0) (0) (0)
二进制形式
00000000 00000000 00100111 00010000
(10000)
PPT课件
21
10.1.4 文件缓冲区
的temp子目录下面
PPT课件
15
10.1.2 文件名
➢文件路径表示文文件件在名外部存储设备中的位 置。如:
D: \CC\temp\file1.dat 表示file1.dat文件存放在D盘中的CC目录下
的temp子目录下面
PPT课件
16
10.1.2 文件名
➢文件路径表示文命 识件名 符在规 的外则 命部遵 名存循 规储标 则设备中的位 置。如:
➢“文件”指存储在外部介质上数据的集合
一批数据是以文件的形式存放在外部介质上的 操作系统是以文件为单位对数据进行管理 想找存放在外部介质上的数据,先按文件名找
到所指定的文件,然后再从该文件读数据 要向外部介质上存储数据也必须先建立一个文
件(以文件名作为标志),才能向它输出数据

C语言程序设计教程(第5版)王秀鸾第10章函数参数传递进阶

C语言程序设计教程(第5版)王秀鸾第10章函数参数传递进阶
case ' ': s=result(a, b, sub); break; case '*':s=result(a, b, mult); break; case '/ ': s=result(a, b, divi); break; } printf("the operation is :%lf%c%lf=%lf\n",a,op,b,s); }
10.6 main( )函数的形参
主函数的原形如下: main(int argc,char *argv[]) { … }
其中,argc和argv就是main()函数的形参。argc 是整形变量,argv[]是一个字符型指针数组。
main( )函数是由操作系统调用的,它的参数由操 作系统传递,所以运行带形参的主函数时,必须在 操作系统命令状态下,输入命令行:
第10章 函数参数传递进阶
10.1 指针变量作为函数参数
• 函数的参数不仅可以是整型、实型、字符型等数据,还可以是指
针类型数据。
【例10.1】交换两个指针变量所指向的变量的值
#include "stdio.h" void test(int *p1,int *p2) /* 形参为指针变量 */ { int p;
} int add(int a,int b) { return(a+b); }
3.指向函数指针变量作函数参数
指向函数的指针变量也可以作为函数的参数;即 将函数的入口地址传递给函数,也就是将函数名传 给形参,从而实现利用相同的函数调用语句调用不 同函数的目的。
【例】 用函数指针变量实现四则运算。
#include "stdio.h" double add(double x,double y) { return(x+y);} double sub(double x,double y) { return(x-y);} double mult(double x,double y) { return(x*y);} double divi(double x,double y) { return(x/y);} double result(double x,double y,doubl

C语言开发基础教程(Dev-C++) 第10章 文件操作

C语言开发基础教程(Dev-C++) 第10章 文件操作


10.3.2 单行读写文件
2、fputs()函数
FILE *fp;
fp = fopen("D:\\test.txt","r+"); //以读写模式打开文件
fputs("China",fp);

10.1.2 文件
总体来说,二进制文件较小,生成的速度 快,加载的速度也快,但文件内容往往需 要解析才可读。文本文件相对较大,生成 与加载的速度比二进制文件要慢,但文本 文件无需任何转换就可以看到其内容。

10.1.3 文件指针
在C语言中,所有的文件操作都必须依靠指针来完成,因此如果要对文件 进行操作,必须先定义指向文件的指针,然后通过文件指针完成对文件 的操作。 文件指针的定义格式如下: FILE *变量名; FILE *fp; //定义文件指针fp

10.2 文件的打开和关闭
文件正常打开时,函数返回指 向该文件的文件指针;文件打 开失败时,函数返回NULL。一 般在调用该函数之后,为了保 证程序的健壮性,会进行一次 判空操作。
FILE* fp;
//定义文件指针
fp=fopen(“D:\\test.txt”,“r”);
if(fp==NULL) //判空操作
程序
内存 输出文件缓冲区
输出
输出
输入 输入文件缓冲区 输入
磁盘

10.2 文件的打开和关闭
文件最基本的操作就是打开和 关闭,在对文件进行读写之前, 需要先打开文件;读写结束之 后,则要及时关闭文件。

10.2 文件的打开和关闭
1、打开文件 fopen()函数用于打开一个文件。 FILE* fopen(char* filename,char* mode); 返回值类型FILE*表示该函数返回值为文件指针类型;参数filename用于 指定文件的绝对路径,即用来确定文件包含路径名、文件名主干和扩展名 的唯一标识;参数mode用于指定文件的打开模式,函数的返回值为一个 文件类型的指针,如果文件打开失败,则返回空指针。

c语言课件《字符串》概述

c语言课件《字符串》概述
或者char c[6]=“China”;
C h i n a \0
是字符串
注:以字符串方式赋值时,必须保证数组元素个数 ≥字 符个数+1,(字符串后面需自动加上一个'\0')。
2019/3/14 8/
8
一维字符数组的初始化

省略数组长度 如: char c[ ]={'C', 'h', 'i', 'n', 'a'};
第10章 字符串
本章学习内容
字符串常量 字符串处理函数 字符数组和字符指针 向函数传递字符串
从函数返回一个字符串指针
2019/3/14
2/
10.1字符串常量
"How are you"
ASCII码值为0
用双引号括起的一串字符
是字符串常量,C语言自 动为其添加'\0'结束符 一串以‘\0’结尾的字符序列在C语言中被看作
字符数组元素的访问
c2赋值’A’~’Z’,然后输出c1和c2中的数据
#include <stdio.h> void main () { char c1[10], c2[26]; int i; for(i=0; i<10; i++) c1[i]=i+48; for(i=0; i<26; i++) c2[i]=i+'A'; for(i=0; i<10; i++) printf("%c ",c1[i]); printf("\n"); for(i=0; i<26; i++) printf("%c ",c2[i]); printf("\n"); }

919140-C语言程序设计教程——面向计算思维和问题求解-第10章-新

919140-C语言程序设计教程——面向计算思维和问题求解-第10章-新
并显示在屏幕上。 3. 关闭“古诗.txt”文件。
程序设计:
#include<stdio.h> #include<stdlib.h>
void main( )
{
FILE *fp;
char str[30]; /* 用于存储一行古诗 */
fp =fopen("d:/古诗.txt", "r");
if(fp==NULL)
“ab+”(读写)
以读写方式打开二进制文件。可读取数据和向文件尾部添加数据,原 文件内容保留。
例如,以“只读”方式打开文件pressure.dat,并用文件来自 针fp指向该文件的语句如下:
FILE *fp; fp=fopen(“pressure.dat”, “r”);
注意:在打开文件时应该判断文件打开是否成功。 例如:
二进制文件:二进制文件是指把数据按其在内存中的 存储形式原样存储到磁盘上所形成的二进制数据文件。 由于编码不同,二进制文件用文本处理软件打开会出 现乱码。
文件指针:指向文件的指针变量。用于建立缓冲文件 系统与特定文件的关联。 定义一个文件指针的格式:FILE *指针名;
其中,FILE是在stdio.h中定义的结构体类型,封 装了与文件有关的信息。 在定义文件指针时,最好将文件指针指向空。 如:FILE *fp=NULL;
语言程序设计教程
面向计算思维和问题求解
第10章 数据的文件管理
文件概述 文件的打开与关闭 文本文件的读写 二进制文件的读写 文件的定位 文件的更新
10.1.1 问题描述
信用卡是当今发展最快的一种集金融业务和电脑技术 于一体的高科技产物。具有支付和信贷等功能。模拟信用 卡帐户管理设计一个简易帐户信息管理系统,主要管理帐 号、姓名、余额三项内容。具体操作有:添加帐户、删除 帐户、更新帐户信息以及列出当前全部帐户信息等。

c语言第10章文件练习题

c语言第10章文件练习题

fclose(f1); fclose(f2);} 5. 以下程序中用户由键盘输入一个文件名,然后输入一串字符(用#结束输入)存放到此
文件文件中形成文本文件,并将字符的个数写到文件尾部,请填空。 #include<stdio.h> main( ) {
FILE *fp; char ch,fname[32]; int count=0; printf("Inputthefilename:"); scanf("%s",fname); if((fp=fopen(【1】,"w+"))==NULL) {printf("Can'topenfile:%s\n",fname); exit(0);} printf("Enterdata:\n"); while((ch=getchar())!="#") { fputc(ch,fp); count++;} fprintf(【2】 ,"\n%d\n", count); fclose(fp); } 6. 以下程序的功能是:从键盘上输入一个字符串,把该字符串中的小写字母转换为大写字 母,输出到文件 test.txt中,然后从该文件读出字符串并显示出来。请填空。 #include<stdio.h> main() {
第 10章 文件练习题
一、 选择题
1. 对 C语言的文件存取方式中,文件()。
A.只能顺序存取
B.只能随机存取(也称直接存取)
C.可以是顺序存取,也可以是随机存取
D.只能从文件的开头存取
2. C语言可以处理的文件类型是()。
A.文本文件和数据文件
B.文本文件和二进制文件
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档