您好,欢迎来到爱go旅游网。
搜索
您的当前位置:首页C语言考试用笔记

C语言考试用笔记

来源:爱go旅游网
1. C的数据类型 C的数据类型包括:整型、字符型、实型或浮点型(单精度和双精度)、枚举类型、数组类型、结构体类型、共用体类型、指针类型和空类型。

2. 常量与变量 常量其值不可改变,符号常量名通常用大写。变量其值可以改变,变量名只能由字母、数字和下划线组成,且第一个字符必须为字母或下划线。否则为不合法的变量名。变量在编译时为其分配相应存储单元。

3. 整型数据 整型常量的表示方法:十进制不用说了,八进制以0开头,如0123,十六进制以0x开头,如0x1e。

整型变量分为:基本型(int)、短整型(short int)、长整型(long int)和无符号型。不同机器上各类数据所占内存字节数不同,一般int型为2个字节,long型为4个字节。 4. 实型数据 实型常量表示形式:十进制形式由数字和小数点组成(必须有小数点),如:0.12、.123、123.、0.0等。指数形式如123e3代表123×10的三次方。

实型变量分为单精度(float)和双精度(double)两类。在一般系统中float型占4字节,7位有效数字,double型占8字节,15~16位有效数字。

5. 字符型数据 字符变量用单引号括起来,如'a','b'等。还有一些是特殊的字符常量,如'\\n','\'等。分别代表换行和横向跳格。

字符变量以char 来定义,一个变量只能存放一个字符常量。 字符串常量是由双引号括起来的字符序列。这里一定要注意'a'和\"a\"的不同,前者为字符常量,后者为字符串常量,c规定:每个字符串的结尾加一个结束标志'\\0',实际上\"a\"包含两个字符:'a'和'\\0'。

6. 数值型数据间的混合运算 整型、字符型、实型数据间可以混合运算,运算时不同类型数据要转换成同一类型再运算,转换规则:

char,short -> int -> unsigned -> long -> double <- float

7. 运算符和表达式 c运算符包括: 算数运算符( + - * / % ) 关系运算符( > < == >= <= != ) 逻辑运算符( ! && || ) 位运算符( << >> ~ | ^ & ) 赋值运算符( = ) 条件运算符( ? : ) 逗号运算符( , ) 指针运算符( * & ) 求字节数( sizeof ) 强制类型转换(类型) 分量运算符( . -> ) 下标运算符( [ ] )

其它运算符( 如函数调用运算符( ) )

自增自减运算符( ++ -- )注意:++i和i++的不同之处,++i使用i之前先使i加1,i++使用i之后,使i加1。逗号表达式的求解过程:先求解表达式1,再求解表达式2,整个表达式的值是表达式2的值。

