山科大C语言不完全题库_第1页
山科大C语言不完全题库_第2页
山科大C语言不完全题库_第3页
山科大C语言不完全题库_第4页
已阅读5页,还剩304页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ProblemA:两整数相加减TimeLimit:1SecMemoryLimit:2MB

Submit:2320Solved:1304

[Submit][Status][WebBoard]Description计算a+b和a-boInput输入为一对整数a和b。a,b用空格分开。Output输出a+b和a-b的计算结果,各占一行。SampleInput修SampleOutput3-1#include<stdio.h>intmain()(inta,b,c,d;scanf("%d%d',,&a,&b);c=a+b;

d=a-b;printf(H%d\n%d\n,,,c,d);}ProblemB:求圆的面积和周长TimeLimit:1SecMemoryLimit:2MB

Submit:6778Solved:2819

[Submit][Status][WebBoard]Description从键盘输入圆的半径,求圆的面积和周长,圆周率取3.14。Input输入一个浮点型数据,有效数字不会超过十进制的6位。Output输出为两行。第一行为圆的面积,第二行为圆的周长,格式见sample。SampleInput3SampleOutputArea:28.260000Perimeter:18.840000HINT了解浮点类型的输入、输出和算术运算符

#include<stdio.h>#defineM_PI3.14intmain()(doubler,s,l;scant('^ir.&r);s=M_PI*r*r;l=2*M_PI*r;printf("Area:%.6lf\n",s);printf("Perimeter:}ProblemC:立方体的体积TimeLimit:1SecMemoryLimit:2MB

Submit:2888Solved:1542

[Submit][Status][WebBoard]Description给出长方体的长、宽、高,求其体积。Input

输入三个浮点数,分别表示长方体的长、宽、高。Output输出体积,不输出无意义的0。SampleInput345SampleOutput60#include<stdio.h>intmain(){doublea,b,c,v;scant("%lf%lf%lf',5&a,&bJ&c);v=a*b*c;printf("%g",v);}ProblemD:三个数求和TimeLimit:1SecMemoryLimit:2MBSubmit:778Solved:587[Submit][Status][WebBoard]Description输入3个整数,求它们的累加和。Input3个用一个空格隔开的整数。Output输入的3个整数的和。SampleInput123SampleOutput6#include<stdio.h>intmain()(inta,b,c,d;scant("%d%d%d",&a,&b,&c);d=a+b+c;printfC'%d",d);TimeLimit:1SecMemoryLimit:2MB

Submit:9315Solved:2684

[Submit][Status][WebBoard]Description计算两整数X和y(0<x,y<1000)的和、差、积、商、余数、x的平方和y的三次方。Input输入只有一行,格式见sample。Output输出为多行,按顺序每行输出x,y的和、差、积、商、余数、x的平方和y的三次方,格式见sampleSampleInputx=11,y=3SampleOutputx+y:14x-y:8x*y:33x/yquotient:3,remainder:2xA2:121yA3:27HINT注意输入输出格式。了解c语言整数除法运算符的特点,并且没有求累的运算符。#include<stdio.h>intmain()intx,y,a,b,c,d,e,f,g;scant("%d%d",&x,&y);a=x+y;b=x-y;c=x*y;d=x/y;e=x%y;f=x*x;g=y*y*y;printf("x+y:%d\n",a);printf("x-y:%d\n",b);printf("x*y:%d\n",c);printf("x/yquotient:%d\n",d);printf("remainder:%d\n",e);printf("x八2:%d\n",f);printf("yA3:%d",g);

ProblemB:平均值TimeLimit:1SecMemoryLimit:2MB

Submit:5060Solved:2709

[Submit][Status][WebBoard]Description求3个数的平均值。Input输入只有一行,为3个较小的整数。Output输出为这3个整数的平均值,保留3位小数。SampleInput123SampleOutput2.000HINT注意除法运算对整型数据和浮点型数据是不一样的。#include<stdio.h>intmain()inta,b,c;floatave;scant("%d%d%d",&a,&b,&c);ave=(a+b+c)/3.0;printf(M%.3fH,ave);}ProblemC:奇数还是偶数?TimeLimit:1SecMemoryLimit:2MB

Submit:3612Solved:2699

[Submit][Status][WebBoard]Description输入一个整数,判读它是奇数还是偶数。Input输入只有一行,为一个100以内的正整数。Output输出为一行。若输入为偶数则输出“even”,奇数输出“odd”.SampleInput30SampleOutputevenHINT用整数运算可以解决,练习“?:”表达式。#include<stdio.h>intmain()(inta;scantC'%dH,&a);if(a%2==0)printf("even");elseprintf("odd");}ProblemA:按格式输出(填空)TimeLimit:1SecMemoryLimit:2MB

Submit:910Solved:598

[Submit][Status][WebBoard]Description给出部分程序如下,在横线内填入合适的内容使这个程序按规定格式输出:#include<stdio.h>intmain()

intx,y;floatf;scanf("%d%d%f',&x,&y,&f);printf("- );)Input分别输入两个整数和一个实数Output按如下格式输出(其中实数保留两位小数输出,行尾没有回车):x=10,y=20,f=3.40SampleInput10203.4SampleOutputx=10,y=20,f=3.40#include<stdio.h>intmain()(intx,y;floatf;scanf("%d%d%f',,&x,&y,&f);printf(',x=%d,y=%d,f=%.2f',Jx,y,f);

}ProblemB:货币兑换TimeLimit:1SecMemoryLimit:2MB

Submit:6422Solved:2465

