欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载
     

    [IT认证]二级强化C语言复习资料.doc

    • 资源ID:4650255       资源大小:222.50KB        全文页数:40页
    • 资源格式: DOC        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    [IT认证]二级强化C语言复习资料.doc

    江苏省计算机等级考试(二级C语言)复习资料田祥宏江苏省计算机等级考试二级C语言复习资料金陵科技学院信息技术学院目 录第一章 江苏省计算机等级考试(二级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十、 字符串的查找、插入、删除必须会271、 字符串查找272、 字符串插入303、 字符串删除32十一、 求回文数(如321的回文数为123)必须会。34十二、 判断素数的方法必须会。34第四章 C语言中必须掌握的函数3737江苏省计算机等级考试(二级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) 熟练掌握选择控制语句(if switch)(4) 熟练掌握重复控制语句(for、while、dowhile);三、程序结构和函数1、程序结构熟练掌握main函数与其他函数之间的关系包括标准库函数和自定义函数2、函数的定义(1) 熟练掌握函数定义的ANSI C格式(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题#define N 3#define Y(n) (N+1)*n)则执行语句“z=2*(N+Y(5+1);”后,z的值是_。替换时原样替换后的式子为:z=2*(3+(3+1)*5+1);(2)2005年春填空第10题#include <stdio.h>#define ADD(x,y) x+ymain()int a=15,b=10,c=20,d=5; printf(“%dn”,ADD(a,b)/ADD(c,d);上面程序输出结果为_。二、递归应用(1) 2000年秋填空第5题main() int s, p9=1,2,3,4,5,6,7,8,9; printf(“n%d”, add(p,5);add(int *p, int n) if(n=1) return *p; else return *p+add(p+1,n-1);程序输出结果是_。结果为:15(2) 2000年秋填空第8题fun(int n, int *s) int f1,f2; if(n=1|n=2) *s=1; elsefun(n-1,&f1); fun(n-2, &f2);*s=2*f1+f2+1; printf(“n%d,%d”,f1,f2); main() int x; fun(4,&x); printf(“n x=%d”,x);程序运行时输出的第一行是_,第二行是_,最后一行是_。答案:1,1 4,1 x=10(3) 2001年春填空第4题以下程序输出结果是_main() printf(“%d”, fun(5); fun( int n) if(n=1) return 1; return n-fun(n-1);结果为:3(4) 2001年春填空第12题以下程序实现将a数组中后8个元素从大到小排序的功能void sort(int *x, int n)main() int a12=5,3,7,4,2,9,8,32,54,21,6,43, k; sort(_, 8); for(k=0; k<12; k+) printf(“%d”,ak);void sort(int *x, int n)int j,t; if(n=1) return; for(j=1; j<n; j+) if(_) t=x0; x0=xj; xj=t; sort(x+1, _);本题结合了冒泡排序法,第一个空填:a+4 ;第二个空填:x0<xj ;第三个空填:n-1(5) 2001年春填空第8题以下程序运行时第一行输出_,第二行输出_。void rev(int *p, int n) int t; if(n>1)t=p0; 0=pn-1; pn-1=t; rev(p+1,n-2); main() int j,a5=1,2,3,4,5; rev(a+1,4); for(j=0; j<5; j+) printf(“%d”,aj); printf(“n”; rev(a,3); for(j=0; j<5; j+) printf(“%d”,aj);输出结果:15432 45132(6) 2002年秋填空题第11题(P7-11)main() int a33,i,j; numlist(&a00,9); for(i=0; i<3; i+) for(j=0; j<3; j+) printf(“%d,”, aij); printf(“n”); numlist(int *p, int n) int i; for(i=0; i<n; i+) pi=num(i);num(int n); if(n=0) return 1; return num(n-1)*2+1;程序运行时输出的第一行是: 1,3,7(7) 2003年春填空题第11题(P17-11)long func(long x) if(x<100) return x%10; else return func(x/100)*10+x%10; main() printf(“The result is : %ld n”,func(132645); 程序运行结果是 The result is : 365(8) 2003年秋填空题第11题(P26-11)void fun(int *p1, int *p2);main() int i, a6=1,2,3,4,5,6; fun(a,a+5); for(i=0; i<5; i+) printf(“%2d”,ai);void fun(int *p1, int *p2) int t; if(p1<p2) t=*p1; p1=*p2; *p2=t; fun(p1+=2, p2-=2); 程序运行结果是 6 2 4 3 5 1(9) 2004年春(P37-11)#include <stdio.h>void f(int a, int n, int x, int *c);main() int a10=1,3,5,2,3,5,3,7,4,1,t=0; f(a,10,5,&t); printf(“%d”,t);void f(int a, int n, int x, int *c) if(n=0) return; if(a0>=x) (*c)+; f(a+1,n-1,x,c);程序运行结果是 3(10) 2004年秋(P52-14)本例结合了二分法求方程的根。见“方程求根”(11) P68-14本例结合了牛顿迭代法求方程的根。见“方程求根”三、二维数组(1) 2004年秋填空第12题(P51-12)以下程序运行时输出结果的第一行是_,第二行是_,第三行是_。#define N3main() int i,j,k=1,aNN=0; for(i=0;i<N/2+1; i+) for(j=0; j<=i; j+) aji-j=k+; for(; i<2*N; i+) for(j=i+1-N; j<=N-1; j+) aji-j=k+; for(i=0;i<N; i+) for(j=0; j<N; j+) printf(“%4d”,aij); printf(“n”); 答案:1 2 4 3 5 7 6 8 9(2) 2005年春填空第12题(P66-12)以下程序运行时输出结果的第二行为_,第四行为_,第六行_。#include <stdio.h>void change(int s33, int d) int i,j,k; if(d=0) for(i=0; i<3; i+) for(j=i+1;j<3;j+) k=sij; sij=sji; sji=k; else for(i=0; i<3; i+) for(j=0;j<3-i;j+) k=sij; sij=s2-j2-i; s2-j2-i=k; main() int s33=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”,sij); printf(“n”);change(s,1);for(i=0; i<3; i+) for(j=0;j<3;j+) printf(“%4d”,sij); printf(“n”);输出结果:2 5 8 9 8 7 3 2 1四、链表应用(1) 2003年秋填空第17题(P30-17)设有一个线性单链表的结点定义如下:struct node int d; struct node *next;;函数int copy_dellist(struct node *head, int x)的功能是:将head指向的单链表中存储的所有整数从小到大依次复制到x指向的整形数组中并撤消该链表;函数返回复制到x数组中的整数个数。算法:找出链表中数值最小的结点,将其值存储到x数组中,再将该结点从链表中删除,重复以上操作直到链表为空为止。int copy_dellist(struct node *head, int x)struct noe *pk, *pj, *pm, *pn; int data, k=0; while(head!=0) pk=head; data=pk->d; pn=pk; while(_!=0) pj=pk->next;if(_<data) data-pj->d; pm=pk; pn=pj; pk=pj;xk+=pn->d;if(_) pm->next=pn->next;else head=pn->next;free(pn);_; 答案:pk->next pj->d pn!=head return k(2) 2004年春填空第17题(P41-17)设某链表上每个结点的数据结构为:typedef struct node int d; struct node *next;NODE;函数NODE *invert(NODE *head)的功能是:将head指向的单链表逆置,即原链表最后一个结点变为第一个结点,原来倒数第二个结点变成第二个结点,以此类推。在逆置过程中不建立新的链表。NODE *invert(NODE *head) NODE *p, *q, *r; if(head=0|_) return head; p=head; q=p->next; while(q!=0) r=_; q->next=p; p=q; q=r; _=0; head=_; return head;答案:head->next=0 q->next head->next p(3) 2004年秋填空第13题P51-13以下程序运行时输出结果的第一行是_,第二行是_,第三行是_。#include <stdio.h>#include <stdlib.h>typedef struct node int d; struct node *next;NODE;NODE *insert(NODE *head, int x, int key)NODE *s, *p, *q; s=(NODE *)malloc(sizeof(NODE); s->d=key; s->next=NULL; if(head=NULL) head=s; return head; if(head->d=x) s->next=head; head=s; return head; 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; return head; void print(NODE *head); if(head=NULL) return; while(head->next!=NULL) printf(“%d,”, head->d); head=head->next; printf(“%dn”,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);答案:3 1,3 1,3,5(4) 2005年春填空题第13题(P66-13)以下程序运行时输出结果的第一行为_,第二行为_,第三行为_。#include <stdio.h>#include <stdlib.h>struct node int d; struct node *next;struct node *create(void) struct node *head=NULL,*p, *q=NULL; int i; for(i=2; i<=9; i+) p=(struct node *)malloc(sizeof(struct node); p->d=i; p->next=NULL; if(head=NULL) head=p; else q->next=p; q=p; return head;void print(struct node *head); if(head=NULL) return; while(head->next!=NULL) printf(“%d,”, head->d); head=head->next; printf(“%dn”,head->d);struct node *delst(struct node *head, int *n) int count=0; struct node *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+; q=r->next; else r=q; q=q->next; p=p->next;*n=count; return head;void main() int y; struct node *head; head=creat(); print(head); head=delst(head,&y); print(head); printf(“%d”,y);答案:2,3,4,5,6,7,8,9 2,3,5,7 4五、字符串处理(1) 2003年春填空第10题(P16-10)以下程序运行时输出第一行是_,第二行是_。#include <string.h>int convert(char s1,char s2) int i=0,j,s; char tab84=“000”,”001”,”010”,”011”,”100”,”101”,”110”,”111”; for(i=0,j=0; s1i!=0; i+,j=j+3) strcpy(&s2j,tabs1i-0);for(i=0,s=0;i<strlen(s2); i+) s=s*2+s2i-0;return s;main() char ss1=”15”,ss280; int y; y=convert(ss1,ss2); printf(“%dn%s”,y,ss2);分析:本程序将八进制数字组成的字符串ss1转换成二进制字符串和十进制数。答案:13 001101(2) 2003年春填空第12题(P17-12)函数loop(s,m,n,str)的功能是:对字符串str中,从下标为s的字符开始的所有间隔为m的字符进行循环左移,即:strsss+m, strs+mss+3m, strs+2mss+3m, strs+(k-1)mss+km, strs+kmss(k为整数,下标s+km不越界),共做n次。例如,调用loop(1,2,1,str)前后str中数据的变化情况如下:str中初始数据:A B C D E F G H I J K移位后str数据:A D C F E H G J I B K#include <stdio.h>#include <string.h>void loop(int s,int m,int n, char *str);main()char buf81; strcpy(buf,”ABCDEFGHIJK”); puts(buf); loop(1,2,2,buf); puts(buf);void loop(int s,int m,int n, char *str)char c; int k,i,len; len=strlen(str); for(i=0; i<n; i+) k=_; c=strk; while(k+m<_) strk=strk+m; k=_; _=c; 答案:s len k+m strk(3) 2004年秋填空第16题(P40-16)以下程序中函数strmerge的功能是:合并a和b两个有序的字母字符串(字典序)而产生一个新的字符串,在合并的过程中删除重复出现的字符,合并后的字符串仍然保持原序并保存到c指向的数组中,函数返回在合并过程中删除的字符个数。main函数中输出合并后的字符串“copy”以及在合并过程中删除的字符个数3。#include <stdio.h>int strmerge(char *a, char *b, char *c)int i=0,j=0,k=0; char t; while(ai!=0&&_) if(ai=bj) t=ai; i+; _; else if(ai<aj) t=ai+; else t=bj+; if(t!=ck-1) _=t; while(ai) if(ai!=ck-1 ck+=ai+; else i+; while(bj) if(bj!=ck-1 ck+=bj+; else j+; ck=0; return _;main()static char s110=”ccp”,s210=”oppy”,s320; int n;n=strmerge(s1,s2,s3);puts(s3);printf(“%d”,n);答案:aj!=0 j+ ck+ i+j-k(4) 2004年秋填空第6题(P49-6)以下程序运行时输出结果是_。#include <stdio.h>main() char *s, *s1=”Here”; s=s1; while(*s1) s1+; printf(“%dn”,s1-s); 分析:本程序是求指针s1所指向的字符串的长度。答案:4(5) 2004年秋填空第11题(P50-11)以下程序运行时输出结果的第一行是_,第二行是_。#include <stdio.h>#include <string.h>void process(char *s1, char *s2, char *s3, int d) int i=0,j=0,len1=strlen(s1), len2=strlen(2),len3=0; while(i<len1&&j<len2) if(d=1&&s1i<s2j|d=2&&s1i>s2j) s3len3+=s1i+; else s3len3+=s2j+; s3len3=0;if(i<len1) strcat(s3,&s1i);else strcat(s3,&s2j);void main()char s1=”bl”,s2=”el”,s3=”lb”,s4=”le”,s20;process(s1,s2,s,1); puts(s);process(s3,s4,s,2); puts(s);分析:函数process()完成的功能:(1)当d=1时,从s1、s2两字符串中依次取最小的字符放入s3中,直到有一个字符串结束,最后将未结束的字符串中剩余的字符加到s3的后面;(2)当d=2时,从s1、s2两字符串中依次取最大的字符放入s3中,直到有一个字符串结束,最后将未结束的字符串中剩余的字符加到s3的后面。答案:bell lleb(6) 2005年秋填空第11题(P65-11)以下程序运行时输出结果的第一行为_,第二行为_。#include <stdio.h>#include <string.h>int process(char *s1,char *s2, char *s3) int i=0, j=0, len1=strlen(s1), len2=strlen(s2), len3=0; for(i=0; i<len1; i+) for(j=0; j<len2; j+) if(s1i=s2i) break; if(j>=len2) s3len3+=s1i; s3len3=0; return len1-len3; void main() char s1=”bilker”, s2=”lr”,s320; int n; n=process(s1,s2,s3); puts(s3); printf(“n%d”,n); 分析:本程序中的函数process()完成的功能是:将字符串s1中有而s2中无的字符放入s3中。并返回在s1中有且s2中也有的字符个数。答案:bike 2(7) 2005年春填空第17题(P70-17)以下程序中函数str_count的功能是:统计字符串s2在字符串s1中出现的次数并得到第一次出现的位置。子串出现的次数通过指针型形参变量返回给调用函数,函数返回值为子串第一次出现的位置下标。Main函数中输出这些信息。#include <stdio.h>#include <string.h>int str_count(char s1, char s2, int *count) int i=0,j=0, flag=0, len1, len2, pos=0, ct=0; char tmp100; len1=strlen(s1); len2=strlen(s2); while(i<=len1-len2) for(j=0; j<len2; j+) /*依次从s1中取与s2长度相同的字符串*/tmpj=s1i+j; tmpj=0;if(_) if(flag=0) pos=i; flag=1; ct+; i=i+j;else _;*count=ct;return pos;void main() char s1=”habcdefabcdghij”,s2=”abc”; int count=0, first=0; first=str_count(s1,s2, _); if(count) printf(“%s appears %d times in %s.n first pos is %d.n”,s2,count,s1,first);else printf(“%s not be found in %s!n”,s2,s1);str_count()函数算法分析:依次从s1中取与s2长度相同的字符串放入tmp字符串中,将s2与tmp进行比较,如果相等则(1)存下位置,计数器ct+;(2)开始位置后移i=i+j。答案:strcmp(s2,tmp)=0 i=i+1 &count六、递推法分析:递推法最关键的是找到前后项的区别。即怎样由前一项得到后一项。(1) 2004年秋填空题第15题(P53-15)以下程序采用递推法计算的值,即求的值。其中x为键盘输入的一个任意的单精度实数。#include <stdio.h>main() int i,sign=1; float x,s,t; scanf(“%f”,&

    注意事项

    本文([IT认证]二级强化C语言复习资料.doc)为本站会员(sccc)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开