测试A.docx

上传人:b****3 文档编号:5454818 上传时间:2022-12-16 格式:DOCX 页数:20 大小:24.91KB
下载 相关 举报
测试A.docx_第1页
第1页 / 共20页
测试A.docx_第2页
第2页 / 共20页
测试A.docx_第3页
第3页 / 共20页
测试A.docx_第4页
第4页 / 共20页
测试A.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

测试A.docx

《测试A.docx》由会员分享,可在线阅读,更多相关《测试A.docx(20页珍藏版)》请在冰豆网上搜索。

测试A.docx

测试A

一、单项选择题:

(10分,每题2分)

1.对于一个正常运行和正常退出的C程序,以下叙述正确的是。

A)程序从main函数第一条可执行语句开始执行,在main函数结束

B)程序的执行总是从程序的第一个函数开始,在main函数结束

C)程序的执行总是从main函数开始,在最后一个函数中结束

D)从程序的第一个函数开始,在程序的最后一个函数中结束

2.有如下程序片段:

#include

main()

{

inta=5,b=4,x,y;

x=2*a++;

printf("a=%d,x=%d\n",a,x);

y=--b*2;

printf("b=%d,y=%d\n",b,y);

}

则正确的执行结果是。

A)a=6,x=10

b=3,y=8

B)a=6,x=10

b=3,y=6

C)a=6,x=12

b=3,y=6

D)以上均不对

3.在vc6.0编程环境下有以下程序片断:

typedefstruct

{

intb;

intp;

}TYPEA;

voidf(TYPEAc)

{

c.b+=1;

c.p+=2;

}

main()

{

TYPEAa={1,2};

f(a);

printf("%d,%d\n",a.b,a.p);

}

则程序运行后的输出结果是。

A)2,3B)2,4C)1,4D)1,2

4.对于以下程序片段,描述正确的是。

intx=-1;

do

{

x=x*x;

}while(!

x);

A)是死循环

B)循环执行两次

C)循环执行一次

D)有语法错误

5.一个指针数组的定义为。

A)int(*ptr)[5];B)int*ptr[5];

C)int*(ptr[5]);D)intptr[5];

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

(10分,每题2分)

1.

#include

main()

{

intn=0;

charc;

while((c=getchar())!

='\n')

{

if(c>='0'&&c<='9')

n=n*10+c-'0';

}

printf("value=%d\n",n);

}

程序运行时输入为:

2008<回车>时,则程序运行结果是:

 

2.

#include

main()

{

inta=1,b=0;

switch(a)

{

case1:

switch(b)

{

case0:

a++;

b++;

printf("a=%d,b=%d\n",a,b);

break;

case1:

a++;

b++;

printf("a=%d,b=%d\n",a,b);

break;

}

case2:

a++;

b++;

printf("a=%d,b=%d\n",a,b);

break;

}

}

运行结果是:

 

3.

#include

#include

main()

{

printf("%d\n",strlen("IBM\n012\1\\"));

}

程序运行结果是:

 

4.

#include

main()

