C语言程序设计.doc_第1页
C语言程序设计.doc_第2页
C语言程序设计.doc_第3页
C语言程序设计.doc_第4页
C语言程序设计.doc_第5页
已阅读5页,还剩131页未读 继续免费阅读

下载本文档

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

文档简介

1. Problem A: Hello world!DescriptionXiao_ming有两个哥哥,大哥叫Da_min,二哥叫Er_min。三兄弟放学回家,父母分别跟他们打招呼。Input无Output请输出:Hello Da_min,Hello Er_min,Hello Xiao_ming!Sample InputSample OutputHello Da_min, Hello Er_min, Hello Xiao_ming!HINT请注意换行符Append Code#includeint main() printf(Hello Da_min,n); printf(Hello Er_min,n); printf(Hello Xiao_ming!n); 2. Problem B: 求圆的面积和周长Description从键盘输入圆的半径,求圆的面积和周长,圆周率取3.14。Input输入一个浮点型数据,有效数字不会超过十进制的6位。Output输出为两行。第一行为圆的面积,第二行为圆的周长,格式见sample。Sample Input3Sample OutputArea: 28.260000 Perimeter: 18.840000 HINT了解浮点类型的输入、输出和算术运算符Append Code法一#includeint main()double r,p,s;scanf(%lf,&r);p=2*3.14*r;s=3.14*r*r;printf(Area: %lfn,s);printf(Perimeter: %lfn,p);法二#include#define pi 3.14int main() double r; scanf(%d,&r); printf(Area: %lfn,pi*r*r); printf(Perimeter: %lfn,2*pi*r); 3. Problem C: 平均值Description求3个数的平均值。Input输入只有一行,为3个较小的整数。Output输出为这3个整数的平均值,保留3位小数。Sample Input1 2 3Sample Output2.000HINT注意除法运算对整型数据和浮点型数据是不一样的。Append Code#includeint main()int a,b,c;scanf(%d%d%d,&a,&b,&c);printf(%.3lf,(a+b+c)/3.0);4. Problem D: 求字符的值Description从键盘输入3个字符(不含双字节字符),分别输出每个字符的十进制值(ASCII码)、八进制值和十六进制值。Input输入为3个字符。Output输出为3行。每一行为每个字符(对应输入顺序)的十进制、八进制和十六进制值,用空格分隔开。每个输出的值占3个字符,不足3个字符前面补0。Sample Input0 ASample Output048 060 030 032 040 020 065 101 041 HINT了解字符值的存储和整型的关系。Append Code#includeint main()char a,b,c;scanf(%c%c%c,&a,&b,&c);printf(%.3d %.3o %.3xn,a,a,a);printf(%.3d %.3o %.3xn,b,b,b);printf(%.3d %.3o %.3xn,c,c,c);5. Problem A: 最简单的程序Description输出一行“Hello world!”。Input无OutputHello world!Sample InputSample OutputHello world!HINTAppend Code#includeint main() printf(Hello world!);6. Problem B: 算术基本运算Description计算两整数x和y(0x,y1000)的和、差、积、商、余数、x的平方和y的三次方。Input输入只有一行,格式见sample。Output输出为多行,按顺序每行输出x,y的和、差、积、商、余数、x的平方和y的三次方,格式见sampleSample Inputx = 11, y = 3 Sample Outputx + y : 14 x - y : 8 x * y : 33 x / y quotient: 3, remainder: 2 x 2 : 121 y 3 : 27 HINT注意输入输出格式。了解C语言整数除法运算符的特点,并且没有求幂的运算符。Append Code#include #include int main( ) int x,y; scanf(x = %d, y = %d,&x,&y); printf(x + y : %dn,x+y); printf(x - y : %dn,x-y); printf(x * y : %dn,x*y); printf(x / y quotient: %d, remainder: %dn,x/y,x%y); printf(x 2 : %dn,x*x); printf(y 3 : %dn,y*y*y);7. Problem C: 自增自减运算DescriptionC语言中有自增运算+、自减运算-,并且可以前置和后置。编写一个程序:对输入的一个整数a,输出a+、a-、+a、-a的值。Input一个整数a,a是很小的整数。Output输出为5行,第一行为a的值,后面依次为-a、a-、a+、+a的值。5行输出纵向a要对齐,“:”对齐,“:”前后各一个空格,后面的数值不用对齐。每行行尾都有回车。Sample Input0Sample Output a : 0 -a : -1 a- : 0 a+ : 0 +a : 1 HINTAppend Code#includeint main()int a,x;scanf(%dn,&x);a=x;printf( a : %dn,a);printf(-a : %dn,-a);a=x;printf( a- : %dn,a-);a=x;printf( a+ : %dn,a+);a=x;printf(+a : %dn,+a);8. Problem F: 绝对值Description求整型数据和浮点型数据的绝对值。Input输入两个数,第一个是整数,第二个是浮点数。Output输出为两行,第一行为整数的绝对值,第二行为浮点数的绝对值,注意浮点数的绝对值不输出无意义的0。Sample Input-1 1 Sample Output1 1 HINT求绝对值可以用标准库函数来完成,也可以自己判断。注意浮点数的输出格式。求绝对值的函数在哪个头文件?貌似很多人会搞错,包括很多编书的人!Append Code#include /#include int main() int n; float m; scanf(%d%f,&n,&m); /n=abs(n); /m=fabs(m); if(n0) n=-n; if(m0) m=-m; printf(%dn,n); printf(%g,m); return 0; 9. Problem A: 奇数还是偶数?Description输入一个整数,判读它是奇数还是偶数。Input输入只有一行,为一个100以内的正整数。Output输出为一行。若输入为偶数则输出“even”,奇数输出“odd”。Sample Input30Sample OutputevenHINT用整数运算可以解决,练习“?:”表达式。Append Code#include int main() int n; scanf(%d,&n); if(n=0&n=100) if(n%2=0)printf(evenn); else printf(oddn); return 0; 10. Problem B: 简单的打折计算Description商店规定:消费满n元,可以打八八折。设某件商品标价m元,输入购买的件数x,计算出需要支付的金额(单位:元),精确到分。Input输入只有一行,三个整数m、n和x,且0xmn1000。Output输出金额,精确到分。Sample Input95 300 4Sample Output334.40HINT了解浮点型的输出控制,注意整型和浮点型混合运算过程中的数据类型转换。Append Code #include int main() int m,x,n,a; float b; scanf(%d%d%d,&m,&n,&x); 0x&xm; xm&mn; mn&nn) b=0.88*a; else b=a; printf(%.2fn,b); 11. Problem C: 判断闰年Description输入一个正整数的年份,判断是否为闰年。Input输入只有一行,为一个10000以内的正整数。Output输出为一行。若输入为闰年偶数则输出“Yes”,否则输出“No”。Sample Input2010Sample OutputNoHINT了解逻辑运算符和关系运算符。Append Code #include int main() int x; scanf(%d,&x); if(x0&x10000) if(x%4=0&x%100!=0) printf(Yesn); else if(x%400=0) printf(Yesn); else printf(Non); else printf(error); 12. Problem D: 水仙花数Description如果一个三位十进制数等于其各位数字的立方和,则称这个数为水仙花数。如:13+53+33=153。Input一个整数x,100=x=999。Outputx是水仙花数,则输出“YES”,否则为“NO”。Sample Input153Sample OutputYESHINTAppend Code#includeint main() int a,b,c,x; scanf(%d,&x); a=x/100; b=x/10%10; c=x%10; if(x=a*a*a+b*b*b+c*c*c) printf(Yes); else printf(No);13. Problem E: 三个数比较大小Description从键盘上输入0100之间的三个数,按从小到大的顺序输出。Input输入只有一行,为三个整数。Output按从小到大输出这三个数。Sample Input15 10 20Sample Output10 15 20HINT用if语句判断各种情况可以解决这个问题。Append Code #include int main() int a,b,c; scanf(%d%d%d,&a,&b,&c); if(a=b) if(b=c) printf(%d %d %dn,c,b,a); else if(c=a) printf(%d %d %dn,b,a,c); else printf(%d %d %dn,b,c,a); else if(a=c) printf(%d %d %dn,c,a,b); else if(b=c) printf(%d %d %dn,a,c,b); else printf(%d %d %dn,a,b,c); 14. Problem F: 奇怪的求和之一Description给定3个正整数a、b和c,按照如下规则求和:如果这个数字是偶数,则累加到和中;如果这个数字是奇数,则将大于该数的最小偶数累加到和中。Input三个正整数,均在100以内。Output一个和。Sample Input2 3 5Sample Output12HINT如果不会使用分支语句, 可使用条件运算符判断到底将哪个数累积到和中。Append Code#include int main() int a,b,c; scanf(%d%d%d,&a,&b,&c); if(a%2!=0)a+; if(b%2!=0)b+; if(c%2!=0)c+; printf(%dn,a+b+c); 15. Problem G: 你过线了吗?Description经过四年的学习,你决定报考我国著名的“285”高校之一的北青大学,经过认真的复习,残酷的考试,终于知晓了自己的考试成绩,也知道了北青大学的录取分数线,请你编程判断,自己过线了吗?Input输入有2行,第一行有4个正整数,分别表示三门课程的分数线以及总分分数线。第二行有3个非负整数,分别表示你考的三门课程的成绩。Output如果你的三门课程成绩都不低于相应课程的分数线,且你的考试总分也不低于北青大学的总分分数线要求,则输出“congratulations”,否则输出“sorry”。Sample Input70 80 70 240 80 80 82Sample OutputcongratulationsHINT如果你不会使用分支语句,同样可以使用条件运算符实现该程序。Append Code #includeint main() int a,b,c,d,e,f,g,h; scanf(%d %d %d %dn%d %d %d,&a,&b,&c,&d,&e,&f,&g); h=e+f+g; if(e=a&f=b&g=c&h=d) printf(congratulations); else printf(sorry);16. Problem I: A+B Problem (II) : Input/Output PracticeDescription计算a+b,0=a,b1000。Input输入的第一行是一个整数N,后面有N对整数a和b,每对a和b占一行,a,b用空格分开。Output每行输出一个a+b的和,顺序与输入对应。Sample Input2 1 2 10 20Sample Output3 30HINTN给出了测试样例数,用for循环处理方便。Append Code#include int main() int n,a,b,i;Scanf(“%d”,&n);For(i=0;in;i+)Scanf(“%d%d”,&a,&b);Printf(“%dn”,a+b);17. Problem H: A+B ProblemDescription计算a+b,0=a,b1000。Input输入有多对整数a和b组成,每对a和b占一行,a,b用空格分开。Output每行输出一个a+b的值,顺序与输入对应。Sample Input1 2 10 20Sample Output3 30HINTOJ系统上测试输入结束符为EOF(End Of File),其值为-1。用scanf()把文件所有内容读完后,会读到EOF,所以可以用来判断输入是否完成,测试时可以用Ctrl+Z产生EOF。本题解法参看FAQ。Append Code#include int main() int a,b; while(scanf(%d%d,&a,&b)!=EOF) printf(%dn,a+b); return 0; 18. Problem A: 判断是否是元音字母Description输入一个英文字母,判断是否是元音字母。元音字母是:a,e,i,o u,A,E,I,O,UInput输入一个英文字母Output是元音字母,输出“yes”,否则输出“no”,行尾没有回车。Sample InputASample OutputyesHINTAppend Code #include void main() char ch; scanf(%c,&ch); if(ch=A&ch=Z) ch=ch+32; if(ch=a) printf(yes); else if(ch=e) printf(yes); else if(ch=i) printf(yes); else if(ch=o) printf(yes); else if(ch=u) printf(yes); else printf(no); 19. Problem B: 按顺序输出三个数Description对于输入的3个整数,按照从小到大的顺序输出。Input输入3个int类型内的整数,两两之间用一个空格隔开。Output按照从小到大的顺序输出上述三个数,两两之间用一个空格隔开。Sample Input2 1 3Sample Output1 2 3HINTAppend Code#includevoid main() int a,b,c,temp; scanf(%d%d%d,&a,&b,&c); if(ab) temp=a;a=b;b=temp; if(ac) temp=a;a=c;c=temp; if(bc) temp=b;b=c;c=temp; printf(%d %d %dn,c,b,a);20. Problem E: 判断奇偶数Description判断输入整数的奇偶性。Input输入为一个整数。Output输出只有一行,代表判断结果。如果输入的整数n是一个偶数,输出:n is an even number.否则输出:n is an odd number.见样例。Sample Input12Sample Output12 is an even number.HINTAppend Code#includeint main() int a; scanf(%d,&a); if(a%2=0) printf(%d is an even number.,a); else printf(%d is an odd number.,a);21. Problem A: 判断两个整数的大小关系Description输入2个整数a和b,如果ab,则输出1,否则输出0。Input两个整数a和b,均不超过int类型的表示范围。Output表示ab的结果:如果ab,则输出1,否则输出0。Sample Input3 4Sample Output0HINTAppend Code#include int main()int a,b;scanf(%d %d,&a,&b);if (ab) printf(1); else printf(0);return 0;22. Problem D: 成绩的等级Description把百分制的考试成绩转换成五级制的成绩:90100:Excellent8089:Good7079:Average6069:Pass059:Failing不在0100之间的输入是非法数据,输出“Error”。Input输入多行,每行一个整数。Output输入所对应的成绩等级。Sample Input-1 81 92 35 68 72 100Sample OutputError Good Excellent Failing Pass Average Excellent HINT用switch语句解决这个问题比较方便。Append Code#include int main() int score; while(scanf(%d,&score)!=EOF) if (score100) printf(Errorn); else switch (score/10) case 0: case 1: case 2: case 3: case 4: case 5:printf(Failingn);break; case 6:printf(Passn);break; case 7:printf(Averagen);break; case 8:printf(Goodn);break; case 9: case 10:printf(Excellentn);break; return 0;23.Problem E: 输出是m的倍数或n的倍数、但不是m和n的公倍数的数Description输出1k之间是m的倍数或n的倍数、但不是m和n的公倍数的数,其中1=m,nk100,且m与n不相等。Input输入三个整数,依次为k、m、 n。Output从小到大输出符合题意的所有整数,两数之间用一个空格分开。Sample Input15 2 3Sample Output2 3 4 8 9 10 14 15HINT难点在于输出格式的控制:空格在数的中间,学会用循环时边界情况的特殊处理。Append Code#includeint main()int k,m,n,a,i=1;scanf(%d %d %d,&k,&m,&n);if(mn) a=m;elsea=n;printf(%d,a);for(i=a+1;i=k;i+) if(i%m=0&i%n!=0)|(i%n=0&i%m!=0) printf( %d,i);return 0;24. Problem B: 两整数相加减Description计算a+b和a-b。Input输入为一对整数a和b。a,b用空格分开。Output输出a+b和a-b的计算结果,各占一行。Sample Input1 2Sample Output3 -1 HINTAppend Code#include int main()int a,b;scanf(%d %d,&a,&b); printf(%dn,a+b); printf(%dn,a-b);25 Problem C: 它满足条件吗?Description需要判断给定的一个整数是否同时满足如下三个条件:1. 它是一个完全平方数。2. 它是一个偶数。3. 它是一个正数。注:若一个数能表示成某个自然数的平方的形式,则称这个数为完全平方数。例如:0,1,4,9,16,25,36,49,64,81,100,121,144,169,196,225,256,289,324,361,400,441,484,529Input一个int范围内的整数。Output如果输入的数字满足条件,则输出yes,否则输出no。Sample Input100Sample OutputyesHINT注意逻辑表达式判断三个条件的顺序。如果你不会使用分支语句,同样可以使用条件运算符实现该程序。库函数sqrt()可以用于求一个数的平方根。Append Code#include #includeint main()int a;scanf(%d,&a); if(a=sqrt(a)*sqrt(a)&a%2=0&a0) printf(yes); else printf(no);26. Problem F: 多路分支Description编写一个完整的程序,运行时向用户提问你考试考了多少分?(0-100)接受输入后判断其等级并显示出来等级:优:90=分数=100良:80=分数90中:60=分数80差:0=分数60Input输入任意一个整数分数值,显示等级; 再输入任意一个整数分数值,显示等级; .直到测试数据较充分,可输入-1止。Output对任意输入的分数值,输出对应的等级,直到输入的数为-1时才退出运行.Sample Input102 100 90 80 70 60 50 0 -80 -1Sample Outputgrad must between 0 and 100 优 优 良 中 中 差 差 grad must between 0 and 100 grad must between 0 and 100HINTAppend Code#include int main() int x; while(scanf(%d,&x)!=EOF) if (x100) printf(grad must between 0 and 100n); else if(x=90) printf(优n); else if(x=80) printf(良n); else if(x=60) printf(中n); else if(x=0) printf(差n); return 0;27 Problem D: 有多少人?Description学校举行运动会,如果全体学生按照3人一队列队,则多了1个人;如果按照4人一队列队,则多了2个人;如果按照5人一队排队,则多了3个人。请问这个学校有多少学生?Input一个int类型的正整数N,是学生人数的上界,即:该校学生数不超过N。Output所有可能的学生数,每个数占一行。Sample Input200Sample Output58 118 178HINTAppend Code#include#includeint main() int n,i; scanf(%d,&n); for(i=1;i0,表示下面有N个整数。第2行是N个整数,都是int类型的。Output输出所输入的N个整数的正数个数和负数个数,并用空格分开2个输出。Sample Input10 1 2 3 4 5 -1 -2 -3 -4 -5Sample Output5 5HINT貌似还有一种叫做0的数。Append Code#include int main() int n,a,i,num1=0,num2=0; scanf(%d,&n);for(i=0;i0) num1+ ; else if(a0) num2+; printf(%d %dn,num1,num2); return 0;29 Problem A: A+B Problem (III) : Input/Output PracticeDescription计算a+b,0=a,b1000。Input输入有多对整数a和b组成,每对a和b占一行,a,b用空格分开。当测试样为0 0时表示输入结束,0 0不参与运算。Output每行输出一个a+b的值,顺序与输入对应。Sample Input1 2 10 20 0 0 Sample Output3 30 HINT练习break的使用。Append Code#includeint main()int a,b;while(scanf(%d %d,&a,&b)!=EOF) if(a!=0|b!=0) printf(%dn,a+b); else break; return 0;30 Problem B: A+B Problem (IV) : Input/Output PracticeDescription计算a+b,0=a,b1000。Input输入有多对整数a和b组成,每对a和b占一行,a,b用空格分开。Output每行输出一个a+b的值,顺序与输入对应。每个格式样例之间用一个空行分隔开。Sample Input1 2 10 20 15 35Sample Output3 30 50HINT由于输出的和比空行多一个,所以全部计算放在一个循环里是不行的,必须要特殊处理开头或者结尾。Append Code#includeint main()int a,b,n=0;while (scanf(%d %d,&a,&b)!=EOF) n+; if(n=1) printf(%dn,a+b);elseprintf(n%dn,a+b);return 0;31 Problem C: n个数的最大值和最小值Description找出n个数中最大的数和最小的数,并将它们的值输出出来。Input输入为n+1个整数,都在int类型范围内。这些数可能用若干空格或者换行符分隔开。输入的第1个数为n,表示后续有n个数输入。从输入的第2个数开始,求出直到第n+1个数中最大的数和最小的数。Output输出为两行,格式见sample。Sample Input3 0 1 -1Sample OutputThe maximum number is 1. The minimum number is -1. HINT分隔符是空格还是回车都是空白符,对scanf(%d)来说没有区别;先读入n,然后用for循环就很容易控制读入n个数的过程。Append Code#includeint main() int n,i,max,min; scanf(%d,&n); int an; for(i=0; in; i+) scanf(%d,&ai); max=a0; min=a0; for(i=0; in; i+) if(maxai) min=ai; printf(The maximum number is %d.n,max); printf(The minimum number is %d.,min); return 0;32. Problem D: 求100以内的素数Description素数是只能被1和自身整除的正整数,根据数学定义1不是素数。素数也叫质数。Input输入为两个整数m和n,满足0=m=n=100。Output从大到小输出mn之间的所有素数,一个素数一行。如果mn之间没有素数,则不输出任何数。输出的所有数在两行“=”之间。Sample Input2 12Sample Output= 11 7 5 3 2 =HINT利用素数的数学规律可以很容易的解出此题,题目给出的数据范围是关键。Append Code#include#includeint main()int m,n,i,j,k,t;scanf(%d %d,&m,&n);printf(=n);for(i=n;i=m;i-) t=0;for(j=2;j1) printf(%dn,i);printf(=);return 0;33. Problem E: 是否构成三角形?Description给出三个整数,代表三条边的长度,判断这三条边的长度是否能构成一个三角形?Input第一行是n(1=n=100),表示有n组测试数据接下来有n行,每一行包含三个整数,表示三个边长(1=边长=100)Output如果三条边能构成三角形,输出YES,否则输出NOSample Input3 1 2 3 2 8 7 20 20 1Sample OutputNO YES YESHINTAppend Code#includeint main()int a,b,c,n,i;scanf(%d,&n);for(i=0;ic&a+cb&b+ca) printf(YESn);elseprintf(NOn); return 0;34. Problem C: 简单的整数排序Description对给出的若干整数按从小到大排序。Input输入的第一个数为n(n=1000),后接n个整数。Output按从小到大的顺序输出这些整数,每两个整数之间用一个空格分隔开,最后一个整数后面没有空格。Sample Input10 3 9 1 5 2 8 5 6 7 3Sample Output1 2 3 3 5 5 6 7 8 9HINT排序前必须把所有的整数都存储下来。因为只有最多1000个数,1秒的时间足够任何排序算法运行处结果来。Append Code#include int main() int c,i,n,j; int a1000; sc

温馨提示

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

评论

0/150

提交评论