[Submit][Status][WebBoard]Description给出人民币对美元、欧元、日元的当日汇率,求给定金额的人民币能兑换成外币的金额,求给定金额的外币能兑换成人民币的金额。要计算的外币有三种:美元、欧元、日元。Input输入有三行。第一行依次为美元、欧元、日元外币汇率,用空格分开。汇率用100外币为单位,精确到小数点后4位,如668.5200表示“100美元=668.5200人民币”。汇率浮动范围为(0,10000)。第二行为外币金额x,第三行为人民币金额y。x,y均为整数,且0<x,y<10000。Output输出为两行。第一行是金额为X的美元、欧元、日元兑换成人民币的金额,用空格分开。第二行是金额为y的人民币兑换成美元、欧元、日元的金额,用空格分开。所有金额精确到小数点后两位。SampleInput668.5200908.06857.985215001500SampleOutput10027.8013621.03119.78224.38165.1918784.75HINT了解浮点数据类型的精确度和输出控制。

include<stdio.h>intmain(){doublea,b,c;doublex;doubley;scanf("%lf%lf%ir,&a,&b,&c);scanf("%lf",&x);scanf("%lf",&y);printf(M%.2lf%.2lf%.2lf\n",x*0.01*a,x*0.01*b,x*0.01*c);printf("%.2lf%.2lf%.2lf\n",y/a*100,y/b*100,y/c*100);return0;}ProblemC:求字符的值TimeLimit:1SecMemoryLimit:2MBSubmit:3729Solved:2538

[Submit][Status][WebBoard]Description从键盘输入3个字符(不含双字节字符),分别输出每个字符的十进制值(ASCII码)、八进制值和十六进制值。

Input输入为3个字符。Output输出为3行。每一行为每个字符(对应输入顺序)的十进制、八进制和十六进制值,用空格分隔开。每个输出的值占3个字符,不足3个字符前面补0。SampleInput0ASampleOutput048060030032040020065101041HINT了解字符值的存储和整型的关系。#include<stdio.h>intmain(){chara,b,c;scant("%c%c%cM,&a,&b,&c);printf("%.3d%.3o%.3x\n",a,a,a);printf(M%.3d%.3o%.3x\n',,b,b,b);printf("%.3d%.3o%.3x\n",c,c,c);

ProblemD:绝对值TimeLimit:1SecMemoryLimit:2MB

Submit:6976Solved:2511

[Submit][Status][WebBoard]Description求整型数据和浮点型数据的绝对值。Input输入两个数,第一个是整数,第二个是浮点数。Output输出为两行,第一行为整数的绝对值,第二行为浮点数的绝对值,注意浮点数的绝对值不输出无意义的0。SampleInput-11SampleOutput1HINT求绝对值可以用标准库函数来完成,也可以自己判断。注意浮点数的输出格式。求绝对值的函数在哪个头文件?貌似很多人会搞错,包括很多编书的人!#include<stdio.h>intmain()

intx;doubley;scant("%d%lf",&x,&y);(x>=0)?printf("%d\n",x):printf(,,%d\n,'J-x);(y>=0)?printf("%lgM,y):printfC'%lgH,-y);}ProblemE:对称的点TimeLimit:1SecMemoryLimit:128MBSubmit:1154Solved:819

[Submit][Status][WebBoard]Description对于给定的一个平面直角坐标系中的点p,输出p关于X轴、y轴和原点对称的点的坐标。Input输入2个实数,分别是点p的x坐标和y坐标。Output输出分为3行,分别是p关于x轴、y轴和原点对称的点的x坐标和y坐标。SampleInput3.56.7SampleOutput3.5-6.7-3.56.7-3.5-6.7#include<stdio.h>intmain()(doublex,y;scant("%lf%lf",&x,&y);printf('f%lg%+lg\nM,x,-y);printf("%+lg%lg\n,',-x,y);printf("%+lg%+lg\n,',-x,-y);}ProblemF:简单的打折计算TimeLimit:1SecMemoryLimit:2MBSubmit:5018Solved:2516[Submit][Status][WebBoard]Description商店规定:消费满n元,可以打八八折。设某件商品标价m元,输入购买的件数x,计算出需要支付的金额(单位:元),精确到分。Input输入只有一行,三个整数m、n和x,K0<x<m<n<1000oOutput输出金额,精确到分。SampleInput953004SampleOutput334.40HINT了解浮点型的输出控制,注意整型和浮点型混合运算过程中的数据类型转换。#include<stdio.h>intmain()(intm,x,n,a;floatb;scanf("%d%d%d",&m,&n,&x);0<x&&x<m;x<m&&m<n;m<n&&n<1000;a=m*x;if(a>n)b=0.88*a;else

b=a;printf(',%.2f\n,',b);return0;}ProblemG:判断闰年TimeLimit:1SecMemoryLimit:2MB

Submit:5510Solved:2645