{

inti,a[10];

int*p;

p=a;

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

{

scanf("%d",p+i);

}

for(p=a;p

{

printf("%d\t",*p);

}

printf("\n");

for(p=a;p

{

if(*p%2)printf("%d\t",*p);

}

}

程序运行时输入为:

1<回车>2<回车>3<回车>4<回车>5<回车>6<回车>7<回车>8<回车>9<回车>10<回车>时,则程序运行结果为:

 

5.

#include

intmod(intx,inty)

{

return(x%y);

}

main()

{

intm,n,r;

scanf("%d%d",&m,&n);

r=mod(m,n);

while(r!

=0)

{

m=n;

n=r;

r=mod(m,n);

}

printf("TheResultis:

%d\n",n);

}

程序运行时输入:

81<空格>18<回车>,则运行结果是:

 

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

(8分,每空1分)

1.以下程序将输入的十进制数以十六进制的形式输出。

#include

main()

{

charb[17]={"0123456789ABCDEF"};

intc[64],d,i=0,base=16;

longnumber;

printf("请输入一个十进制数\n");

scanf("%ld",);

do{

c[i]=;

number=number/base;

;

}while(number!

=0);

printf("对应的十六进制数为:

\n");

for(--i;;--i)

{

d=c[i];

printf("%c",);

}

printf("\n");

}

2.用户从键盘任意输入一个数字表示月份值n,程序显示该月份对应的英文表示,若n不在1~12之间,则输出“Illegalmonth”。

#include

main()

{

intn;

staticcharmonthName[][20]={

"Illegalmonth","January","February","March",

"April","May","June","July","August",

"September","October","November","December"

};

printf("Inputmonthnumber:

");

scanf("%d",&n);

if()

{

printf("month%dis%s\n",n,);

}

else

{

printf("%s\n",);

}

}

 

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

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

只要找对15个即可,多找不加分。

1.下面程序实现折半查找算法,当找到输入元素后显示其在数组中的下标。

#include

main()

{

intup=10,low=1,mid,found,find;

inta[10]={1,5,6,9,11,17,25,34,38,41};

scanf("%d",find);

printf("\n");

while(up>=low||!

found)

{

mid=(up+low)/2;

if(a[mid]=find)

{

found=1;

break;

}

elseif(a[mid]>find)

up=mid+1;

else

low=mid+1;

}

if(found)printf("foundnumberis%dth",mid);

elseprintf("nofound");

}

2.下面程序模拟了骰子的6000次投掷,用rand函数产生1~6之间的随机数face,然后统计1~6每一面出现的次数存放到数组frequency中。

#include

#include

#include

main()

{

intface,roll,frequency[7]={0};

srand(time[NULL]);

for(roll=1;roll<=6000;roll++);

{

face=rand()%6+1;

++frequency[Face];

}

printf("%4s%17s\n","Face","Frequency");

for(face=1;face<=6;face++)

{

printf("%4d%17d\n",face,frequency[face]);

}

}

3.计算十个数据的平均值。

#include

voidmain(void)

{

inti,sum;

floatavg;

intsc[10],*p=sc;

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

{

scanf("%d",p);

p++;

sum+=*p;

}

avg=sum/10;

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

}

4.编程实现从键盘输入一个字符串,将其字符顺序颠倒后重新存放,并输出这个字符串。

(用字符数组实现)

#include

#include

voidInverse(charrstr[])

main()

{

charstr[80];

printf("Inputastring:

\n");

gets(str);

Inverse(str);

printf("Theinversedstringis:

\n");

puts(str);

}

voidInverse(charrstr[])

{

inti,n;

chartemp;

for(i=0,n=(strlen(rstr));i

{

temp=rstr[i];

rstr[i]=rstr[n];

rstr[n]=temp;

}

}

五、编程(42分)

1.从键盘任意输入一个4位数x,编程计算x的每一位数字相加之和(忽略整数前的正负号)。

例如,输入x为1234,则由1234分离出其千位1、百位2、十位3、个位4,然后计算1+2+3+4=10,并输出10。

(14分)

2.输入20个学生的成绩,求出其中大于平均成绩学生的人数,并对20名学生成绩按从高到低进行排序。

(14分)

3.利用公式

=

×…前100项之积计算并打印值。

 

参考答案与评分标准

一、单项选择题:

(10分,每题2分)

1.对于一个正常运行和正常退出的C程序,以下叙述正确的是。

√A)程序是从main函数第一条可执行语句开始执行,在main函数结束

B)程序的执行总是从程序的第一个函数开始,在main函数结束

C)程序的执行总是从main函数开始,在最后一个函数中结束

D)从程序的第一个函数开始,在程序的最后一个函数中结束

2.在turboC2.0编程环境下有如下程序片段:

#include

main()

{

inta=5,b=4,x,y;

x=2*a++;

printf("a=%d,x=%d\n",a,x);

y=--b*2;

printf("b=%d,y=%d\n",b,y);

}

则正确的执行结果是。

A)a=6,x=10

b=3,y=8

√B)a=6,x=10

b=3,y=6

C)a=6,x=12

b=3,y=6

D)以上均不对

3.在VC6.0编程环境下有以下程序片断:

#include

typedefstruct

{

intb;

intp;

}TYPEA;

voidf(TYPEAc)

{

c.b+=1;

c.p+=2;

}

main()

{

TYPEAa={1,2};

f(a);

printf("%d,%d\n",a.b,a.p);

}

则程序运行后的输出结果是。

A)2,3B)2,4C)1,4√D)1,2

4.对于以下程序片段,描述正确的是。

intx=-1;

do

{

x=x*x;

}while(!

x);

A)是死循环

B)循环执行两次

√C)循环执行一次

D)有语法错误

5.一个指针数组的定义为。

A)int(*ptr)[5];√B)int*ptr[5];

C)int*(ptr[5]);D)intptr[5];

二、

1、2008

2、a=2,b=1

a=3,b=2

3、9

4、12345678910

13579

5、TheResultis:

9

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

(8分,评分标准:

每空1分,正确得1分,错误扣1分)

1.以下程序将输入的十进制数以十六进制的形式输出。

#include

main()

