计算机C语言试卷含答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
自信考试 诚信做人
哈尔滨工业大学(威海)2011/2012学年春季学期
C 语言程序设计 笔试试题(A 卷)
题号 一
二
三
四
五
六
笔试(70%) 综合 (30%) 总分
分数
1. 笔试卷面总分100分,取卷面成绩的70%计入总分;
2. 综合成绩为平时成绩(10%)和实验成绩(20%)之和,占总分的30%;
3. 答题时禁止拆开试卷钉,试卷背面即为草稿纸;
4. 答题时间120分钟。
一、单项选择题。
请把答案填入下面框中,
不允许出框线。
(本题16分,每小题1分)
题号 1 2 3 4 5 6 7 8 答案 题号 9 10 11 12 13 14 15 16 答案
1.有以下定义:int a; long b; double x,y;则下列正确的是( )。
A) a%(int)(x-y) B) a=x!=y C) (a*y)%b D) y=x+y=x
2. 以下C 语言标识符中,不合法的是( )。
A) _2 B) a_b C) a--b D) AaBc
3. C 语言允许函数类型默认定义,此时该函数值隐含的类型是( )。
A) float B) int C) long D) double
4. 若有定义 int (*p)[3];则下列说法正确的是( )。
A) 定义了基类型为int 的三个指针变量
B) 定义了一个名为 *pt 、具有三个元素的整型数值
C) 定义了一个名为pt 的指针变量,它可以指向每行有三个整数元素的二维数组
D) 定义了基类型为int 的具有三个元素的整型数组
号
学
名
姓
注意行为规范 遵守考试纪律
自信考试诚信做人
5.有以下程序
#include <stdio.h>
main()
{
int a=1,b=0;
if(!a)
b++;
else if(a==0)
if(a) b+=2;
else b+=3;
printf("%d\n",b);
}
则程序输出( )。
A) 0 B) 1 C) 2 D) 3
6.有以下程序段
#include <stdio.h>
main()
{
int x=10;
while(x--);
printf("x=%d\n",x);
}
则最后的输出结果是:( )。
A) x=0B) x= -1 C) x=1 D)while构成无限循环
7.有以下程序:
#include <stdio.h>
int fun()
{
static int x=1;
x *= 2;
return x;
}
main( )
{
int i,s=1;
for(i=1;i<=2;i++) s=fun();
printf("%d\n ",s);
}
执行后的输出结果为( )。
A) 0 B) 1 C) 8 D) 4
8. #include <stdio.h>
void main( )
{
int k=011;
printf("%d\n",k++);
}
程序输出结果是( )
A)12 B) 11 C) 10 D) 9
9.以下程序段运行结果是( )。
enum weekday{aa,bb=2,cc,dd,ee}week=ee;
printf(“%d\n“,week);
A) 4 B) 5 C) ee D) 0
10.以下对C语言函数的描述中,不正确的是( )。
A)不同函数中可以使用相同名字变量B) 函数可以嵌套定义
C) 函数可以没有返回值D) 程序由函数组成
11.若有定义语句:double x[5]={1.0,2.0,3.0,4.0,5.0},*p=x;则错误引用x 数组元素的是( )。
A) *p B) *x C) *(p+1) D) x[5]
12.以下程序段运行结果是( )。
int a=6;
printf(“%d\n“,a>>1);
A) 12 B) 3 C) 6 D) 1
13.若有定义语句:double x,y,*px,*py;执行了px=&x;py=&y;之后,正确的输入语句是( )。
A) scanf(“%lf%lf”,x,y); B) scanf(“%lf,%lf”,px,py);
C) scanf(“%f%f”, &x, &y); D) scanf(“%f%f”,x,y);
14.以下程序运行结果是( )。
char str[10 ]=“abc“;
printf(“%d, %d \n“,strlen(str),sizeof(str));
A)6,3 B) 3,3 C) 10,10 D) 3,10
15.以下程序段运行结果是( )。
#define f(x) x*x*x
main( )
{
int a=1,b,c;
b=f(a+1);c=f((a+1));
printf("%d,%d\n",b,c);
}
A) 4,8 B) 8,4 C) 8,8 D) 4,4
16.有以下程序:
#include <stdio.h>
main()
{
FILE *f;
f=fopen("fa.txt","w");
fprintf(f,"day");
fclose(f);
}
若文本文件fa.txt中原有内容为:hello,则运行以上程序后,文件fa.txt 中的内容为( )。
A)day B) helloday C) daylo D)dayhello
二、填空题。
请按序号把答案填入下面框中,
不允许出框线。
(本题20分,每空2分)
题号答案题号答案
1 6
2 7
3 8
4 9
5 10
1.以下fun函数功能是在N行M列的整型二维数组中,选出一个最大
值作为函数值返回。
int fun(int a[N][M])
{
int i,j,row=0,col=0;
for(i=0;i<N;i++)
for(j=0;j<M;j++)
if(a[i][j]>a[row][col])
{
row=i;
col=j;
}
return( 【1】);
}
2.以下程序的功能是:将值为三位正整数的变量x中的数值按照个位、
十位,百位的顺序拆分输出。
main()
{
int x=123;
printf("%d-%d-%d\n", 【2】,x/10%10,x/100);
}
3.下列程序运行时,若输入23he45a<回车>,输出结果是【3】
#include <stdio.h>
main()
{
char a=0,ch;
while((ch=getchar())!='\n')
{
if(a%2!=0&&(ch>='a'&&ch<='z'))
ch=ch-'a'+'A';
a++;
putchar(ch);
}
printf("\n");
}
4.以下程序的功能是,通过函数fun输入字符并统计输入字符个数。
用
字符$作为输入结束标志。
#include <stdio.h>
long 【4】;/*函数声明语句*/
main()
{
long n;
n=fun();
printf("n=%ld\n",n);
}
long fun()
{
long m;
for(m=0;getchar()!='$'; 【5】);
return m;
}
5.有以下程序段,且变量已正确定义和赋值
for(s=1.0,k=1;k<=n;k++)
s=s+1.0/(k*(k+1));
printf("s=%f\n\n",s);
请填空,是下面程序段的功能与之完全相同
s=1.0;k=1;
while( 【6】)
{
s=s+1.0/(k*(k+1));
【7】;
}
6.以下函数的功能是求两个整数的最大公约数。
fun(int m,int n)
{
int i=1,t;
for(;i<=m&&i<=n;i++)
if( 【8】)
t=i;
return(t);
}
7.以下程序将三个struct node型变量链接成一个链表,并在while循
环中输出链表节点数据域中的数据。
struct node
{
int data;
struct node *next;
}
main()
{
struct node a,b,c,*p,*q;
a.data=10;
b.data=20;
c.data=30;
p=&a;
a.next=&b;
b.next=&c;
c.next= NULL;
q=p;
while(p)
{
printf("%d,",p->data);
【9】;
}
printf("\n");
}
8.以下程序的功能是:删除字符串中所有的空格。
main()
{
char s[20]="how are you!";
int i,j;
for(i=j=0;s[i]!='\0';i++)
if(s[i]!=' ')
{
s[j]=s[i];
j++;
}
s[j]= 【10】;
}
三、请把下列程序运行结果填入答案框中,不允
许出框线,用“↙”表示回车。
(本题24分,每小题3分)题号 1 2 3 4 5 6 7 8
答案
1. main()
{
int i,j,a[ ][2]={1,2,3,4};
for(i=0;i<2;i++)
for(j=i;j<2;j++)
自信考试诚信做人
printf("%d",a[i][j]);
printf("\n");
}
2.main()
{
char ch[ ]="453cd34";
int i,s=0;
for(i=0;ch[i]>'0'&& ch[i]<'9';i+=2)
s=10*s+ ch[i]-'0';
printf("%d\n",s);
}
3.long fib(int n)
{
if(n>2)
return(fib(n-1)+fib(n-2));
else return(2);
}
void main()
{
printf("%d\n",fib(4));
}
4. union example{
struct
{ int x;
int y;
}in;
int a;
int b;
}e;
main( )
{
e.a=2;e.b=1;
e.in.x=e.a+e.b
自信考试诚信做人
e.in.y=e.a*e.b;
printf(“%d\n”,e.in.y);
}
5. struct NODE
{
int k;
struct NODE *link;
};
void main()
{
struct NODE m[3],*p=m,*q=m+2;
int i=0;
while(p!=q)
{
p->k=++i;
p++;
q->k=i++;
q--;
}
q->k=i;
for(i=0;i<3;i++)
printf("%d",m[i].k);
printf("\n");
}
6. main()
{
int j,a[]={1,3,5,7,9},*p=a+3;
for(j=3;j;j--)
{
switch(j)
{
case 1:
case 2:printf("%d",*(p++));
case 3:printf("%d",*(--p));
}
}
}
7.main()
{
int x;
for(x=1;x<=50;x++)
if(x%2==0)
if(x%3==0)
if(x%5==0)
printf("%d",x);
}
8.main()
{
int a,b;
for(a=1,b=1;a<=50;a++)
{
if(b>8)
break;
if(b%3==1)
{
b+=3;
continue;
}
b-=5;
}
printf("%d\n",a);
}
四、根据功能描述改正程序中的错误。
不得增行或删行,不得更改程序结构。
(本题10分)
1. 下列给定程序中,函数fun的功能是:实现两个整数的交换。
例如给
a和b分别输入60和65,输出为:a=65 b=60。
(本小题6分) #include <conio.h>
#include <stdio.h>
void fun (int a,b)
{ int t;
t=b;b=a;a=t;
}
main()
{ int a,b;
printf("Enter a,b:");
scanf("%d%d",a, b);
fun(&a,&b);
printf("a=%d b=%dn",a,b);
}
2. 下述代码定义了一个结构体STRU,用其声明指针变量*s,并完成对这
个指针变量的赋值、输出的任务。
请指出下列程序的错误,并予以更正。
(本小题4分)
struct STRU
{ int num;
char name[20];
float score;
struct STRU *p1;
};
main()
{
STRU *s=(struct STRU *)malloc(sizeof(struct STRU));
s.num=123;
s->name=”zhang”;
s->score=61.5;
printf(“num=%d,name=%s,score=%f”,s->num,s->name, s->score);
}
五、请用标准程序流程图描述下列问题的算法
(本题10分)
依次从键盘输入30个学生的《计算机实用基础》成绩,请分别统计不及格的人数和优秀(成绩不小于90)的人数,并打印输出统计结果。
六、编程题(本题共20分,仅做两道)
(考查课做前两道,考试课做后两道)
1. 编写一个函数fun(char *s),函数的功能是把字符串中的内容逆置。
例如,字符串中原有的内容为abcdefg,则调用该函数后,字符串中的内容为gfedcba。
(本小题10分)
#include <stdio.h>
#include <string.h>
void fun(char *s)
{
}
void main()
{
char a[40]=”abcdefg”; fun(a); puts(a);//应输出” gfedcba”
}
2. 编制一个fun函数,用来判定输入的整数是否是素数,如果是素数返回1,不是素数返回0,输入2以下的整数返回-1。
(本小题10分)
#include <stdio.h>
#include <string.h>
int fun(int n)//判定素数
{
}
void main()
{
int a=3427; int i=fun(a);
switch(i)
{
case 1:printf("%d是素数\n",a);break;
case 0:printf("%d不是素数\n",a);break;
case -1:printf("输入错误\n",a);
}
}
3.下面给出的代码创建了一个具有10个结点的链表,请编程完成下列要求,循环输出结点内容,销毁链表释放空间。
不要修改已给出的代码。
(本小题10分)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct link
{ char s[20];
struct link *next;
};
void main()
{ struct link *head,*tail,*t_node;
int i=0;char temp[20];
for(i=0;i<10;i++)
{ sprintf(temp,"这是第%d个结点",i);//向temp数组写入组合数据t_node=(struct link*)malloc(sizeof(struct link));
t_node->next=NULL; strcpy(t_node->s,temp);
if(i==0)
{ head=t_node; tail=t_node; }
else
{ tail->next=t_node; tail=t_node; }
}
//请在下面添加代码,循环输出链表内容,依次释放空间
}
哈尔滨工业大学(威海)2011/2012学年春季学期
C 语言程序设计 笔试试题(A 卷)
一、单项选择题。
请把答案填入下面框中,
不允许出框线。
(本题16分,每小题1分)
题号 1 2 3 4 5 6 7 8 答案 A C B C A B D D 题号 9 10 11 12 13 14 15 16 答案
B
B
D
B
B
D
A
A
1.有以下定义:int a; long b; double x,y;则下列正确的是( A )。
A) a%(int)(x-y) B) a=x!=y C) (a*y)%b D) y=x+y=x
2. 以下C 语言标识符中,不合法的是( C )。
A) _2 B) a_b C) a--b D) AaBc
3. C 语言允许函数类型默认定义,此时该函数值隐含的类型是( B )。
A) float B) int C) long D) double
4. 若有定义 int (*p)[3];则下列说法正确的是( C )。
A) 定义了基类型为int 的三个指针变量
B) 定义了一个名为 *pt 、具有三个元素的整型数值
C) 定义了一个名为pt 的指针变量,它可以指向每行有三个整数元素的二维数组
D) 定义了基类型为int 的具有三个元素的整型数组
5. 有以下程序
#include <stdio.h>
main() {
int a=1,b=0; if(!a) b++;
else if(a==0) if(a) b+=2;
注意行为规范 遵守考试纪律
else b+=3;
printf("%d\n",b);
}
则程序输出( A)。
A) 0 B) 1 C) 2 D) 3
6.有以下程序段
#include <stdio.h>
main()
{
int x=10;
while(x--);
printf("x=%d\n",x);
}
则最后的输出结果是:( B)。
A) x=0B) x= -1 C) x=1 D)while构成无限循环
7.有以下程序:
#include <stdio.h>
int fun()
{
static int x=1;
x *= 2;
return x;
}
main( )
{
int i,s=1;
for(i=1;i<=2;i++) s=fun();
printf("%d\n ",s);
}
执行后的输出结果为( D)。
A) 0 B) 1 C) 8 D) 4
8. #include <stdio.h>
void main( )
{
int k=011;
printf("%d\n",k++);
}
程序输出结果是( D )
A)12 B) 11 C) 10 D) 9
9.以下程序段运行结果是( B)。
enum weekday{aa,bb=2,cc,dd,ee}week=ee;
printf(“%d\n“,week);
A) 4 B) 5 C) ee D) 0
10.以下对C语言函数的描述中,不正确的是( B )。
A)不同函数中可以使用相同名字变量B) 函数可以嵌套定义
C) 函数可以没有返回值D) 程序由函数组成
11.若有定义语句:double x[5]={1.0,2.0,3.0,4.0,5.0},*p=x;则错误引用x 数组元素的是( D )。
A) *p B) *x C) *(p+1) D) x[5]
12.以下程序段运行结果是( B )。
int a=6;
printf(“%d\n“,a>>1);
A) 12 B) 3 C) 6 D) 1
13.若有定义语句:double x,y,*px,*py;执行了px=&x;py=&y;之后,正确的输入语句是( B )。
A) scanf(“%lf%lf”,x,y); B) scanf(“%lf,%lf”,px,py);
C) scanf(“%f%f”,&x,&y); D) scanf(“%f%f”,x,y);
14.以下程序运行结果是( D )。
char str[ ]=“abc“;
printf(“%d, %d \n“,strlen(str),sizeof(str));
A)6,3 B) 3,3 C) 10,10 D) 3,10
15.以下程序段运行结果是( A )。
#define f(x) x*x*x
main( )
{
int a=1,b,c;
b=f(a+1);c=f((a+1));
printf("%d,%d\n",b,c);
}
A) 4,8 B) 8,4 C) 8,8 D) 4,4
16.有以下程序:
#include <stdio.h>
main()
{
FILE *f;
f=fopen("fa.txt","w");
fprintf(f,"day");
fclose(f);
}
若文本文件fa.txt中原有内容为:hello,则运行以上程序后,文件fa.txt 中的内容为( A )。
A)day B) helloday C) daylo D)dayhello
二、填空题。
请按序号把答案填入下面框中,
不允许出框线。
(本题20分,每空2分)
题号答案题号答案
1 a[row][col] 6 k<=n
2 x%10或x%100%10 7 k++
3 23hE45a8 m%i==0&&n%i==0
4 fun() 9 p=p->next
5 m++ 10 s[i]或’\0’
1.以下fun函数功能是在N行M列的整型二维数组中,选出一个最大
值作为函数值返回。
int fun(int a[N][M])
{
int i,j,row=0,col=0;
for(i=0;i<N;i++)
for(j=0;j<M;j++)
if(a[i][j]>a[row][col])
{
row=i;
col=j;
}
return( 【1】);
}
2.以下程序的功能是:将值为三位正整数的变量x中的数值按照个位、
十位,百位的顺序拆分输出。
main()
{
int x=123;
printf("%d-%d-%d\n", 【2】,x/10%10,x/100);
}
3.下列程序运行时,若输入23he45a<回车>,输出结果是【3】
#include <stdio.h>
main()
{
char a=0,ch;
while((ch=getchar())!='\n')
{
if(a%2!=0&&(ch>='a'&&ch<='z'))
ch=ch-'a'+'A';
a++;
putchar(ch);
}
printf("\n");
}
4.以下程序的功能是,通过函数fun输入字符并统计输入字符个数。
用
字符$作为输入结束标志。
#include <stdio.h>
long 【4】;/*函数声明语句*/ main()
{
long n;
n=fun();
printf("n=%ld\n",n);
}
long fun()
{
long m;
for(m=0;getchar()!='$'; 【5】); return m;
}
5.有以下程序段,且变量已正确定义和赋值
for(s=1.0,k=1;k<=n;k++)
s=s+1.0/(k*(k+1));
printf("s=%f\n\n",s);
请填空,是下面程序段的功能与之完全相同
s=1.0;k=1;
while( 【6】)
{
s=s+1.0/(k*(k+1));
【7】;
}
printf("s=%f\n\n",s);
6.以下函数的功能是求两个整数的最大公约数。
fun(int m,int n)
{
int i=1,t;
for(;i<=m&&i<=n;i++)
if( 【8】)
t=i;
return(t);
}
7.以下程序将三个struct node型变量链接成一个链表,并在while循
环中输出链表节点数据域中的数据。
struct node
{
int data;
struct node *next;
}
main()
{
struct node a,b,c,*p,*q;
a.data=10;
b.data=20;
c.data=30;
p=&a;
a.next=&b;
b.next=&c;
c.next= NULL;
q=p;
while(p)
{
printf("%d,",p->data);
【9】;
}
printf("\n");
}
8.以下程序的功能是:删除字符串中所有的空格。
main()
{
char s[20]="how are you!";
int i,j;
for(i=j=0;s[i]!='\0';i++)
if(s[i]!=' ')
{
s[j]=s[i];
j++;
}
s[j]= 【10】;
}
三、请把下列程序运行结果填入答案框中,不允
许出框线,用“↙”表示回车。
(本题24分,每小题3分)
题号 1 2 3 4 5 6 7 8
答案124 43 6 4 121 55555 30 4
1. main()
{
int i,j,a[ ][2]={1,2,3,4};
for(i=0;i<2;i++)
for(j=i;j<2;j++)
printf("%d",a[i][j]);
printf("\n");
}
2.main()
{
char ch[ ]="453cd34";
int i,s=0;
for(i=0;ch[i]>'0'&& ch[i]<'9';i+=2)
s=10*s+ ch[i]-'0';
printf("%d\n",s);
}
3.long fib(int n)
{
if(n>2)
自信考试诚信做人
return(fib(n-1)+fib(n-2));
else return(2);
}
void main()
{
printf("%d\n",fib(4));
}
4. union example{
struct
{ int x;
int y;
}in;
int a;
int b;
}e;
main( )
{
e.a=2;e.b=1;
e.in.x=e.a+e.b
e.in.y=e.a*e.b;
printf(“%d\n”,e.in.y);
}
5. struct NODE
{
int k;
struct NODE *link;
};
void main()
{
struct NODE m[3],*p=m,*q=m+2;
int i=0;
while(p!=q)
{
自信考试诚信做人
p->k=++i;
p++;
q->k=i++;
q--;
}
q->k=i;
for(i=0;i<3;i++)
printf("%d",m[i].k);
printf("\n");
}
6. main()
{
int j,a[]={1,3,5,7,9},*p=a+3;
for(j=3;j;j--)
{
switch(j)
{
case 1:
case 2:printf("%d",*(p++));
case 3:printf("%d",*(--p));
}
}
}
7.main()
{
int x;
for(x=1;x<=50;x++)
if(x%2==0)
if(x%3==0)
if(x%5==0)
printf("%d",x);
}
8.main()
{
int a,b;
for(a=1,b=1;a<=50;a++)
{
if(b>8)
break;
if(b%3==1)
{
b+=3;
continue;
}
b-=5;
}
printf("%d\n",a);
}
四、根据功能描述改正程序中的错误。
不得增行或删行,不得更改程序结构。
(本题10分)
1.下列给定程序中,函数fun的功能是:实现两个整数的交换。
例如给
a和b分别输入60和65,输出为:a=65b=60。
(本小题6分)
#include<conio.h>
#include<stdio.h>
void fun(int a,b)
{
int t;
t=b;b=a;a=t;
}
main()
{
int a,b;
printf("Enter a,b:");
scanf("%d%d",a, b);
fun(&a,&b);
printf("a=%d b=%dn",a,b);
}
答案:
scanf("%d%d",a, b); 改为:scanf("%d%d",&a,&b);------2分
fun(int a,b) 改为:fun(int*a,int *b) ------2分
t=b; b=a; a=t; 改为:t=*b;*b=*a;*a=t; ------2分2.下述代码定义了一个结构体STRU,用其声明指针变量*s,并完成对这个指针变量的赋值、输出的任务。
请指出下列程序的错误,并予以更正(本小题4分)
struct STRU
{ int num;
char name[20];
float score;
struct STRU *p1;
};
main()
{
STRU *s=(struct STRU *)malloc(sizeof(struct STRU));
s.num=123;
s->name=”zhang”;
s->score=61.5;
printf(“num=%d,name=%s,score=%f”,s->num,s->name, s->score); }
答案:
s.num=123; 改为:s->num或(*s).sum------2分
s->name=”zhang”;改为:strcpy(s->name,”zhang”)------2分
五、请用标准程序流程图描述下列问题的算法
(本题10分)
依次从键盘输入30个学生的《计算机实用基础》成绩,请分别统计不及格的人数和优秀(成绩不小于90)的人数,并打印输出统计结果。
第六题 编程题 1、 int i; int n=strlen(s); char temp; for(i=0;i<n/2;i++) { temp=s[i]; s[i]=s[n-i-1]; s[n-i-1]=temp; } 2、
int i;
if(n<2)return -1; for(i=2;i<n;i++)
1分
自信考试 诚信做人 用心用情 服务社会 31
{
if(n%i==0) return 0; } return 1;
3、 t_node=head;
while(t_node!=NULL) {
puts(t_node->s); head=t_node->next; free(t_node); t_node=head; }。