发布时间 : 星期五 文章江苏省计算机等级考试(二级C语言)考点分析X更新完毕开始阅读bc66a84e767f5acfa1c7cd74
江苏省计算机等级考试(二级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
#define ADD(x,y) x+y main()
{int a=15,b=10,c=20,d=5;
printf(“%d\\n”,ADD(a,b)/ADD(c,d)); 上面程序输出结果为_________。
二、递归应用
(1) 2000年秋填空第5题 main()
{ int s, p[9]={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; else
{fun(n-1,&f1); fun(n-2, &f2);
*s=2*f1+f2+1; printf(“\\n%d,%d”,f1,f2); }
1
}
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 a[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]); }
void sort(int *x, int n) {int j,t;
if(n==1) return; for(j=1; j { t=x[0]; x[0]=x[j]; x[j]=t; } sort(x+1, ________); } 本题结合了冒泡排序法,第一个空填:a+4 ;第二个空填:x[0] (5) 2001年春填空第8题 以下程序运行时第一行输出________,第二行输出________。 void rev(int *p, int n) { int t; if(n>1) {t=p[0]; [0]=p[n-1]; p[n-1]=t; rev(p+1,n-2); } } main() { int j,a[5]={1,2,3,4,5}; rev(a+1,4); 2 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]); } 输出结果:15432 45132 (6) 2002年秋填空题第11题(P7-11) main() { int a[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, int n) { int i; for(i=0; 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; else return func(x/100)*10+x; } 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, a[6]={1,2,3,4,5,6}; fun(a,a+5); for(i=0; i<5; i++) printf(“-”,a[i]); } void fun(int *p1, int *p2) { int t; if(p1 { t=*p1; p1=*p2; *p2=t; fun(p1+=2, p2-=2); } 3 } 程序运行结果是 6 2 4 3 5 1 (9) 2004年春(P37-11) #include void f(int a[], int n, int x, int *c); main() { int a[10]={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(a[0]>=x) (*c)++; f(a+1,n-1,x,c); } 程序运行结果是 3 (10) 2004年秋(P52-14) 本例结合了二分法求方程的根。见“方程求根” (11) P68-14 本例结合了牛顿迭代法求方程的根。见“方程求根” 三、二维数组 (1) 2004年秋填空第12题(P51-12) 以下程序运行时输出结果的第一行是________,第二行是______,第三行是________。 #define N3 main() { int i,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 答案:1 2 4 3 5 7 6 8 9 (2) 2005年春填空第12题(P66-12) 以下程序运行时输出结果的第二行为______,第四行为______,第六行_______。 #include void change(int s[3][3], int d) { int i,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; } 4