二级C语言强化复习提纲(20100223).doc_第1页
二级C语言强化复习提纲(20100223).doc_第2页
二级C语言强化复习提纲(20100223).doc_第3页
二级C语言强化复习提纲(20100223).doc_第4页
二级C语言强化复习提纲(20100223).doc_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

二级C语言强化复习提纲常子楠二级C语言强化复习提纲第二章 数据及数据类型一、常量表示二、宏的使用例1、2002年秋填空第7题#define N 3#define Y(n) (N+1)*n)则执行语句“z=2*(N+Y(5+1);”后,z的值是_。例2、2005年春填空第10题#include #define ADD(x,y) x+ymain()int a=15,b=10,c=20,d=5; printf(“%dn”,ADD(a,b)/ADD(c,d);上面程序输出结果为_。第三章 数据运算一、 优先级与结合性初等运算符-单目-算术-关系-逻辑(不含!)-条件-赋值-逗号1单目(1)+和的前后置问题(2)自右向左的结合性2关系(1)abc3逻辑(1) a&b&c(2) a|b|c4条件(1) 自右向左的结合性5赋值(1) 复合的赋值运算(2) 赋值(=)与关系(=)6逗号(1) 表达式只有一个值7位运算(1)ak 分逻辑右移和算术右移8. sizeof()例1、2002年春选择第26题设”int x=2,y=3,z=(+x=y-)?(-y=1)?y-:-y):y-;”,则x,y,z的值为( A )A 3、0、1 B 2、0、0C 3、1、1D 2、1、1例2、2002年秋填空第6题以下程序运行后,x,y,z的值分别为_ 1 3 2_int x=0,y=3,z=2;if(x+&y+) z-;else if(x+1=6|y-) z+;第四章 选择结构一、 if括号中表达式的真假问题二、if-else的配对问题三、switch-case结构中case后面的值;break的应用第五章 循环结构一、 循环中break、continue的应用二、for、while循环1. 循环次数问题2. 循环条件缺省3. 退出循环时,循环因子的值三、小算法素数、水仙花数(三位数拆分)、完数(求整数因子之和)、最大公约数(最小公倍数)、逆序数(回文数)、最值等四、算法应用1递推法例1、 2004年秋填空题第15题以下程序采用递推法计算的值,即求的值。其中x为键盘输入的一个任意的单精度实数。#include main() int i,sign=1; float x,s,t; scanf(“%f”,&x); s=_ _; t=x; for(i=1;i=10; i+) sign=-sign;t=t*sign* _ ;s+=t;printf(“s=%6.2f”,s);例2、2005年春填空题第15题以下程序的功能是:计算的值。#include #include double f(int n) int i,j,sign=1; double term,sum=0.0; for(i=1; i=n; i+) term=0; for(j=0; _ _; j+) term+=i*pow(10,j); /* 组成分母 */ sum=sum+sign*_ _; sign=-sign; return sum;void main() printf(“nThe sum= %f n”,f(6); 2穷举法例1、2004年春填空题第14题如果一个两位整数是质数,将组成它的两个数字交换位置后形成的整数仍为质数,则称这样的数为绝对质数。例如,13就是一个绝对质数。以下程序用于找出所有两位绝对质数。#include int a_prime(int n) int j,k,m2; m0=n; m1=_; for(j=0; j1; k-)if(_) return 0;return 1;main() int i; for(i=10;I100;I+) if(a_prime(i) printf(“%d”,i);例2、 2004年秋填空题第16题定理:对于任意一个正整数都可以找到至少一串连续奇数,它们的和等于该正整数的立方。例如,33=27=7+9+11,43=64=1+3+5+7+9+11+13+15。以下程序用2,20之间的所有正整数验证该定理。#include main() long n,i,k,j,p,sum; for(n=2; n=20; n+) k=n*n*n;for(i=1; ik/2; i+=2) for(j=i,sum=0; _; j+=2) sum+=j; if(sum=k) printf(“n %ld*%ld*%ld = %ld= “,n,n,n,sum); for(p=i; p=k/2) printf(“n Error!”); 例3、 2005年春填空题第16题以下程序的功能是:寻找并输出11至999之间所有的整数m,满足条件m、m2、m3均为回文数(所谓回文数,是指其各位数字左右对称的整数。例如,121、12321都是回文数)。#include int f(long n) int i=0,j=0,a10; while(n!=0) aj+=n%10; n=_; j-; while(_) if(ai=aj) i+,j-; else return 0; return 1; main() long m; for(m=11; m1000; m+) if(f(m)&f(m*m)&f(m*m*m) printf(“m=%ld, m*m=%ld, m*m*m=%ldn”,m,m*m,m*m*m); 3方程求根例1、2004年秋填空题14题当f(x)的绝对值小于0.000001时,就求得了近似实根。(二分法)#include #include double f(double x) return x*x-x-2; double root(double a,double b) double m=(a+b)/2, fo=f(a), x=0; if(fabs(f(m)0) a=m; else b=m; x=root(_);return x;main() printf(“n One root is %lf n”,root(1,4); 例2、2005年春填空题14题当f(xk+1)的绝对值小于0.000001时,就求得了近似实根。(牛顿迭代法)#include #include double f(double x) return x*x-x-2; double f1(doube x) return 2*x-1; double root(double x) double y; if(fabs(f(x)1e-6) y=_ _; else y=root(_);return y;main() printf(“n One root is %lf n”,root(1.0); 4定积分第六章 数组与字符串一、一维数组1边界问题2相应算法(1)逆置(三种方法)(2)查找 顺序查找 二分查找 (3)插入 位置插入 按序插入(4)删除 位置删除 按值删除(5)排序 选择排序 冒泡排序 插入排序(6)归并二、二维数组1矩阵转置 上三角 下三角2矩阵乘法3最值例1 、2004年秋填空第12题以下程序运行时输出结果的第一行是_,第二行是_,第三行是_。#define N3main() int i,j,k=1,aNN=0; for(i=0;iN/2+1; i+) for(j=0; j=i; j+) aji-j=k+; for(; i2*N; i+) for(j=i+1-N; j=N-1; j+) aji-j=k+; for(i=0;iN; i+) for(j=0; jN; j+) printf(“%4d”,aij); printf(“n”); 例2、2005年春填空第12题以下程序运行时输出结果的第二行为_,第四行为_,第六行_。#include void change(int s33, int d) int i,j,k; if(d=0) for(i=0; i3; i+) for(j=i+1;j3;j+) k=sij; sij=sji; sji=k; else for(i=0; i3; i+) for(j=0;j3-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; i3; i+) for(j=0;j3;j+) printf(“%4d”,sij); printf(“n”);change(s,1);for(i=0; i3; i+) for(j=0;j3;j+) printf(“%4d”,sij); printf(“n”);三、字符串处理1字符串处理函数2字符串匹配定位3字符串的插入、删除4算法应用加密、解密统计单词个数(统计数的个数)第七章 指针一、指针概念 & *例1、2003年春选择第27题若有声明语句”char ch=a, *pc=&ch;”,以下语句有语法错误的是( )A (*pc)+;B ch+=-a+A;C toupper(ch)=ch;D ch+;二、指针对数组的访问1一维数组 int aN,*p; p=a;对ai元素的引用:下标法 ai pi 地址法 *(a+i) *(p+i)对数组元素的遍历 (1)for(i-0;iN;i+) ai pi (2)for(i-0;iN;i+) *(a+i) *(p+i) (3)for(p=a;pa+N;p+) *p2二维数组 int aMN,*p,*pp;行指针: a a+1列指针: *a *(a+1)*a+1*(a+1)+1 a0 a1a0+1a1+1 元素: a12 *(a1+2)*(*(a+1)+2)p=*a; p=a0; pp=a;3int (*p)N; 与 int *pN;例1、2003年秋选择第27题若有声明“int a5, *b=a, (*c)3, *d3;”,则在以下表达式中有语法错误的是( )A a0=0 B b0=0C c0=0 D d0=0三、指针处理字符串例1.、2003年春填空第10题以下程序运行时输出第一行是_,第二行是_。#include 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;istrlen(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);例2、2003年春填空第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 #include 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; in; i+) k=_; c=strk; while(k+m_) strk=strk+m; k=_; _=c; 例3 2004年秋填空第16题以下程序中函数strmerge的功能是:合并a和b两个有序的字母字符串(字典序)而产生一个新的字符串,在合并的过程中删除重复出现的字符,合并后的字符串仍然保持原序并保存到c指向的数组中,函数返回在合并过程中删除的字符个数。main函数中输出合并后的字符串“copy”以及在合并过程中删除的字符个数3。#include 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(aiaj) 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);例4 2004年秋填空第6题以下程序运行时输出结果是_。#include main() char *s, *s1=”Here”; s=s1; while(*s1) s1+; printf(“%dn”,s1-s); 例5 2004年秋填空第11题以下程序运行时输出结果的第一行是_,第二行是_。#include #include void process(char *s1, char *s2, char *s3, int d) int i=0,j=0,len1=strlen(s1), len2=strlen(2),len3=0; while(ilen1&jlen2) if(d=1&s1is2j) s3len3+=s1i+; else s3len3+=s2j+; s3len3=0;if(ilen1) 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);例6 2005年秋填空第11题以下程序运行时输出结果的第一行为_,第二行为_。#include #include int process(char *s1,char *s2, char *s3) int i=0, j=0, len1=strlen(s1), len2=strlen(s2), len3=0; for(i=0; ilen1; i+) for(j=0; 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); 例7 2005年春填空第17题以下程序中函数str_count的功能是:统计字符串s2在字符串s1中出现的次数并得到第一次出现的位置。子串出现的次数通过指针型形参变量返回给调用函数,函数返回值为子串第一次出现的位置下标。Main函数中输出这些信息。#include #include 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; jlen2; 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);第八章 函数一、库函数二、函数参数实参到形参单向传递 值传递 地址传递例1 2004年秋填空第8题 void swap(int *x, int *y) int t; t=*x; *x=*y; *y=temp; void SWAP( int x, int y) swap(&x,&y); main() int a=10,b=20; SWAP(a,b); printf(“%d,%dn”, a,b);三、返回值 return只能带回一个值四、变量作用域和生命期作用域:局部变量、全局变量生命期:动态存储变量、静态存储变量例1 2004年春填空题第9题以下程序运行时输出结果的第一行是_,第二行是_。int c;void f1(int x, int *sum) static int y; x+; y+; c=c+y; *sum=(x+y)/c;main() int a,b=100; for(a=0;a2;a+) f1(a,&b); printf(“%d%d%d n”,a,b,c); 例2 2004年秋填空题第9题以下程序运行时输出结果为:_。#include void num() extern int x,y; int a=15,b=10; x=a-b; y=a+b;int x,y;main()int a=7,b=5;x=a+b; y=a-b; num(); printf(“%d,%dn”,x,y);例3 2005年春填写题第7题以下程序运行时输出结果为:_。#include int func(int a) static int c=1; c*=a; return c;void main() int b=1,i; for(i=2; i4; i+) b=b+func(i); printf(“n %d”,b);五、递归算法:阶乘例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);程序输出结果是_。例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);程序运行时输出的第一行是_,第二行是_,最后一行是_。例3 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; k12; k+) printf(“%d”,ak);void sort(int *x, int n)int j,t; if(n=1) return; for(j=1; j1)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; j5; j+) printf(“%d”,aj); printf(“n”; rev(a,3); for(j=0; j5; j+) printf(“%d”,aj);例5 2002年秋填空题第11题main() int a33,i,j; numlist(&a00,9); for(i=0; i3; i+) for(j=0; j3; j+) printf(“%d,”, aij); printf(“n”); numlist(int *p, int n) int i; for(i=0; in; i+) pi=num(i);num(int n) if(n=0) return 1; return num(n-1)*2+1;程序运行时输出的第一行是_。六 函数指针 int *p(); 与 int (*p)();第九章 构造数据类型一、结构体例1 2004年秋填空题第18题以下程序统计结构数组pu中grade的每一个分值档次的人数,若程序正确,输出结果应为:grade numbers of person2 21 23 1#include typedef struct int id; int grade; STUD;void main() _ pu5=18,2,19,2,17,1,21,1,22,3,*p; int i, gd5, ct5=0, tmp, count; count=1; gd0=pu0.grade; ct0=1; for(p=pu+1; ppu+5; p+) tmp=_; for(i=0; i=count) gdcount=tmp; ctcount=1; count+; else _; printf(“grade numbers of person”);for(i=0; icount; i+) printf(“n %2d%10d”, gdi, cti);printf(“n”);例2 05年春填空第18题按grade的值从大到小用选择法排序。#include_ struct int id;int grade;STUD;void main()STUD pu10=1,4,2,9,3,1,4,5,5,3,6,2,7,8,8,6,9,5,10,2,temp;int I,j,k;for(I=0;I9;I+) k=_ _; for(j=I+1;j10;j+) if(_) k=j; if(k!=I) temp=puI; puI=puk; puk=temp; for(I=0;Id; pn=pk; while(_!=0) pj=pk-next;if(_d; pm=pk; pn=pj; pk=pj;xk+=pn-d;if(_) pm-next=pn-next;else head=pn-next;free(pn);_;例2 2004年春填空第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;例3 2004年秋填空第13题以下程序运行时输出结果的第一行是_,第二行是_,第三行是_。#include #include 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=NU

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论