二级c知识点总结Word文档格式.docx
《二级c知识点总结Word文档格式.docx》由会员分享,可在线阅读,更多相关《二级c知识点总结Word文档格式.docx(8页珍藏版)》请在冰豆网上搜索。
y不成立,取++y的值,而++x不需要计算,所以x为原值1,y为3,z也为3。
●输入数据时逗号紧跟其后scanf(“%d,%d”,&
a,&
b);
1空,2不对1,2对1,空2对
●优先级从高到低!
(逻辑非)算术用算符、关系用算符、&
&
(逻辑与)、||(逻辑或)、赋值用算符。
●用break语句可以是流程跳出switch语句体,也可用break语句在循环结构中终止本层循环体,从而提前结束本层循环。
●Continue语句的作用是跳过本次循环体中余下尚未执行的语句,立刻进行下一次的循环体判断,可以理解为仅结束本次循环
●!
B已知
#intt=0;
while(t=1)
{...}
则以下叙述正确的是
A循环控制表达式的值为0
B循环控制表达式的值为1
C循环控制表达式不合法
D以上说法都不对
●循环控制表达式的值为1t=1是将t赋值为1,所以循环控制表达式的值为1。
判断t是否等于1时,应用t==1,注意"
="
与"
=="
的用法。
●C语言中,在定义并初始化二维数组时,可以省略数组第一维的长度,但是不能省略第二维的长度x[4][]错的
●%c字符型接受空格回车例:
scanf(“%c%c%c”,&
b,&
c);
若输入TH<
enter>
E<
ENTER>
则a读Tb读Hc读回车符。
若在格式说明符之间家空格则空格回车符跳格符都将被认作间隔符读入
●%d不接受空格回车
●%s字符串的输入和输出,不接受空格回车
●C语言的简单数据类型有:
整型实型字符型
●函数定义:
1在同一程序中函数名必须唯一,2形参只有在统一函数中唯一即可。
3不能在函数内部定义函数4若函数名没有定义类型则默认为int型5除了返回值类型为int和char型的函数外,函数必须先定义后调用6如果没有函数值,则必须把函数定义成void型
●若输出NULL\00则都输出为0
●一位数组中*p++的意思先取出指针p所指示储存单元值然后让指针p向后移*(P++)也一样
●二维数组中**p++是先取出指针p指示储存单元值然后让指针p向下移一行
以下程序的运行结果是c
main()
{inti;
charaa[][3]={'
a'
'
b'
c'
d'
e'
f'
};
char(*p)[3]=aa;
for(i=0;
i<
2;
i++)
if(i==0)aa[i][i+1]=**(p++);
printf("
%c\n"
**p);
A)aB)bC)dD)c
●Doublex【8】由于定义x数组有8个元素,因此下标表达式的值必须大于或等于0并且小于8切必须是整数
●数组名中存放的是地址常量,它代表整个数组的首地址!
不可以给数组名重新赋值语句a=&
xa++都是非法的,因为不能给a重新赋地制值s【10】,s=“hello”赋值不合法
●在函数内部不要把函数内部的变量作为返回值?
?
●二维数组a【3】【2】m=a【3】【2】赋值不合法因为只有两行
●在二维数组里a【0】++这样的赋值不合法若有表达式a【0】+1,表达式中一的单位应当是4个字节
●charstr【10】={‘s’,‘t’,‘r’,‘i’,‘n’,‘g’,‘!
’,‘\0’};
字符数组共有十个元素但作为字符串,其长度是7
●charstr【】={‘s’,‘t’,‘r’,‘i’,‘n’,‘g’,‘!
’};
定义了一个有七个元素的字符数组,因为没有串结束的标志,所以这时不能把他当作字符串来使用
●charstr【】=“string!
”;
系统将按字符串中实际的字符个数来定义数组的大小,在此数组包含八个元素(含系统自动加的/0)
●getsputs函数在终端输入或输出一行字符串gets函数认空格不认回车用来从终端键盘读入字符串(包括空格符),直到读入一个换行符为止puts函数遇到第一个/0的时候结束输出,并自动输出一个换行符(与printf的区别)
●所有的/和后面的任一字符都能组成一个转义字符/012的话以大范围为主
●Register变量将变量的值保留在cpu的寄存器里有助于提高程序的运行速度
●Static变量静态储存变量在内存的静态存储变量中占据着永久性的存储单元遂于未赋初值的静态局部变量,c编译程序自动给他赋初值0
●宏定义:
1当宏定义在一行中写不下时,需要在下一行继续时;
只需在最后一个字符后紧接着加/
2替换文本不能替换双引号中与宏名相同的字符串。
3用作宏名的标识符通常用大写字母表示,这并不是语法规定,只是一种习惯,以便与程序中的其他标识符相区别
4在c程序中,宏定义的定义位置一般写在程序的开头
5宏替换和函数调用的区别,宏替换对参数没有类型的要求
6宏替换在编译前由预处理程序完成的,因此宏替换不占运行的时间
7如果宏定义是表达式,则在调用的时候应整体搬下来
C#defineN2
#defineMN+1
#defineNUM(M+1)*M/2
{inti,n=0;
NUM;
n++;
%d\n"
n);
}
A)5B)6C)8D)9
●Typedef类型名标识符typedefinta则a成为了一个int类型的类型名使用typedef说明一个结构体类型名typedefstuct{}STUCT;
●对于结构体变量后面未赋值的成员,系统自动为数值型和字符型数据赋初值0
●以"
wt"
方式写入的是字符文件,转义字符'
\n'
被看作两个字符来处理。
而"
wb"
方式写入的是二进制文件,转义字符'
是一个字符。
B对于下述程序,在方式串分别采用"
和"
运行时,两次生成的文件TEST的长度分别是
#include<
stdio.h>
voidmain()
{FILE*fp=fopen("
TEST"
);
fputc(′A′,fp);
fputc(′\n′,fp);
fputc(′B′,fp);
fputc(′C′,fp);
fclose(fp);
}
A)7字节、7字节
B)7字节、5字节
C)5字节、7字节
D)5字节、5字节
●链表的数据结构,必须利用指针变量才能实现,即一个结点中应包含一个指针变量,用它存放下一结点的地址。
D若有以下定义:
structlink
{intdata;
structlink*next;
}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;
D)(*p).next=q;
(*q).next=&
b;
●a=5b=4c=3d=(a>
b>
c)d=0因为是先判断a>
b为真所以为11大于3不成立所以为0
●文件:
1FILE*P1*P2;
P1,P2均被定义为指向文件类型的文件指针变量称为文件指针;
2打开文件fopen(文件名,文件使用方式);
fopen(“file”,“r”)“r”:
为读打开文本文件“w”为写而打开文本文件“a”为在文件后面添加数据而打开文件;
3关闭文件fclose(文件指针);
当成功的执行了关闭操作,函数返回0否则返回非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)
●Fprintf函数按格式将内存中的数据转换成对应的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);
●Fread函数fwrite函数分别用来读写二进制文件。
调用形式如下:
fread(buffer,size,count,fp);
fwrite(buffer,size,count,fp);
buffer是数据块的指针size是数据块的字节数count用来指定每读写一次
●文件定位函数
●fseek函数用来移动文件位置指针到指定的位置上调用形式:
fseek(pf,offset,origin);
从origin开始往后挪offset个字节
●ftell函数用以获得文件当前位置指针的位置,函数给出当前位置指针相对于文件开头的字节数。
调用形式:
t=ftell(fp);
●当打开一个文件时,通常并不知道该文件的长度,通过以下函数调用可以求出文件的字节数
●Fseek(fp,oL,SEEK_END);
●T=ftell(fp);
●Rewind函数此函数没有返回值,函数的功能是使文件的位置指针回到文件开头。
C有以下程序 #include
{FILE*fp;
charstr[10];
fp=fopen("
myfile.dat"
"
w"
);
fputs("
abc"
fp);
fpfopen("
myfile.data"
a++"
fprintf(fp,"
%d"
28);
rewind(fp);
fscanf(fp,"
%s"
str);
puts(str);
}程序运行后的输出结果是
A)abc B)28cC)abc28 D)因类型不一致而出错
C以下程序的功能是。
#include<
{FILE*fp;
longintn;
fp=fopen("
wj.txt"
rb"
fseek(fp,0,SEEK_END);
n=ftell(fp);
%ld"
A)计算文件wj.txt的起始地址B)计算文件wj.txt的终止地址
C)计算文件wj.txt的长度D)将文件指针定位到文件末尾
●B以下程序运行结果是main()
{chara[][5]={"
ABCD"
1234"
abcd"
5678"
EFGH"
inti;
for(i=0;
3;
i++)printf("
a[i]);
A)A1aB)ABCD1234abcdC)ABCD)ABCD1234abcd5678EFGH
●分析:
对于二维数组,其元素为一维数组,它表示行地址,根据行地址可输出该行的字符串。
●给数组赋值x[8]="
TurboC"
错;
x[]="
错;
charx[8]="
对
●C语言语法规定,按其输入格式从键盘输入数据时,只能以空格、回车及Tab间隔各数据项。
●设inta,b;
,用语句scanf('
%d%d"
&
b);
输入a、b值时,不能作为输入数据分隔符的是B
A)空格B),C)回车 D)[Tab]
●位用算符的优先级:
~,<
<
>
>
^,|
●如果定义的函数无返回值则只有指针的形参接收的实参改变了值,其他实参没有改变值。
指出以下程序所指处的运行结果。
voidf1(intx,inty,int*sum)
{*sum=x+y;
++x;
++y;
voidf2(inta,intb,int*product)
{*product=a*b;
a+=b;
b-=a;
{inta=10,b=20,c=100,(*f)();
f=f1;
(*f)(a,b,&
c);
printf("
a,b,c);
/*运行结果是【34】*/
f=f2;
/*运行结果是【35】*/}
C【34】A)11,21,100B)11,21,30C)10,20,30D)11,21,33
D【35】A)30,-10,300B)30,-10,200C)33,-12,231D)10,20,200