测试A.docx
《测试A.docx》由会员分享,可在线阅读,更多相关《测试A.docx(20页珍藏版)》请在冰豆网上搜索。
测试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
D)以上均不对
3.在vc6.0编程环境下有以下程序片断:
typedefstruct
intb;
intp;
}TYPEA;
voidf(TYPEAc)
c.b+=1;
c.p+=2;
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];
二、写出下列程序的运行结果。
1.
intn=0;
charc;
while((c=getchar())!
='\n')
if(c>='0'&&c<='9')
n=n*10+c-'0';
printf("value=%d\n",n);
程序运行时输入为:
2008<回车>时,则程序运行结果是:
2.
inta=1,b=0;
switch(a)
case1:
switch(b)
case0:
a++;
b++;
printf("a=%d,b=%d\n",a,b);
break;
case2:
运行结果是:
3.
printf("%d\n",strlen("IBM\n012\1\\"));
程序运行结果是:
4.
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.#includeintmod(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.以下程序将输入的十进制数以十六进制的形式输出。#includemain(){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”。#includemain(){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.下面程序实现折半查找算法,当找到输入元素后显示其在数组中的下标。#includemain(){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;elselow=mid+1;}if(found)printf("foundnumberis%dth",mid);elseprintf("nofound");}2.下面程序模拟了骰子的6000次投掷,用rand函数产生1~6之间的随机数face,然后统计1~6每一面出现的次数存放到数组frequency中。#include#include#includemain(){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.计算十个数据的平均值。#includevoidmain(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#includevoidInverse(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编程环境下有如下程序片段:#includemain(){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=10b=3,y=8√B)a=6,x=10b=3,y=6C)a=6,x=12b=3,y=6D)以上均不对3.在VC6.0编程环境下有以下程序片断:#includetypedefstruct{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,24.对于以下程序片段,描述正确的是。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、20082、a=2,b=1a=3,b=23、94、12345678910135795、TheResultis:9三、阅读程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。(8分,评分标准:每空1分,正确得1分,错误扣1分)1.以下程序将输入的十进制数以十六进制的形式输出。#includemain(){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”。#includemain(){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.折半查找。#includemain(){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;elselow=mid+1;}if(found)printf("foundnumberis%dth",mid);elseprintf("nofound");}2.下面程序模拟了骰子的6000次投掷,用rand函数产生1~6之间的随机数face,然后统计1~6每一面出现的次数存放到数组frequency中。#include#include#includemain(){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.计算十个数据的平均值。#includevoidmain(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#includevoidInverse(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分#includemain(){intp=20,i,k=0,j;//2分类型错扣1分,没初始化扣1分floatave,a[20],t,sum=0;printf("Pleaseinputthescoreofthestudents:\n");for(i=0;iscanf("%f",&a[i]);for(i=0;isum=sum+a[i];ave=sum/p;//1分for(i=0;i{if(a[i]>ave)k++;}for(i=0;ifor(j=1;jif(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;iprintf("%.1f\t",a[i]);//1分输出显示正确}3
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.#includeintmod(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.以下程序将输入的十进制数以十六进制的形式输出。#includemain(){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”。#includemain(){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.下面程序实现折半查找算法,当找到输入元素后显示其在数组中的下标。#includemain(){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;elselow=mid+1;}if(found)printf("foundnumberis%dth",mid);elseprintf("nofound");}2.下面程序模拟了骰子的6000次投掷,用rand函数产生1~6之间的随机数face,然后统计1~6每一面出现的次数存放到数组frequency中。#include#include#includemain(){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.计算十个数据的平均值。#includevoidmain(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#includevoidInverse(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编程环境下有如下程序片段:#includemain(){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=10b=3,y=8√B)a=6,x=10b=3,y=6C)a=6,x=12b=3,y=6D)以上均不对3.在VC6.0编程环境下有以下程序片断:#includetypedefstruct{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,24.对于以下程序片段,描述正确的是。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、20082、a=2,b=1a=3,b=23、94、12345678910135795、TheResultis:9三、阅读程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。(8分,评分标准:每空1分,正确得1分,错误扣1分)1.以下程序将输入的十进制数以十六进制的形式输出。#includemain(){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”。#includemain(){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.折半查找。#includemain(){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;elselow=mid+1;}if(found)printf("foundnumberis%dth",mid);elseprintf("nofound");}2.下面程序模拟了骰子的6000次投掷,用rand函数产生1~6之间的随机数face,然后统计1~6每一面出现的次数存放到数组frequency中。#include#include#includemain(){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.计算十个数据的平均值。#includevoidmain(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#includevoidInverse(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分#includemain(){intp=20,i,k=0,j;//2分类型错扣1分,没初始化扣1分floatave,a[20],t,sum=0;printf("Pleaseinputthescoreofthestudents:\n");for(i=0;iscanf("%f",&a[i]);for(i=0;isum=sum+a[i];ave=sum/p;//1分for(i=0;i{if(a[i]>ave)k++;}for(i=0;ifor(j=1;jif(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;iprintf("%.1f\t",a[i]);//1分输出显示正确}3
if(*p%2)printf("%d\t",*p);
程序运行时输入为:
1<回车>2<回车>3<回车>4<回车>5<回车>6<回车>7<回车>8<回车>9<回车>10<回车>时,则程序运行结果为:
5.
intmod(intx,inty)
return(x%y);
intm,n,r;
scanf("%d%d",&m,&n);
r=mod(m,n);
while(r!
=0)
m=n;
n=r;
printf("TheResultis:
%d\n",n);
程序运行时输入:
81<空格>18<回车>,则运行结果是:
三、阅读程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。
(8分,每空1分)
1.以下程序将输入的十进制数以十六进制的形式输出。
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",);
2.用户从键盘任意输入一个数字表示月份值n,程序显示该月份对应的英文表示,若n不在1~12之间,则输出“Illegalmonth”。
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.下面程序实现折半查找算法,当找到输入元素后显示其在数组中的下标。
intup=10,low=1,mid,found,find;
inta[10]={1,5,6,9,11,17,25,34,38,41};
scanf("%d",find);
while(up>=low||!
found)
mid=(up+low)/2;
if(a[mid]=find)
found=1;
elseif(a[mid]>find)
up=mid+1;
low=mid+1;
if(found)printf("foundnumberis%dth",mid);
elseprintf("nofound");
2.下面程序模拟了骰子的6000次投掷,用rand函数产生1~6之间的随机数face,然后统计1~6每一面出现的次数存放到数组frequency中。
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.计算十个数据的平均值。
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.编程实现从键盘输入一个字符串,将其字符顺序颠倒后重新存放,并输出这个字符串。
(用字符数组实现)
voidInverse(charrstr[])
charstr[80];
printf("Inputastring:
gets(str);
Inverse(str);
printf("Theinversedstringis:
puts(str);
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编程环境下有如下程序片段:#includemain(){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=10b=3,y=8√B)a=6,x=10b=3,y=6C)a=6,x=12b=3,y=6D)以上均不对3.在VC6.0编程环境下有以下程序片断:#includetypedefstruct{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,24.对于以下程序片段,描述正确的是。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、20082、a=2,b=1a=3,b=23、94、12345678910135795、TheResultis:9三、阅读程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。(8分,评分标准:每空1分,正确得1分,错误扣1分)1.以下程序将输入的十进制数以十六进制的形式输出。#includemain(){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”。#includemain(){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.折半查找。#includemain(){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;elselow=mid+1;}if(found)printf("foundnumberis%dth",mid);elseprintf("nofound");}2.下面程序模拟了骰子的6000次投掷,用rand函数产生1~6之间的随机数face,然后统计1~6每一面出现的次数存放到数组frequency中。#include#include#includemain(){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.计算十个数据的平均值。#includevoidmain(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#includevoidInverse(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分#includemain(){intp=20,i,k=0,j;//2分类型错扣1分,没初始化扣1分floatave,a[20],t,sum=0;printf("Pleaseinputthescoreofthestudents:\n");for(i=0;iscanf("%f",&a[i]);for(i=0;isum=sum+a[i];ave=sum/p;//1分for(i=0;i{if(a[i]>ave)k++;}for(i=0;ifor(j=1;jif(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;iprintf("%.1f\t",a[i]);//1分输出显示正确}3
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名学生成绩按从高到低进行排序。
3.利用公式
=
×…前100项之积计算并打印值。
参考答案与评分标准
√A)程序是从main函数第一条可执行语句开始执行,在main函数结束
2.在turboC2.0编程环境下有如下程序片段:
x=2*a++;
y=--b*2;
√B)a=6,x=10
3.在VC6.0编程环境下有以下程序片断:
A)2,3B)2,4C)1,4√D)1,2
√C)循环执行一次
A)int(*ptr)[5];√B)int*ptr[5];
二、
1、2008
2、a=2,b=1
a=3,b=2
3、9
4、12345678910
13579
5、TheResultis:
9
(8分,评分标准:
每空1分,正确得1分,错误扣1分)
scanf("%ld",&number);
c[i]=number%base;
i++;
for(--i;i>=0;--i)
printf("%c",b[d]);
if((n<=12)&&(n>=1))
printf("month%dis%s\n",n,monthName[n]);
printf("%s\n",monthName[0]);
四、在下面给出的4个程序中,有15处错误(包括语法错误和逻辑错误),请找出其中的错误,并改正之。
(30分,评分标准:
实际错误有16个,只要找对15个即可,多找不加分。
每找对1个错误,加1分,每修改正确1个错误,再加1分。
1.折半查找。
intup=9,low=0,mid,found=0,find;
scanf("%d",&find);
while(up>=low&&!
if(a[mid]==find)
up=mid-1;
srand(time(NULL));
for(roll=1;roll<=6000;roll++);
++frequency[face];
3.计算十个数据的平均值。
inti,sum=0;
scanf(“%d”,p);
sum+=*(p-1);
//或不修改上面的语句,而将p++;移到原sum+=*p;语句的下面
avg=(float)sum/10;
printf(“avg=%f”,avg);
4.编程实现从键盘输入一个字符串,将其字符顺序颠倒后重新存放,并输出这个字符串。
voidInverse(charrstr[]);
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分#includemain(){intp=20,i,k=0,j;//2分类型错扣1分,没初始化扣1分floatave,a[20],t,sum=0;printf("Pleaseinputthescoreofthestudents:\n");for(i=0;iscanf("%f",&a[i]);for(i=0;isum=sum+a[i];ave=sum/p;//1分for(i=0;i{if(a[i]>ave)k++;}for(i=0;ifor(j=1;jif(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;iprintf("%.1f\t",a[i]);//1分输出显示正确}3
五、编程
//空格、空行、缩进、标识符命名等编程规范2分
#include//1分
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!
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分
intp=20,i,k=0,j;//2分类型错扣1分,没初始化扣1分
floatave,a[20],t,sum=0;
printf("Pleaseinputthescoreofthestudents:
for(i=0;i
scanf("%f",&a[i]);
sum=sum+a[i];
ave=sum/p;//1分
if(a[i]>ave)
k++;
for(i=0;ifor(j=1;jif(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;iprintf("%.1f\t",a[i]);//1分输出显示正确}3
for(j=1;jif(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;iprintf("%.1f\t",a[i]);//1分输出显示正确}3
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;iprintf("%.1f\t",a[i]);//1分输出显示正确}3
t=a[j-1];a[j-1]=a[j];a[j]=t;//1分
printf("studentsabovetheaveragescoreandtheaveragescore:
%d,%.1f\n",k,ave);//1分输出显示正确
printf("Thescorefromuptodownis:
printf("%.1f\t",a[i]);//1分输出显示正确
3
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1