二级强化C语言复习资料.docx
- 文档编号:4904760
- 上传时间:2022-12-11
- 格式:DOCX
- 页数:53
- 大小:75.95KB
二级强化C语言复习资料.docx
《二级强化C语言复习资料.docx》由会员分享,可在线阅读,更多相关《二级强化C语言复习资料.docx(53页珍藏版)》请在冰豆网上搜索。
二级强化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+
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二级强化 语言 复习资料