春季试题.docx

上传人:b****1 文档编号:1887383 上传时间:2023-05-02 格式:DOCX 页数:26 大小:21.87KB
下载 相关 举报
春季试题.docx_第1页
第1页 / 共26页
春季试题.docx_第2页
第2页 / 共26页
春季试题.docx_第3页
第3页 / 共26页
春季试题.docx_第4页
第4页 / 共26页
春季试题.docx_第5页
第5页 / 共26页
春季试题.docx_第6页
第6页 / 共26页
春季试题.docx_第7页
第7页 / 共26页
春季试题.docx_第8页
第8页 / 共26页
春季试题.docx_第9页
第9页 / 共26页
春季试题.docx_第10页
第10页 / 共26页
春季试题.docx_第11页
第11页 / 共26页
春季试题.docx_第12页
第12页 / 共26页
春季试题.docx_第13页
第13页 / 共26页
春季试题.docx_第14页
第14页 / 共26页
春季试题.docx_第15页
第15页 / 共26页
春季试题.docx_第16页
第16页 / 共26页
春季试题.docx_第17页
第17页 / 共26页
春季试题.docx_第18页
第18页 / 共26页
春季试题.docx_第19页
第19页 / 共26页
春季试题.docx_第20页
第20页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

春季试题.docx

《春季试题.docx》由会员分享,可在线阅读,更多相关《春季试题.docx(26页珍藏版)》请在冰点文库上搜索。

春季试题.docx

春季试题

班号

姓名

哈工大2006/2007年春季学期

C语言试题

题号

创新实践分

卷面总分

分数

说明:

本试卷卷面满分为100分。

总成绩将按平时实验成绩和卷面笔试成绩各自所占比例折合后累加计算。

一、单项选择题:

(10分,每题2分)

1.以下对一维数组的定义中,正确的是:

A)#defineMAX5B)intMAX=5;

inta[MAX];inta[MAX];

C)intMAX;D)#defineMAX5;

Scanf(“%d”,&MAX);inta[MAX];

inta[MAX];

2.以下程序运行时输入8,则程序运行后t的值是:

main()

{intt;

scanf(“%d”,&t);

if(t-->=8)

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

else

printf(“%d\n”,t++) ;

}

A)9B)8C)7D)6

3.有以下程序段

main()

{inti=1,sum=0,n;

scanf(“%d”,&n);

do

{i+=2;

sum+=i ;

}while(i!

=n);

printf(„%d”,sum);

}

若使程序的输出值为8,则应该从键盘输入的n的值是:

A)1B)3C)5D)7

4.若有以下定义及语句:

structs1

{

chara[3];

intnum;

}t={‘a’,’b’,’c’,4},*p;

p=&t;

则输出值为c的语句是________。

A)printf(“%c\n”,p->t.a[2]);

B)printf(“%c\n”,(*p).a[2]);

C)printf(“%c\n”,p->a[3]);

D)printf(“%c\n”,(*p).t.a[2]);

5.C语言规定:

在一个源程序中,main函数的位置。

A)必须在程序的最开始

B)必须在系统调用的库函数的后面

C)可以任意

D)必须在程序的最后

 

二、写出下列程序的运行结果。

(10分,每题2分)

1.

#include

main()

