2011信息工程学院C语言2期末试卷(A)
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
杭州电子科技大学信息工程学院考试试卷(A)卷
考试课程
计算机应用基础与程序设计(C语言)2
考试日期
2011年
6月13日
成绩
课程号
教师号
任课教师姓名
考生姓名
学号
年级
专业
说明:请将全部答案都书写在第5页答题纸上,否则答题无效。
试题一、判断题(共10分)(用‘√’或‘×’标注对错)
1.void类型的函数一定无形参。×
2.函数f中有语句return(x,y);则函数f可以返回x、y这两个值。×
3.函数f可以用f(f(x))形式调用,这种调用形式是递归调用。×
4.数组元素的下标必须是整数,不能用实数。√
5.若有定义语句“int a[10];”则a[10-9/2]是合法的数组元素。√
6.若有定义“int a[5][6];”,则在数组元素a[2][4]前有16个元素。。√
6.设有定义语句char s[]="abcDE";,则s[5]的值是(C)。
A.未知字符B.'0'C.'\0'D.'E'
7.当调用函数时,实参是一个数组名,则向函数传送的是(B)。
A.数组的长度B.数组的首地址
C.数组每一个元素的地址D.数组每个元素中的值
8.能对一维数组正确初始化的语句是(C)。
A.int a[5]={0,1,2,3,4,5};B.int a[5]={};
10.下面程序段的输出结果是(D)。
int k,a[3][3]={1,2,3,4,5,6,7,8,9};
for (k=0;k<3;k++) printf(“%d ”,a[k][k]);
A.1 4 7B.3 6 9C.3 5 7D.1 5 9
11.有数组定义语句“charstr[80];”,则正确的输入语句为(C)。
试题二、单选题,根据题目从A、B、C、D中,选择一个正确的选项(共20分)
1.C语言传值调用的特点是(C)。
A.实参必须是变量
B.实参传给形参变量的数据是地址
C.在函数中形参变量值改变后,不改变实参变量的值
D.在函数中形参变量值改变后,实参变量的值随之也改变
2.如果在函数中定义一个变量,有关该变量作用域正确的是(A)。
2.若有定义int a[5][6];则元素a[3][5]之后的那一个元素是(①a[4][0])、元素a[3][0]之前的那一个元素是(②a[2][5])。
3.若有定义“inta=1,b=2,*p=&a;”,执行语句*p*=10;p=&b;*p+=5;后a的值是(10)。
4.已有定义:int a[5]={1,3,5,7,9},*p=a,m;,执行语句m=(*p)++;后,m的值是(①1),a[0]的值是(②2)。
15.若有说明:int i,j=1,*p=&i;则与i=j;等价的语句是(B)。
A.i=*p;B.*p=jC.i=&j;D.p=&j
16.对于以下定义,(D)是正确的赋值。
int *p[10],a[10];
A.p=aB.p=&a[0]C.*p=a[0]D.p[0]=a
17.设有下列定义char s[ ]="12345", *p=s;则下列表达式中错误的是(D)。
5.设有定义语句“struct {int x;inty;} d[10]={{1,2},{3,4},{5,6}};”,则语句:
printf(“%d\n”,d[1].x+d[1].y+d[2].x+d[2].y);的输出是(18)。
试题四、程序阅读题(共16分)
说明:阅读下列程序,在每小题提供的程序运行结果若干可选答案中,挑选一个正确答案。
y:3 9y:9 3y:3 9y:9 3
D3.#include <stdio.h>
void f(int m,int n, int *px,int *py);
void main ()
{
int x = 1, y = 1;
f(2011,160, &x, &y);
printf ("%d#%d#", x, y);
A1.#include <stdio.h>
int f(int x);
void main()
{
int x=2,i;
for(i=0;i<3; i++)
printf("%3d",f(x));
}
int f(int x)
{
int y=2;
staticint z=2;
x++;
y++;
z++;
return(x+y+z);
A.*(p+1)B.*(s+2)C.p="ABC "D.s="ABC "
18.设有如下定义:
int a[]={1,3,5,7,9};
int *p;
则下列程序段的输出结果为(A)。
p=a;
*(p+2)+=2;
printf (“%d,%d\n”,*p,*(p+2));
A.1,7B.1,5C.5,9D.3,7
break;
}
}
int prime(int m)
{
int k,n;
if(m == 1) return 0;
n = (int)sqrt(m);
for(k = 2; k <= n; k++)
____(2)_B___;
____(3)A____;
}
(1) A.prime(i)B.prime(i) && prime(k)
C.prime(k) && prime(i-k)D.prime(k)
(2) A.if(m%k != 0) return 0B.if(m%k == 0) return 0
C.if(m%k == 0) return 1D.if(m%k != 0) return 1
else{
printf("%3d", n%10);
print(n/10);
return ; }
}
A.63 4 2 9B.9 2 4 3 6
C.2 3 4 6 9D.9 6 4 3 2
5.以下正确的函数定义是(D)。
A.double fun(int x, int y)B.double fun(int x,y)
A.只在该函数中有效B.在该文件中有效
C.在本程序中有效D.为非法变量
3.C语言总是从(A)函数开始执行。
A.mainB.处于最前的C.处于最后的D.随机选一个
4.根据下面函数print的定义,选出调用函数print(63429)的值是(B)。
void print(int n)
{ if (n==0) return ;
};
flag = m%4==0 && m% 100!= 0 || m%400==0;
for ( k=1; n>tab[flag][k]; k++)
n = n - tab [flag][k];
*px = k;
*py = n;
}
A.1#1#B.2011#160#C.6#8#D.6#9#
B4. void sort(int a[],int n)
{ z=x+y ; return z ; }{ int z ; return z ;}
C.fun (x,y)D.double fun (int x, int y)
{ int x, y ; double z ;{ double z ;
z=x+y ; return z ; }z=x/y;return z ; }
7.若有定义语句“int a[10],i=2;”,则&a[i]与a+i等价。√
8.数组定义语句“charc[]="Hello";”与“charc[]={‘H’,’e’,’l’,’l’,’o’};”等价。×
9.语句“0.若fp已正确定义并指向某文件,当未遇到该文件结束标志时函数feof(fp)的值为0。√
}
A.9 10 11B.9 11 13C.9 9 9D.9 12 15
C2.#include<stdio.h>
void swap1(int *a)
{
int t;
t=*a; *a=*(a+1); *(a+1)=t;
}
void swap2(int a,int b)
{
int t;
t=a; a=b; b=t;
试题五、程序填空题(共18分)
说明:阅读下列程序说明和相应程序,在每小题提供的若干可选答案中,挑选一个正确答案。
1.【程序说明】验证哥德巴赫猜想:任何一个大于6的偶数均可表示为两个素数之和。例如6=3+3,8=3+5,…,18=7+11。将6~100之间的每个偶数都表示成两个素数之和。函数prime(m)用于判断m是否为素数。素数就是只能被1和自身整除的正整数,1不是素数,2是素数。
A.fp=fopen("c:\\data.txt","r");B.fp=fopen("c:\data.txt","r");
C.fp=fopen("c:\\data.txt","w");D.fp=fopen("c:\data.txt","w");
试题三、按题目的意思,写出正确的内容(共10分)
1.在C程序中,若对函数类型未加说明,则函数的隐含类型为(int)。
for(i=0;i<10;i++){
x[i]=m*i;
m=-m;
}
sort(x,10);
for(i=0;i<10;i++) printf("%3d",x[i]);
}
A.-8 -6 -4 -2 0 1 3 5 7 9B.8 6 4 2 0 -1 -3 -5 -7 -9
C.-9 -7 -5 -3 -1 0 2 4 6 8D.9 75 3 1 0 -2 -4 -6 -8
}
void f(int m,int n, int *px,int *py)
{
int k, flag;
int tab [2][13]= {
{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
{0, 31, 29, 31, 30, 31,30, 31, 31, 30, 31, 30, 31 },
19.对以下结构体变量example中成员x的引用正确的是(C)。
struct
{ int x;
int y;
}example,*p=&example;
A.(*p).example.xB.*p.xC.p->xD.p->example.x
20.以“只读”方式打开文本文件c:\data.txt,下列语句中哪一个是正确的(A)。
#include<stdio.h>
#include<math.h>
void main( )
{
int i, k;
int prime(int m);
for (i = 6; i <= 100; i = i+2 )
for(k = 3; k <= 50; k++)
if(____(1)C____){
printf("%d=%d+%d\n", i, k, i-k);
A.scanf("%s",*str);B.scanf("%s",&str);
C.gets(str);D.gets(str[80]);
12.下面程序段的输出结果是(A)。
char a[10]= "abcd";
char b[4]= "ABC";
strcat(a,b);
printf(“%s”,a);
A.abcdABCB.abcdC.ABCD.ABCabcd
C.int a[5]={10};D.int a[5]={1,……,5};
9.以下数组定义中错误的是(B)。
A.int x[][3]={0};B.int x[2][3]={{1,2},{3,4},{5,6}}
C.int x[][3]={{1,2,3},{4,5,6}};D.int x[2][3]={1,2,3,4,5,6};
}
void main()
{
int x[2]={3,9};
int y[2]={3,9};
swap1(x);
swap2(y[0],y[1]);
printf("x: %d %d\n", x[0],x[1]);
printf("y: %d %d\n", y[0],y[1]);
}
A.x:3 9B. x:3 9C.x:9 3D.x:9 3
{
int i,j,k,t;
for(i=0;i<n-1;i++){
k=i;
for(j=i+1;j<n;j++)
if(a[k]<a[j]) k=j;
t=a[i];
a[i]=a[k];
a[k]=t;
}
}
#include <stdio.h>
void main()
{
int x[10];
int i,m=1;
void sort(int a[],int n);
13.若有以下宏定义:
#define N 2
#define Y(n)(N+1)*n
则执行语句Z=2*Y(N+5);后的结果为:(C)
A.语句有错误B.Z=42C.Z=17D.Z无定值
14.下列程序段的运行结果为(D)。
char s[]="ab\0cd"; puts(s);
A.abcdB.ab cdC.ab0D.ab
考试课程
计算机应用基础与程序设计(C语言)2
考试日期
2011年
6月13日
成绩
课程号
教师号
任课教师姓名
考生姓名
学号
年级
专业
说明:请将全部答案都书写在第5页答题纸上,否则答题无效。
试题一、判断题(共10分)(用‘√’或‘×’标注对错)
1.void类型的函数一定无形参。×
2.函数f中有语句return(x,y);则函数f可以返回x、y这两个值。×
3.函数f可以用f(f(x))形式调用,这种调用形式是递归调用。×
4.数组元素的下标必须是整数,不能用实数。√
5.若有定义语句“int a[10];”则a[10-9/2]是合法的数组元素。√
6.若有定义“int a[5][6];”,则在数组元素a[2][4]前有16个元素。。√
6.设有定义语句char s[]="abcDE";,则s[5]的值是(C)。
A.未知字符B.'0'C.'\0'D.'E'
7.当调用函数时,实参是一个数组名,则向函数传送的是(B)。
A.数组的长度B.数组的首地址
C.数组每一个元素的地址D.数组每个元素中的值
8.能对一维数组正确初始化的语句是(C)。
A.int a[5]={0,1,2,3,4,5};B.int a[5]={};
10.下面程序段的输出结果是(D)。
int k,a[3][3]={1,2,3,4,5,6,7,8,9};
for (k=0;k<3;k++) printf(“%d ”,a[k][k]);
A.1 4 7B.3 6 9C.3 5 7D.1 5 9
11.有数组定义语句“charstr[80];”,则正确的输入语句为(C)。
试题二、单选题,根据题目从A、B、C、D中,选择一个正确的选项(共20分)
1.C语言传值调用的特点是(C)。
A.实参必须是变量
B.实参传给形参变量的数据是地址
C.在函数中形参变量值改变后,不改变实参变量的值
D.在函数中形参变量值改变后,实参变量的值随之也改变
2.如果在函数中定义一个变量,有关该变量作用域正确的是(A)。
2.若有定义int a[5][6];则元素a[3][5]之后的那一个元素是(①a[4][0])、元素a[3][0]之前的那一个元素是(②a[2][5])。
3.若有定义“inta=1,b=2,*p=&a;”,执行语句*p*=10;p=&b;*p+=5;后a的值是(10)。
4.已有定义:int a[5]={1,3,5,7,9},*p=a,m;,执行语句m=(*p)++;后,m的值是(①1),a[0]的值是(②2)。
15.若有说明:int i,j=1,*p=&i;则与i=j;等价的语句是(B)。
A.i=*p;B.*p=jC.i=&j;D.p=&j
16.对于以下定义,(D)是正确的赋值。
int *p[10],a[10];
A.p=aB.p=&a[0]C.*p=a[0]D.p[0]=a
17.设有下列定义char s[ ]="12345", *p=s;则下列表达式中错误的是(D)。
5.设有定义语句“struct {int x;inty;} d[10]={{1,2},{3,4},{5,6}};”,则语句:
printf(“%d\n”,d[1].x+d[1].y+d[2].x+d[2].y);的输出是(18)。
试题四、程序阅读题(共16分)
说明:阅读下列程序,在每小题提供的程序运行结果若干可选答案中,挑选一个正确答案。
y:3 9y:9 3y:3 9y:9 3
D3.#include <stdio.h>
void f(int m,int n, int *px,int *py);
void main ()
{
int x = 1, y = 1;
f(2011,160, &x, &y);
printf ("%d#%d#", x, y);
A1.#include <stdio.h>
int f(int x);
void main()
{
int x=2,i;
for(i=0;i<3; i++)
printf("%3d",f(x));
}
int f(int x)
{
int y=2;
staticint z=2;
x++;
y++;
z++;
return(x+y+z);
A.*(p+1)B.*(s+2)C.p="ABC "D.s="ABC "
18.设有如下定义:
int a[]={1,3,5,7,9};
int *p;
则下列程序段的输出结果为(A)。
p=a;
*(p+2)+=2;
printf (“%d,%d\n”,*p,*(p+2));
A.1,7B.1,5C.5,9D.3,7
break;
}
}
int prime(int m)
{
int k,n;
if(m == 1) return 0;
n = (int)sqrt(m);
for(k = 2; k <= n; k++)
____(2)_B___;
____(3)A____;
}
(1) A.prime(i)B.prime(i) && prime(k)
C.prime(k) && prime(i-k)D.prime(k)
(2) A.if(m%k != 0) return 0B.if(m%k == 0) return 0
C.if(m%k == 0) return 1D.if(m%k != 0) return 1
else{
printf("%3d", n%10);
print(n/10);
return ; }
}
A.63 4 2 9B.9 2 4 3 6
C.2 3 4 6 9D.9 6 4 3 2
5.以下正确的函数定义是(D)。
A.double fun(int x, int y)B.double fun(int x,y)
A.只在该函数中有效B.在该文件中有效
C.在本程序中有效D.为非法变量
3.C语言总是从(A)函数开始执行。
A.mainB.处于最前的C.处于最后的D.随机选一个
4.根据下面函数print的定义,选出调用函数print(63429)的值是(B)。
void print(int n)
{ if (n==0) return ;
};
flag = m%4==0 && m% 100!= 0 || m%400==0;
for ( k=1; n>tab[flag][k]; k++)
n = n - tab [flag][k];
*px = k;
*py = n;
}
A.1#1#B.2011#160#C.6#8#D.6#9#
B4. void sort(int a[],int n)
{ z=x+y ; return z ; }{ int z ; return z ;}
C.fun (x,y)D.double fun (int x, int y)
{ int x, y ; double z ;{ double z ;
z=x+y ; return z ; }z=x/y;return z ; }
7.若有定义语句“int a[10],i=2;”,则&a[i]与a+i等价。√
8.数组定义语句“charc[]="Hello";”与“charc[]={‘H’,’e’,’l’,’l’,’o’};”等价。×
9.语句“0.若fp已正确定义并指向某文件,当未遇到该文件结束标志时函数feof(fp)的值为0。√
}
A.9 10 11B.9 11 13C.9 9 9D.9 12 15
C2.#include<stdio.h>
void swap1(int *a)
{
int t;
t=*a; *a=*(a+1); *(a+1)=t;
}
void swap2(int a,int b)
{
int t;
t=a; a=b; b=t;
试题五、程序填空题(共18分)
说明:阅读下列程序说明和相应程序,在每小题提供的若干可选答案中,挑选一个正确答案。
1.【程序说明】验证哥德巴赫猜想:任何一个大于6的偶数均可表示为两个素数之和。例如6=3+3,8=3+5,…,18=7+11。将6~100之间的每个偶数都表示成两个素数之和。函数prime(m)用于判断m是否为素数。素数就是只能被1和自身整除的正整数,1不是素数,2是素数。
A.fp=fopen("c:\\data.txt","r");B.fp=fopen("c:\data.txt","r");
C.fp=fopen("c:\\data.txt","w");D.fp=fopen("c:\data.txt","w");
试题三、按题目的意思,写出正确的内容(共10分)
1.在C程序中,若对函数类型未加说明,则函数的隐含类型为(int)。
for(i=0;i<10;i++){
x[i]=m*i;
m=-m;
}
sort(x,10);
for(i=0;i<10;i++) printf("%3d",x[i]);
}
A.-8 -6 -4 -2 0 1 3 5 7 9B.8 6 4 2 0 -1 -3 -5 -7 -9
C.-9 -7 -5 -3 -1 0 2 4 6 8D.9 75 3 1 0 -2 -4 -6 -8
}
void f(int m,int n, int *px,int *py)
{
int k, flag;
int tab [2][13]= {
{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
{0, 31, 29, 31, 30, 31,30, 31, 31, 30, 31, 30, 31 },
19.对以下结构体变量example中成员x的引用正确的是(C)。
struct
{ int x;
int y;
}example,*p=&example;
A.(*p).example.xB.*p.xC.p->xD.p->example.x
20.以“只读”方式打开文本文件c:\data.txt,下列语句中哪一个是正确的(A)。
#include<stdio.h>
#include<math.h>
void main( )
{
int i, k;
int prime(int m);
for (i = 6; i <= 100; i = i+2 )
for(k = 3; k <= 50; k++)
if(____(1)C____){
printf("%d=%d+%d\n", i, k, i-k);
A.scanf("%s",*str);B.scanf("%s",&str);
C.gets(str);D.gets(str[80]);
12.下面程序段的输出结果是(A)。
char a[10]= "abcd";
char b[4]= "ABC";
strcat(a,b);
printf(“%s”,a);
A.abcdABCB.abcdC.ABCD.ABCabcd
C.int a[5]={10};D.int a[5]={1,……,5};
9.以下数组定义中错误的是(B)。
A.int x[][3]={0};B.int x[2][3]={{1,2},{3,4},{5,6}}
C.int x[][3]={{1,2,3},{4,5,6}};D.int x[2][3]={1,2,3,4,5,6};
}
void main()
{
int x[2]={3,9};
int y[2]={3,9};
swap1(x);
swap2(y[0],y[1]);
printf("x: %d %d\n", x[0],x[1]);
printf("y: %d %d\n", y[0],y[1]);
}
A.x:3 9B. x:3 9C.x:9 3D.x:9 3
{
int i,j,k,t;
for(i=0;i<n-1;i++){
k=i;
for(j=i+1;j<n;j++)
if(a[k]<a[j]) k=j;
t=a[i];
a[i]=a[k];
a[k]=t;
}
}
#include <stdio.h>
void main()
{
int x[10];
int i,m=1;
void sort(int a[],int n);
13.若有以下宏定义:
#define N 2
#define Y(n)(N+1)*n
则执行语句Z=2*Y(N+5);后的结果为:(C)
A.语句有错误B.Z=42C.Z=17D.Z无定值
14.下列程序段的运行结果为(D)。
char s[]="ab\0cd"; puts(s);
A.abcdB.ab cdC.ab0D.ab