内容正文:
综合测试卷一
综合测试卷一
一、理论测试题(每小题12分,共5小题,共60分)
1.阅读下列程序,回答下列问题。
10#include <stdio.h
20#include <ctype.h
30#include <math.h
4 Oint qushu(char s[☐,intt]);
50int main()
60{char str[]={"yul6asd25¥*4$"}:
70
int num[20],i,n;
80
n=qushu(str,num):
90
for(i=0;i<n:i++)
100
printf("%d ",numi):
110》
120int qushu(char s[],int t])
130int i,n=0,sum:
140for(i=0:s[i门:i++)
150{
if(isdigit(si))
160
sum=0;
170while(isdigit(s))
180sum=sum¥10+s[i++]-0':
190t[n++]=sqrt(sum);
2009
210
220
return n;
230}
(1)190句的sqrt()函数的功能是
(2)40句的作用是
(3)isdigit()函数的功能是
(4)该程序执行的结果是
2.阅读下列程序,写出运行结果。
#include <stdio.h
·61·
单招零距离·计算机专业综合测试卷·下册
int main()
{char a[]="495032",c;
int i,k=1,s=0;
for(i=0;(c=a[i])!=\0';i++)
switch(c)
{case'1':k=k+2;
default:s++;
case 50:s+=2:break;
case'3':k+;continue;
case'4:k=k十2;
}
s十+;
printf("i=%d\ts=%d\tk=%d
",i,s,k);
}
3.阅读下列程序,写出运行结果。
#include <stdio.h
define NUM 5
int c=2;
void sub(int a)
{
static int b=4;
c十=a十十;
b+=c;
printf("b=%d,a=%d
",b,a);
}
int main()
int i=1;
do
sub(NUM-i);
while(++i<=2);
printf("c=%d",c);
4.下列程序的功能是:从键盘上输人学生3门课的成绩,找出平均成绩不及格的学生并删除。
#include <stdio.h>
·62·
综合测试卷一
#define N5
int main()
float scores[N][3],avestu[N]:
int i,j,k,mm;
/*1一一输入学生成绩*:
printf(”输入成绩:
");
for(i=0;i<N;i++)
for(j=0:j<3:j++)
scanf(
①):
」*2一计算学生平均成绩*
for(i=0;i<N;i++)
{
avestu[i]=
②
for(j=1:j<3;j++)
avestu[i]+=scores[i]];
avestu[i]/=3;
*3一一显示学生单科及平均成绩*/
printf("学生成绩表:
"):
for(i=0;i<N;i++)
{for(j=0:j<3;j++)
printf("%8.2f\t",scores[]);
printf("%8.2f
",avestuli]);
}
printf("
"):
/4一查找并删除平均成绩不及格学生记录/
mm=N-1;
for(i=mm;i>=0;i--)
if(avestui]60)
mm=mm-1;
for(
③
{for(k=0:k<3;k++)
scores[j][k]=scores[j+1]k];
avestu[j]=④
·63·
单招零距离·计算机专业综合测试卷·下册
/*5一输出平均成绩及格学生成绩/
for(i=0;i<=mm;i++)
{forj=0:j<3;j++)
printf("%8.2ft",scoresti]):
printf("%8.2f
",avestu[i]):
}
5.从键盘输入字母、数字、空格、TAB等一系列字符,以回车符结束,存人文本文件le
xt中。重新打开文件,逐一读取文件所有字符,统计其中可显示字符及空白(空格、制表符)字
符的个数,请在答题处填写合适的内容。
#include <stdio.h
#include <stdlib.h
int main()
FILE fp;
char ch:
int white=0;/*空白符计数器*/
int count=0;/*可显示字符计数器*/
/*1一建立文件*/
if(①
)exit(0);
while((ch=getchar())!=
')
fpute(②):
fclose(fp);
/*2一打开文件*/
if((fp=fopen("file.txt","r"))==NULL)
{printf("不能打开文件!"):
exit(1);
}
¥3一统计空白符及可显示字符数关
while(
③!=EOF)/¥逐个读取字符直到文件尾*,
if(④
)
white++;
else
count=count+1;
·64·
综合测试卷一
fclose(fp);
printf("文件中有%d个可显示字符。n",count);
printf("文件中有%d个空白字符。n",white).:
}
二、技能测试题(第1题20分,第2、3题各30分,共80分)
1.程序填空题:已知时、分、秒,以hh:mm:ss形式输出。
例如:时、分、秒分别为5、6、25,输出为:05:06:25
#include<stdio.h
#include<string.h
include<ctype.h
int handel(char a],int n)
int i=0;
for(;n>0;)
/0关关关关关*米关¥¥关关并关并*SPACE米并关¥关关¥兴共米¥兴0米兴¥/
a
]=n%60:
n=n/60:
int main()
{inth=5,m=6,s=25,n,t,j:
char a[10]={0}:
t=s+m¥60+h*3600:
handel(a,t);
n=0;
for(Gj=3;j>=1:j--)
{
/*米米米关关*关关米关关*关¥并*SPACE*兴兴兴米兴***关米米关关兴*/
ifc
)
printf("0"):
printf("%d",aj);
if(n++<2)
printf(":");
·65·
单招零距离·计算机专业综合测试卷·下册
}
2.程序改错题:随机输入一个小于30的正整数n,若n为偶数,则重新输人,直到n为奇
数为止,然后输出菱形图形。
例如:若输入的值为7时,输出的菱形为:
米
*0关
米
#include<stdio.h>
#include<string.h>
#include<math.h
void output(unsigned n)
{inti,j:char a[30][60]={""}:
for(i=0;i<n;i++)
/兴兴米米兴**兴兴*0兴米兴**FOUND兴兴米米米*米¥关**米米*兴*/
if(i<n2)》
for (j=i;j<n-1;j++)
a[i]G-i]=";
for (j=0;j<2*i+1;j++)
a[i门[n-i-1十j门=*':
}
else
for(j=0;j<2*n;j++)
/*米关米关关*关关*关关*兴**F)UND兴兴并米米米关关关关关米关兴**
a[i]]=a[n-i]];
for(i=0;i<n;i++)puts(a[i门);
}
int main()
unsigned n;
·66·
综合测试卷一
do{printf("请输人一个小于30的正整数:"):
scanf("%d",&.n):
/兴关关头关关兴关兴*米米¥关¥*FOUND¥¥关¥关
}while(n%2&.&.n<30);
output(n);
3.程序设计题:找出一维数组a中回文整数,保存在a数组前面,非回文数保存在a数组
的后面。
回文数字和非回文数字的相对位置不能改变。再对所有非回文数进行如下处理:用距离
该数最近的2的正整数次幂取代该数。如果距离相同,则取小于该数最近的2的正整数次幂
取代该数,例如48距离32和64相同,则用32取代48。
程序运行结果如下:
a数组中原始数据为
48808
9123
121
2048
找出回文数后为
808
9121481232048
最终结果为
8089121
321282048
(I)编写函数int find(inta[□),从一维数组a的N个元素中找出回文整数,保存在a数组
的前面,非回文数保存在a数组的后面。回文数字和非回文数字的相对位置不能改变。函数
返回第一个非回文数在a中的下标。
(2)编写函数void change(inta[],intn),将a数组中下标n至N一1的所有元素进行处
理,用距离该数最近的2的正整数次幂取代该数,保存在该数原来位置上。如果距离相同,则
取小于该数最近的2的正整数次幂取代该数。
#include<stdio.h
#include<string.h>
#include<math.h
#include<ctype.h
#include<stdlib.h>
#define N 6
int find(int a])
{/米米¥¥米米米Pr0gram**米米米米**
·67·
单招零距离·计算机专业综合测试卷·下册
void change(int a],int n)
{/*米0**米关*米*Pr0grm***米米*****
/00米米0***0米Ed米00米*著*0米米/
int main()
{
inta[N]={48,808,9,123,121,2048};inti,n;
printf("a数组中原始数据为");
for(i=0;i<N;++i)
printf("%6d",ai]):
printf("
"):
n=find(a);
printf("找出回文后数据为"):
for(i=0;i<N:++i)
printf("%6d",a[门);
printf("
"):
change(a,n):
printf("最终结果为
"):
for(i=0;i<N:+++i)
printf("%6d".ai]):
printf("
"):
fclose(fp);
·68·综合测试卷一
一、理论题
1.①平方根
②函数声明
③判断是否是数字字符
④4 5 2
2.i=6 s=16 k=4
3.b=10,a=5
b=19,a=4
c=9
4.①"%f",&score[i][j]
②score[i][0]
③j=i;j<=mm;j++
④avestu[j+1]
5.①(fp=fopen("file.dat","w"))==NULL
②ch,fp
③(ch=getc(fp))
④ch=='||ch=='\t'
二、技能题
1.(1)++i
(2)a[j]<10
2.(1)if(i<=n/2)
(2)a[i][j]=a[n-i-1][j];
(3)}while(n%2==0||n>=30);
3.参考程序如下:
intfind(inta[])
{inti,j,head,p,t;
for(head=0,i=N-1;i>=head;)
{ p=a[i];
t=0;
while(p)
{ t=t∗10+p%10;
p/=10;
}
if(t==a[i])
{ for(j=i-1;j>=0;--j)
a[j+1]=a[j];
a[0]=t;
++head;
}
else --i;
}
returnhead;
}
voidchange(inta[],intn)
{ inti,right,left;
for(i=n;i<N;++i)
{ left=8; right=16;
while(right<a[i])
{ left=right;
right∗=2;
}
a[i]=(a[i]-left<=right-a[i]? left:
right);
}
}
综合测试试卷二
一、理论测试题
1.①isdigit()
②220
③Prime()函数的声明
④12 9 34
2.Olympics sum=23
3.①chars[] ②s[i]==s[i+1]
③count1==w ④ToSeeOrder(str)
4.①strmaxlen ②num>maxlen
③ch[k--] ④left++,right--
5.alpha=C
A或a出现次数为3
B或b出现次数为2
C或c出现次数为4
X或x出现次数为1
二、技能测试题
1.(1)i+=2
(2)i∗j<=N
2.(1)if(s[i-1]=='-')sign=-1;elsesign=1;
(2)sum=sum∗10+s[i++]-'0';
(3)p=p∗0.1;
3.voidabstract(charstr[][30],inta[][30],intcount[])
{
/∗∗∗∗∗∗∗∗∗∗∗∗Program∗∗∗∗∗∗∗∗∗∗∗∗/
inti,j,sum,n,k;
7
总复习方案参考答案