最新版C语言模拟试题打印复习版.docx
《最新版C语言模拟试题打印复习版.docx》由会员分享,可在线阅读,更多相关《最新版C语言模拟试题打印复习版.docx(50页珍藏版)》请在冰点文库上搜索。
![最新版C语言模拟试题打印复习版.docx](https://file1.bingdoc.com/fileroot1/2023-5/16/451f47d9-2239-4258-82f8-352a13dceaf2/451f47d9-2239-4258-82f8-352a13dceaf21.gif)
最新版C语言模拟试题打印复习版
模拟1
1.改错
计算大于100的前10个素数之和。
#include
voidmain()
{
inti,j,n,s;
n=0;
s=1;/*$ERROR1$*/
for(i=101;;i+=2)
{
for(j=2;j<=i/2;j++)
if(i%j==0)
{
continue;/*$ERROR2$*/
}
if(j>i/2)
{
s+=i;
n++;
if(n!
=10)/*$ERROR3$*/
break;
}
}
printf("s=%d\n",s);
}
参考答案:
$1$:
s=0;
$2$:
break;
$3$:
if(n==10)
}
2填空
将自然数1~100以及它们的平方根以只写方式写入到新建的文本文件data.txt中。
#include
#include
#include
voidmain()
{
inti;
FILE___;/*$BLANK1$*/
if((fp=fopen("data.txt","____"))==NULL)/*$BLANK2$*/
{printf("Cannotcreatethefile!
");exit(0);}
for(i=1;i<=100;i++)
{fprintf(fp,"%d,%f\n",i,sqrt(i));
printf("%d,%f\n",i,sqrt(i));
}
fclose(___);/*$BLANK3$*/
}
参考答案:
$1$:
FILE*fp;
$2$:
if((fp=fopen("data.txt","w"))==NULL)
$3$:
fclose(fp);
3程序设计
求所有水仙花数之和。
所谓水仙花数是指一个三位数,其各位数字的立方和等于该数本身。
例如:
153是一个水仙花数,因为153等于1*1*1+5*5*5+3*3*3
输出格式:
s=23456
参考程序一:
#include
voidPRINT(ints)
{
FILE*out;
printf("s=%d\n",s);
if((out=fopen("C:
\\24000101\\RESULT.DAT","w+"))!
=NULL)
fprintf(out,"s=%d",s);
fclose(out);
}
voidmain()
{
ints,a,b,c;
s=0;
for(a=1;a<=9;a++)
for(b=0;b<=9;b++)
for(c=0;c<=9;c++)
if(a*100+b*10+c==a*a*a+b*b*b+c*c*c)s+=a*100+b*10+c;
PRINT(s);
}
参考程序二:
#include
voidPRINT(ints)
{
FILE*out;
printf("s=%d\n",s);
if((out=fopen("C:
\\24000101\\RESULT.DAT","w+"))!
=NULL)
fprintf(out,"s=%d",s);
fclose(out);
}
voidmain()
{
inti,a,b,c;
ints=0;
for(i=100;i<1000;i++)
{
a=i%10;
b=i/10%10;
c=i/100;
if(i==a*a*a+b*b*b+c*c*c)
s=s+a*100+b*10+c;
}
PRINT(s);
}
模拟2
1改错
输入一个百分制的成绩,根据成绩输出相应的等级,等级的划分如下:
90分以上为A,80~89分为B,70~79为C,60~69分为D,60分以下为E。
例如输入75,则显示C。
#include
voidmain()
{
inta;
scanf("%d",a);/*$ERROR1$*/
if(a<0||a>100)
printf("dataerror\n");
else
{
elseif(a>=90)printf("A\n");/*$ERROR2$*/
elseif(a>=80)printf("B\n");
elseif(a>=70)printf("C\n");
elseif(a>=60)printf("D\n");
printf("E\n");/*$ERROR3$*/
}
}
参考答案:
$1$:
scanf("%d",&a);
$2$:
if(a>=90)printf("A\n");
$3$:
elseprintf("E\n");
2填空
输入一个大于1的正整数,将其分解成质因数的乘积(质因数即素数因子),并按下例中的格式输出。
例如:
Intput:
90
Output:
90=2*3*3*5
#include
voidmain()
{
longi,n;
printf("Inputn:
");
scanf("%ld",___);/*$BLANK1$*/
printf("Output:
%d=",n);
i=2;
while(i{
if(n%i==0)
{
printf("%ld*",i);
n=___;/*$BLANK2$*/
}
else
i++;
}
printf("%ld\n",___);/*$BLANK3$*/
}参考答案:
$1$:
&n;
$2$:
n/i;
$3$:
i;
3程序设计
百马百担问题
有100匹马驮100担货,大马驮4担,中马驮3担,5匹小马驮1担,问三种马各几匹?
注意:
大中小马必须有,只有一个解
参考程序一:
#include
voidPRINT(inta,intb,intc)
{
FILE*out;
printf("big=%d,mid=%d,small=%d\n",a,b,c);
if((out=fopen("K:
\\24000101\\RESULT.DAT","w+"))!
=NULL)
fprintf(out,"big=%d,mid=%d,small=%d",a,b,c);
fclose(out);
}
voidmain()
{
inta,b,c;
for(a=1;a<=25;a++)
for(b=1;b<=33;b++)
for(c=5;c<=100;c=c+5)
if(a*4+b*3+c/5==100&&a+b+c==100)
PRINT(a,b,c);
}
参考程序二(*):
#include
voidPRINT(inta,intb,intc)
{
FILE*out;
printf("big=%d,mid=%d,small=%d\n",a,b,c);
if((out=fopen("K:
\\24000101\\RESULT.DAT","w+"))!
=NULL)
fprintf(out,"big=%d,mid=%d,small=%d",a,b,c);
fclose(out);
}
voidmain()
{
inta,b,c;
for(a=1;a<=25;a++)
for(b=5-a%5;b<=33;b+=5)
if(c=100-a-b,a*4+b*3+c/5==100)
PRINT(a,b,c);
}
模拟3
1改错
在屏幕上输出以下图形(*字符之前没有空格)。
*
***
*****
*******
*********
#include
voidmain()
{
inti,j;
for(i=1;i<=___;i++)/*$BLANK1$*/
{
for(j=1;j<=___;j++)/*$BLANK2$*/
printf("");
for(j=1;j<=___;j++)/*$BLANK3$*/
printf("*");
printf("\n");
}
}
参考答案:
$1$:
5
$2$:
i
$3$:
2*i-1
2填空
从键盘上输入一个十进制整数,统计数码为2的个数。
如输入32202,则2的膈腧为3;输入-6242,则2的个数为2
#include
voidmain()
{
longcount,n,t;
count=___;/*$BLANK1$*/
printf("Inputn:
");
scanf("%ld",&n);
n=(n>=0?
n:
-n);
do
{
t=n___10;/*$BLANK2$*/
if(t==2)
count++;
n=n/10;
}
while(___);/*$BLANK3$*/
printf("count=%ld\n",count);
}
参考答案:
$1$:
count=0;
$2$:
t=n%10;
$3$:
while(n>0);
3程序设计
计算10000以内9的偶数倍数之和,即:
sum=18+36+54+~+9990
其中18,36,54,。
。
。
9990等分别是2,4,6。
。
。
1110倍。
输出格式sum=2345678
参考程序一:
#include
voidPRINT(longsum)
{
FILE*out;
printf("sum=%ld\n",sum);
if((out=fopen("K:
\\24000101\\RESULT.DAT","w+"))!
=NULL)
fprintf(out,"sum=%ld",sum);
fclose(out);
}
voidmain()
{
longsum=0;
inti;
for(i=18;i<=10000;i=i+18)
sum=sum+i;
PRINT(sum);
}
参考程序二:
#include
voidPRINT(longsum)
{
FILE*out;
printf("sum=%ld\n",sum);
if((out=fopen("K:
\\24000101\\RESULT.DAT","w+"))!
=NULL)
fprintf(out,"sum=%ld",sum);
fclose(out);
}
voidmain()
{
longsum=0;
inti;
for(i=18;i<=10000;i++)
{
if(i%9==0&&i/9%2==0)
sum=sum+i;
}
PRINT(sum);
}
参考程序三:
#include
voidPRINT(longsum)
{
FILE*out;
printf("sum=%ld\n",sum);
if((out=fopen("K:
\\24000101\\RESULT.DAT","w+"))!
=NULL)
fprintf(out,"sum=%ld",sum);
fclose(out);
}
voidmain()
{
longsum=0;
inti;
for(i=2;i<=1110;i+=2)
sum=sum+i*9;
PRINT(sum);
}
模拟4
1改错
统计所有的三位正整数中各个数位上数字之和是11的数的个数。
如:
119,128,245等死满足该条件的数。
#include
voidmain()
{
inti,j,k,l,s,count;
count=1;/*$ERROR1$*/
for(i=100;i<=999;i++)
{
s=0;j=i;
while(j>1)/*$ERROR2$*/
{
s=s+j/10;/*$ERROR3$*/
j=j/10;
}
if(s==11)count=count+1;
}
printf("%d\n",count);
}
参考答案:
$1$:
count=0;
$2$:
while(j>0)
$3$:
s=s+j%10;
2填空
求100~400之间不能被5整除且个位是3的数之和。
#include
voidmain()
{
inti,s;
s=____;/*$BLANK1$*/
for(i=100;i<=400;i++)
if(i%5!
=0)
if(i%10==____)/*$BLANK2$*/
{
printf("%d\n",i);
s=____;/*$BLANK3$*/
}
printf("s=%d\n",s);
}
参考答案:
$1$:
s=0;
$2$:
if(i%10==3)
$3$:
s=s+i;
3程序设计
根据下列式子,计算F10的值(要求使用循环实现)
F1=1
F2=2
F3=3*F2-F1
F4=3*F3-F2
。
。
。
F10=3*F9-F8
输出格式
F10=2134
参考程序一:
#include
voidPRINT(longf)
{
FILE*out;
printf("F10=%ld\n",f);
if((out=fopen("C:
\\24000101\\RESULT.DAT","w+"))!
=NULL)
fprintf(out,"F10=%ld",f);
fclose(out);
}
voidmain()
{
longf,f1,f2;
inti;
f1=f2=1;
for(i=3;i<=10;i++)
{
f=3*f2-f1;
f1=f2;
f2=f;
}
PRINT(f);
}
参考程序二:
#include
voidPRINT(longf)
{
FILE*out;
printf("F10=%ld\n",f);
if((out=fopen("C:
\\24000101\\RESULT.DAT","w+"))!
=NULL)
fprintf(out,"F10=%ld",f);
fclose(out);
}
voidmain()
{
longf,g[10];
inti=2;
g[0]=g[1]=1;
while(i<10)g[i++]=3*g[i-1]-g[i-2];
f=g[9];
PRINT(f);
}
模拟5
1改错
输出数组中的最小元素及其下标值(数组中元素各不相同)。
#include
voidmain()
{
inta[10]={-3,2,-5,4,9,0,8,7,-6,1};
intt,min,i;
min=0;/*$ERROR1$*/
t=1;/*$ERROR2$*/
i=1;
while(i<10)
{
if(min>a[i])
{
min=a[i];
i=t;/*$ERROR3$*/
}
i++;
}
printf("min=%d,address=%d\n",min,t);
}
参考答案:
$1$:
min=a[0];
$2$:
t=0;
$3$:
t=i;
2填空
从键盘输入10个整数并存入一维数组中,查找其中第一个负数。
如果能找到则输出这个负数及其下标,否则输出NotFound!
。
#include
voidmain()
{
inti,a[10];
printf("Inputarray:
\n");
for(i=0;i<10;i++)
scanf("%d",___);/*$BLANK1$*/
for(i=0;i<10;i++)
{
if(a[i]<0)
{printf("%d,%d\n",a[i],i);
___;/*$BLANK2$*/
}
}
if(i___)/*$BLANK3$*/
printf("NotFound!
\n");
}
参考答案:
$1$:
scanf("%d",&a[i]);
$2$:
break;
$3$:
if(i>=10)
3程序设计
计算1+2+3+4+。
。
。
+n<2000的最大的n的值(要求使用循环实现)。
输出格式n=23
参考程序一:
#include
voidPRINT(intn)
{
FILE*out;
printf("n=%d\n",n);
if((out=fopen("C:
\\24000101\\RESULT.DAT","w+"))!
=NULL)
fprintf(out,"n=%d",n);
fclose(out);
}
voidmain()
{
intn=0,s=0;
while(s<2000)
s=s+(++n);
n--;
PRINT(n);
}
参考程序二:
#include
voidPRINT(intn)
{
FILE*out;
printf("n=%d\n",n);
if((out=fopen("C:
\\24000101\\RESULT.DAT","w+"))!
=NULL)
fprintf(out,"n=%d",n);
fclose(out);
}
voidmain()
{
intn=100;/*只要大于4000,n(n+1)/2<(n+1)*(n+1)/2的平方根即可*/
while(--n*(n+1)/2>2000);
PRINT(n);
}
模拟6
1改错
将数组中的数按从小到大排序后输出。
(说明:
所有数据输出在一行,且每个数据占5列)
#include
voidmain()
{
inta[11]={3,9,-5,20,80,42,28,-19,0,90,22};
inti,j,k;
for(j=0;j<=9;j++)
for(i=0;i<10-j;i++)
{
if(a[i]{
k=a[i+1];/*$ERROR2$*/
a[i]=a[i+1];
a[i+1]=k;
}
}
for(i=0;i<11;i++)
printf("%5d",a+i);/*$ERROR3$*/
printf("\n");
}
参考答案:
$1$:
if(a[i]>a[i+1])
$2$:
k=a[i];
$3$:
printf("%5d",a[i]);
2填空
将3x3的矩阵值(从键盘输入)存于数组a中,计算并输出该矩阵两条对角线元素的总和s。
#include
voidmain()
{
inta[3][3],i,j,s=0;
printf("Inputarray:
\n");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",___);/*$BLANK1$*/
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
if((i==j)___(i+j==2))/*$BLANK2$*/
s+=___;/*$BLANK3$*/
}
printf("s=%d\n",s);
}
参考答案:
$1$:
scanf("%d",&a[i][j]);
$2$:
if((i==j)||(i+j==2))
$3$:
s+=a[i][j];
3程序设计
根据下式求s的值(要求使用循环实现):
S=1/2-2/3+3/4-4/5+5/6-6/7+…+99/100
输出格式s=0.1234
参考程序:
#include
voidPRINT(floats)
{
FILE*out;
printf("s=%.4f\n",s);
if((out=fopen("C:
\\24000101\\RESULT.DAT","w+"))!
=NULL)
fprintf(out,"s=%.4f",s);
fclose(out);
}
voidmain()
{
floats;
inti,flag=1;
s=0;
for(i=1;i<=99;i++)
{
s=s+1.0*i/(i+1)*flag;
flag=-flag;
}
PRINT(s);
}
模拟7
1改错
对学生的记录数据统计不及格的人数并输出不及格学生的信息(说明:
num域代表学号,name域代表姓名,score域代表成绩)。
#include
structstudent
{intnum;
charname[12];
intscore;
};
voidmain()
{
structstud[5]={{101,"Liping",45},/*$ERROR1$*/
{102,"Huhua",62},
{103,"Hefang",92},
{104,"Chengli",87},
{105,"Liuzhi",58}};
inti,n=0;
printf("num\tname\tscore\n");
i=0;
while(i<5)
{
if(score<60)/*$ERROR2$*/
{printf("%d\t%s\t%d\n",stud[i].num,stud[i].name,stud[i].score);
n--;/*$ERROR3$*/
}
i++;
}
printf("n=%d\n",n);
}
参考答案:
$1$:
structstudentstud[5]={{101,"Liping",45},
$2$:
if(stud[i].score<60)
$3$:
n++;
2填空
9个评委给某个参赛选手打分(分数存于数组a中),去掉一个最高分和一个最低分,求该参赛选手的平均分。
#include
voidmain()
{
inti;
floata[9],max,min,ave;
printf("Inputarray:
\n");
for(i=0;i<9;i++)
scanf("%f",___);/*$BLANK1$*/
max=min=ave=___;/*$BLANK2$*/
for(i=1;i<9