{

inti,j;

for(i=1;i<=3;i++)

{for(j=i;j>=1;j--)

printf("* “);

printf("\n“);

}

}

运行结果是:

 

2.

#include

main()

{

inta,b,c;

scanf("%2d%2d%*2c%2d",&a,&b,&c);

printf("%d\n",a+b-c);

}

程序执行时从键盘输入:

54457766↙

运行结果是:

3.

#include

#include

main()

{

char*p=”abcde”,a[20]=”ABC”,*q=a;

p+=3;

printf(“%s\n”,strcat(q,p));

}

运行结果是:

4.

#include

intfun()

{

autointx=1;

staticinty=1;

x+=2;

y+=2;

returnx+y;

}

main()

{

inta,b;

a=fun();

b=fun();

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

}

运行结果是:

5.

#include

main()

{intk=0;

charc=’A’;

do

{switch(c++)

{case‘A’:

k++;break;

case‘B’:

k--;

case‘C’:

k+=2;break;

case‘D’:

k=k%2;continue;

case‘E’:

k=k*10;break;

default:

k=k/3;

}

k++;

}while(c<’G’);

printf(“k=%d\n”,k);

}

运行结果是:

 

三、阅读程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。

(10分,每空2分)

1.下面这个程序的功能是将字符串s中所有的字符c删除。

#include

main()

{

chars[80];

inti,j ;

printf("Pleaseenterstrings:

");

gets(s) ;

for(i=j=0;_______ ;i++)

{

if(s[i]!

=’c’)_______;

}

s[j]=’\0’;

puts(s);

}

2.以下程序的功能是输出二维数组中最大值所在行内最小元素的值。

#include

intfun(inta[4][5])

{

inti,j,m=0,n=0,min;

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

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

if(a[m][n]

{____;

______;

}

____________;

for(j=1;j<5;j++)

{

if(min>a[m][j])

min=a[m][j];

}

returnmin;

}

main()

{

inta[4][5]={{2,3,6,4,1},{25,54,23,28,26},

{7,9,15,20,35},{67,18,30,88,38}};

inti,j,min;

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

{

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

printf(“%3d”,a[i][j]);

printf(“\n”);

}

min=fun(a);

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

}

 

四、在下面给出的4个程序中,共有15处错误(包括语法错误和逻辑错误),请找出其中的错误,并改正之。

(30分,每找对1个错误,加1分,每修改正确1个错误,再加1分。

1.下面程序的功能是对a数组中的元素按从大到小的顺序排序。

#include

#defineN10;

main()

{

inta[N]={2,17,8,3,24,53,82,1,29,101};

inti,j,k,t;

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

{k=i;

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

if(a[j]

k=j;

if(k=i)

{

t=a[j];

a[j]=a[i];

a[i]=t;

}

}

}

2.下面程序的功能是交换变量a和b中的值。

#include

main()

{

inta,b,*p,*q,*t;

p=&a;

q=&b;

printf("请输入变量a和b的值:

");

scanf("%d%d",&p,&q);

*t=*p ;

*p=*q ;

*q=*t

printf("交换后a和b的值:

a=%db=%d\n",a,b);

}

3.假设某袋子中装有3个红球,5个白球,6个黑球,现从该袋子中任意取出8个球,下面程序的功能是输出这8个球中至少有一个白球的所有方案。

#include

main()

{inti,j,k;

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

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

{k=8-i-j;

if(0<=k<=6)

printf(“hong=%d\t,bai=%d\t,

hei=%d\t\n”,i,j,k);

}

}

4.以下程序有若干语法错误。

#include

structdate

{

inty;m;d;

}

structstu

{charn[10];

structdateb;

inta;

}s={“Wang”,{1980,11,11},30};

main()

{

printf(“%c,%d,%d\n”,s.n,s.d,s.a);

}

五、编程(40分)

1.打印如下图案。

(12分)

*****

*****

*****

*****

*****

2.输入8个整数放入一维数组w中,输出交换前的数组;找出其中最小和最大数,并将他们分别与数组中的第一个元素和最后一个元素交换位置;输出交换后的数组。

(15分)

3.不用标准库函数strcpy,自己编写一个函数MyStrcpy实现将两个字符串复制的功能,然后从键盘输入源字符串,并输出复制后的目的字符串。

(13分)

参考答案

一、单项选择题:

(10分,每题2分)

1.以下对一维数组的定义中,正确的是:

A。

A)#defineMAX5B)intMAX=5;

inta[MAX];inta[MAX];

C)intMAX;D)#defineMAX5;

Scanf(“%d”,&MAX);inta[MAX];

inta[MAX];

2.以下程序运行时输入8,则程序运行后t的值是:

D。

main()

{intt;

scanf(“%d”,&t);

if(t-->=8)

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

else

printf(“%d\n”,t++) ;

}

A)9B)8C)7D)6

3.有以下程序段

main()

{inti=1,sum=0,n;

scanf(“%d”,&n);

do

{i+=2;sum+=i ;

}while(i!

=n);

printf(„%d”,sum);

}

若使程序的输出值为8,则应该从键盘输入的n的值是:

C。

A)1B)3C)5D)7

