《2022年二级c知识点总结》由会员分享,可在线阅读,更多相关《2022年二级c知识点总结(12页珍藏版)》请在金锄头文库上搜索。
1、用 C 程序实现的算法可以没有输入但必须要有输出C 语言源程序文件名的后缀是 .c 经过编译后生成的文件(目标文件)的后缀是 .obj 经过连接后生成的文件的后缀是 .exe 结构化程序由顺序选择 循环三种基本结构组成标识符字母数字下划线字母不能打头不能调用关键字( int double 等)能调用预定义标识符(printf define 等)实型常量:小数和指数指数 e 或 E 后面必须跟整数零和小数都不行整型常量:%取余符号两边必须是整数3%7=3 因为除不动就取被除数整型除以整型为整型5/2=2 5.0/2=2.5 在所有的运算符中,逗号的用算符最低。复制表达式中前面不能是组合比如 a+
2、7=b+c 是错的K=8;Printf(“ %d,%d/n ” ,k,+k) ;输出结果不是 89 而是 99 在逗号用算符中,虽然取最后一个值,但前面的表达式也执行。区别于三目运算符“? :”则不需要计算另一个不取值的表达式Bmain() int x=1,y=2,z; z=xy?+x:+y; printf(%d,%d,%dn,x,y,z); A)1,2,3 B)1,3,3 C)2,3,3 D)2,2,3 在三目运算符“? :”中, xy 不成立,取 +y 的值,而+x 不需要计算,所以 x 为原值 1,y 为 3,z 也为 3。输入数据时逗号紧跟其后scanf( “ %d,%d”,&a,&b
3、) ;1 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,共 12 页空,2 不对1,2 对1,空 2 对优先级从高到低! (逻辑非)算术用算符、关系用算符、&(逻辑与)、|(逻辑或)、赋值用算符。用 break 语句可以是流程跳出switch 语句体,也可用 break 语句在循环结构中终止本层循环体,从而提前结束本层循环。Continue 语句的作用是跳过本次循环体中余下尚未执行的语句,立刻进行下一次的循环体判断,可以理解为仅结束本次循环!B已知#int t=0; while (t=1) . 则以下叙述正确的是A循环控制表达式的值为 0
4、 B循环控制表达式的值为 1 C循环控制表达式不合法D以上说法都不对循环控制表达式的值为1 t=1 是将 t 赋值为 1,所以循环控制表达式的值为 1。 判断 t 是否等于 1 时,应用 t=1,注意=与=的用法。C 语言中 ,在定义并初始化二维数组时,可以省略数组第一维的长度,但是不能省略第二维的长度x4 错的%c 字符型 接受空格回车例:scanf( “ %c%c%c ”,&a,&b,精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 2 页,共 12 页&c) ;若输入 THE 则 a 读 T b 读 H c 读回车符。若在格式说明符之间家空格则
5、空格回车符跳格符都将被认作 间隔符读入%d 不接受空格回车%s 字符串的输入和输出,不接受空格回车C 语言的简单数据类型有:整型实型 字符型函数定义:1 在同一程序中函数名必须唯一,2 形参只有在统一函数中唯一即可。 3 不能在函数内部定义函数4 若函数名没有定义类型则默认为 int 型 5 除了返回值类型为int 和 char 型的函数外,函数必须先定义后调用6 如果没有函数值,则必须把函数定义成void 型若输出 NULL 0 0 则都输出为 0 一位数组中 *p+ 的意思 先取出指针 p 所指示储存单元值然后让指针 p 向后移*(P+) 也一样二维数组中*p+是先取出指针 p 指示储存单
6、元值然后让指针 p向下移一行以下程序的运行结果是c main() int i; char aa3=a,b,c,d,e,f; char (*p)3=aa; for(i=0;i2;i+) if(i=0) aaii+1=*(p+); printf(%cn,*p); A ) a B)b C)d D)cDouble x【8】由于定义 x 数组有 8 个元素,因此下标表达式的值精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 3 页,共 12 页必须大于或等于0 并且小于 8 切必须是整数数组名中存放的是地址常量,它代表整个数组的首地址!不可以给数组名重新赋值语
7、句 a=&x a+ 都是非法的,因为不能给a 重新赋地制值s【10】,s=“ hello”赋值不合法在函数内部不要把函数内部的变量作为返回值?二维数组a【3】 【2】m=a【3】 【2】赋值不合法因为只有两行在二维数组里a【0】+这样的赋值不合法若有表达式 a【0】+1,表达式中一的单位应当是4 个字节char str【10】= s, t, r, i, n, g, !, 0 ;字符数组共有十个元素但作为字符串,其长度是7 char str【】= s, t, r, i, n, g, ! ;定义了一个有七个元素的字符数组,因为没有串结束的标志,所以这时不能把他当作字符串来使用char str 【】
8、=“ string! ”;系统将按字符串中实际的字符个数来定义数组的大小,在此数组包含八个元素(含系统自动加的/0)gets puts 函数在终端输入或输出一行字符串gets 函数认空格不认回车用来从终端键盘读入字符串 (包括空格符),直到读入一个换行符为止puts 函数遇到第一个 /0 的时候结束输出,并自动输出一个换行符(与printf 的区别)所有的/和后面的任一字符都能组成一个转义字符/012 的话以大范围为主精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 4 页,共 12 页Register 变量将变量的值保留在cpu 的寄存器里有助于提
9、高程序的运行速度Static 变量静态储存变量在内存的静态存储变量中占据着永久性的存储单元遂于未赋初值的静态局部变量,c 编译程序自动给他赋初值 0 宏定义: 1 当宏定义在一行中写不下时,需要在下一行继续时;只需在最后一个字符后紧接着加/ 2 替换文本不能替换双引号中与宏名相同的字符串。3 用作宏名的标识符通常用大写字母表示,这并不是语法规定,只是一种习惯,以便与程序中的其他标识符相区别4 在 c 程序中,宏定义的定义位置一般写在程序的开头5 宏替换和函数调用的区别,宏替换对参数没有类型的要求6 宏替换在编译前由预处理程序完成的,因此宏替换不占运行的时间7 如果宏定义是表达式,则在调用的时候
10、应整体搬下来C#define N 2 #define M N+1 #define NUM (M+1)*M/2 main() int i,n=0; for(i=0;iNUM;i+) n+; printf(%dn,n); A ) 5 B)6 C)8D)9Typedef 类型名 标识符typedef int a 则 a 成为了一个 int 类型的类型名使用 typedef说明一个结构体类型名typedef stuctSTUCT; 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 5 页,共 12 页对于结构体变量后面未赋值的成员,系统自动为数值型和字符型数
11、据赋初值 0 以wt方式写入的是字符文件,转义字符 n被看作两个字符来处理。而wb方式写入的是二进制文件,转义字符 n是一个字符。 B对于下述程序 ,在方式串分别采用wt和wb 运行时 ,两次生成的文件TEST 的长度分别是#include void main() FILE *fp=fopen(TEST,); fputc( A ,fp);fputc( n,fp); fputc( B ,fp);fputc( n,fp); fputc( C ,fp); fclose(fp); A)7字节、7字节B)7字节、5字节C)5字节、 7字节D)5字节、 5字节链表的数据结构 ,必须利用指针变量才能实现,即
12、一个结点中应包含一个指针变量 ,用它存放下一结点的地址。D若有以下定义 : struct link int data; struct link *next; 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 6 页,共 12 页 a,b,c,*p,*q; 且变量 a和b之间已有如下图所示的链表结构: 指针p指向变量 a,q指向变量 c。 则能够把 c插入到 a和b 之间并形成新的链表的语句组是 : A)a.next=c; c.next=b; B)p.next=q; q.next=p.next; C)p-next=&c; q-next=p-next;
13、D)(*p).next=q; (*q).next=&b; a=5 b=4 c=3 d=(abc) d=0 因为是先判断 ab 为真所以为 1 1 大于 3 不成立所以为 0 文件:1 FILE *P1 *P2;P1,P2均被定义为指向文件类型的文件指针变量 称为文件指针; 2 打开文件 fopen(文件名,文件使用方式) ;fopen ( “ file”, “ r”)“ r”:为读打开文本文件“ w”为写而打开文本文件“ a”为在文件后面添加数据而打开文件;3 关闭文件fclose (文件指针); 当成功的执行了关闭操作, 函数返回 0 否精选学习资料 - - - - - - - - - 名师
14、归纳总结 - - - - - - -第 7 页,共 12 页则返回非 0 函数Fputc(putc)函数输出一个 字符 puts(ch,fp)的功能是将字符 ch 写到文件指针 fp 所指的文件指针去Fgetc(getc)函数输入一个 字符ch=gets (pf)的功能是从pf指定的文件中读入一个字符。判断文件结束函数feof 如果遇到文件结束函数 feof(fp)的值为 1,否则为 0 Fscanf函数只能是从文本文件中按格式输入。Fscanf函数和scanf 函数的区别是fscanf 函数输入的对象是磁盘上文本文件中的数据 函数的调用形式 fscanf(fp, “ %d”,&a)Fprin
15、tf 函数按格式将内存中的数据转换成对应的ASCII 代码形式输出到文本文件中fprintf 函数与 printf 函数的区别f 输出的内容将按格式存放在磁盘的文本文件中。 函数的调用形式fscanf(fp,“ %d”,a)Fgets 函数用来从文件中读入 字符串 。 调用形式 fgets (str, n, fp) ;fp 是文件指针str 是存放字符串的起始地址,n 是一个 int 型变量,长度限制最多接受n-1 个;函数的功能是从fp 所指文件中读入 n-1 个字符放入以 str 为起始地址的空间内;Fputs 函数用来把 字符串 输入到文件中,调用形式如下fputs (str,fp) ;
16、Fread 函数 fwrite 函数分别用来读写二进制文件。 调用形式如下:精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 8 页,共 12 页fread(buffer,size,count,fp); fwrite(buffer,size,count,fp);buffer是数据块的指针size 是数据块的字节数count 用来指定每读写一次文件定位函数fseek 函数用来移动文件位置指针到指定的位置上调用形式:fseek(pf,offset,origin ) ;从 origin 开始往后挪 offset 个字节ftell 函数用以获得文件当前位置指
17、针的位置,函数给出当前位置指针相对于文件开头的字节数。调用形式:t= ftell(fp) ;当打开一个文件时,通常并不知道该文件的长度,通过以下函数调用可以求出文件的字节数Fseek(fp,oL,SEEK_END ); T=ftell (fp) ;Rewind 函数此函数没有返回值,函数的功能是使文件的位置指针回到文件开头。C 有以下程序#include main() FILE *fp;char str10; fp=fopen(myfile.dat,w); fputs(abc,fp);fclose(fp); fpfopen(myfile.data,a+); fprintf(fp,%d,28);
18、 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 9 页,共 12 页rewind(fp); fscanf(fp,%s,str); puts(str); fclose(fp); 程序运行后的输出结果是A)abcB) 28c C) abc28D) 因类型不一致而出错C 以下程序的功能是。#include main() FILE *fp; long int n; fp=fopen(wj.txt,rb); fseek(fp,0,SEEK_END); n=ftell(fp); fclose(fp); printf(%ld,n); A)计算文件wj.txt
19、的起始地址B)计算文件wj.txt 的终止地址C )计算文件wj.txt的长度D)将文件指针定位到文件末尾B 以下程序运行结果是main() char a5= ABCD,1234,abcd,5678,EFGH;int i; for(i=0;i3;i+) printf(%s,ai); A)A1a B)ABCD1234abcd C )ABC D )ABCD1234abcd5678EFGH分析:对于二维数组,其元素为一维数组,它表示行地址,根据行地址可输出该行的字符串。给数组赋值x8=Turbo C 错; x=Turbo C 错 ;char x8=Turbo C 对C 语言语法规定, 按其输入格式从
20、键盘输入数据时,只能以空格、回车及 Tab间隔各数据项。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 10 页,共 12 页设 int a,b;,用语句 scanf(%d%d,&b); 输入 a、b 值时,不能作为输入数据分隔符的是BA)空格 B) , C)回车D)Tab 位用算符的优先级: ,,&,| 如果定义的函数无返回值则只有指针的形参接收的实参改变了值,其他实参没有改变值。指出以下程序所指处的运行结果。void f1(int x,int y,int *sum) *sum=x+y; +x; +y; void f2(int a,int b,i
21、nt *product) *product=a*b; a+=b; b-=a; main() int a=10,b=20,c=100,(*f)(); f=f1; (*f)(a,b,&c); printf(%d,%d,%dn,a,b,c); /* 运行结果是【 34】*/f=f2; (*f)(a,b,&c); printf(%d,%d,%dn,a,b,c); /* 运行结果是【35】*/ C【34】 A)11,21,100 B)11,21,30 C)10,20,30 D)11,21,33 D【35】 A)30,-10,300 B)30,-10,200 C) 33,-12,231 D)10,20,200 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 11 页,共 12 页精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 12 页,共 12 页