二级强化C语言复习资料.docx

上传人:b****3 文档编号:3543495 上传时间:2022-11-23 格式:DOCX 页数:53 大小:75.98KB
下载 相关 举报
二级强化C语言复习资料.docx_第1页
第1页 / 共53页
二级强化C语言复习资料.docx_第2页
第2页 / 共53页
二级强化C语言复习资料.docx_第3页
第3页 / 共53页
二级强化C语言复习资料.docx_第4页
第4页 / 共53页
二级强化C语言复习资料.docx_第5页
第5页 / 共53页
点击查看更多>>
下载资源
资源描述

二级强化C语言复习资料.docx

《二级强化C语言复习资料.docx》由会员分享,可在线阅读,更多相关《二级强化C语言复习资料.docx(53页珍藏版)》请在冰豆网上搜索。

二级强化C语言复习资料.docx

二级强化C语言复习资料

江苏省计算机等级考试

二级C语言

 

nanjinguniversityofinformation&science

目录

第一章江苏省计算机等级考试(二级C语言)考试大纲……………………………………1

第二章江苏省计算机等级考试(二级C语言)考点分析……………………………………4

一、宏定义………………………………………………………………………………4

二、递归调用………………………………………………………………………………4

三、二维数组………………………………………………………………………………7

四、链表应用………………………………………………………………………………8

五、字符串处理……………………………………………………………………………11

六、递推法………………………………………………………………………………15

七、穷举法………………………………………………………………………………17

八、静态变量/变量作用域………………………………………………………………18

九、方程求根………………………………………………………………………………19

一十、查找、排序……………………………………………………………………………20

一十一、结构体应用……………………………………………………………………23

一十二、求定积分(梯形法)………………………………………………………………24

第三章二级考试常见技巧……………………………………………………………………26

一、整/整=整…………………………………………………………………………26

二、数字字符(字母字符)与数字转换(字母)………………………………………26

三、&&和||不计算问题………………………………………………………………26

四、字符串常量中的转义字符………………………………………………………26

五、求整数各位数字问题……………………………………………………………26

六、数组名是地址常量,不能自增、自减和赋值……………………………………26

七、%运算符两个操作数都是正整数………………………………………………27

八、break只用于循环语句和switch语句;continue只用于循环语句中……………27

九、变量作用域屏蔽问题……………………………………………………………27

一十、字符串的查找、插入、删除必须会………………………………………………27

1、字符串查找…………………………………………………………………………27

2、字符串插入……………………………………………………………………30

3、字符串删除…………………………………………………………………………32

一十一、求回文数(如321的回文数为123)必须会。

………………………………………34

一十二、判断素数的方法必须会。

…………………………………………………………34

第四章C语言中必须掌握的函数……………………………………………………………37

江苏省计算机等级考试(二级C语言)考试大纲

C语言部分

基本要求

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

#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题

main()

{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);

}

}

main()

{intx;

fun(4,&x);printf(“\nx=%d”,x);

}

程序运行时输出的第一行是_________,第二行是________,最后一行是________。

答案:

1,14,1x=10

(3)2001年春填空第4题

以下程序输出结果是________

main()

{printf(“%d”,fun(5));}

fun(intn)

{if(n==1)return1;

returnn-fun(n-1);

}

结果为:

3

(4)2001年春填空第12题

以下程序实现将a数组中后8个元素从大到小排序的功能

voidsort(int*x,intn)

main()

{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]);

}

voidsort(int*x,intn)

{intj,t;

if(n==1)return;

for(j=1;j

if(_______)

{t=x[0];x[0]=x[j];x[j]=t;}

sort(x+1,________);

}

本题结合了冒泡排序法,第一个空填:

a+4;第二个空填:

x[0]

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);}

}

main()