[Submit][Status][WebBoard]Description输入一个正整数的年份,判断是否为闰年。Input输入只有一行,为一个10000以内的正整数。Output输出为一行。若输入为闰年偶数则输出“Yes”,否则输出"No”。SampleInput2010SampleOutputNoHINT了解逻辑运算符和关系运算符。#include<stdio.h>intmain()(intyear;scanf("%d”,&year);((year%4==0)&&(year%100!=0))||(year%400==0)?printf("Yes'1):printf("No");}ProblemH:球的表面积与体积TimeLimit:1SecMemoryLimit:128MBSubmit:1905Solved:692

[Submit][Status][WebBoard]Description给定一个球体的直径(非负数),求它的表面积和体积。Input输入只有一个非负实数,表示球体的直径。Output输出有2行,格式见样例。其中等号(“=”)前后各有一个空格,输出的结果保留6位小数。SampleOutputarea=12.566371volume=4.188790HINT在math.h中,定义了一个常量M_PI,它就是圆周率。如果你的结果不对,试着包含这个头文件并使用常量M_PI代替你程序中的圆周率。使用math.h中M_PI的程序在OJ上无法编译通过,请自行定义M_PI为3.14159265358979323846,或者用三角函数计算M_P1的值,如:4*atan(1.0),-2*asin(-l).#include<stdio.h>#defineM_PI3.14159265358979323846intmain()(doublel,r,s,v;scant("%ir,&l);r=l/2;s=4*M_PI*r*r;v=4/3.0*M_PI*r*r*r;print!("area=%.6lf\n",s);printf("volume=%.6lf",v);

ProblemI:判断是否是元音字母TimeLimit:1SecMemoryLimit:2MB

Submit:1769Solved:1141

[Submit][Status][WebBoard]Description输入一个英文字母,判断是否是元音字母。元音字母是:a,e,i,ou,A,E,I,O,UInput输入一个英文字母Output是元音字母,输出“yes”,否则输出“no”,行尾没有回车。SampleInputASampleOutputyes#include<stdio.h>voidmain()charc;c=getchar();switch(c)(case'a':case'e':case'i':case'o':case'u':case'A':caseE:caseT:case'O':case'U^printf("yes");break;default:printf("no");ProblemA:水仙花数TimeLimit:1SecMemoryLimit:2MB

Submit:5304Solved:2738

[Submit][Status][WebBoard]Description如果一个三位十进制数等于其各位数字的立方和,则称这个数为水仙花数。如:13+53+33=153.Input一个整数x,100<=x<=999.OutputX是水仙花数,则输出“YES”,否则为“NO”。SampleInput153SampleOutputYES#include<stdio.h>intmain()(intx,a,b,c;scant("%d",&x);b=x/10%10;c=x/100;if(a*a*a+b*b*b+c*c*c==x)printf("YES");elseprintf("NO");}ProblemB:三个数比较大小TimeLimit:1SecMemoryLimit:2MB

Submit:6006Solved:2629

[Submit][Status][WebBoard]Description从键盘上输入。〜100之间的三个数,按从小到大的顺序输出。Input输入只有一行,为三个整数。Output按从小到大输出这三个数。SampleInput151020HINT用if语句判断各种情况可以解决这个问题。include<stdio.h>intmain()(inta,b,c;scantC'%d%d%d",&a,&b,&c);if(a>=b)(if(b>=c)printf(u%d%d%d,',c,b,a);else{if(a>=c)printf("%d%d%d",b,c,a);elseprintf("%d%d%d",b,a,c);}else(if(b<c)printf("%d%d%d",a,b,c);else(if(a<c)printf("%d%d%d",a,c,b);elseprintff'%d%d%d",c,a,b);}}}ProblemC:输出是m的倍数或n的倍数、但不是m和n的公倍数的数;Description输出1〜k之间是m的倍数或n的倍数、但不是m和n的公倍数的数,其中l<=m,nvkvlOO,且m与n不相等。Input输入三个整数,依次为k、m、noOutput从小到大输出符合题意的所有整数,两数之间用一个空格分开。SampleInput1523SampleOutput23489101415HINT难点在于输出格式的控制:空格在数的中间,学会用循环时边界情况的特殊处理。#include<stdio.h>intmain(){intk,m,n,i=0,j;scant("%d%dfor(j=1;j<=k;j++){if((j%m==0&&j%n!=0)||(j%m!=0&&j%n==0)){i++;if(i==1)

printfelseprintf("}}ProblemD:A+BProblemDescription计算a+b,0<=a,b<1000。Input输入有多对整数a和b组成,每对a和b占一行,a,b用空格分开。Output每行输出一个a+b的值,顺序与输入对应。SampleInput121020SampleOutput330HINTOJ系统上测试输入结束符为EOF(EndOfFile),其值为-1。用scanf()把文件所有内容读完后,会读到EOF,所以可以用来判断输入是否完成,测试时可以用Ctrl+Z产生EOF。本题解法参看FAQo

#include<stdio.h>intmain()(inta,b;while(scanf(H%d%d'1,&a,&b)!=EOF)printf(,'%d\n,',a+b);)ProblemA:GHacker的解谜过关游戏DescriptionGHacker最近痴迷于一个新上市的解谜游戏,其中一关的过关是破解一个字符串S。经过3天的冥思苦想,GHacker成功的搞明白了这其中的奥秘,把串S中的整数取出来求和,就可以过关了。但是GHacker的数学实在糟糕。他无法在短暂的时间内算出来,只好求助Jackie。Jackie观察到虽然每次出现的数字不同,但是其它的符号并不会变化。于是Jackie编写了一个非常短的程序,帮助GHacker把这一关过了。Input输入为串s,只有一行。Output串S中用非数字(0-9)分隔开的非负整数之和,不会超出int类型的数据范围。SampleInput'13?:[7514],54.487=="(438922x159??392)%032\n111cdef120$95;SampleOutput447899

HINTscanf()可以解决这个问题,注意转义字符和格式控制字符。#include<stdio.h>intmain()(inta,b,c,d,e,f5g,h,i5j5k5s;scanf("%*c%d%*c%*c%*c%d%*c%*c%d%*c%d%*c%*c%*c%*c%d%*c%d%*c%*c%d%*c%*c%d%*c%*c%d%*c%*c%*c%*c%d%*c%d%*c,,,&a5&b,&c,&d,&e,&f,&g,&h5&iJ&j,&k);s=a+b+c+d+e+f+g+h+i+j+k;printf("%d”,s);}ProblemB:多少张钞票Description客户去商店买东西时,不超过100美金的账单喜欢用现金支付。商店喜欢用最少的钞票给付客户的找零。请你编写一个程序帮助商店计算出:当客户买了x元商品给了一张100美元的钞票后,商店应该付给客户多少张20美元、10美元、5美元和1美元的钞票,使得钞票总数最少。假设不存在其他面值的钞票,也不会有几角几分的价格,商店的各种钞票总是够用

的。Input输入一个整数x,0<x<100,Output按顺序输出20美金、10美金、5美金和1美金面值的钞票张数。输出格式见sample。SampleInput7SampleOutput$20bills:4$10bills:1$5bills:0$1bills:3HINT当能支付大面值钞票时不要支付更小面值的钞票,才能满足钞票总数最少,注意scanf()格式的控制。#include<stdio.h>intmain(){intx,s,a,b,c,d;scanf("%dM,&x);s=100-x;a=s/20;b=(s-20*a)/10;c=(s-20*a-10*b)/5;d=s-20*a-10*b-c*5;

printf("$20bills:%d\n",a);printf("$10bills:%d\n",b);printf("$5bills:%d\n",c);printf("$1bills:%d\n",d);}ProblemC:自动拨出电话的程序Description某外国销售公司需耍向国内的一些大型单位打电话推销产品。这个公司的工作场景是这样推销员坐在自己电脑旁边,通过一款自动拨电话的软件与客户联系。所有需要被拨打的电话号码都事先存储在服务器上,推销员不需要每次都很麻烦的输入客户的电话号码,当推销员点击软件里拨打的按钮,下一个电话将会自动拨出。现在你需要编写个程序来模拟这个自动拨电话软件的工作过程。电话号码是按照中国的习惯存储下来的,可能是从网站上抓取的,也可能是扫描的手写件。不过它们都被按照这样的格式存储下来:(城市区号)分区前缀-分机号比如青岛的一个大型单位的某部电话是(0532)621-15486,是指如果在单位内部直接拨打15486就行,在青岛的其他地方要拨打62115486,而在北京要拨打053262115486。根据常识,先拨0就是要转外线,所以一般电话号码的各个部分都不会以0开头。你的程序可以把如上格式的电话号码翻译成一个只包含有数字的串,发送给电话机并拨出。值得注意的是中国的城市区号长度并不相同,比如北京是010。再有不同城市的电话号码位数也不相同,并且不同单位根据内部电话分机数目多少,有的可能只有3位分机号码,有的可能分区前缀号会只有2位。但不管怎样中国现在还没有哪个城市的电话号码超过十位数的。中国的国际区号是0086。这里不含像114这样的特服电话。Input输入只有一行,是符合“(城市区号)分区前缀-分机号”规律的电话号码,这里面除了英文字符“(”、“)”、“一”之外只有数字。Output输出只有一行,是带中国区号的能电话号码。注意从国外打国内的电话,城市区号前面的o是不用拨打的。比如中国青岛的国际分区号是0086532。(0532)621-15486SampleOutput008653262115486HINT这是个可以用scanf()解决的问题,请注意电话号码都是数字这个规律。#include<stdio.h>intmain(){inta,b,c;scanf("(O%d)%d-%d",&a,&b,&c);printf("0086%d%d%d",a,b,c);?ProblemD:求1+2+…+n=?Description给定一个n,求出s=l+2+3+...+n的值。Input输入只有一行,包含一个正整数n(n<=232)。Output输出一行,为l+2+...+n的值。

10SampleOutput55HINTn的数据范围大,需注意数据类型的选择和计算次序,以避免数据溢出。#include<stdio.h>intmain()unsignedlonglongintn,s,i;scanf("%llu",&n);if(n%2==0)s=n/2*(n+1);elses=(n+1)/2*n;printfC%llu",s);ProblemE:2的多少次募Description从键盘输入一个数X,x是2的整数次基(x=2y),请编程求出y的值。Input一个非负有理数X,X在[0,2256]范围内。Output一个整数y。SampleInput1SampleOutput|HINT看起来数据很大,但是用double完全可以存储。为什么?请研究下IEEE-754标准的浮点数存储格式。这里要用到C语言标准库的数学函数。法一:#include<stdio.h>#include<math.h>intmain(){doublex,n;scant("%lf",&x);n=(log10(x))/(log10(2));printf("%d",(int)n);)法二:

#include<stdio.h>#include<math.h>intmain(){doublex,y;scant("%lf",&x);printf("%g",(sqrt)(x));)ProblemF:A+BProblem(II):Input/OutputPracticeDescription计算a+b,0<=a,b<1000。Input输入的第一行是一个整数N,后面有N对整数a和b,每对a和b占一行,a,b用空格分开。Output每行输出一个a+b的和,顺序与输入对应。SampleInput2121020SampleOutput330HINT

N给出了测试样例数,用for循环处理方便。#include<stdio.h>intmain()(intN,i,j;scanf("%d",&N);inta[N][2];for(i=0;i<N;i++)(for(j=0;j<2;j++)scant("%d",&a[i][j]);}for(i=0;i<N;i++)printf("%d\n”,a皿}ProblemG:A+BProblem(III):Input/OutputPracticeDescription

计算a+b,0<=a,b<1000。Input输入有多对整数a和b组成,每对a和b占一行,a,b用空格分开。当测试样为00时表示输入结束,00不参与运算。Output每行输出一个a+b的值,顺序与输入对应。SampleInput12102000SampleOutput330HINT练习break的使用。#include<stdio.h>intmain(){inta,b;while。)〃永真(scanf("%d%d",&a,&b);if(a==0&&b==0)break;else

printf("%d\n",a+b);})ProblemH:A+BProblem(IV):Input/OutputPracticeDescription计算a+b,0<=a,b<1000。Input输入有多对整数a和b组成,每对a和b占一行,a,b用空格分开。Output每行输出一个a+b的值,顺序与输入对应。每个格式样例之间用一个空行分隔开。SampleInput1210201535SampleOutput33050HINT由于输出的和比空行多一个,所以全部计算放在一个循环里是不行的,必须要特殊处理开头或者结尾。#include<stdio.h>intmain()

inta,b;while(scanf("%d%d",&a,&b)!=EOF)(printf("%d\n",a+b);printf("\n");}}ProblemI:n个数的最大值和最小值Description找出n个数中最大的数和最小的数,并将它们的值输出出来。Input输入为n+l个整数,都在int类型范围内。这些数可能用若干空格或者换行符分隔开。输入的第1个数为n,表示后续有n个数输入。从输入的第2个数开始,求出直到第n+l个数中最大的数和最小的数。Output输出为两行,格式见sampleoSampleInput301-1SampleOutput

