最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

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

来源:动视网 责编:小OO 时间:2025-09-26 05:17:37
文档

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

江苏省计算机等级考试(二级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+ymain(){inta=15,b=10,c=20,d=5;printf(“%d\\n”,
推荐度:
导读江苏省计算机等级考试(二级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+ymain(){inta=15,b=10,c=20,d=5;printf(“%d\\n”,
江苏省计算机等级考试(二级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);

}

}

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; jif(_______)

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

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%10;

else return func(x/100)*10+x%10;

}

main()

{ printf(“The result is : %ld \\n”,func(1325)); }

程序运行结果是 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(“%2d”,a[i]);

}

void fun(int *p1, int *p2)

{ int t;

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

程序运行结果是 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; jprintf(“\\n”);

}

}

答案: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; }

}

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()

{ int s[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”);

}

}

输出结果: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(_______d; pm=pk; pn=pj; }

pk=pj;

}

x[k++]=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

#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==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);

}

答案:3 1,3 1,3,5

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

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

#include

#include

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(“%d\\n”,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

int convert(char s1[],char s2[])

{ int i=0,j,s;

char tab[8][4]={“000”,”001”,”010”,”011”,”100”,”101”,”110”,”111”};

for(i=0,j=0; s1[i]!=’\\0’; i++,j=j+3) 

strcpy(&s2[j],tab[s1[i]-‘0’]);

for(i=0,s=0;ireturn s;

}

main()

{ char ss1[]=”15”,ss2[80]; int y;

y=convert(ss1,ss2); printf(“%d\\n%s”,y,ss2);

}

分析:本程序将八进制数字组成的字符串ss1转换成二进制字符串和十进制数。

答案:13 001101

(2) 2003年春填空第12题(P17-12)

函数loop(s,m,n,str)的功能是:对字符串str中,从下标为s的字符开始的所有间隔为m的字符进行循环左移,即:str[s]←s[s+m], str[s+m]←s[s+3m], str[s+2m]←s[s+3m],…, str[s+(k-1)m]←s[s+km], str[s+km]←s[s](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 buf[81];

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{k=________; c=str[k];

while(k+m<________)

{ str[k]=str[k+m]; k=________; }

__________=c;

}

}

答案:s len k+m str[k]

(3) 2004年秋填空第16题(P40-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(a[i]!=’\\0’&&__________)

{if(a[i]==b[j]) {t=a[i]; i++; __________; }

else if(a[i]else t=b[j++];

if(t!=c[k-1]) ________=t;

}

while(a[i])

if(a[i]!=c[k-1] c[k++]=a[i++];

else i++;

while(b[j])

if(b[j]!=c[k-1] c[k++]=b[j++];

else j++;

c[k]=’\\0’;

return _________;

}

main()

{static char s1[10]=””,s2[10]=”oppy”,s3[20]; 

int n;

n=strmerge(s1,s2,s3);

puts(s3);

printf(“%d”,n);

}

答案:a[j]!=’\\0’ j++ c[k++] i+j-k

(4) 2004年秋填空第6题(P49-6)

以下程序运行时输出结果是________。

#include

main()

{ char *s, *s1=”Here”;

s=s1;

while(*s1) s1++;

printf(“%d\\n”,s1-s);

}

分析:本程序是求指针s1所指向的字符串的长度。答案:4

(5) 2004年秋填空第11题(P50-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(i{if(d==1&&s1[i]s2[j])

s3[len3++]=s2[i++];

else

s3[len3++]=s2[j++];

}

void main()

{char s1[]=”bl”,s2[]=”el”,s3[]=”lb”,s4[]=”le”,s[20];

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

#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; i{ for(j=0; jif(s1[i]==s2[i]) break;

if(j>=len2) s3[len3++]=s1[i];

}

s3[len3]=’\\0’;

return len1-len3;

}

void main()

{ char s1[]=”bilker”, s2[]=”lr”,s3[20];

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

#include

int str_count(char s1[], char s2[], int *count)

{ int i=0,j=0, flag=0, len1, len2, pos=0, ct=0;

char tmp[100];

len1=strlen(s1); len2=strlen(s2);

while(i<=len1-len2)

{for(j=0; jtmp[j]=s1[i+j]; 

tmp[j]=’\\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

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题(P69-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)); }

答案:j七、穷举法

(1) 2004年春填空题第14题(P39-14)

如果一个两位整数是质数,将组成它的两个数字交换位置后形成的整数仍为质数,则称这样的数为绝对质数。例如,13就是一个绝对质数。以下程序用于找出所有两位绝对质数。

#include

int a_prime(int n)

{ int j,k,m[2];

m[0]=n;

m[1]=________;

for(j=0; j<2; j++)

for(k=m[j]/2; k>1; k--)

if(__________) return 0;

return 1;

}

main()

{ int i;

for(i=10;I<100;I++) if(a_prime(i)) printf(“%d”,i);

}

答案:n/10+n%10*10 m[j]%k==0

(2) 2004年秋填空题第16题(P54-16)

定理:对于任意一个正整数都可以找到至少一串连续奇数,它们的和等于该正整数的立方。例如,33=27=7+9+11,43==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; i{ 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<__________; p+=2) printf(“%ld+”,p);

printf(“%ld”,p);

break;

}

}

if(i>=k/2) printf(“\\n Error!”);

}

}

答案:sum(3) 2005年春填空题第16题(P69-16)

以下程序的功能是:寻找并输出11至999之间所有的整数m,满足条件m、m2、m3均为回文数(所谓回文数,是指其各位数字左右对称的整数。例如,121、12321都是回文数)。

#include

int f(long n)

{ int i=0,j=0,a[10];

while(n!=0)

{ a[j++]=n%10;

n=_________;

}

j--;

while(________)

{ if(a[i]==a[j]) i++,j--;

else return 0;

}

return 1;

}

main()

{ long m;

for(m=11; m<1000; m++)

if(f(m)&&f(m*m)&&f(m*m*m))

printf(“m=%ld, m*m=%ld, m*m*m=%ld\\n”,m,m*m,m*m*m);

}

分析:函数f()主要完成的功能是:判断n是否是回文数,如果是返回1,否则返回0。算法实现方式:将整数n的各位数字存放到整型数组a[10]中,再对数组下标为0的元素与最后一个元素进行对比,如果相同,再对比下标为1的元素与倒数第二个元素是否相等,依次类推,如果全部相同,则为回文数。

答案:n/10 i八、静态变量/变量作用域

(1) 2004年春填空题第9题(P36-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;a<2;a++)

{ f1(a,&b); printf(“%d%d%d \\n”,a,b,c); }

}

答案:考点:静态变量。 0 2 1 1 1 3

(2) 2004年秋填空题第9题(P50-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,%d\\n”,x,y);

}

答案:本题考点:变量的作用域。 5,25

(3) 2005年春填写题第7题(P-7)

以下程序运行时输出结果为:__________。

#include

int func(int a)

{ static int c=1;

c*=a; return c;

}

void main()

{ int b=1,i;

for(i=2; i<4; i++) b=b+sunc(i);

printf(“\\n %d”,b);

}

答案:考点:静态变量。9

九、方程求根

(1)2004年秋(P53-14)二分法

#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))<1e-6) x=_________;

else

{ if(fo*f(m)>0) a=m;

else b=m;

x=root(__________);

}

return x;

}

main()

{ printf(“\\n One root is %lf \\n”,root(1,4)); }

第一个空填:m ;第二个空填:a,b

(2)2005年春(P68-14)牛顿迭代法

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

第一个空填:x ;第二个空填:x-f(x)/f1(x)

十、查找、排序

(1) 2003年春填空题第15题(P19-15)

本题考点:选择排序和结构体应用。

以下程序对一组点坐标(x,y)按升序进行排序。要求:先按x的值排序,若x的值相同,则按y的值排序。排序算法为选择法。

#include

#define N 5

typedef struct

{ int x,y; }POINT;

void point_sort(_____ *x, int n)

{ POINT t;

int i,j,k;

for(i=0; i{ __________;

for(j=______; jif((x[k].x)>(x[j].x)) k=j;

else if(________&&x[k].y>x[j].y) k=j;

if(k!=I) t=x[i], x[i]=x[k], x[k]=t;

}

}

main()

{ POINT a[N]={0};

int i=0;

while(i{ scanf(“%d%d”, &a[i].x, &a[i].y); i++; }

point_sort(a,N);

for(i =0; i printf(“\\n %d, %d”, a[i].x, a[i].y);

}

答案:k=i i+1 x[k].x==x[j].x

(2) 2005年春填空题第18题(P71-18)

本题考点:选择排序和结构体应用。

以下程序按结构成员grade的值从大到小对结构数组pu的全部元素进行排序,并输出经过排序后的pu数组全部元素的值。排序算法为选择法。

#include

_________ struct {

int id; 

int grade;

}STUD;

void main()

{ STUD pu[10]={{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; i <9; i++)

{ k=_________;

for(j= i +1; j<10; j++)

if(_________) k=j;

if(k!=i)

{ temp=pu[i]; pu[i]=pu[k]; pu[k]=temp; }

}

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

printf(“\\n %2d: %d”, pu[i].id, pu[i].grade);

printf(“\\n”);

}

答案: i pu[j].grad>pu[k].grade

十一、结构体应用

(1) 2004年秋填空题第18题(P55-18)

以下程序统计结构数组pu中grade的每一个分值档次的人数,若程序正确,输出结果应为:

grade numbers of person

2 2

1 2

3 1

#include

typedef struct {

int id;

int grade;

}STUD;

void main()

{ _________ pu[5]={{18,2},{19,2},{17,1},{21,1},{22,3}},*p;

int i, gd[5], ct[5]={0}, tmp, count;

count=1;

gd[0]=pu[0].grade;

ct[0]=1;

for(p=pu+1; p{ tmp=_________;

for(i=0; if(gd[i]==tmp) break;

if(i>=count)

{ gd[count]=tmp;

ct[count]=1;

count++;

}

else

___________;

}

printf(“grade numbers of person”);

for(i=0; iprintf(“\\n”);

}

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

下次可能考。

例如:用复化梯形法求定积分

即a=0,b=1,f(x)=e-x。

C程序如下:

#include

#include

main()

{ int n,k;

double a=0.0,b=1.0,h,T,p,x;

printf("Please input n:");

scanf("%d",&n); /*输入等分数*/

h=(b-a)/n;

T=h*(exp(-a)+exp(-b))/2; /*用梯形公式计算积分近似值*/

p=0.0;

for(k=1;k{x=a+k*h; p=p+exp(-x); }

T=T+p*h; /*将积分近似值与修正值之作为复化梯形公式求得的积分值*/

printf("T=%f\\n",T);

}

在程序执行时,提示

Please input n:

此时要求从键盘输入等分数n,如果输入100,则输出结果为

T=0.632126

如果输入10,则输出结果为 :         T=0.6327

文档

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

江苏省计算机等级考试(二级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+ymain(){inta=15,b=10,c=20,d=5;printf(“%d\\n”,
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top