山东科技大学C语言作业四.doc
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《山东科技大学C语言作业四.doc》由会员分享,可在线阅读,更多相关《山东科技大学C语言作业四.doc(22页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、如有侵权,请联系网站删除,仅供学习与交流山东科技大学C语言作业四【精品文档】第 22 页Problem A: 只有一个二元运算符的表达式运算Time Limit: 1 SecMemory Limit: 2 MB Submit: 5044Solved: 1937Description编程序读入并计算只有一个二元运算符的表达式的值。用到的二元运算符有:“+”、“-”、“*”、“/”、“%”,与C语言的语法一致。Input每行输入一个表达式,格式为:二个整型的操作数a和b,中间用一个符号分开,这个符号就是运算符。测试样例不存在除数为0的情况。输入以a和b为0,且用一个空格分开结束。Output每行对
2、应输入的运算符为“+”、“-”、“*”、“/”、“%”,则计算a+b、a-b、a*b、a/b、a%b的值;否则输出“invalid op”。Sample Input33+58*92.21-617/39%30 0Sample Output3872invalid op-550#include #include void main() int i,a,b; char c; for(i=0;iF”表示输出:摄氏华氏温度转换表,若为“F-C”表示输出:华氏摄氏温度转换表。第2、3行为两个整数:high和low,其值在-100到200之间。第4行为step,step精确到小数点后1位。Output输出第一
3、行为C和F,分别表示摄氏和华氏,与小数点对齐。若输出摄氏华氏温度转换表,则C在前、F在后;反之,则输出华氏摄氏温度转换表。从输出的第2行开始为从温度low到温度high(包括low和high)的转换表,温度输出精确到小数点后1位,表格被“-”分为两个宽度相同的部分,其它的测试样例也不会给出超出宽度的数据,格式详见sample。Sample InputC-F-10402.5Sample Output C - F-10.0 - 14.0 -7.5 - 18.5 -5.0 - 23.0 -2.5 - 27.5 0.0 - 32.0 2.5 - 36.5 5.0 - 41.0 7.5 - 45.5 1
4、0.0 - 50.0 12.5 - 54.5 15.0 - 59.0 17.5 - 63.52 20.0 - 68.0 22.5 - 72.5 25.0 - 77.0 27.5 - 81.5 30.0 - 86.0 32.5 - 90.5 35.0 - 95.0 37.5 - 99.5 40.0 - 104.0HINT输出格式可以通过sample分析出来,因为两栏的总宽度是固定的。一个隐藏的陷阱是step是浮点数,某些浮点数是无法精确存储的,因此经过一定量的计算后这个误差会影响到浮点数的相等性判断,需要加上精度控制。Append Code#include int main() double l
5、ow,high; double step,c,f; char ch1,ch2; scanf(%c-%c,&ch1,&ch2); if(ch1=C&ch2=F) scanf(%lf%lf%lf,&low,&high,&step); f=(double)9/5*low+32; if(low=-100|f F); while(low %6.1lf,low,f); low+=step; return 0; printf( C - F); while(low %5.1lf,low,f); low+=step; return 0; else if(ch1=F&ch2=C) scanf(%lf%lf%lf,
6、&low,&high,&step); c=(low-32)*(double)5/9); if(low=-100|c C); while(low %6.1lf,low,c); low+=step; return 0; printf( F - C); while(low %5.1lf,low,c); low+=step; return 0; Problem C: 1!+2!+k!=?Time Limit: 1 SecMemory Limit: 2 MBSubmit: 5125Solved: 1645Description求1!+2!+k!=?,并判断是否溢出。Input输入为一个正整数k。Outp
7、ut若1!+2!+k!的值溢出unsigned(无符号整型)的范围输出“overflow”,否则输出1!+2!+k!的结果。Sample Input5Sample Output153HINT如果一个值溢出某个变量的数据类型存储范围,但仍然存入该变量,那么存入该变量中的值实际上是什么?Append Code#include int main() int i,j; unsigned int s,b,a; s=0; scanf(%d,&j); b=1; for(i=1;i=j;i+) a=b; b=b*i; if(double)b/ai) printf(overflown); return 0; s
8、=s+b; printf(%un,s); return 0; Problem D: 辗转相除法Time Limit: 1 SecMemory Limit: 2 MBSubmit: 3383Solved: 1185Description辗转相除法,也称欧几里得算法,是求最大公约数的算法。辗转相除法首次出现于欧几里得的几何原本(第VII卷,命题i和ii)中,而在中国则可以追溯至东汉出现的九章算术。两个整数的最大公约数(亦称公约数)是能够同时整除它们的最大的正整数。辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数的差的最大公约数。例如,252和105的最大公约数是21(252 =
9、21 12;105 = 21 5);因为252 105 = 147,所以147和105的最大公约数也是21。在这个过程中,较大的数缩小了,所以继续进行同样的计算可以不断缩小这两个数直至其中一个变成零。这时,所剩下的还没有变成零的数就是两数的最大公约数。例如,计算a = 1071和b = 462的最大公约数的过程如下:从1071中不断减去462直到小于462(可以减2次,即商q0 = 2),余数是147: 1071 = 2 462 + 147.然后从462中不断减去147直到小于147(可以减3次,即q1 = 3),余数是21: 462 = 3 147 + 21.再从147中不断减去21直到小于
10、21(可以减7次,即q2 = 7),没有余数: 147 = 7 21 + 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不能是约数。Sample Input1 12 32 23 24 67 512 618 924 36Sample Output1 11 62
11、21 62 121 356 129 1812 72HINT按照题目描述所给的算法解题,注意以下几点:辗转相除法对两个数的大小关系有要求,根据倍数和约数的数学定义,一个非0数和0的约数是多少?辗转相除法的计算过程是符合这种定义的。Append Code错误:#include int main() int a,b,i,c; for(;scanf(%d%d,&a,&b)!=-1;) c=a*b; if(a=0&b!=0) printf(%d %dn,b,a); else if(a!=0&b=0) printf(%d %dn,a,b); else while(a!=b) if(ab) a=a-b; i
12、f(ab) b=b-a; printf(%d %dn,a,c/a); 正确:#include int main() int a,b,c,m,t; while(scanf(%d %d,&a,&b)!=EOF) if(a=0&b!=0) printf(%d %dn,b,a); else if(a!=0&b=0) printf(%d %dn,a,b); else if(ab) t=a; a=b; b=t; m=a*b; c=a%b; while(c!=0) a=b; b=c; c=a%b; printf(%d %dn,b,m/b); Problem E: Sum Problem (II) : Inp
13、ut/Output PracticeTime Limit: 1 SecMemory Limit: 2 MBSubmit: 2765Solved: 1959Description计算若干整数的和,这些整数都是小于1000的非负整数。Input输入的第一行是一个整数M,后面有M个测试样例。每个测试样例以一个整数N开始,后面接着是N个整数。Output每组测试样例对应一行输出,为所给的N个整数之和,顺序与输入对应。Sample Input23 1 2 35 10 15 20 30 50Sample Output6125HINT用双重循环解决这个问题,外层循环控制用例的输入,内层循环控制读取N个整数。
14、Append Code#include int main() int m,n,a,i,j,s; scanf(%d,&m); for(j=1;j=m;j+) scanf(%d,&n); s=0; for(i=1;i=n;i+) scanf(%d,&a); s=s+a; printf(%dn,s); Problem F: Sum Problem (III) : Input/Output PracticeTime Limit: 1 SecMemory Limit: 2 MBSubmit: 2521Solved: 1817Description计算若干整数的和,这些整数都是小于1000的非负整数。In
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 山东 科技大学 语言 作业
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内