{intj,a[5]={1,2,3,4,5};

rev(a+1,4);

for(j=0;j<5;j++)printf(“%d”,a[j]);

printf(“\n”;

rev(a,3);

for(j=0;j<5;j++)printf(“%d”,a[j]);

}

输出结果:

1543245132

(6)2002年秋填空题第11题(P7-11)

main()

{inta[3][3],i,j;

numlist(&a[0][0],9);

for(i=0;i<3;i++)

{for(j=0;j<3;j++)printf(“%d,”,a[i][j]);

printf(“\n”);

}

}

numlist(int*p,intn)

{inti;

for(i=0;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;

}

main()

{printf(“Theresultis:

%ld\n”,func(132645));}

程序运行结果是Theresultis:

365

(8)2003年秋填空题第11题(P26-11)

voidfun(int*p1,int*p2);

main()

{inti,a[6]={1,2,3,4,5,6};

fun(a,a+5);

for(i=0;i<5;i++)printf(“%2d”,a[i]);

}

voidfun(int*p1,int*p2)

{intt;

if(p1

{t=*p1;p1=*p2;*p2=t;fun(p1+=2,p2-=2);}

}

程序运行结果是624351

(9)2004年春(P37-11)

#include

voidf(inta[],intn,intx,int*c);

main()

{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

main()

{inti,j,k=1,a[N][N]={0};

for(i=0;i

{for(j=0;j<=i;j++)a[j][i-j]=k++;}

for(;i<2*N;i++)

{for(j=i+1-N;j<=N-1;j++)a[j][i-j]=k++;}

for(i=0;i

{for(j=0;j

printf(“\n”);

}

}

答案:

124357689

(2)2005年春填空第12题(P66-12)

以下程序运行时输出结果的第二行为______,第四行为______,第六行_______。

#include

voidchange(ints[3][3],intd)

{inti,j,k;

if(d==0)

{for(i=0;i<3;i++)

for(j=i+1;j<3;j++){k=s[i][j];s[i][j]=s[j][i];s[j][i]=k;}

}

else

for(i=0;i<3;i++)

for(j=0;j<3-i;j++){k=s[i][j];s[i][j]=s[2-j][2-i];s[2-j][2-i]=k;}

}

main()

{ints[3][3]={1,2,3,4,5,6,7,8,9},i,j,k,n;

change(s,0);

for(i=0;i<3;i++)

{for(j=0;j<3;j++)printf(“%4d”,s[i][j]);

printf(“\n”);

}

change(s,1);

for(i=0;i<3;i++)

{for(j=0;j<3;j++)printf(“%4d”,s[i][j]);

printf(“\n”);

}

}

输出结果:

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(________!

=0)

{pj=pk->next;

if(_______d;pm=pk;pn=pj;}

pk=pj;

}

x[k++]=pn->d;

if(_________)pm->next=pn->next;

elsehead=pn->next;

free(pn);

}

_____________;

}

答案:

pk->nextpj->dpn!

=headreturnk

(2)2004年春填空第17题(P41-17)

设某链表上每个结点的数据结构为:

typedefstructnode

{intd;

structnode*next;

}NODE;

函数NODE*invert(NODE*head)的功能是:

将head指向的单链表逆置,即原链表最后一个结点变为第一个结点,原来倒数第二个结点变成第二个结点,以此类推。

在逆置过程中不建立新的链表。

NODE*invert(NODE*head)

{NODE*p,*q,*r;

if(head==0||__________)returnhead;

p=head;

q=p->next;

while(q!

=0)

{r=__________;

q->next=p;p=q;q=r;

}

__________=0;

head=__________;

returnhead;

}

答案:

head->next==0q->nexthead->nextp

(3)2004年秋填空第13题P51-13

以下程序运行时输出结果的第一行是________,第二行是________,第三行是_________。

#include

#include

typedefstructnode

{intd;

structnode*next;

}NODE;

NODE*insert(NODE*head,intx,intkey)

{NODE*s,*p,*q;

s=(NODE*)malloc(sizeof(NODE));

s->d=key;s->next=NULL;

if(head==NULL){head=s;returnhead;}

if(head->d==x){s->next=head;head=s;returnhead;}

else

{q=head;p=q->next;

while((p->d!

=x)&&(p->next!

=NULL)){q=p;p=p->next;}

if(p->d==x){s->next=p;q->next=s;}

else{s->next=NULL;p->next=s;}

returnhead;

}

}

voidprint(NODE*head);

{if(head==NULL)return;

while(head->next!

=NULL)

{printf(“%d,”,head->d);head=head->next;}

printf(“%d\n”,head->d);

}

main()

{NODE*head=NULL;

head=insert(head,0,3);print(head);

head=insert(head,3,1);print(head);

head=insert(head,4,5);print(head);

}

答案:

31,31,3,5

(4)2005年春填空题第13题(P66-13)

以下程序运行时输出结果的第一行为________,第二行为_________,第三行为__________。

#include

#include

structnode

{intd;

structnode*next;

}

structnode*create(void)

{structnode*head=NULL,*p,*q=NULL;

inti;

for(i=2;i<=9;i++)

{p=(structnode*)malloc(sizeof(structnode));

p->d=i;p->next=NULL;

if(head==NULL)head=p;

elseq->next=p;

q=p;

}

returnhead;

}

voidprint(structnode*head);

{if(head==NULL)return;

while(head->next!

=NULL)

{printf(“%d,”,head->d);head=head->next;}

printf(“%d\n”,head->d);

}

structnode*delst(structnode*head,int*n)

{intcount=0;structnode*p,*q,*r;

p=r=head;

while(p!

=NULL)

{q=p->next;

while(q!

=NULL)

{if((q->d)%(p->d)==0)

{r->next=q->next;free(q);count+

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 军事政治

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1