2009年秋季C等考试卷及参考答案
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
void main()
{ longi,sum=0;
for(i=1;i<4;i++) sum+=f(i);
printf(“%ld”, sum);
}
11、以下程序运算时输出到屏幕的结果中第一行是,第二行是。
#include<stdio.h>
#define f(x,y) y=x*x
void g(int x, int y)
}
void main()
{ FACT s,s1={8,4},s2={6,5};
s=fun1(s1,s2);
printf(“%d,%d\n”,s.z,s.m);
s=fun2(s);
printf(“%d,%d”,s.z,s.m);
}
完善程序
15、以下程序求方程的一个近似根。root函数采用二分法计算并返回方程f(x)=0在[a,b]内的一个近似根,main函数调用root函数求方程cos(x)=0在[0,3.14]内的一个近似根。试完善程序以达到要求的功能。
{ FACT t3;
t3.m=t1.m*t2.m;
t3.z=t1.z*t2.m+t2.z*t1.m;
return t3;
}
FACT fun2(FACT t)
{ int m,n,k;
m=t.m;
n=t.z;
while(k=m%n)
{ m=n; n=k; }
t.m=t.m/n ;
t.z=t.z/n ;
return t;
A.a&&b B.a<=b C.a||b&&c D.!(!c||1)
5、已知有声明”long x,y;”且x中整数的十进制表示有n位数字(4<n<10=,若要求去掉整数x十进制表示中的最高位,用剩下的数字组成一个新的整数并保存到y中,则以下表达式中能正确实现这一功能的是()
A.y=x/(10*(n-1)) B.y=x%(10*(n-1))
A.实参和其对应的形参占用同一个存储单元
B.形参不占用存储单元
C.同名的实参和形参占用同一存储单元
D.形参和实参占用不同的存储单元
10、已知有声明”int i, a[10], *p=a;”,现需要将1~10保存到a[0]~a[9]中,以下程序段中不能实现这一功能的是()
A.for (i=0;i<10;i++) a[i]=i+1; B.for(i=0;i<10;i++) p[i]=i+1;
n=a[i+1]*a[i+1];
c=;
for(j=m+1;j<n;j++)
if() c++;
if(c>=4)
printf(“\n %d*%d-%d*%d: %d”,a[i],a[i],a[i+1],a[i+1],c);
else {printf(“Error”);exit(0);}
}
}
17、fun函数的功能是删除s指向的链表中满足以下条件的结点:该结点的编号值是奇数且存放的字母ASCII编码值也为奇数(提示:a的ASCII编码是97);将删除的结点添加到t所指向的链表尾部。试完善fun函数以达到要求的功能。
#include<stdio.h>
#include<math.h>
double root(double a, double b, double (*f)(double))
{ double x,y;
if()
{ printf(“There is no root between %f and %f”, a,b);
{ int a[]={1,2,3,4,5,6,7};
printf(“%d\n”,fun(a,2));
}
10、以下程序运算时输出到屏幕的结果是。
#include<stdio.h>
long f(int n)
{ static long s;
if(n==1) return s=2;
else return ++s;
if(*p==’’)
i=0;
else
if(i==0)
{ n++;i=1; }
printf(“%d\n”,n);
}
14、以下程序运算时输出到屏幕的结果中第一行是,第二行是。
#include<stdio.h>
typedef struct fact
{ int m,z;
}FACT;
FACT fun1(FACT t1, FACT t2)
}
p=;
}
if(t!=NULL)
;
return s;
}
参考答案
一、选择题
1、C 2、C 3、B 4、D 5、C6、C 7、B 8、A9、D 10、D
二、填空题
1、!
2、8解析:sizeof指数据或变量占的内存(字节),C编译系统将浮点型常量作为双精度来处理
fclose(fp);
fp=fopen(“d2.dat”,“r”);
fscanf(fp,“%d%d”, &k,&n);
printf(“%d,%d\n”, k,n);
fclose(fp);
}
7、以下程序运算时输出到屏幕的结果是。
#include<stdio.h>
void main()
{ int i=1,m=0;
void main()
{ FILE *fp;
int k,n,a[6]={1,2,3,4,5,6};
fp=fopen(“d2.dat”,“w”);
fprintf(fp,”%d%d%d\n”, a[0],a[1],a[2]);
fprintf(fp,”%d%d%d\n”, a[3],a[4],a[5]);
3、已知int类型数据在内存中存储长度为2个字节,以下语句中能正确输出整数32768的是()
A.printf(“%d”,32768);B.printf(“%ld”,32768);
C.printf(“%f”,32768); D.printf(“%c”,32768);
4、已知有声明”int a=3,b=4,c=5;”,以下表达式中值为0的是()
printf(“\n”);
}
}
13、以下程序运算时输出到屏幕的结果是。
#include<stdio.h>
#include<string.h>
void main()
{ int i=0,n=0;char s[80],*p;
strcpy(s,”It is a book.”);
for(p=s;*p!=’\0’;p++)
for(j=0;j<3;j++)
for(k=0;k<2;k++)
for(i=0;i<2-k;i++)
if(a[i][j]>a[i+1][j])
t=a[i][j],a[i][j]=a[i+1][j],a[i+1][j]=t;
for(i=0;i<3;i++)
{ for(j=0;j<3;j++)
printf(“%3d”,a[i][j]);
{ y=x*x; }
void main()
{ int a=2,b=0,c=2,d=0;
f(a,b);
g(c,d);
printf(“%d\n%d”,b,d);
}
12、以下程序运算时输出到屏幕的结果中第一行是,第二行是。
#include<stdio.h>
void main()
{ int a[3][3]={{3,8,12},{4,7,10},{2,5,11}},i,j,k,t;
8、已知有声明”char s[80];”,若需要将键盘输入的一个不含空格的字符串保存到s数组中,则下列语句中正确的是()
A.scanf(“%s”,s); B.scanf(“%s”, s[0]); C.s=gets(); D.s=getchar();
9、若函数调用时的实参为变量,则以下关于函数形参和实参的叙述中正确的是()
16、以下程序在3~50范围内验证:大于等于3的两个相邻素数的平方之间至少有4个素数。例如,3和5是相邻素数,32~52之间有素数11、13、17、19、23。试完善程序以达到要求的功能。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int prime(int n)
switch(i)
{ case 1:
case 2: m++;
case 3: m++;
}
printf(“%d”, m);
}
8、以下程序运算时输出到屏幕的结果中第一行是,第二行是。
#include<stdio.h>
void fun(int a[], int b[], int *x)
{ int i,j=0;
C.y=x%(long)pow(10,n-1) D.y=x%(10^(n-1))
6、已知有声明”long x,y;”,若要求编写一段程序实现“当x大于等于0时y取值1,否则y取值-1”,则以下程序段中错误的是()
A.if(x>=0)y=1;else y=-1;B.y=x>=0? 1:-1;
C.switch() D.switch(x-abs(x))
例如,若删除前的s链表为:
s
则删除厚的s链表为:
s
#include<stdio.h>
struct node
{ inti;/*存放结点的编号*/
char c; /*存放一个字母的ASCII编号*/
struct node *next;
};
struct node *t=NULL;
struct node *fun(struct node *s)
return 0;
}
do
{ x=;
y=f(x);
if(fabs(y)<1e-6||fabs(b-a)<1e-6) break;
if(<0) b=x;
else a=x;
}while(1);
return x;
}
void main()
{ printf(“\n x=%f”, root(0,3.14,));
}
{ case x>=0:y=1; break; { case 0:y=1; break;
default: y=-1; default: y=-1;
} }
7、已知有声明”int m[]={5,4,3,2,1}, i=0;”,下列对m数组元素的引用中,错误的是()
A.m[++i] B.m[5] C.m[2*2] D.m[m[4]]
{ struct node *p,*q; struct node *r;
p=q=s;
while(p!=NULL)
{ if(((p->i)%2)&&((p->c)%2))
{ if(s==p)
s=q=;
else
{;
q=p->next;
}
if(t==NULL)
t=r=p;
else
{ r->next=p; r=r->next; }
3、数学表达式 所对应的C语言表达式为。
4、若有以下声明:
char *p=”%d,%d\n”; int a=1,b=2;
则执行语句”printf(p,a,b);”时输出。
5、声明局部变量时若缺省存储类别,该变量的存储类别是。
阅读程序
6、以下程序运行时输出到屏幕的结果是。
#include<stdio.h>
C.i=1; while(p<a+10) *p++=i++; D.i=1; while(p<a+10) *a++=i++;
二、填空题
基本概念
1、C语言中有!、&&、||三个逻辑运算符,其中优先级高于算术运算符的是。
2、若有声明”int r=2;”,则执行语句”printf(“%d”, sizeof(2*3.14*r));”时输出。
printf(Байду номын сангаас%d\t”,b[i]);
printf(“\n%d”,x);
}
9、以下程序运算时输出到屏幕的结果是。
#include<stdio.h>
int fun(int *x,int n)
{ if(n==0) return x[0];
else return x[0]+fun(x+1,n-1);
}
void main()
2009年秋季C语言二级试卷及参考答案
一、选择题
1、以下叙述中正确的是()
A.C语言系统以函数为单位编译源程序
B.main函数必须放在程序开始
C.用户定义的函数可以被一个或多个函数调用任意多次
D.在一个函数体内可以定义另外一个函数
2、以下选项中,不能用作C语言标识符的是()
A.print B.FOR C.&a D._00
{ int i;
for(i=2;i<=sqrt(n);i++)
if()return 0;
return 1;
}
void main()
{ int i,j,k=0,m,n,c,a[30]={0};
for(i=3;i<50;i++)
if(prime(i));
for(i=0;i<k-1;i++)
{ m=a[i]*a[i];
for(i=0;a[i];i++)
{ if(i%2==0) continue;
if(a[i]>10)
b[j++]=a[i];
}
*x=j;
}
void main()
{ int a[10]={3,15,32,23,11,4,5,9}, b[10];
int i=0,x=0;
fun(a,b,&x);
for(i=0;i<x;i++)
void main()
{ longi,sum=0;
for(i=1;i<4;i++) sum+=f(i);
printf(“%ld”, sum);
}
11、以下程序运算时输出到屏幕的结果中第一行是,第二行是。
#include<stdio.h>
#define f(x,y) y=x*x
void g(int x, int y)
}
void main()
{ FACT s,s1={8,4},s2={6,5};
s=fun1(s1,s2);
printf(“%d,%d\n”,s.z,s.m);
s=fun2(s);
printf(“%d,%d”,s.z,s.m);
}
完善程序
15、以下程序求方程的一个近似根。root函数采用二分法计算并返回方程f(x)=0在[a,b]内的一个近似根,main函数调用root函数求方程cos(x)=0在[0,3.14]内的一个近似根。试完善程序以达到要求的功能。
{ FACT t3;
t3.m=t1.m*t2.m;
t3.z=t1.z*t2.m+t2.z*t1.m;
return t3;
}
FACT fun2(FACT t)
{ int m,n,k;
m=t.m;
n=t.z;
while(k=m%n)
{ m=n; n=k; }
t.m=t.m/n ;
t.z=t.z/n ;
return t;
A.a&&b B.a<=b C.a||b&&c D.!(!c||1)
5、已知有声明”long x,y;”且x中整数的十进制表示有n位数字(4<n<10=,若要求去掉整数x十进制表示中的最高位,用剩下的数字组成一个新的整数并保存到y中,则以下表达式中能正确实现这一功能的是()
A.y=x/(10*(n-1)) B.y=x%(10*(n-1))
A.实参和其对应的形参占用同一个存储单元
B.形参不占用存储单元
C.同名的实参和形参占用同一存储单元
D.形参和实参占用不同的存储单元
10、已知有声明”int i, a[10], *p=a;”,现需要将1~10保存到a[0]~a[9]中,以下程序段中不能实现这一功能的是()
A.for (i=0;i<10;i++) a[i]=i+1; B.for(i=0;i<10;i++) p[i]=i+1;
n=a[i+1]*a[i+1];
c=;
for(j=m+1;j<n;j++)
if() c++;
if(c>=4)
printf(“\n %d*%d-%d*%d: %d”,a[i],a[i],a[i+1],a[i+1],c);
else {printf(“Error”);exit(0);}
}
}
17、fun函数的功能是删除s指向的链表中满足以下条件的结点:该结点的编号值是奇数且存放的字母ASCII编码值也为奇数(提示:a的ASCII编码是97);将删除的结点添加到t所指向的链表尾部。试完善fun函数以达到要求的功能。
#include<stdio.h>
#include<math.h>
double root(double a, double b, double (*f)(double))
{ double x,y;
if()
{ printf(“There is no root between %f and %f”, a,b);
{ int a[]={1,2,3,4,5,6,7};
printf(“%d\n”,fun(a,2));
}
10、以下程序运算时输出到屏幕的结果是。
#include<stdio.h>
long f(int n)
{ static long s;
if(n==1) return s=2;
else return ++s;
if(*p==’’)
i=0;
else
if(i==0)
{ n++;i=1; }
printf(“%d\n”,n);
}
14、以下程序运算时输出到屏幕的结果中第一行是,第二行是。
#include<stdio.h>
typedef struct fact
{ int m,z;
}FACT;
FACT fun1(FACT t1, FACT t2)
}
p=;
}
if(t!=NULL)
;
return s;
}
参考答案
一、选择题
1、C 2、C 3、B 4、D 5、C6、C 7、B 8、A9、D 10、D
二、填空题
1、!
2、8解析:sizeof指数据或变量占的内存(字节),C编译系统将浮点型常量作为双精度来处理
fclose(fp);
fp=fopen(“d2.dat”,“r”);
fscanf(fp,“%d%d”, &k,&n);
printf(“%d,%d\n”, k,n);
fclose(fp);
}
7、以下程序运算时输出到屏幕的结果是。
#include<stdio.h>
void main()
{ int i=1,m=0;
void main()
{ FILE *fp;
int k,n,a[6]={1,2,3,4,5,6};
fp=fopen(“d2.dat”,“w”);
fprintf(fp,”%d%d%d\n”, a[0],a[1],a[2]);
fprintf(fp,”%d%d%d\n”, a[3],a[4],a[5]);
3、已知int类型数据在内存中存储长度为2个字节,以下语句中能正确输出整数32768的是()
A.printf(“%d”,32768);B.printf(“%ld”,32768);
C.printf(“%f”,32768); D.printf(“%c”,32768);
4、已知有声明”int a=3,b=4,c=5;”,以下表达式中值为0的是()
printf(“\n”);
}
}
13、以下程序运算时输出到屏幕的结果是。
#include<stdio.h>
#include<string.h>
void main()
{ int i=0,n=0;char s[80],*p;
strcpy(s,”It is a book.”);
for(p=s;*p!=’\0’;p++)
for(j=0;j<3;j++)
for(k=0;k<2;k++)
for(i=0;i<2-k;i++)
if(a[i][j]>a[i+1][j])
t=a[i][j],a[i][j]=a[i+1][j],a[i+1][j]=t;
for(i=0;i<3;i++)
{ for(j=0;j<3;j++)
printf(“%3d”,a[i][j]);
{ y=x*x; }
void main()
{ int a=2,b=0,c=2,d=0;
f(a,b);
g(c,d);
printf(“%d\n%d”,b,d);
}
12、以下程序运算时输出到屏幕的结果中第一行是,第二行是。
#include<stdio.h>
void main()
{ int a[3][3]={{3,8,12},{4,7,10},{2,5,11}},i,j,k,t;
8、已知有声明”char s[80];”,若需要将键盘输入的一个不含空格的字符串保存到s数组中,则下列语句中正确的是()
A.scanf(“%s”,s); B.scanf(“%s”, s[0]); C.s=gets(); D.s=getchar();
9、若函数调用时的实参为变量,则以下关于函数形参和实参的叙述中正确的是()
16、以下程序在3~50范围内验证:大于等于3的两个相邻素数的平方之间至少有4个素数。例如,3和5是相邻素数,32~52之间有素数11、13、17、19、23。试完善程序以达到要求的功能。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int prime(int n)
switch(i)
{ case 1:
case 2: m++;
case 3: m++;
}
printf(“%d”, m);
}
8、以下程序运算时输出到屏幕的结果中第一行是,第二行是。
#include<stdio.h>
void fun(int a[], int b[], int *x)
{ int i,j=0;
C.y=x%(long)pow(10,n-1) D.y=x%(10^(n-1))
6、已知有声明”long x,y;”,若要求编写一段程序实现“当x大于等于0时y取值1,否则y取值-1”,则以下程序段中错误的是()
A.if(x>=0)y=1;else y=-1;B.y=x>=0? 1:-1;
C.switch() D.switch(x-abs(x))
例如,若删除前的s链表为:
s
则删除厚的s链表为:
s
#include<stdio.h>
struct node
{ inti;/*存放结点的编号*/
char c; /*存放一个字母的ASCII编号*/
struct node *next;
};
struct node *t=NULL;
struct node *fun(struct node *s)
return 0;
}
do
{ x=;
y=f(x);
if(fabs(y)<1e-6||fabs(b-a)<1e-6) break;
if(<0) b=x;
else a=x;
}while(1);
return x;
}
void main()
{ printf(“\n x=%f”, root(0,3.14,));
}
{ case x>=0:y=1; break; { case 0:y=1; break;
default: y=-1; default: y=-1;
} }
7、已知有声明”int m[]={5,4,3,2,1}, i=0;”,下列对m数组元素的引用中,错误的是()
A.m[++i] B.m[5] C.m[2*2] D.m[m[4]]
{ struct node *p,*q; struct node *r;
p=q=s;
while(p!=NULL)
{ if(((p->i)%2)&&((p->c)%2))
{ if(s==p)
s=q=;
else
{;
q=p->next;
}
if(t==NULL)
t=r=p;
else
{ r->next=p; r=r->next; }
3、数学表达式 所对应的C语言表达式为。
4、若有以下声明:
char *p=”%d,%d\n”; int a=1,b=2;
则执行语句”printf(p,a,b);”时输出。
5、声明局部变量时若缺省存储类别,该变量的存储类别是。
阅读程序
6、以下程序运行时输出到屏幕的结果是。
#include<stdio.h>
C.i=1; while(p<a+10) *p++=i++; D.i=1; while(p<a+10) *a++=i++;
二、填空题
基本概念
1、C语言中有!、&&、||三个逻辑运算符,其中优先级高于算术运算符的是。
2、若有声明”int r=2;”,则执行语句”printf(“%d”, sizeof(2*3.14*r));”时输出。
printf(Байду номын сангаас%d\t”,b[i]);
printf(“\n%d”,x);
}
9、以下程序运算时输出到屏幕的结果是。
#include<stdio.h>
int fun(int *x,int n)
{ if(n==0) return x[0];
else return x[0]+fun(x+1,n-1);
}
void main()
2009年秋季C语言二级试卷及参考答案
一、选择题
1、以下叙述中正确的是()
A.C语言系统以函数为单位编译源程序
B.main函数必须放在程序开始
C.用户定义的函数可以被一个或多个函数调用任意多次
D.在一个函数体内可以定义另外一个函数
2、以下选项中,不能用作C语言标识符的是()
A.print B.FOR C.&a D._00
{ int i;
for(i=2;i<=sqrt(n);i++)
if()return 0;
return 1;
}
void main()
{ int i,j,k=0,m,n,c,a[30]={0};
for(i=3;i<50;i++)
if(prime(i));
for(i=0;i<k-1;i++)
{ m=a[i]*a[i];
for(i=0;a[i];i++)
{ if(i%2==0) continue;
if(a[i]>10)
b[j++]=a[i];
}
*x=j;
}
void main()
{ int a[10]={3,15,32,23,11,4,5,9}, b[10];
int i=0,x=0;
fun(a,b,&x);
for(i=0;i<x;i++)