Themaximumnumberis1.Theminimumnumberis-1.HINT分隔符是空格还是回车都是空白符,对scanf("%d")来说没有区别;先读入n,然后用for循环就很容易控制读入n个数的过程。#include<stdio.h>intmain(){inti,n,m,max,min;scant("%d%d',,&n,&max);min=max;for(i=1;i<n;i++)(scant("%d",&m);if(m>max)max=m;elseif(m<min)min=m;}printf("Themaximumnumberis%d.\nTheminimumnumberis max,min);}ProblemJ:成绩的等级Description把百分制的考试成绩转换成五级制的成绩:90〜100:Excellent80〜89:Good70〜79:Average60〜69:Pass0〜59:Failing不在0〜100之间的输入是非法数据,输出“Error”。Input输入多行,每行一个整数。Output输入所对应的成绩等级。SampleInput-18192356872100SampleOutputErrorGoodExcellentFailingPassAverageExcellentHINT用switch语句解决这个问题比较方便。#include<stdio.h>intmain()intwhile(scant("%d",&n)!=EOF)if(n==100)printf("ExcellentXn");elseif(n<0||n>100)printf("ErrorXn");elseswitch(n/10){case9:printf("Excellent\n");break;case8:printf("Good\n");break;case7:printf("Average\n");break;case6:printf("Pass\n");break;default:printf(,,Failing\nM);}}}ProblemA:求100以内的素数Description素数是只能被i和自身整除的正整数,根据数学定义।不是素数。素数也叫质数。