4.若有以下定义及语句:

structs1

{

chara[3];

intnum;

}t={‘a’,’b’,’c’,4},*p;

p=&t;

则输出值为c的语句是___B_____。

A)printf(“%c\n”,p->t.a[2]);

B)printf(“%c\n”,(*p).a[2]);

C)printf(“%c\n”,p->a[3]);

D)printf(“%c\n”,(*p).t.a[2]);

5.C语言规定:

在一个源程序中,main函数的位置C。

A)必须在程序的最开始

B)必须在系统调用的库函数的后面

C)可以任意

D)必须在程序的最后

 

二、写出下列程序的运行结果。

(10分,每题2分)

1.

#include

main()

{

inti,j;

for(i=1 ;i<=3 ;i++)

{for(j=i ;j>=1 ;j--)printf("* “);

printf("\n“);

}

}

运行结果是:

*

**

***

2.

#include

main()

{

inta,b,c;

scanf("%2d%2d%*2c%2d",&a,&b,&c);

printf("%d\n",a+b-c);

}

程序执行时从键盘输入:

54457766↙

运行结果是:

33

3.

#include

main()

{

char*p=”abcde”,a[20]=”ABC”,*q=a;

p+=3;

printf(“%s\n”,strcat(q,p);

}

运行结果是:

ABCde

4.

#include

intfun()

{

autointx=1 ;

staticinty=1 ;

x+=2 ;y+=2 ;

returnx+y ;

}

main()

{

inta,b ;

a=fun() ;

b=fun() ;

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

}

运行结果是:

6,8

5.

#include

main()

{intk=0;

charc=’A’;

do

{switch(c++)

{case‘A’:

k++;break;

case‘B’:

k--;

case‘C’:

k+=2;break;

case‘D’:

k=k%2;continue;

case‘E’:

k=k*10;break;

default:

k=k/3;

}

k++;

}while(c<’G’);

printf(“k=%d\n”,k);

}

运行结果是:

k=4

三、阅读程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。

(10分,每空2分)

1.下面这个程序的功能是将字符串s中所有的字符c删除。

#include

main()

{

chars[80];

inti,j ;

printf("Pleaseenterstrings:

");

gets(s) ;

for(i=j=0;s[i] !

=’\0’;i++)

{

if(s[i]!

=’c’)s[j++]=s[i];

}

s[j]=’\0’;

puts(s);

}

2.以下程序的功能是输出二维数组中最大值所在行内最小元素的值。

#include

intfun(inta[4][5])

{inti,j,m=0,n=0,min;

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

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

if(a[m][n]

{m=i;

n=j;

}

min=a[m][0];

for(j=1;j<5;j++)

if(min>a[m][j])min=a[m][j];

returnmin;

}

main()

{inti,j,min;

inta[4][5]={{2,3,6,4,1},{25,54,23,28,26},

{7,9,15,20,35},{67,18,30,88,38}};

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

{for(j=0;j<5;j++)

printf(“%3d”,a[i][j]);

printf(“\n”);

}

min=fun(a);

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

}

四、在下面给出的4个程序中,共有15处错误(包括语法错误和逻辑错误),请找出其中的错误,并改正之。

(30分,每找对1个错误,加1分,每修改正确1个错误,再加1分。

1.下面程序的功能是对a数组中的元素按从大到小的顺序排序。

#include

#defineN10;错!

应为:

#defineN10

main()

{

inta[N]={2,17,8,3,24,53,82,1,29,101};

inti,j,k,t;

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

{k=i;

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

if(a[j]

错!

应为:

if(a[j]>a[k])

if(k=i)错!

应为:

if(k!

=i)

{

t=a[j];错!

应为:

t=a[k];

a[j]=a[i];错!

应为:

a[k]=a[i];

a[i]=t;}

}

}

2.下面程序的功能是交换变量a和b中的值。

#include

main()

{

inta,b,*p,*q,*t;错!

应为:

t

p=&a;

q=&b;

printf("请输入变量a和b的值:

");

scanf("%d%d",&p,&q);

错!

应为:

scanf("%d%d",p,q);

*t=*p ;错!

应为:

t=*p ;

*p=*q ;

*q=*t ;错!

应为:

*q=t ;

printf("交换后a和b的值:

a=%db=%d\n",a,b);

}

3.假设某袋子中装有3个红球,5个白球,6个黑球,现从该袋子中任意取出8个球,下面程序的功能是输出这8个球中至少有一个白球的所有方案。

#include

main()

{

inti,j,k;

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

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

错!

应为:

for(j=1;j<=5;j++)

{k=8-i-j;

if(0<=k<=6)错!

应为:

if(k>=0&&k<=6)

printf(“hong=%d\t,bai=%d\t,

hei=%d\t\n”,i,j,k);

}

}

4.以下程序有若干语法错误。

#include

structdate

{

inty;m;d;错!

应为:

inty,m,d;

}错!

应为:

};

structstu

{charn[10];

structdateb;

inta;

}s={“Wang”,{1980,11,11},30};

main()

{

printf(“%c,%d,%d\n”,s.n,s.d,s.a);

错!

应为:

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

}

五、编程(40分)

1.打印如下图案。

(12分)

*****

*****

*****

*****

*****

#include

main()

{

inti,j,k;

for(i=1;i<=5;i++)

{for(j=1;j<=i;j++)printf(“”);

for(k=1;k<=5;k++)printf(“%c”,’*’);

printf(“\n”);

}

}

2.输入8个整数放入一维数组w中,输出交换前的数组;找出其中最小和最大数,并将他们分别与数组中的第一个元素和最后一个元素交换位置;输出交换后的数组。

(15分)

参考答案1:

#include

main()

{intw[8],i,min,max,t;

printf("请输入8个整型数据:

");

for(i=0;i<8;i++)scanf("%d",&w[i]);

printf("交换前的数组:

");

for(i=0;i<8;i++)printf("%d\t",w[i]);

printf("\n");

min=0;

for(i=1;i<8;i++)

{

if(w[i]

}

t=w[0];w[0]=w[min];w[min]=t;

printf("交换最小值后的数组:

");

for(i=0;i<8;i++)printf("%d\t",w[i]);

max=0;

for(i=1;i<8;i++)

{

if(w[i]>w[max])max=i;

}

t=w[7];w[7]=w[max];w[max]=t;

printf("交换最大值后的数组:

");

for(i=0;i<8;i++)printf("%d\t",w[i]);

printf("\n");

}

参考答案2:

#include

main()

{intw[8],i,min,max,t;

printf("请输入8个整型数据:

");

for(i=0;i<8;i++)scanf("%d",&w[i]);

printf("交换前的数组:

");

for(i=0;i<8;i++)printf("%d\t",w[i]);

printf("\n");

min=max=0;

for(i=1;i<8;i++)

if(w[i]>w[max])max=i;

elseif(w[i]

t=w[7];w[7]=w[max];w[max]=t;

if(min==7)min=max;

t=w[0];w[0]=w[min];w[min]=t;

printf("交换后的数组:

");

for(i=0;i<8;i++)printf("%d\t",w[i]);

printf("\n");

}

参考答案3:

#include

main()

{intw[8],i,min,max,t;

printf("请输入8个整型数据:

");

for(i=0;i<8;i++)scanf("%d",&w[i]);

printf("交换前的数组:

");

for(i=0;i<8;i++)printf("%d\t",w[i]);

printf("\n");

min=max=0;

for(i=1;i<8;i++)

if(w[i]>w[max])max=i;

elseif(w[i]

t=w[0];w[0]=w[min];w[min]=t;

if(max==0)max=min;

t=w[7];w[7]=w[max];w[max]=t;

printf("交换后的数组:

");

for(i=0;i<8;i++)printf("%d\t",w[i]);

printf("\n");

}

3.不用标准库函数strcpy,自己编写一个函数MyStrcpy实现将两个字符串复制的功能,然后从键盘输入源字符串,并输出复制后的目的字符串。

(13分)

#include

#include

#defineARR_SIZE80

voidMyStrcpy(chardstStr[],charsrcStr[]);

main()

{

chars[ARR_SIZE],t[ARR_SIZE];

printf("Pleaseentersourcestring

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2