二级强化C语言复习资料文档格式.docx
《二级强化C语言复习资料文档格式.docx》由会员分享,可在线阅读,更多相关《二级强化C语言复习资料文档格式.docx(53页珍藏版)》请在冰豆网上搜索。
基本要求
1.熟练掌握C语言的基本知识;
2.具备基本的C程序设计能力,能熟练地阅读、理解和编制简短的C程序;
3.了解面向对象程序设计的基本概念。
基本内容
一、数据的定义
数据的定义包括数据类型和存储类别。
1、基本类型
基本类型指整型、实型和字符型。
(1)常量
熟练掌握各种表示形式的整数、实数、和字符(串)常量,符号常量的定义和使用。
包括整数的十进制、八进制和十六进制的表示形式、长整型常量的表示形式,实数的浮点表示法和科学记数法,字符的转义序列,常用符号常量的含义(如NUCLEON等)
(2)变量
熟练掌握变量的定义和初始化。
2、构造类型
构造类型包括数组和结构。
(1)数组
熟练掌握一维和二维数组的定义和初始化,数组元素的引用。
包括一维字符数组和字符串,二维字符数组和字符串数组。
(2)结构
熟练掌握结构类型的定义,结构变量的定义和初始化,结构变量成员的引用。
3、指针
(1)熟练掌握指针和地址的概念
(2)熟练掌握指针变量的定义和初始化
(3)熟练掌握通过指针引用指向实体
4、构造类型和指针类型的混合定义及应用
(1)熟练掌握指针、数组和地址间的关系
(2)熟练掌握指针数组
(3)熟练掌握结构数组
(4)熟练掌握结构指针
(5)掌握结构中含指针或数组
(6)掌握嵌套结构
(7)掌握指向指针的指针(二级)
(8)单向链表
掌握单向链表的建立和遍历
了解插入和删除单向链表中的一个节点
5、空类型
掌握空类型的定义和使用
6、变量的存储类别、作用域和生存期
(1)掌握变量的存储类别
auto自动型、static静态型、extern外部参照型
(2)掌握全局变量和局部变量
注意区分:
自动局部变量和静态局部变量、全局变量和静态全局变量、外部变量
二、运算及流程控制
1、基本运算
熟练掌握运算符的功能
熟练掌握运算符的优先级、结合性和目数
熟练掌握隐式类型转换和强制类型转换
2、表达式
熟练掌握各类表达式的组成规则和计算过程
3、语句
(1)熟练掌握表达式语句、空语句、复合语句;
(2)熟练掌握简单控制语句(break、continue、return);
(3)熟练掌握选择控制语句(ifswitch)
(4)熟练掌握重复控制语句(for、while、do—while);
三、程序结构和函数
1、程序结构
熟练掌握main函数与其他函数之间的关系
包括标准库函数和自定义函数
2、函数的定义
(1)熟练掌握函数定义的ANSIC格式
(2)熟练掌握函数的参数(形式参数和实在参数)及参数传递
包括指针作为函数的参数
(3)熟练掌握函数的返回值
包括指针作为函数的返回值
3、函数的调用
(1)函数调用的一般格式
熟练掌握通过函数名调用函数,了解通过函数指针调用函数
(2)掌握函数的嵌套调用和递归调用
(3)熟练掌握标准库函数的调用
常用数学函数:
cos、sqrt、pow、exp、fabs、log、log10等
常用字符函数:
isalnum、isalpha、isdigit、islower、toupper等
常用字符串函数:
strcpy、strcmp、strcat、strlen等
四、数据的输入和输出
1、文件
熟练掌握文件的基本概念
2、标准文件的输入和输出
熟练掌握常用输入输出函数:
scanf、printf、getchar、putchar、gets、puts等
3、缓冲文件系统(文本文件)
(1)熟练掌握文件的打开和关闭
常用函数:
fopen和close
(2)熟练掌握文件的基本读写操作
fscanf、fprintf、fgetc、fputc、fgets、fputs等
(3)熟练掌握文件的状态检测
feof等
五、编译预处理
1、熟练掌握编译预处理的基本概念
2、掌握宏定义
3、掌握文件包含
六、面向对象程序设计初步
1、掌握类、对象和面向对象程序设计的基本概念
2、了解类的定义
包括类的成员函数和数据成员
七、常用算法
以下算法针对本大纲中列出的各种数据结构
1、分类(排序)算法
冒泡、选择、插入
2、检索(查找)算法
(1)无序数据序列的查找(见遍历算法)
(2)有序数据序列的查找:
二分法
3、遍历算法
(1)一维数组和二维数组的遍历
(2)单向链表的遍历
(3)文件的遍历
4、其它基本算法
递推法、穷举法,二分法、牛顿法求方程根,梯形法求定积分等。
江苏省计算机等级考试(二级C语言)考点分析
经过本人多年来对江苏省计算机等级考试真题的研究,总结出以下考点会经常考到:
一、宏定义
二级考试必考的,必须让学生明白:
宏替换只是原样替换。
(1)2002年秋填空第7题
#defineN3
#defineY(n)((N+1)*n)
则执行语句“z=2*(N+Y(5+1));
”后,z的值是_______。
替换时原样替换后的式子为:
z=2*(3+((3+1)*5+1));
(2)2005年春填空第10题
#include<
stdio.h>
#defineADD(x,y)x+y
main()
{inta=15,b=10,c=20,d=5;
printf(“%d\n”,ADD(a,b)/ADD(c,d));
上面程序输出结果为_________。
二、递归应用
(1)2000年秋填空第5题
{ints,p[9]={1,2,3,4,5,6,7,8,9};
printf(“\n%d”,add(p,5));
}
add(int*p,intn)
{if(n==1)return*p;
elsereturn*p+add(p+1,n-1);
程序输出结果是________。
结果为:
15
(2)2000年秋填空第8题
fun(intn,int*s)
{intf1,f2;
if(n==1||n==2)*s=1;
else
{fun(n-1,&
f1);
fun(n-2,&
f2);
*s=2*f1+f2+1;
printf(“\n%d,%d”,f1,f2);
}
{intx;
fun(4,&
x);
printf(“\nx=%d”,x);
程序运行时输出的第一行是_________,第二行是________,最后一行是________。
答案:
1,14,1x=10
(3)2001年春填空第4题
以下程序输出结果是________
{printf(“%d”,fun(5));
fun(intn)
{if(n==1)return1;
returnn-fun(n-1);
3
(4)2001年春填空第12题
以下程序实现将a数组中后8个元素从大到小排序的功能
voidsort(int*x,intn)
{inta[12]={5,3,7,4,2,9,8,32,54,21,6,43},k;
sort(______,8);
for(k=0;
k<
12;
k++)printf(“%d”,a[k]);
{intj,t;
if(n==1)return;
for(j=1;
j<
n;
j++)
if(_______)
{t=x[0];
x[0]=x[j];
x[j]=t;
sort(x+1,________);
本题结合了冒泡排序法,第一个空填:
a+4;
第二个空填:
x[0]<
x[j];
第三个空填:
n-1
(5)2001年春填空第8题
以下程序运行时第一行输出________,第二行输出________。
voidrev(int*p,intn)
{intt;
if(n>
1)
{t=p[0];
[0]=p[n-1];
p[n-1]=t;
rev(p+1,n-2);
{intj,a[5]={1,2,3,4,5};
rev(a+1,4);
for(j=0;
5;
j++)printf(“%d”,a[j]);
printf(“\n”;
rev(a,3);
输出结果:
1543245132
(6)2002年秋填空题第11题(P7-11)
{inta[3][3],i,j;
numlist(&
a[0][0],9);
for(i=0;
i<
3;
i++)
{for(j=0;
j++)printf(“%d,”,a[i][j]);
printf(“\n”);
numlist(int*p,intn)
{inti;
i++)p[i]=num(i);
num(intn);
{if(n==0)return1;
returnnum(n-1)*2+1;
程序运行时输出的第一行是:
1,3,7
(7)2003年春填空题第11题(P17-11)
longfunc(longx)
{if(x<
100)returnx%10;
elsereturnfunc(x/100)*10+x%10;
{printf(“Theresultis:
%ld\n”,func(132645));
程序运行结果是Theresultis:
365
(8)2003年秋填空题第11题(P26-11)
voidfun(int*p1,int*p2);
{inti,a[6]={1,2,3,4,5,6};
fun(a,a+5);
i++)printf(“%2d”,a[i]);
voidfun(int*p1,int*p2)
if(p1<
p2)
{t=*p1;
p1=*p2;
*p2=t;
fun(p1+=2,p2-=2);
}
程序运行结果是624351
(9)2004年春(P37-11)
voidf(inta[],intn,intx,int*c);
{inta[10]={1,3,5,2,3,5,3,7,4,1},t=0;
f(a,10,5,&
t);
printf(“%d”,t);
voidf(inta[],intn,intx,int*c)
{if(n==0)return;
if(a[0]>
=x)(*c)++;
f(a+1,n-1,x,c);
程序运行结果是3
(10)2004年秋(P52-14)
本例结合了二分法求方程的根。
见“方程求根”
(11)P68-14
本例结合了牛顿迭代法求方程的根。
三、二维数组
(1)2004年秋填空第12题(P51-12)
以下程序运行时输出结果的第一行是________,第二行是______,第三行是________。
#defineN3
{inti,j,k=1,a[N][N]={0};
i<
N/2+1;
{for(j=0;
=i;
j++)a[j][i-j]=k++;
for(;
2*N;
{for(j=i+1-N;
=N-1;
N;
j++)printf(“%4d”,a[i][j]);
124357689
(2)2005年春填空第12题(P66-12)
以下程序运行时输出结果的第二行为______,第四行为______,第六行_______。
voidchange(ints[3][3],intd)
{inti,j,k;
if(d==0)
{for(i=0;
for(j=i+1;
j<
j++){k=s[i][j];
s[i][j]=s[j][i];
s[j][i]=k;
3-i;
s[i][j]=s[2-j][2-i];
s[2-j][2-i]=k;
{ints[3][3]={1,2,3,4,5,6,7,8,9},i,j,k,n;
change(s,0);
{for(j=0;
j++)printf(“%4d”,s[i][j]);
change(s,1);
for(i=0;
258987321
四、链表应用
(1)2003年秋填空第17题(P30-17)
设有一个线性单链表的结点定义如下:
structnode
{intd;
structnode*next;
};
函数intcopy_dellist(structnode*head,intx)的功能是:
将head指向的单链表中存储的所有整数从小到大依次复制到x指向的整形数组中并撤消该链表;
函数返回复制到x数组中的整数个数。
算法:
找出链表中数值最小的结点,将其值存储到x数组中,再将该结点从链表中删除,重复以上操作直到链表为空为止。
intcopy_dellist(structnode*head,intx)
{structnoe*pk,*pj,*pm,*pn;
intdata,k=0;
while(head!
=0)
{pk=head;
data=pk->
d;
pn=pk;
while(________!
{pj=pk->
next;
if(_______<
data){data-pj->
pm=pk;
pn=pj;
pk=pj;
x[k++]=pn->
if(_________)pm->
next=pn->
elsehead=pn->
free(pn);
_____________;
答案:
pk->
nextpj->
dpn!
=headreturnk
(2)2004年春填空第17题(P41-17)
设某链表上每个结点的数据结构为:
typedefstructnode
}NODE;
函数NODE*invert(NODE*head)的功能是:
将head指向的单链表逆置,即原链表最后一个结点变为第一个结点,原来倒数第二个结点变成第二个结点,以此类推。
在逆置过程中不建立新的链表。
NODE*invert(NODE*head)
{NODE*p,*q,*r;
if(head==0||__________)returnhead;
p=head;
q=p->
while(q!
{r=__________;
q->
next=p;
p=q;
q=r;
__________=0;
head=__________;
returnhead;
head->
next==0q->
nexthead->
nextp
(3)2004年秋填空第13题P51-13
以下程序运行时输出结果的第一行是________,第二行是________,第三行是_________。
stdlib.h>
NODE*insert(NODE*head,intx,intkey)
{NODE*s,*p,*q;
s=(NODE*)malloc(sizeof(NODE));
s->
d=key;
next=NULL;
if(head==NULL){head=s;
if(head->
d==x){s->
next=head;
head=s;
{q=head;
p=q->
while((p->
d!
=x)&
(p->
next!
=NULL)){q=p;
p=p->
if(p->
next=s;
else{s->
p->
voidprint(NODE*head);
{if(head==NULL)return;
while(head->
=NULL)
{printf(“%d,”,head->
d);
head=head->
printf(“%d\n”,head->
{NODE*head=NULL;
head=insert(head,0,3);
print(head);
head=insert(head,3,1);
head=insert(head,4,5);
31,31,3,5
(4)2005年春填空题第13题(P66-13)
以下程序运行时输出结果的第一行为________,第二行为_________,第三行为__________。
structnode*create(void)
{structnode*head=NULL,*p,*q=NULL;
inti;
for(i=2;
=9;
{p=(structnode*)malloc(sizeof(structnode));
d=i;
if(head==NULL)head=p;
elseq->
q=p;
voidprint(structnode*head);
structnode*delst(structnode*head,int*n)
{intcount=0;
structnode*p,*q,*r;
p=r=head;
while(p!
{q=p->
{if((q->
d)%(p->
d)==0)
{r->
next=q->
free(q);
count+