1. c的9种控制语句: if() ~ else~ for()~ while()~ do~while() continue break switch goto return 程序的三种基本结构:顺序结构,选择结构,循环结构 2.数据输出 2.c语言不提供输入输出语句,输入输出操作是由c的库函数完成。但要包含头文件stdio.h。 putchar( ) 向终端输出一个字符 printf( )的格式字符: ① d格式符 用来输出十进制整数 %d 按整型数据的实际长度输出 %md 使输出长度为m,如果数据长度小于m,则左补空格,如果大于m,则输出实际长度 %ld 输出长整型数据 ② o格式符 以八进制形式输出整数 ③ x格式符 以十六进制形式输出整数 ④ u格式符 用来输出unsigned型数据,以十进制形式输出 ⑤ c格式符 用来输出一个字符 ⑥ s格式符 输出一个字符串 %s 输出实际长度字符串 %ms 输出的串占m列,如果串长度小于m,左补空格,如果大于m,实际输出 %-ms输出的串占m列,如果串长度小于m,右补空格, %m.ns 输出占m列,但只取字符串中左端n个字符并靠右对齐 %-m.ns m、n含义同上,靠左对齐,如果n>m,则m自动取n值 ⑦ f格式符 以小数形式输出实数 %f 整数部分全部输出,小数部分输出6位 %m.nf 输出数据共占m列,其中有n位小数。如果数值长度小于m,左补空格 %-m.nf 同上,右补空格 ⑧ e格式符 以指数形式输出实数 %e 系统指定6位小数,5位指数(e+002 ) ⑨ g格式符 输出实数,根据数值大小,自动选f格式或e格式 3.数据输入 getchar( ) 从终端输入一个字符 scanf( 格式控制,地址列表) 标准C scanf中不使用%u,对于unsigned型数据,以%d或%o或%x输入。%后的*,用来跳过它相应的数据。输入数据时不能规定精度如scanf( \"%7.2f\是不合法的。

1. 关系运算符: c提供6种关系运算符(> < <= >= == != )前四种优先级高于后两种。 2. If语句 C提供了三种形式的if语句 If(表达式) 语句 If(表达式) 语句1 else 语句2 If(表达式1) 语句1 Else if(表达式2) 语句2 … else 语句n 3. 条件运算符 (a>b)?a:b 条件为真,表达式取值a,否则取值b 4. Switch语句 Switch(表达式) { case 常量表达式1:语句1; break; case 常量表达式2:语句2; break; … case 常量表达式n:语句n; break; default :语句n+1; }

第五章 循环控制 1. 几种循环语句 goto语句(现已很少使用) while语句 先判断表达式后执行语句 do-while语句 先执行语句后判断表达式 for语句 2. Break语句和continue语句 Break语句用于跳出循环,continue用于结束本次循环。

1. 一维数组 c规定只有静态存储(static)和外部存储(extern)数组才能初始化。给数组初始化时可以不指定数组长度。 2. 二维数组 3. 字符数组 部分字符串处理函数 puts(字符数组) 将一个字符串输出到终端。 gets(字符数组) 从终端输入一个字符串到字符数组,并且得到一个函数值,为该字符数组的首地址 strcat(字符数组1,字符数组2) 连接两个字符数组中的字符串,数组1必须足够大。 Strcpy(字符数组1,字符串2) 将字符串2拷贝到字符数组1中。 Strcmp(字符串1,字符串2) 比较字符串,相等返回0,字符串1>字符串2,返回正数,小于返回负数。 Strlen(字符数组) 求字符串长度。 Strlwr( 字符串) 将字符串中的大写字母转换成小写 Strupr( 字符串) 将字符串中的小写字母转换成大写 以上是一些比较常用的字符串处理函数。

1. 关于形参和实参的说明 ① 在函数被调用之前,形参不占内存 ② 实参可以是常量、变量或表达式 ③ 必须指定形参的类型 ④ 实参与形参类型应一致 ⑤ 实参对形参的数据传递是\"值传递\",即单向传递 2. 函数返回值 如果想让函数返回一个值,在函数中就要用return语句来获得,在定义函数时也要对函数值指定类型,如果不指定,默认返回整型。 3. 函数调用 1)注意在函数调用时实参和形参的个数、类型应一一对应。对实参表求值的顺序是不确定的,有的系统按自左至右,有的系统则按自右至左的顺序。这一点要注意。 2)函数调用的方式:函数语句,函数表达式,函数参数 3)如果主调函数和被调函数在同一文件中,并且主调函数在前,那么一般要在主调函数中对被调函数进行说明。除非:(1)被调函数的返回值类型为整型或字符型(2)被调函数出现在主调函数之前。 4)对函数的说明和定义是不同的,定义是指对函数功能的确立,包括指定函数名,函数值类型,形参及其类型、函数体等。说明则只是对已定义的函数返回值类型进行说明,只包括函数名、函数类型以及一个空的括弧,不包括形参和函数体。 5)c语言允许函数的递归调用(在调用一个函数的过程中又出现直接或间接的调用该函数本身)。 4. 数组作为函数参数 1)数组元素作为函数参数 和一般变量相同 2)数组名作参数应该在主调和被调函数分别定义数组,形参数组的大小可以不定义。注意:数组名作参数,不是单向传递。 3)数组作参数,在被调函数中对形参数组定义时可以省略第一维的大小说明,但不能省略第二维或更高维的说明。 5. 局部变量和全局变量 从变量作用域角度分,变量可分为局部变量和全局变量。 1)内部变量(局部变量) 在一个函数内定义,只在函数范围内有效的变量。 2)外部变量(全局变量) 在函数外定义,可以为本文件其它函数所共用,有效范围从定义变量的位置开始 到本文件结束。建议尽量少使用全局变量,因为它在程序全部执行过程中都占用 资源,而且使函数的通用性降低了。如果在定义外部变量之前的函数要想使用该 外部变量,则应在该函数中用extern作外部变量说明。 6. 动态存储变量与静态存储变量 从变量值存在的时间(生存期)角度来分,可分为静态存储变量和动态存储变量。静态存储指在程序运行期间给变量分配固定的存储空间,动态存储指程序运行期间根据需要动态的给变量分配存储空间。 C语言中,变量的存储方法分为两大类:静态存储类和动态存储类,具体包括:自动的(auto),静态的(static),寄存器的(register),外部的(extern)。 1) 局部变量的存储方式 c编译系统在对程序进行通常的编译之前,先进行预处理。c提供的预处理功能主要有以下三种:1)宏定义 2)文件包含 3)条件编译 1. 宏定义 不带参数的宏定义 用一个指定的标识符来代表一个字符串,形式:#define 标识符 字符串 几点说明: 1) 宏名一般用大写 2) 宏定义不作语法检查,只有在编译被宏展开后的源程序时才会报错 3) 宏定义不是c语句,不在行末加分号 4) 宏名有效范围为定义到本源文件结束 5) 可以用#undef命令终止宏定义的作用域 6) 在宏定义时,可以引用已定义的宏名 带参数的宏定义 定义形式:#define 宏名(参数表) 字符串 这和函数有些类似,但他们是不同的: 1) 函数调用时,先求实参表达式值,再代入形参,而宏只是简单替换,并不求值 2) 函数调用是在程序运行时分配内存的,而宏展开时并不分配内存也没有返回值的概念 3) 对函数中的实参和形参都要定义类型而且要求一致,宏名无类型,其参数也没有类型。 4) 函数只有一个返回值,而宏可以得到几个结果 5) 宏替换不占运行时间,只占编译时间,而函数调用占运行时间 2. 文件包含处理 #include \"文件1\" 就是将文件1的全部内容复制插入到#include位置,作为一个源文件进行编译。 在#include命令中,文件名可以用\" \"也可以用< >,假如现在file1.c中包含file2.h文件,\" \"表示系统先在file1.c所在目录中找file2.h,如果找不到,再按系统指定的标准方式检索目录,< >表示系统直接按指定的标准方式检索目录。所以用\" \"保险一点。 3. 条件编译 条件编译指不对整个程序都编译,而是编译满足条件的那部分。条件编译有以下几种形式: 1)#ifdef 标识符 程序段1 #else 程序段2 #endif 它的作用:当标识符在前面已经被定义过(一般用#define),则对程序段1编译,否则对程序段2编译。 2)#ifndef 标识符 程序段1 #else 程序段2 #endif 它的作用和#ifdef相反,当标识符没被定义过,对程序段1编译,否则对程序段2编译。 3)#if 表达式 程序段1 #else 程序段2 #endif它的作用:当表达式值为真(非0)时,对程序段1编译,否则对程序段2编译。

指针说白了就是地址。指针变量就是用来存放指针(地址)的变量。 1. 变量的指针和指向变量的指针变量 因为一个变量在编译的时候系统要为它分配一个地址,假如再用一个变量来存放这个地址,那么这个变量就叫做指向变量的指针变量,也就是用来存放变量地址的这么一个变量。所谓\"指向\"就是指存放××的地址,如指向变量的指针变量,\"指向\"就是指用来存放变量的地址,再如指向数组的指针变量,\"指向\"就是指存放数组的地址。只要理解了这个,指针也就不难了。另外,还有指向字符串的指针变量,指向函数的指针变量,指向指针的指针变量等。 1) 指针变量的定义 形式:类型标识符 *标识符 如:int *pointer; 要注意两点:*表示pointer是个指针变量,在用这个变量的时候不能写成*pointer, *pointer是pointer指向的变量。一个指针变量只能指向同一个类型的变量。如上面 pointer只能指向int型变量。 2)指针变量的引用 两个有关的运算符: & 取地址运算符 &a 就代表变量a的地址 * 指针运算符 *a 就代表变量a的值 2. 数组的指针和指向数组的指针变量 数组的指针指数组的起始地址,数组元素的指针指数组元素的地址。 1)指向数组元素的指针变量的定义与赋值 定义和指向变量的指针变量定义相同,c规定数组名代表数组的首地址,即第一个数组元素地址。 2)通过指针引用数组元素 我们通常引用数组元素的形式是a[i],如果用指针可以这样引用,*(a+i),或定义一个指针变量p,将数组a的首地址赋给p,p=a;然后用*(p+i)引用。 注意:指针变量p指向数组a首地址,则p++指向数组a的下一元素地址,即a[1]的地址。 3)数组名作函数参数 形参数组和实参数组之间并不是值传递,而是共用同一段地址,所以在函数调用过程中如果形参的值发生变化,则实参的值也跟着变化。 4)指向数组的指针和指针变量 以二维数组为居多。假设定义了一个二维数组a[3][4],那么 a代表整个二维数组的首地址,也代表第0行的首地址,同时也是第0行第0列的元素的首地址。a +0和a[0]代表第0行首地址,a+1和a[1]代表第一行的首地址。 假设a是一个数组的首地址,那么如果a是一维的,a+I代表第I个元素的地址,如果a是二维的,则a+I代表第I行的首地址。 那么第一行第二列的元素地址如何表示呢?a[1]+2或&a[1][2]或*(a+1)+2。 我们只要记住:在二维数组中a代表整个数组的首地址,a[I]代表第I行的首地址,a[I]与*(a+I)等价就行了。只要运用熟练了就没什么复杂的了。 5)指向由m个整数组成的一维数组的指针变量 如:int (*p)[4],p是一个指向包含4个元素的一维数组,如果p先指向a[0],则p+1指向a[1],即p的增值是以一维数组的长度为单位的,这里是4,举个例子: 假设a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23},p先指向a[0]也就是数组a的首地址,那么p+1就是a[1]的首地址即元素9的地址,因为在定义p时int (*p)[4],定义一维数组长度为4,所以p+1就等于加了一个一维数组的长度4。 3. 字符串的指针和指向字符串的指针变量 1)字符串的表示形式 c中字符串有两种表示形式:一种是数组,一种是字符指针 char string[]=\"I love c!\"; char *str=\"I love c!\"; 结构体与共用体 1. 定义 结构体定义的一般形式: struct 结构体名{ 成员列表 }; 定义一个结构体变量可以这样定义:struct 结构体名 结构体变量名; 2. 结构体变量的引用 在引用结构体变量时应注意以下规则: 1)不能将结构体变量作为一个整体输入输出,只能对变量当中的各个成员输入输出。新标准C允许将一个结构体变量直接赋值给另一个具有相同结构的结构体变量。 3. 结构体变量的初始化 如: struct student {long int num; char name[20]; char sex; char addr[20]; }a={031,\"Li Lin\4. 结构体数组 struct student stu[4]; 定义了一个数组stu,其元素为struct student类型,数组有4个元素。注意数组各元素在内存中是连续存放的。 在定义结构体数组时,数组元素个数可以不指定。编译时,系统会根据给出初值的结构体常量的个数来确定数组元素的个数。 5. 指向结构体变量的指针 因为结构体变量在内存中是连续存放各成员的,因此我们可以将结构体变量在内存中的起始地址存放到一个变量中,那么这个变量就是指向结构体变量的指针。 注意将结构体变量的首地址赋给指针变量的形式: struct student stu_1; struct student *p; p=&stu_1; //要加取地址符 而指向函数和指向字符串的指针不用 在对引用结构体变量中的成员时,有三种方式: 以上面的结构体为例:设p为指向此结构体变量的指针,即p=&a; 1) a.num 2) (*p).num 3) p->num 6. 指向结构体数组的指针 struct student *p; struct student stu[4]; p=stu; 则p为指向结构体数组的指针变量。这里应注意p++,p指向stu[0],p++则指向stu[1]。P指向的是数组中一个元素的首地址,而不能让p指向元素中的某一成员,如p=&stu[I].name是不对的。 7. 用指向结构体的指针作函数参数 虽然ANSI C允许用整个结构体作为函数参数,但要将全部成员值一个一个传递,开销大。所以用指针作参数,能提高运行效率。 Struct student stu; 用整个结构体作为参数调用形式: fun( stu );

文件 1) 概述 c语言将文件看成一个字符的序列,分为ASCII文件(文本文件)和二进制文件。即一个c文件就是一个字节流或二进制流。 ASCII文件每一个字节放一个ASCII码,代表一个字符,输出与字符一一对应,便于逐个处理字符,但占用空间较多。二进制文件按内存中的存储形式原样输出到磁盘上,节省空间,由于输出与字符不对应,不能直接输出字符形式,一般用于保存中间结果。目前c对文件的处理只有缓冲文件系统一种方法,即无论是从程序到磁盘文件还是从磁盘文件到程序,数据都要先经过缓冲区,待缓冲区充满后,才集中发送。 2) 文件夹类型指针 在缓冲文件系统中,关键的概念是文件指针。因为每个被使用的文件都在内存中开辟一个缓冲区,来存放文件有关信息。这些信息保存在一个结构体变量中,该结构体类型是由系统定义的,取名为FILE,在stdio.h中定义。 FILE *fp; 定义了一个文件指针变量fp,以后对文件的操作都是通过fp进行的。 3) 文件的打开与关闭 在对文件读写之前,要先打开文件。 打开文件的函数为:fopen(),调用方式为: FILE *fp; fp=fopen( filename,使用文件方式 ); fopen()失败返回一个空指针NULL,成功则返回一个指向\"filename\"的文件指针,赋给fp,这样fp就和打开的文件联系在一起了。或者说,fp指向了\"filename\"。 文件使用方式:r,w,a,rb,wb,ab,r+,w+,a+,rb+,wb+,ab+,具体含义要记住。 4)文件的关闭 为了防止数据丢失,程序结束前,务必将打开的文件关闭,即将文件指针与文件脱钩。用fclose(文件指针)函数关闭文件,执行函数后,先将缓冲区中的数据送到磁盘文件,然后释放文件指针。成功返回0,失败返回非0。 5)文件的读写 文件打开后,就可以对其读写了,常用的文件读写函数有: ①fputc和fgetc fputc将一个字符写到文件,形式为fputc( ch, fp );将字符ch写入fp所指向的文件。成功返回该字符,失败返回EOF,EOF在stdio.h中定义为符号常量-1。 fgetc从指定文件读入一个字符,该文件必须是以读或读写方式打开的。调用形式为ch=fgetc(fp);从fp指向的文件读入一个字符赋给ch,当文件结束时,fgetc返回一个EOF,我们可以用函数feof(fp)来判断是否已到文件尾,返回1表示已到文件尾,否则返回0。这个函数适用于文本文件和二进制文件。 ②fread和fwrite函数 可以读写一组数据。调用形式如下: fread( buffer, size, count, fp ); fwrite( buffer, size, count, fp ); buffer为一个指针,对fread来讲,是指从文件读出数据的存放地址,对fwrite来讲,是要写入文件的数据的地址。 size 要读写的字节数 count 要进行读写多少个size字节的数据项(书上这么说)其实就是读写的次数 fp 文件指针 这两个函数返回值成功为1,失败为非1,一般用于二进制文件的读写。 注意:有些c编译系统不具备这两个函数。 ③fprintf()和fscanf()函数 格式化输出和输入函数,与printf()和scanf()作用相似,只有一点不同,fprintf()和

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- igat.cn 版权所有 赣ICP备2024042791号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务