{

charb[17]={"0123456789ABCDEF"};

intc[64],d,i=0,base=16;

longnumber;

printf("请输入一个十进制数\n");

scanf("%ld",&number);

do{

c[i]=number%base;

number=number/base;

i++;

}while(number!

=0);

printf("对应的十六进制数为:

\n");

for(--i;i>=0;--i)

{

d=c[i];

printf("%c",b[d]);

}

printf("\n");

}

2.用户从键盘任意输入一个数字表示月份值n,程序显示该月份对应的英文表示,若n不在1~12之间,则输出“Illegalmonth”。

#include

main()

{

intn;

staticcharmonthName[][20]={

"Illegalmonth","January","February","March",

"April","May","June","July","August",

"September","October","November","December"

};

printf("Inputmonthnumber:

");

scanf("%d",&n);

if((n<=12)&&(n>=1))

{

printf("month%dis%s\n",n,monthName[n]);

}

else

{

printf("%s\n",monthName[0]);

}

}

 

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

(30分,评分标准:

实际错误有16个,只要找对15个即可,多找不加分。

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

1.折半查找。

#include

main()

{

intup=9,low=0,mid,found=0,find;

inta[10]={1,5,6,9,11,17,25,34,38,41};

scanf("%d",&find);

printf("\n");

while(up>=low&&!

found)

{

mid=(up+low)/2;

if(a[mid]==find)

{

found=1;

break;

}

elseif(a[mid]>find)

up=mid-1;

else

low=mid+1;

}

if(found)printf("foundnumberis%dth",mid);

elseprintf("nofound");

}

2.下面程序模拟了骰子的6000次投掷,用rand函数产生1~6之间的随机数face,然后统计1~6每一面出现的次数存放到数组frequency中。

#include

#include

#include

main()

{

intface,roll,frequency[7]={0};

srand(time(NULL));

for(roll=1;roll<=6000;roll++);

{

face=rand()%6+1;

++frequency[face];

}

printf("%4s%17s\n","Face","Frequency");

for(face=1;face<=6;face++)

{

printf("%4d%17d\n",face,frequency[face]);

}

}

3.计算十个数据的平均值。

#include

voidmain(void)

{

inti,sum=0;

floatavg;

intsc[10],*p=sc;

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

{

scanf(“%d”,p);

p++;

sum+=*(p-1);

//或不修改上面的语句,而将p++;移到原sum+=*p;语句的下面

}

avg=(float)sum/10;

printf(“avg=%f”,avg);

}

4.编程实现从键盘输入一个字符串,将其字符顺序颠倒后重新存放,并输出这个字符串。

#include

#include

voidInverse(charrstr[]);

main()

{

charstr[80];

printf("Inputastring:

\n");

gets(str);

Inverse(str);

printf("Theinversedstringis:

\n");

puts(str);

}

voidInverse(charrstr[])

{

inti,n;

chartemp;

for(i=0,n=(strlen(rstr)-1);i

{

temp=rstr[i];

rstr[i]=rstr[n];

rstr[n]=temp;

}

}

五、编程

1.从键盘任意输入一个4位数x,编程计算x的每一位数字相加之和(忽略整数前的正负号)。

例如,输入x为1234,则由1234分离出其千位1、百位2、十位3、个位4,然后计算1+2+3+4=10,并输出10。

//空格、空行、缩进、标识符命名等编程规范2分

#include

#include//1分

main()

{

inti1,i2,i3,i4,k,n=10000;

//1分,为避免输入非数值类型数据,将n初始化成不在1000和9999之间的数

//1分,变量类型定义正确

printf("Inputadecimalbetween1000and9999:

");

scanf("%d",&n);//1分

k=fabs(n);/*取绝对值*///1分

if((k<1000)||(k>9999))//2分有效数据判断

{

printf("Inputerror!

\n");

return;

}

i1=k/1000;/*分离出千位*///1分

i2=(k-i1*1000)/100;/*分离出百位*///1分

i3=(k-i1*1000-i2*100)/10;/*十位*///1分

i4=k%10;/*分离出个位*///1分

printf("Thesumofthetotalbitis%d\n",i1+i2+i3+i4);//1分

}

2.输入20个学生的成绩,求出其中大于平均成绩学生的人数,并对20名学生成绩按从高到低进行排序。

//缩进、空格、空行、标识符命名等编程规范2分

#include

main()

{

intp=20,i,k=0,j;//2分类型错扣1分,没初始化扣1分

floatave,a[20],t,sum=0;

printf("Pleaseinputthescoreofthestudents:

\n");

for(i=0;i

scanf("%f",&a[i]);

for(i=0;i

sum=sum+a[i];

ave=sum/p;//1分

for(i=0;i

{

if(a[i]>ave)

k++;

}

for(i=0;i

for(j=1;j

if(a[j-1]

{

t=a[j-1];a[j-1]=a[j];a[j]=t;//1分

}

printf("studentsabovetheaveragescoreandtheaveragescore:

%d,%.1f\n",k,ave);//1分输出显示正确

printf("Thescorefromuptodownis:

\n");

for(i=0;i

printf("%.1f\t",a[i]);//1分输出显示正确

}

3

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

当前位置:首页 > PPT模板 > 可爱清新

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1