Input输入为两个整数m和n,满足0v=m<=nv=100。Output从大到小输出m〜n之间的所有素数,一个素数一行。如果m〜n之间没有素数,则不输出任何数。输出的所有数在两行"===="之间。SampleInput212SampleOutput=====117532=====HINT利用素数的数学规律可以很容易的解出此题,题目给出的数据范围是关键。#include<stdio.h>intmain()(intm,n,i,j,k;scanf(M%d%d,',&m,&n);printf("=====\n'');for(i=n;i>=m;i-){ k=0;

for(j=1;j<i;j++)if(i%j==O)k++;if(k==1)printf(',%d\nH,i);}printf(,'=====,');}ProblemB:最接近的偶数(AppendCode)Description编写一个函数:intnearest(intn);用于求不大于n的最大偶数,并作为函数的返回值进行返回。Input是一个int范围内的整数n»Output输出不大于n的最大偶数。5SampleOutputHINTAppendCodeappend.c,#include<stdio.h>intnearest(intn){if(n%2==0)n=n;elseif(n%2!=0)n=n-1;returnn;}intmain()intm,n;scanf("%d",&m);n=nearest(m);printf("%d",n);return0;}ProblemC:编写函数:求三个整数的最大值Description求三个整数的最大值。编写一个函数maxValue。求三个整数的最大值。其原型为:intmaxValue(inta,intb,intc);功能:函数的三个参数传入a,b,c的值,返回其中最大值。函数的调用格式见“AppendCode”。Input输入三个int类型的整数,两两之间用空格隔开。Output输出三个整数的最大值。SampleInput123

HINT参看系统首页上的“AppendCode”使用说明,讨论版(WebBoard)上也有。AppendCode#include<stdio.h>intmaxValue(inta,intb,intc)(if(a>=b){if(b>=c)returna;else{if(a>=c)returna;elsereturnc;elseif(b<c)returnc;else{if(a<c)returnb;elsereturnb;}))intmain()intx,y,z;

scanf("%d%d%d”,&x,&y,&z);printf("%d",maxValue(x,y,z));return0;}ProblemD:编写函数:是否元音字母?(AppendCode)Description判断给定的一个字符是否是元音字母(a,e,i,o,u)?用C语言实现:叩pend.c中函数原型为intis_vocals(charc);功能:若c是元音字母返回1,否则返回0。用C++实现:append.cc中函数原型为boolisVbcals(charc);功能:若C是元音字母返回true,否则返回falseo函数的调用格式见“AppendCode”。Input输入一个字母。Output如果是一个元音字母,则输出:Itisavocals.否则输出:Itisnotavocals.SampleInputa

Itisavocals.HINT参看系统首页上的“AppendCode”使用说明,讨论版(WebBoard)上也有。AppendCodeappend.c,append.cc,ttinclude<stdio.h>intis_vocals(charc){if((c—a)11(c=*e*)11(c=H)11(c=,o,)11(c=,uJ)11(c—)11(c=='E')||(c='I')||(c='O')||(c='U'))return1;elsereturn0;)intmain(){charch;scanf&ch);printf(is_vocals(ch)?”Itisavocals.”:*Itisnotavocals."));return0;ProblemA:只有一个二元运算符的表达式运算Description编程序读入并计算只有一个二元运算符的表达式的值。用到的二元运算符有:、“*”、“/"、“%”,与c语言的语法一致。Input每行输入一个表达式,格式为:二个整型的操作数a和b,中间用一个符号分开,这个符号就是运算符。测试样例不存在除数为0的情况。输入以a和b为0,且用一个空格分开结束。Output每行对应输入的运算符为“+”、、“*”、“/"、“%”,则计算a+b、a-b、a*b、a/b、a%b的值;否则输出“invalidop”。SampleInput33+58*92.21-617/39%300SampleOutput3872invalidop-550HINT教材上有非常相似的例题可以参考。方法

#include<stdio.h>intmain()(inta,b;charc;while(1)(scantC'%d%c%d",&a5&c,&b);if(a==0&&b==0&&c==32)break;elseif(c=='+')printf("%d\n",a+b);elseif(c=="-')printf("%d\n",a-b);elseif(c==,**)printf("%d\n",a*b);elseif(c==7')printf(',%d\n',Ja/b);elseif(c=='%')printf("%d\n”,a%b);elseprintf("invalidop\n");}}方法二:#include<stdio.h>intmain()(intm,n;charc;while(scanf("%d%c%d",&m,&c,&n)&&(n!=O||m!=O||c!=''))switch(c)caseprintf(''%d\rT,m+n);break;case,J:printf(',%d\n",m-n);break;caseprintf(',%d\n",m*n);break;case71:printf(',%d\n",m/n);break;caseprintf("%d\n",m%n);break;default:printf("invalidop\n");break;ProblemB:摄氏一一华氏温度转换表Description已知华氏温度F,转换为摄氏温度C的公式为C=(F-32)*5/9o输出给定范围(从low到high)和步长(si印)的摄氏 华氏温度转换表Input第1行若为“C->F”表示输出:摄氏一一华氏温度转换表,若为“F->C”表示输出:华氏一摄氏温度转换表。第2、3行为两个整数:high和low,其值在-100至IJ200之间。第4行为step,step精确到小数点后1位。Output输出第一行为C和F,分别表示摄氏和华氏,与小数点对齐。若输出摄氏一一华氏温度转换表,则C在前、F在后;反之,则输出华氏一一摄氏温度转换表。从输出的第2行开始为从温度low到温度high(包括low和high)的转换表,温度输出精确到小数点后1位,表格被分为两个宽度相同的部分,其它的测试样例也不会给出超出宽度的数据,格式详见sampleo

C->F-10402.5SampleOutputC->F-10.0->14.0-7.5->18.5-5.0->23.0-2.5->27.50.0->32.02.5->36.55.0->41.07.5->45.510.0->50.012.5->54.515.0->59.017.5->63.520.0->68.022.5->72.525.0->77.027.5->81.530.0->86.032.5->90.535.0->95.037.5->99.540.0->104.0HINT输出格式可以通过sample分析出来,因为两栏的总宽度是固定的。一个隐藏的陷阱是step是浮点数,某些浮点数是无法精确存储的,因此经过一定量的计算后这个误差会影响到浮点数的相等性判断,需要加上精度控制。#include<stdio.h>intmain(){doublea,b,c,C,F,n;charx,y;scanf("%c->%c",&x,&y);if(x=='C'&&y=='F')(scanf(',%lf\n%lf\n%lfM,&a,&b,&c);printfC*C->RnprintfC*C->RnM);for(n=a;n<=b+0.01;n=n+c)F=n*9/5+32;printf("%5.1lf->%5.1lf\n",n,F);}}else(scanf(',%lf\n%lf\n%lf",&a,&b,&c);printf("F->C\nM);for(n=a;n<=b+0.01;n=n+c){C=(n-32)*5/9;printf("%5.1lf->%5.1lf\n',,n,C);}return0;ProblemC:辗转相除法Description辗转相除法,也称欧几里得算法,是求最大公约数的算法。辗转相除法首次出现于欧几里得的《几何原本》(第VII卷,命题i和ii)中,而在中国则可以追溯至东汉出现的《九章算术》。两个整数的最大公约数(亦称公约数)是能够同时整除它们的最大的正整数。辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数的差的最大公约数。例如,252和105的最大公约数是21(252=21X12;105=21X5);因为252-105=147,所以147和105的最大公约数也是21。在这个过程中,较大的数缩小了,所以继续进行同样的计算可以不断缩小这两个数直至其中一个变成零。这时,所剩下的还没有变成零的数就是两数的最大公约数。例如,计算a=1071和b=462的最大公约数的过程如下:从1071中不断减去462直到小于462(可以减2次,即商q0=2),余数是147:1071=2X462+147.然后从462中不断减去147直到小于147(可以减3次,即ql=3),余数是21:462=3X147+21.再从147中不断减去21直到小于21(可以减7次,即q2=7),没有余数:147=7X21+0.此时,余数是0,所以1071和462的最大公约数是21。Input输入为多行,每行有一对非负整数a,b,且a*b不会超出int类型的数据范围。输入至EOF结束。Output每行输出一对a,b的最大公约数和最小公倍数,顺序与输入对应。从整除定义出发:若a整除b(b除以a没有余数),则b是a的倍数,a是b的约数,这里要求b不为0。因此0是任意整数的倍数(任意整数都是0的约数),但是0不能是约数。SampleInput1123223246751261892436

111622162121356129181272HINT按照题目描述所给的算法解题,注意以下几点:辗转相除法对两个数的大小关系有要求,根据倍数和约数的数学定义,一个非o数和o的约数是多少?辗转相除法的计算过程是符合这种定义的。#include<stdio.h>intmain()(inta,b,c,m,t;while(scanf("%d%d',,&a,&b)!=EOF){if(a==O&&b!=O)printf("%d%d\n",b,a);elseif(a!=O&&b==O)printf(M%d%d\n",a,b);else{if(a<b)t=a;a=b;b=t;}m=a*b;c=a%b;while(c!=O)(a=b;b=c;c=a%b;}printf("%d%d\n",b,m/b);}}ProblemD:SumProblem(II):Input/OutputPractice

Description计算若干整数的和,这些整数都是小于1000的非负整数。Input输入的第一行是一个整数M,后面有M个测试样例。每个测试样例以一个整数N开始,后面接着是N个整数。Output每组测试样例对应一行输出,为所给的N个整数之和,顺序与输入对应。SampleInput2312351015203050SampleOutput6125HINT用双重循环解决这个问题,外层循环控制用例的输入,内层循环控制读取N个整数。#include<stdio.h>intmain()(intM,N,n,i,j,s;scanf("%d'\&M);for(j=1;j<M;j++)scanf(M%d",&N);s=0;for(i=1;i<=N;i++){scanf("%d',,&n);s+=n;}printf("%d\n”,s);}scanf("%d",&N);s=0;for(i=1;i<=N;i++)(scanf("%d",&n);s+=n;ProblemE:SumProblem(III):Input/OutputPracticeDescription计算若干整数的和,这些整数都是小于1000的非负整数。Input输入为多行,每行为一组测试样例。每个测试样例以一个整数N开始,后面接着是N个整数。当输入的N为0时表示输入结束。Output每组测试样例对应一行输出,为所给的N个整数之和,顺序与输入对应。SampleInput3123510152030500SampleOutput6125HINT用双重循环解决这个问题,外层循环控制用例的输入,内层循环控制读取N个整数。#include<stdio.h>intmain()(intN,i,s,n;while(scanf(M%d",&N))if(N==O)break;else{s=0;for(i=1;i<=N;i++){scanf("%d",&n);s+=n;}printf("%d\n",s);Description输入一个正整数的年份,判断是否为闰年。编写一个函数用于判断闰年。用C语言实现:append.c中函数原型为intis_leap_year(intyear);功能:若参数year是闰年返回1,否则返回0。用C++实现:append.cc中函数原型为boolisLeapYear(intyear);功能:若参数year是闰年返回true,否则返回false«函数的调用格式见“AppendCode”。Input输入只有一行,为一个10000以内的正整数。Output输出为一行。若输入为闰年偶数则输出“Yes”,否则输出“No”。SampleInput2010SampleOutputNoHINT参看系统首页上的“AppendCode”使用说明,讨论版(WebBoard)上也有。#include<stdio.h>intis_leap_year(intyear)

if(year%4==0&&year%100!=0||year%400==0)return1;elsereturn0;}intmain(){intyear;scanf(M%d",&year);is_leap_year(year)?printf("Yes''):printf("No");return0;}ProblemG:编写函数:求累加和(AppendCode)Description给出两整数min和max,求min到max之间的数的累加和。

编写一个函数add()。函数原型为intadd(intn);功能:每次调用都把参数n的值累加起来,并返回。函数add。的调用格式见“AppendCode”。Input输入为两个整数min和max,且max>=minoOutputmin和max之间所有整数的累加和,包括min和max。SampleInput110SampleOutput55HINTadd()函数里要用静态变量来存储累加和。当然用全局变量也行,不过还是练练怎么用静态变量吧。ttinclude<stdio.h>ints=0;intadd(intn){s+=n;returns;intmainOintmin,max,sum;scanf("%d%d”,&min,&max);while(min<=max)sum=add(min++);printfsum);return0;)ProblemA:电量的显示Description手机大家都有吧?最上面的电量指示图都知道吧?现在呢,就需要你来编一个程序,根据用户给出的电量,模拟一个电量示意图。原理很简单:对于给定的一个0〜100之内的整数N(N就是电量的百分比,0%表示没电了100%表示满电&-),用N个来表示电量。Input输入有多行。第一行是一个非负整数N,表示后面有N行输入。之后的N行,每一行是一个介于[0,100]的整数K,表示要显示的电量。Output输出有N行,每行输出与上述输入 对应。输出的格式为:case?:IIIIIIIH……其中?表示用例编号(从1开始),“:”前、后各有一个空格,的个数与每行输入相同。SampleInput401203SampleOutputcase1:case2:|case3:||||||||||||||||||||case4:|||#include<stdio.h>intmain()(intN,K,i,j=0,m;scanf("%d”,&N);for(i=1;i<=N;i++){scant("%d",&K);j++;{printf("case%d:",j);for(m=1;m<=K;m++)printf('T');printf("\n'^);}ProblemB:编写函数:素数的判定(AppendCode)Description一个正整数n是素数:除门和n不能被其他数整除。I不是素数。编写一个函数用于判定一个正整数是不是素数。用C语言实现:叩pend.c中函数原型为intis_primer(intnum);功能:若num为素数返回1,否则返回0。用C++实现:append.cc中函数原型为boolisPrimer(intnum);功能:若num为素数返回true,否则返回false。函数的调用格式见“AppendCode”。Input每行输入一个正整数non不会超出int类型数据范围。输入最多不超过20个正整数。Output若n为素数,输出“YES”,否则输出“NO”。SampleInput1234567892147483647SampleOutputNOYESYESNOYESNOYESNONOYESHINT如果你是按照从小到大的顺序选择除数去判定一个数,那么你超时的原因多半是用了太多不必要的除数。程序需要优化,减少循环的次数。AppendCodeappend.c,append.cc,

#include<stdio.h>#include<math.h>intis_primer(intnum)(intj;(for(j=2;j<=sqrt(num);j++)if(num%j==0)return0;if((j>sqrt(num))&&(num!=1))return1;elsereturn0;}}intmain()intnum;while(scanf(',%d,'J&num)!=EOF)(if(is_primer(num))puts("YES");elseputs(',NOM);}return0;}ProblemC:多少个正整数?Description给出不超过100个整数,输出其中有多少个正数。Input输入分为2行。第一行是一个0<N<=100,表示下一行有N个整数。第2行是N个整数,均在int类型的表示范围内。Output一个数字,表示输入中正数的个数。SampleOutputl|#include<stdio.h>intmain()(intN,n,i,j=0;scant("%d\n",&N);for(i=1;i<=N;i++){scant("%d",&n);if(n>0)j++;elsej+=0;}printf("%d”,j);ProblemD:兔子的繁殖问题Description假设一对兔子每月能生一对小兔(一雌一雄),每对小兔出生后的下一个月是没有繁殖能力的,至出生后的第三个月开始又可以每月生一队小兔,问从一对刚出生的小兔开始,经过若干个月后一共有多少兔子(假设在此过程中兔子没有死亡)?这个问题是意大利数学家菲波那契(Fibonacci)在他1202年出版的《算盘全书》中提出来的,从第一对刚出生的小兔开始每月的兔子数被乘坐菲波那契序列。Input输入的第一个数为n,接下来有n个数字。每个数字为一个月份m(m<=45)。Output输出为n行,每行为第m个月后的兔子总数。SampleInput61234510SampleOutput1235889HINT超时了吧!使用递归计算菲波那契序列,这合适吗?用数组写比较方便,用循环直接算也不超时。#include<stdio.h>intmain(){inta[46]={l,1},i,j,n,m;for(i=2;i<46;i++)

a[i]=a[iT]+a[i-2];scanf("%d",&n);for(j=0;j<n;j++)(scanf&m);printf(*%d\n*,a[m]);})ProblemA:字符串的逆序Description将输入的一个字符串S逆序输出。Input输入为一个串S。输入最少为一个字符,最多不会超过100个字符。输入不含各种空白符。\八•\n\'\r\Output串s的逆序.SampleInputabodeSampleOutputedcbaHINT输入可以用scanf("%s")处理。ttinclude<stdio.h>ttinclude<string.h>intmain(){inti,j;chars[100];scanfs);i=strlen(s);for(j=i-l;j>=0;j—)printf(*%c*,s[j]);)ProblemB:十进制整数转二进制Description给出一个十进制的非负整数X,x<=216,把它转换成二进制数输出。Input输入为多行,每行一个整数x,至读入EOF结束。Output每行输出X对应的二进制数值。SampleOutput01111000011111111111111111HINT本题有多种解法:可以用循环迭代对2的除法和取余操作,不过处理的顺序与输出顺序相反,需要利用数组存储;用取对数或从大到小减去2的整数次幕的方法计算与输出顺序是相同的;也可以用printf()把十进制的数值处理成十六进制,然后1位十六进制转4位二进制;也可以用位运算处理。#include<stdio.h>intmain(){inti,j,m,x,k;inta[17];while(scanf(',%d",&x)!=EOF)(if(x==0)printf(“0\n");elsefor(i=0;i<=16;i++)m=x%2;j=x/2;x=j;a[i]=m;}for(i=16;i>=0;i-){if(a[i]==1)(k=i;break;}}for(i=k;i>=0;i--)printf("%dM,a[i]);

ProblemC:SumProblem(II):Input/OutputPracticeDescription计算若干整数的和,这些整数都是小于1000的非负整数。Input输入的第一行是一个整数M,后面有M个测试样例。每个测试样例以一个整数N开始,后面接着是N个整数。Output每组测试样例对应一行输出,为所给的N个整数之和,顺序与输入对应。SampleInput2312351015203050SampleOutput6125HINT用双重循环解决这个问题,外层循环控制用例的输入,内层循环控制读取N个整数。#include<stdio.h>intmain()(scanf("%dM,&M);for(j=1;j<M;j++)(scanf("%d”,&N);s=0;for(i=1;i<=N;i++){scanf("%d”,&n);s+=n;}printf("%d\n”,s);}scanf("%d",&N);s=0;for(i=1;i<=N;i++)scanf("%d'',&n);s+=n;}printf("%d",s);}ProblemD:字符串的长度Description输入一些字符串,输出它们的长度。Input输入为多行。第一行N>0表示有N个测试用例,后面有N行,每行包含一个字符串(不超过1000个字符)。Output输出为多行,每行对应于一个测试用例。每行的格式为:casei:lenght=j.其中i表示测试用例编号(从1开始),j表示相应的字符串长度。SampleInput4IloveChina!Doyouwanttopassthisexamination?Youwillsucceedfinially!Wishyousucceed!SampleOutputcase1:length=13.case2:length=37.case3:length=26.case4:length=17.HINT用scanf()读取整数后,第一行的换行符需要处理。可以用文件测试出这个问题来。#include<stdio.h>#include<string.h>intmain()(intchara[1000],b[50];scanf("%d”,&N);gets(b);//吸收空格for(j=1;j<=N;j++)/(gets(a);m=strlen(a);printf("case%d:length=%d.\n",j,m);}ProblemE:字符串加密(编程)

Description通过键盘输入一个字符串,之后按如下规律对其加密:A—Za-*zB-*Yb-yC-Xcfx□□□□□□□□□□□□□□□□□□□□□即将字符串中的第i个大写或小写英文字母变成相应的第(26-i+l)个大写或小写字母,其他字符不变。Input输入一个字符串,不超过100个字符。Output输出为加密后的字符串SampleInputABCabcSampleOutputZYXzyx#include<stdio.h>intmain(){chars[101],i;gets(s);for(i=0;s[i]!=0;i++)

if(s[i]>='A'&&s[i]<='Z')s[i]=155-s[i];if(s[i]>='a'&&s[i]<='z')s[i]=219-s[i];}puts(s);}ProblemF:PrintGraphicsProblerm(III)(AppendCode)Description向标准输出上打印一些用ASCII字符组成的图形。编写一个函数用于输出ASCII图形。用C语言实现:叩pend.c中函数原型为intprint_graphic(intn,charc);用C++实现:append.cc中函数原型为intprintGraphic(intn,charc);功能:输出n层有字符c组成的图形。函数的调用格式见“AppendCode”。Input输入为一个整数n和一个字符c,0<n<100oOutput

输出一个n层等腰三角形,由字符c组成,格式见sample。SampleInputQSampleOutput*★★★★★★★★★★★★★★★★★★★★★HINTAppendCodeappend.c,append.cc,^include<stdio.h>intprint_graphic(intn,charc){inti,j,k;for(i=l;i<=n;i++){for(j=l;j<=n-i;j++)printf("");for(k=l;k<=2*i-l;k++)printfc);printf("\n");

intmainOcharc;intnum;scanf("%d%c”,&num,&c);print_graphic(num,c);return0;)ProblemA:产生等差序列之一Description根据给出的初始数、公差和序列长度求等差序列。Input输入为一行,格式见sample。其中,start为初始数,step为公差,times为序列长度。满足,times>0»step不为0。Output把这个等差序列输出在一行里,序列两数之间用一个空格分隔。SampleInputstart=1,step=2,times=100SampleOutput135791113151719212325272931333537394143454749515355575961636567697173757779818385878991939597991011031051071091111131151171

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论