浙江大学C语言上机题及答案.docx
《浙江大学C语言上机题及答案.docx》由会员分享,可在线阅读,更多相关《浙江大学C语言上机题及答案.docx(53页珍藏版)》请在冰豆网上搜索。
浙江大学C语言上机题及答案
c语言程序设计题目及答案
40021程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat(0输入1个正整数n,计算s的前n项的和(保留4位小数)。
s=1+1/2!
+....+1/n!
例:
括号内是说明
输入:
2(repeat=2)
2(n=2)
10(n=10)
输出:
1.5000
1.7183
#include"stdio.h"
intmain()
{
intri,repeat;
inti,n;
floats,t;
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++){
scanf("%d",&n);
/*---------*/
printf("%0.4f\n",s);
}
}
40022程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat(0输入2个正整数m和n(1<=m,n<=1000),输出m和n之间所有满足各位数字的立方和等于它本身的数。
输出语句:
printf("%d\n",i);
例:
括号内是说明
输入:
2(repeat=2)
100400(m=100,n=400)
1100(m=1,n=100)
输出:
153(1*1*1+5*5*5+3*3*3=153)
370(3*3*3+7*7*7=370)
371(3*3*3+7*7*7+1*1*1=371)
1
#include"stdio.h"
intmain()
{
intri,repeat;
inti,digit,m,n,number,sum;
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++){
scanf("%d%d",&m,&n);
/*---------*/
}
}
40023程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat(0输入2个正整数m和n(1<=m,n<=500),统计并输出m和n之间的素数的个数以及这些素数的和。
例:
括号内是说明
输入:
3(repeat=2)
110(m=1,n=10)
2035(m=20,n=35)
1416(m=14,n=16)
输出:
count=4,sum=17(1到10之间有4个素数:
2,3,5,7)
count=3,sum=83(20到35之间有3个素数:
23,29,31)
count=0,sum=0(14到16之间没有素数)
#include"stdio.h"
#include"math.h"
intmain()
{
intri,repeat;
intcount,digit,i,j,k,m,n,sum;
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++){
scanf("%d%d",&m,&n);
/*---------*/
printf("count=%d,sum=%d\n",count,sum);
}
}
40031程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat(0输入一行字符,统计其中单词的个数。
各单词之间用空格分隔,空格数可以是多个。
例:
括号内是说明
输入
2(repeat=2)
Reoldbuildingroom123
Programmingisfun
输出
4
3
#include
intmain()
{
intri,repeat;
intcount,word;
charc;
scanf("%d",&repeat);
getchar();
for(ri=1;ri<=repeat;ri++){
c=getchar();
/*---------*/
printf("%d\n",count);
}
}
40032程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat(0输入一个整数,从高位开始逐位输出它的各位数字。
输出语句:
printf("%-2d",digit);
例:
括号内是说明
输入
3(repeat=3)
123456
-600
8
输出
123456
600
8
#include
intmain()
{
intri,repeat;
intdigit;
longin,temp,pow;
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++){
scanf("%ld",&in);
/*---------*/
printf("\n");
}
}
40033程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat(0程序模拟简单运算器的工作:
输入一个算式(没有空格),遇等号"="说明输入结束,输出结果。
假设计算器只能进行加减乘除运算,运算数和结果都是整数,4种运算符的优先级相同,按从左到右的顺序计算。
例:
括号内是说明
输入
2(repeat=2)
15+2/3=
1+2*10-10/2=
输出
5
10
#include
intmain()
{
intri,repeat;
intop1,op2,res;
charoperator;
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++){
scanf("%d",&op1);
operator=getchar();
/*---------*/
printf("%d\n",res);
}
}
50001程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat(0输入1个正整数n,计算s的前n项的和(保留4位小数)。
s=1+1/2!
+....+1/n!
要求定义并调用函数fact(n)计算n的阶乘。
例:
括号内是说明
输入:
2(repeat=2)
2(n=2)
10(n=10)
输出:
1.5000
1.7183
#include"stdio.h"
intmain()
{
intri,repeat;
inti,n;
doubles;
doublefact(intn);
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++){
scanf("%d",&n);
/*---------*/
printf("%0.4f\n",s);
}
}
/*---------*/
50002程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat(0输入2个正整数a和n,求a+aa+aaa+aa…a(n个a)之和。
要求定义并调用函数fn(a,n),它的功能是返回aa…a(n个a)。
例如,fn(3,2)的返回值是33。
例:
括号内是说明
输入
2(repeat=2)
23(a=2,n=3)
85(a=8,n=5)
输出
246(2+22+222)
98760(8+88+888+8888+88888)
#include
voidmain()
{
intri,repeat;
inti,n;
longa,sn;
longfn(longa,intn);
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++){
scanf("%ld%d",&a,&n);
/*---------*/
printf("%ld\n",sn);
}
}
/*---------*/
50003程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat(0读入1个整数,统计并输出该数中2的个数。
要求定义并调用函数countdigit(number,digit),它的功能是统计整数number中数字digit的个数。
例如,countdigit(10090,0)的返回值是3。
例:
括号内是说明
输入:
3(repeat=3)
-21902
2
345543
输出:
count=2(-21902中有2个2)
count=1(有1个2)
count=0(345543中没有2)
#include"stdio.h"
intmain()
{
intri,repeat;
intcount;
longin;
intcountdigit(longnumber,intdigit);
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++){
scanf("%ld",&in);
/*---------*/
printf("count=%d\n",count);
}
}
/*---------*/
50004程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat(0输入一个正整数n,如果它是素数,输出"YES",否则,输出"NO"(素数就是只能被1和自身整除的正整数,1不是素数,2是素数)。
要求定义并调用函数prime(m)判断m是否为素数。
例:
括号内是说明
输入
4(repeat=4)
12917
输出
NO(1不是素数)
YES(2是素数)
NO(9不是素数)
YES(17是素数)
#include
#include
intmain()
{
intri,repeat;
intflag,n;
intprime(intm);
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++){
scanf("%d",&n);
/*---------*/
if(flag)printf("YES\n");
elseprintf("NO\n");
}
}
/*---------*/
50005程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat(0输入2个正整数m和n(1<=m,n<=500),统计并输出m和n之间的素数的个数以及这些素数的和(素数就是只能被1和自身整除的正整数,1不是素数,2是素数)。
要求定义并调用函数prime(m)判断m是否为素数。
例:
括号内是说明
输入:
3(repeat=3)
110(m=1,n=10)
2035(m=20,n=35)
1416(m=14,n=16)
输出:
count=4,sum=17(1到10之间有4个素数:
2,3,5,7)
count=3,sum=83(20到35之间有3个素数:
23,29,31)
count=0,sum=0(14到16之间没有素数)
#include"stdio.h"
#include"math.h"
intmain()
{
intri,repeat;
intcount,i,n,sum;
intprime(intm);
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++){
scanf("%d%d",&m,&n);
/*---------*/
printf("count=%d,sum=%d\n",count,sum);
}
}
/*---------*/
******50006程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat(0输入2个正整数m和n(1<=m,n<=10000),输出m和n之间所有的Fibonacci数。
Fibonacci序列(第1项起):
1123581321......
要求定义并调用函数fib(n),它的功能是返回第n项Fibonacci数。
例如,fib(7)的返回值是13。
输出语句:
printf("%d",f);
例:
括号内是说明
输入:
3(repeat=3)
110(m=1,n=10)
20100(m=20,n=100)
10006000(m=1000,n=6000)
输出:
112358(1到10之间的Fibonacci数)
21345589(20到100之间的Fibonacci数)
159725844181(1000到6000之间的Fibonacci数)
#include"stdio.h"
#include"math.h"
intmain()
{
intri,repeat;
inti,m,n;
longf;
longfib(intn);
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++){
scanf("%d%d",&m,&n);
/*---------*/
printf("\n");
}
}
/*---------*/
50007程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat(0输入2个正整数m和n(1<=m,n<=1000),输出m到n之间的所有完数(完数就是因子和与它本身相等的数)。
要求定义并调用函数factorsum(number),它的功能是返回number的因子和。
例如,digitsum(12)的返回值是16(1+2+3+4+6)。
输出语句:
printf("%d",i);
例:
括号内是说明
输入:
2(repeat=2)
20500(m=100,n=400)
1100(m=1,n=100)
输出:
28496
1628
#include"stdio.h"
intmain()
{
intri,repeat;
inti,m,n;
longfactorsum(intnumber);
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++){
scanf("%d%d",&m,&n);
/*---------*/for(i=m;i<=n;i++){
if(factorsum(i)==i)
printf("%ld",factorsum(i));}
printf("\n");
}
}
/*---------*/longfactorsum(intnumber){
inti;
longresult=0;
if(number==1)result=1;
else
for(i=1;i<=number/2;i++){
if(number%i==0)
result=result+i;}
returnresult;}
50008程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat(0输入2个正整数m和n(1<=m,n<=1000),输出m到n之间的所有满足各位数字的立方和等于它本身的数。
要求定义并调用函数is(number)判断number的各位数字之立方和是否等于它本身。
输出语句:
printf("%d",i);
例:
括号内是说明
输入:
2(repeat=2)
100400(m=100,n=400)
1100(m=1,n=100)
输出:
153370371(1*1*1+5*5*5+3*3*3=153;3*3*3+7*7*7=370;3*3*3+7*7*7+1*1*1=371)
1
#include"stdio.h"
intmain()
{
intri,repeat;
inti,m,n;
intis(intnumber);
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++){
scanf("%d%d",&m,&n);
/*---------*/for(i=m;i<=n;i++)
if(is(i))
printf("%d",i);
printf("\n");
}
}
/*---------*/
intis(intnumber){
intresult,t,j,sum;
j=number;
result=0;sum=0;
while(number>0){
t=number%10;
sum=sum+t*t*t;
number=number/10;}
if(sum==j)
result=1;
returnresult;}
50009程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat(0输入一个整数,将它逆序输出。
要求定义并调用函数reverse(number),它的功能是返回number的逆序数。
例如reverse(12345)的返回值是54321。
例:
括号内是说明
输入
4(repeat=4)
123456-100-299
输出
654321
-1
-1
99
#include
intmain()
{
intri,repeat;
longin,res;
longreverse(longnumber);
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++){
scanf("%ld",&in);
/*---------*/
printf("%ld\n",res);
}
}
/*---------*/
50010程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat(0输入1个正整数n,将其转换为二进制后输出。
要求定义并调用函数dectobin(n),它的功能是输出n的二进制。
例如,调用dectobin(10),输出1010。
输出语句:
printf("%d");
例:
括号内是说明
输入:
2(repeat=2)
15(n=2)
100(n=10)
输出:
1111
1100100
#include"stdio.h"
intmain()
{
intri,repeat;
inti,n;
voiddectobin(intn);
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++){
scanf("%d",&n);
/*---------*/dectobin(n);
printf("\n");
}
}
/*---------*/voiddectobin(intn){
inti,j,a[20];
for(i=0;n>0;i++){
a[i]=n%2;
n=n/2;}
for(j=i-1;j>=0;j--)
printf("%d",a[j]);}
60001程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat(0输入一个正整数n(1例:
括号内是说明
输入
2(repeat=2)
312-6
5122540
输出
aver=-1.00
aver=4.60
#include
intmain()
{
intri,repeat;
inti,n,sum;
floataver;
inta[10];
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++){
scanf("%d",&n);
for(i=0;iscanf("%d",&a[i]);
/*---------*/
printf("aver=%.2f\n",aver);
}
}
60002程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat(0输入一个正整数n(1例:
括号内是说明
输入
3(repeat=3)
3164
31081
512540
输出
max=6,index=1(最大值6的下标是1)
max=10,index=0(最大值10的下标是0)
max=5,index=2(最大值5的下标是2)
#include
intmain()
{
intri,repeat;
inti,index,n,max;
inta[10];
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++){
scanf("%d",&n);
for(i=0;iscanf("%d",&a[i]);
/*---------*/max=a[0];index=0;
for(i=1;iif(a[i]>=max){
max=a[i];
index=i;}
printf("max=%d,index=%d\n",a[index],index);
}
}
60003程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat(0输入一个正整数n(1