C语言上机模拟题Word文件下载.docx
《C语言上机模拟题Word文件下载.docx》由会员分享,可在线阅读,更多相关《C语言上机模拟题Word文件下载.docx(19页珍藏版)》请在冰豆网上搜索。
scanf("
%d"
&
a[i]);
t=mymax(a[10],10);
/*$ERROR3$*/t=mymax(a,10)
MAX=%d\n"
t);
3、从键盘输入5个学生记录信息(姓名中不能包含空格字符),统计其中不及格的人数并输出不及格学生的信息。
string.h>
structstudent
{
intnum;
charname[20];
intscore;
};
structstudentstud[5];
inti,n=0;
5;
{
printf("
InputNO.%dnum:
"
i+1);
stud[i].num);
InputNO.%dname:
%s"
stud[i].name);
InputNO.%dscore:
stud[i].score);
num\tname\t\tscore\n"
);
i=1;
/*$ERROR1$*/i=0
while(i<
5)
if(score<
60)/*$ERROR2$*/stud[i].score
{
printf("
%d\t%-15s\t%d\n"
stud[i].num,stud[i].name,stud[i].score);
n--;
/*$ERROR3$*/n++
i++;
n=%d\n"
n);
4、以下程序的功能为:
第一个数是1,从第二个数起没个数都是它前一项的2倍再加5,求第n个数是多少(n从键盘输入且在20以内,用递归实现)。
longfunction(intn)
longm;
if(n==1)
m=0;
/*$ERROR1$*/m=1;
else
m=2*m+5;
/*$ERROR2$*/m=2*function(m-1)+5
return(m);
intn;
scanf("
/*$ERROR3$*/&
n
m=function(n);
%ld\n"
m);
5、从键盘输入一字符串并删除该字符串中所有大写字母字符。
intn=0,i;
chars[81];
gets(s);
/*$ERROR1$*/i=0;
while(s[i]='
\0'
)/*$ERROR2$*/s[i]!
='
if(!
(s[i]>
A'
&
s[i]<
Z'
))
s[n++]=s[i];
s[i]='
;
/*$ERROR3$*/s[n]='
puts(s);
6、把字符串中所有大写字母改写成该字母的前一个字母,如果是字母‘A’,则改写成字母‘Z’,小写字母和其它字符保持不变。
chars[80];
inti;
getc(s);
/*$ERROR1$*/gets(s);
s[i]!
i++)
if(s[i]='
)/*$ERROR2$*/s[i]=='
s[i]='
elseif(s[i]>
B'
)
s[i]=s[i]-1;
%c\n"
s);
/*$ERROR3$*/"
%s\n"
7、在屏幕上输出如下图形:
*****
****
***
**
*
chara[5];
inti,j;
for(j=0;
a[j]="
*"
/*$ERROR1$*/a[j]=’*’;
j=0;
while(j<
i)/*$ERROR2$*/j<
5-i
%c"
a[j]);
j++;
/n"
/*$ERROR3$*/printf("
\n"
8、在屏幕上输出如下图形:
1
23
345
4567
56789
6)
j=1;
/*$ERROR1$*/j=i
2*i)
j);
/*$ERROR2$*/printf("
i--;
/*$ERROR3$*/i++
9、将输入的数字字符串(长度小于10)转换成对应的整数,如将输入的字符串“2010”转换为整数2010.
chars[10];
longk=0;
getchar(s);
j=strlen(s);
/*$ERROR2$*/i=0;
j)
if(s[i]>
0'
9'
)
k=k*10+s[i];
/*$ERROR3$*/k=k*10+s[i]-‘0’;
k=%ld\n"
k);
二、填空题:
1、输出以下图形(数字之间没有空格,每行第一个数字前也没有空格)
0001000
0011100
0111110
1111111
math.h>
for(i=-3;
=___;
i++)/*$BLANK1$*/3
j=1;
while(j<
=abs(i))
0"
j++;
while(j___7-2*abs(i))/*$BLANK2$*/<
=
1"
___;
/*$BLANK3$*/j++
2、有数列1,1,2,4,7,13,24,……,该数列的规律是,从第四项起,每项是它前三项之和。
下列程序功能是:
将该数列的前30项存放在一维数组中并全部输出。
输出时要求每行输出5个数。
longf[30];
f[0]=f[1]=1;
f[2]=___;
/*$BLANK1$*/2
%10ld%10ld%10ld"
f[0],f[1],f[2]);
for(i=3;
___;
i++)/*$BLANK2$*/30
f[i]=f[i-1]+f[i-2]+f[i-3];
if(i%5==___)/*$BLANK3$*/0
%10ld"
f[i]);
3、定义求n!
的递归函数f(),并调用函数f()求1!
+2!
+3!
+4!
+5!
的值。
longf(intn)
if(n==1||n==0)
return
(1);
else
return(n*f(___));
/*$BLANK1$*/return(n*f(n-1));
longs;
s=___;
/*$BLANK2$*/s=0;
for(i=1;
=5;
s+=f(i);
1!
+5!
=%ld\n"
___);
/*$BLANK3$*/s
4、从键盘输入两个正整数,并输出他们的最大公约数。
intgcd(intm,intn)
intr,t;
if(m<
n)
t=m;
m=n;
/*$BLANK1$*/n=t;
while(n>
0)
r=m%n;
n=r;
}
return(___);
/*$BLANK2$*/return(m);
}
intm,n,result;
Peaseinputtwonumber:
%d%d"
/*$BLANK3$*/&
m,&
result=gcd(m,n);
result=%d\n"
result);
5、以下程序的功能是将指定字符插入到字符串s指定位置。
程序输出结果是:
1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ请填空。
voidInsert(chars[],intposition,charch);
chars[80]={"
1234567890ABCEFGHIJKLMNOPQRSTUVWXYZ"
Insert(s,13,'
D'
voidInsert(chars[],intposition,charch)
inti=0;
while(s[i]!
='
)i++;
while(i>
_____)/*$BLANK1$*/position
s[i+1]=_____;
/*$BLANK2$*/s[i+1]=s[i];
--i;
s[i]=____;
/*$BLANK3$*/s[i]=ch;
6、根据给定的数组a,求出其中最大的那个元素(假设只有唯一一个),以及它所在数组的行标和列标。
inti,j,row,col;
inta[3][4]={{3,5,1,8},{6,4,11,7},{9,3,10,2}};
row=col=0;
i++)/*$BLANK1$*/i<
3
4;
if(a[row][col]<
______)/*$BLANK2$*/a[i][j]
row=i;
col=j;
max=%d,row=%d,col=%d\n"
______,row,col);
/*$BLANK3$*/a[row][col]
7、统计用0~9之间不同的3个数字构成一个三位数(百位不能为0)有多少种方法,如:
123,345,182等。
{inti,j,k,count;
count=__;
/*$BLANK1$*/0
for(i=1;
=9;
if(___)/*$BLANK2$*/i!
=j
for(k=0;
k<
k++)
if(k!
=i__k!
=j)/*$BLANK3$*/k!
=i&
k!
count++;
printf("
8、计算并输出给定整数n的所有因子之和(不包括1和它自身)。
规定n的值不大于1000.
intn,i,s;
Pleaseinputn:
/*$BLANK1$*/&
s___;
/*$BLANK2$*/s=0;
for(i=2;
i<
=n-1;
if(n%i==0)
s=s+___;
/*$BLANK3$*/s=s+i
s=%d\n"
9、根据输入的打车里程数计算应付车费(取1位小数)。
(1)出租车起步价8元;
(2)超出3公里,每公里加1.5元;
(3)超出50公里(包括50)费用加倍。
doublex,y;
Pleaseinputx:
%lf"
____);
x
if(x____3)/*$BLANK2$*/x<
=3
y=8;
if(x____50)/*$BLANK3$*/x>
=50
y=2*(8+(x-3)*1.5);
else
y=8+(x-3)*1.5;
y=%.1f\n"
y);
三、程序设计题:
1、求所有的水仙花数之和。
如:
153=1*1*1+5*5*5+3*3*3
voidPRINT(ints)
FILE*out;
sum=%d\n"
if((out=fopen("
C:
\\24000101\\RESULT.DAT"
"
w+"
))!
=NULL)
fprintf(out,"
sum=%d"
fclose(out);
{ints=0,a,b,c;
Inti;
for(i=100;
1000;
{a=i/100;
b=i/10%10;
c=i%10;
If(a*a*a+b*b*b+c*c*c)==i
s=s+i;
PRINT(s);
2、根据下式求s的值(要求使用循环实现):
s=1+1/2+1/3+1/4+……+1/n,直到最后一项小于0.0001.
voidPRINT(doubles)
s=%.5f\n"
\\24000102\\RESULT.DAT"
s=%.5f"
{longi=1;
floatt;
doubles=0;
do
{t=1.0/i;
i++;
s+=t;
}while(t>
=0.0001);
3、根据下式求s的值(要求使用循环实现):
s=1+1/(1+2)+1/(1+2+3)+1/(1+2+3+4)+……+1/(1+2+3+……+10)
s=.%.5f"
{inti;
doublet=0,s=0;
=10;
{t=t+i;
s=s+1.0/t;
4、根据下式求s的值(要求使用循环实现):
s=(1-1/2)+(1/3-1/4)+……+(1/99-1/100)
\\24000107\\RESULT.DAT"
=50;
s+=1.0/(2*i-1)-1.0/(2*i);
5、韩信有一队兵,他想知道有多少人,便让士兵排队报数。
按从1至5报数,最末一个士兵报的数为1;
按从1至6报数,最末一个士兵报的数为5;
按从1至7报数,最末一个士兵报的数为4,最后再按从1至11报数,最末一个士兵报的数为10。
请编程计算韩信至少有多少兵。
voidPRINT(intn)
num=%d\n"
\\24000106\\RESULT.DAT"
num=%dg"
{intn;
for(n=1;
n++)
if((n%5==1)&
(n%6==5)&
(n%7==4)&
(n%11==10))break;
PRINT(n);
6、有男人、女人和小孩共十人,在一家饭馆吃饭共花了50元,每个男人各花7元,每个女人各花6元,每个小孩各花4元,问男人、女人和小孩各有几个人?
注意:
(1)男人、女人和小孩都必须有;
(2)问题的解只有一种;
(3)要求用循环实现。
voidPRINT(inta,intb,intc)
men=%d,women=%d,children=%d\n"
a,b,c);
\\24000105\\RESULT.DAT"
men=%d,women=%d,children=%d."
{inta,b,c;
for(a=1;
a<
a++)
for(b=1;
b<
b++)
{c=10-a-b;
if(a*7+b*6+c*4==50&
c>
0)PRINT(a,b,c);
7、计算800到2010之间满足下列条件的所有自然数之和。
(1)能被7整除;
(2)减1之后能被3整除。
voidPRINT(longs)
s=%ld\n"
\\24000103\\RESULT.DAT"
s=%ld"
longs=0;
for(n=800;
n<
=2010;
if(n%7==0&
(n-1)%3==0)s+=n;
8、求2010到9999之间个位数不是1的所有素数之和。
{inti,j;
for(i=2011;
=9999;
i+=2)
{for(j=2;
=i/2;
if(i%j==0)break;
if(j>
i/2&
i%10!
=1)s+=i;
9、设有正整数a和b,其中:
(1)a<
50,b<
50;
(2)2*a+b*b等于2010;
(3)a*a+b*b等于3305。
求满足条件的a和b的值。
voidPRINT(inta,intb)
a=%d,b=%d\n"
a,b);
=