山东科技大学OJ集锦.doc

上传人:jian****018 文档编号:8780782 上传时间:2020-03-31 格式:DOC 页数:52 大小:132KB
返回 下载 相关 举报
山东科技大学OJ集锦.doc_第1页
第1页 / 共52页
山东科技大学OJ集锦.doc_第2页
第2页 / 共52页
山东科技大学OJ集锦.doc_第3页
第3页 / 共52页
点击查看更多>>
资源描述
(1-2)Description计算两整数x和y(0x,y1000)的和、差、积、商、余数、x的平方和y的三次方。Input输入只有一行,格式见sample。Output输出为多行,按顺序每行输出x,y的和、差、积、商、余数、x的平方和y的三次方,格式见sampleSample Inputx = 11, y = 3Sample Outputx + y : 14x - y : 8x * y : 33x / y quotient: 3, remainder: 2x 2 : 121y 3 : 27HINT注意输入输出格式。了解C语言整数除法运算符的特点,并且没有求幂的运算符#include int main() int x,y; 0x1000,0y1000; 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); return 0; (1-3)Description从键盘输入圆的半径,求圆的面积和周长,圆周率取3.14。Input输入一个浮点型数据,有效数字不会超过十进制的6位。Output输出为两行。第一行为圆的面积,第二行为圆的周长,格式见sample。Sample Input3Sample OutputArea: 28.260000Perimeter: 18.840000HINT了解浮点类型的输入、输出和算术运算符#include #define P 3.14 int main() float r,s,c; scanf(%f,&r); s=P*r*r; c=2*r*P; printf(Area: %fn,s); printf(Perimeter: %fn,c); return 0; (1-4)Description求3个数的平均值。Input输入只有一行,为3个较小的整数。Output输出为这3个整数的平均值,保留3位小数。Sample Input1 2 3Sample Output2.000HINT注意除法运算对整型数据和浮点型数据是不一样的#include int main() int a,b,c; float Aver; scanf(%d %d %d,&a,&b,&c); Aver=(a+b+c)/3.0; printf(%.3fn,Aver); return 0; (1-5)Description给出人民币对美元、欧元、日元的当日汇率,求给定金额的人民币能兑换成外币的金额,求给定金额的外币能兑换成人民币的金额。要计算的外币有三种:美元、欧元、日元。Input输入有三行。第一行依次为美元、欧元、日元外币汇率,用空格分开。汇率用100外币为单位,精确到小数点后4位,如668.5200表示“100美元=668.5200人民币”。汇率浮动范围为(0,10000)。第二行为外币金额x,第三行为人民币金额y。x,y均为整数,且0x,y10000。Output输出为两行。第一行为金额为x的美元、欧元、日元兑换成人民币的金额,用空格分开。第二行为金额为y的人民币兑换成美元、欧元、日元的金额,用空格分开。所有金额精确到小数点后两位。Sample Input668.5200 908.0685 7.985215001500Sample Output10027.80 13621.03 119.78224.38 165.19 18784.75HINT了解浮点数据类型的精确度和输出控制。#include int main() double x,y; double a,b,c,i,j,k,l,m,n; scanf(%lf%lf%lf,&a,&b,&c); scanf(%lf,&x); scanf(%lf,&y); i=x/100*a; j=x/100*b; k=x/100*c; l=y/a*100; m=y/b*100; n=y/c*100; printf(%.2lf %.2lf %.2lfn,i,j,k); printf(%.2lf %.2lf %.2lfn,l,m,n); return 0; (1-6)Problem F: 求字符的值Time Limit: 1 Sec Memory Limit: 2 MBSubmit: 562 Solved: 373SubmitStatusWeb BoardDescription从键盘输入3个字符(不含双字节字符),分别输出每个字符的十进制值(ASCII码)、八进制值和十六进制值。Input输入为3个字符。Output输出为3行。每一行为每个字符(对应输入顺序)的十进制、八进制和十六进制值,用空格分隔开。每个输出的值占3个字符,不足3个字符前面补0。Sample Input0 ASample Output048 060 030032 040 020065 101 041HINT了解字符值的存储和整型的关系。#include int 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); return 0; (1-7)Problem G: 奇数还是偶数?Time Limit: 1 Sec Memory Limit: 2 MBSubmit: 575 Solved: 455SubmitStatusWeb BoardDescription输入一个整数,判读它是奇数还是偶数。Input输入只有一行,为一个100以内的正整数。Output输出为一行。若输入为偶数则输出“even”,奇数输出“odd”。Sample Input30Sample OutputevenHINT用整数运算可以解决,练习“?:”表达式。#include int main() int a; (0a)&(a100); scanf(%d,&a); if (a%2=0) printf(evenn); else printf(oddn); return 0; (1-8)Problem H: 绝对值Time Limit: 1 Sec Memory Limit: 2 MBSubmit: 840 Solved: 376SubmitStatusWeb BoardDescription求整型数据和浮点型数据的绝对值。Input输入两个数,第一个是整数,第二个是浮点数。Output输出为两行,第一行为整数的绝对值,第二行为浮点数的绝对值,注意浮点数的绝对值不输出无意义的0。Sample Input-11Sample Output11HINT求绝对值可以用标准库函数来完成,也可以自己判断。注意浮点数的输出格式。求绝对值的函数在哪个头文件?貌似很多人会搞错,包括很多编书的人!#include #include #include int main() int a,c; double b,d; scanf(%dn%lf,&a,&b); c=abs(a); d=fabs(b); printf(%dn%g,c,d); return 0; (1-9)Problem I: 简单的打折计算Time Limit: 1 Sec Memory Limit: 2 MBSubmit: 919 Solved: 435SubmitStatusWeb BoardDescription商店规定:消费满n元,可以打八八折。设某件商品标价m元,输入购买的件数x,计算出需要支付的金额(单位:元),精确到分。Input输入只有一行,三个整数m、n和x,且0xmn1000。Output输出金额,精确到分。Sample Input95 300 4Sample Output334.40HINT了解浮点型的输出控制,注意整型和浮点型混合运算过程中的数据类型转换。#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); return 0; (1-10)Problem J: 判断闰年Time Limit: 1 Sec Memory Limit: 2 MBSubmit: 939 Solved: 443SubmitStatusWeb BoardDescription输入一个正整数的年份,判断是否为闰年。Input输入只有一行,为一个10000以内的正整数。Output输出为一行。若输入为闰年偶数则输出“Yes”,否则输出“No”。Sample Input2010Sample OutputNoHINT了解逻辑运算符和关系运算符。#include int main() int a; 0a&a10000; scanf(%d,&a); if (a%4=0&a%100!=0) printf(Yesn); else if (a%400=0) printf(Yesn); else printf(Non); return 0; (1-11)DescriptionGHacker最近痴迷于一个新上市的解谜游戏,其中一关的过关是破解一个字符串S。经过3天的冥思苦想,GHacker成功的搞明白了这其中的奥秘,把串S中的整数取出来求和,就可以过关了。但是GHacker的数学实在糟糕。他无法在短暂的时间内算出来,只好求助Jackie。Jackie观察到虽然每次出现的数字不同,但是其它的符号并不会变化。于是Jackie编写了一个非常短的程序,帮助GHacker把这一关过了。Input输入为串S,只有一行。Output串S中用非数字(09)分隔开的非负整数之和,不会超出int类型的数据范围。Sample Input13?:7514,54.487=(438922x159?392)%032n111cdef120$95;Sample Output447899HINTscanf()可以解决这个问题,注意转义字符和格式控制字符。#include int main() int a,b,c,d,e,f,g,h,i,j,k,s; 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,&a,&b,&c,&d,&e,&f,&g,&h,&i,&j,&k); s=a+b+c+d+e+f+g+h+i+j+k; printf(%d,s); return 0; (1-12)Problem L: 水仙花数Time Limit: 1 Sec Memory Limit: 2 MBSubmit: 960 Solved: 534SubmitStatusWeb BoardDescription如果一个三位十进制数等于其各位数字的立方和,则称这个数为水仙花数。如:13+53+33=153。Input一个整数x,100=x=999。Outputx是水仙花数,则输出“YES”,否则为“NO”。Sample Input153Sample OutputYES答案:#include int main() int a,b,c,d,e; scanf(%d,&a); b=a/100; c=(a-b*100)/10; d=(a-b*100-c*10); e=b*b*b+c*c*c+d*d*d; if(a=e) printf(YESn); else printf(NOn); return 0; (1-13)Problem M: 求1+2+.+n=?Time Limit: 1 Sec Memory Limit: 2 MBSubmit: 2023 Solved: 413SubmitStatusWeb BoardDescription给定一个n,求出s = 1+2+3+.+n的值。Input输入只有一行,包含一个正整数n(n=232)。Output输出一行,为1+2+.+n的值。Sample Input10Sample Output55HINTn的数据范围大,需注意数据类型的选择和计算次序,以避免数据溢出。#include int main() unsigned long long n; scanf(%llu,&n); if(n%2=0) printf(%llu,n/2*(n+1); else printf(%llu,(n+1)/2*n); return 0; (1-14)Problem N: 2的多少次幂Time Limit: 1 Sec Memory Limit: 2 MBSubmit: 1022 Solved: 470SubmitStatusWeb BoardDescription从键盘输入一个数x,x是2的整数次幂(x=2y),请编程求出y的值。Input一个非负有理数x,x在0,2256范围内。Output一个整数y。Sample Input1Sample Output0HINT看起来数据很大,但是用double完全可以存储。为什么?请研究下IEEE-754标准的浮点数存储格式。这里要用到C语言标准库的数学函数。#include #include int main() double x; int y; scanf(%lf,&x); y=log2(x); printf(%d,y); return 0; 第二次作业(2_1)问题 A: 哪一行比较长时间限制: 1 Sec 内存限制: 2 MB提交: 625 解决: 252提交状态讨论版题目描述读取两行字符串,按每行的长度从长到短输出。输入输入为两行,每行不会超过26个字符。输出输出为两行,按每行的长度从长到短输出。样例输入abcdefghijkabcdefghijklmnopqrstuvwxyz样例输出abcdefghijklmnopqrstuvwxyzabcdefghijk提示了解字符串的存储和操作,了解gets()和scanf(%s)读入字符串的不同之处#include #include int main() char s127,s227;int a,b;gets(s1);gets(s2);a=strlen(s1);b=strlen(s2);if (a=b)puts(s1);puts(s2);elseputs(s2);puts(s1); return 0;(2_2 ) 题目描述从键盘上输入0100之间的三个数,按从小到大的顺序输出。输入输入只有一行,为三个整数。输出按从小到大输出这三个数。样例输入15 10 20样例输出10 15 20提示用if语句判断各种情况可以解决这个问题。#include int main() int a,b,c; scanf(%d%d%d,&a,&b,&c); if (a=b&b=c) printf(%d %d %dn,c,b,a); else if (a=c&c=b) printf(%d %d %dn,b,c,a); else if (b=c&c=a) printf(%d %d %dn,a,c,b); else if (b=a&a=c) printf(%d %d %dn,c,a,b); else if (c=b&b=a) printf(%d %d %dn,a,b,c); else printf(%d %d %dn,b,a,c); return 0;Append Code (2_3) 题目描述输出1k之间是m的倍数或n的倍数、但不是m和n的公倍数的数,其中1=m,nk100。输入输入三个整数,依次为k、m、 n。输出从小到大输出符合题意的所有整数,两数之间用一个空格分开。样例输入15 2 3样例输出2 3 4 8 9 10 14 15提示难点在于输出格式的控制:空格在数的中间,学会用循环时边界情况的特殊处理。#include int main() int k,m,n,a,b,i,c,d; scanf(%d%d%d,&k,&m,&n); if (mn) c=m,d=n; else c=n,d=m; printf(%d,d); for (i=d+1;i=k;i+) a=i%m; b=i%n; if (a=0&b!=0|a!=0&b=0) printf( %d,i); printf(n); return 0;(2_4)Description计算a+b,0=a,b1000。Input输入有多对整数a和b组成,每对a和b占一行,a,b用空格分开。Output每行输出一个a+b的值,顺序与输入对应。Sample Input1 210 20Sample Output330HINTOJ系统上测试输入结束符为EOF(End Of File),其值为-1。用scanf()把文件所有内容读完后,会读到EOF,所以可以用来判断输入是否完成,测试时可以用Ctrl+Z产生EOF。本题解法参看FAQ。#include int main() int a,b; while(scanf(%d %d,&a,&b) != EOF) printf(%dn,a+b);return 0;Append Code(2_5)问题 E: A+B Problem (II) : Input/Output Pratice时间限制: 1 Sec 内存限制: 2 MB提交: 242 解决: 177提交状态讨论版题目描述计算a+b,0=a,b1000。输入输入的第一行是一个整数N,后面有N对整数a和b,每对a和b占一行,a,b用空格分开。输出每行输出一个a+b的和,顺序与输入对应。样例输入21 210 20样例输出330提示#include int main() int a1000,b1000,N,i; scanf(%d,&N); for (i=1;i=N;i+)scanf(%d%d,&ai,&bi); for (i=1;i=N;i+) printf(%dn,ai+bi); return 0;N给出了测试样例数,用for循环处理方便。(2_6)问题 F: A+B Problem (III) : Input/Output Pratice时间限制: 1 Sec 内存限制: 2 MB提交: 250 解决: 154提交状态讨论版题目描述计算a+b,0=a,b1000。输入输入有多对整数a和b组成,每对a和b占一行,a,b用空格分开。当测试样为0 0时表示输入结束,0 0不参与运算。输出每行输出一个a+b的值,顺序与输入对应。样例输入1 210 200 0样例输出330提示练习break的使用。#include int main() int a,b,sum; while (scanf(%d %d,&a,&b)!=EOF) if (a=0&b=0) break; else sum=a+b; printf(%dn,sum); return 0;(2_7)问题 G: A+B Problem (IV) : Input/Output Pratice时间限制: 1 Sec 内存限制: 2 MB提交: 284 解决: 151提交状态讨论版题目描述计算a+b,0=a,b1000。输入输入有多对整数a和b组成,每对a和b占一行,a,b用空格分开。输出每行输出一个a+b的值,顺序与输入对应。每个格式样例之间用一个空行分隔开。样例输入1 210 2015 35样例输出33050提示由于输出的和比空行多一个,所以全部计算放在一个循环里是不行的,必须要特殊处理开头或者结尾。#include int main()int a,b,sum;scanf(%d%d,&a,&b);printf(%dn,a+b);while (scanf(%d %d,&a,&b)!=EOF)sum=a+b; printf(n%dn,sum);(2_8)问题 H: n个数的最大值和最小值时间限制: 1 Sec 内存限制: 2 MB提交: 304 解决: 159提交状态讨论版题目描述找出n个数中最大的数和最小的数,并将它们的值输出出来。输入输入为n+1个整数,都在int类型范围内。这些数可能用若干空格或者换行符分隔开。输入的第1个数为n,表示后续有n个数输入。从输入的第2个数开始,求出直到第n+1个数中最大的数和最小的数。输出输出为两行,格式见sample。样例输入3 0 1 -1样例输出The maximum number is 1.The minimum number is -1.提示分隔符是空格还是回车都是空白符,对scanf(%d)来说没有区别;先读入n,然后用for循环就很容易控制读入n个数的过程。#include int main() int b,d,n,i,max,min; scanf(%d,&n); scanf(%d,&d); max=d; min=d; for (i=2;i=max) max=b; if (b=min) min=b; printf(The maximum number is %d.n,max); printf(The minimum number is %d.n,min); return 0; (2_9)问题 I: 成绩的等级时间限制: 1 Sec 内存限制: 2 MB提交: 425 解决: 153提交状态讨论版题目描述把百分制的考试成绩转换成五级制的成绩:90100:Excellent8089:Good7079:Average6069:Pass059:Failing不在0100之间的输入是非法数据,输出“Error”。输入输入多行,每行一个整数。输出输入所对应的成绩等级。样例输入-18192356872100样例输出ErrorGoodExcellentFailingPassAverageExcellent提示 用switch语句解决这个问题比较方便。#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;(2_10)问题 J: 只有一个二元运算符的表达式运算时间限制: 1 Sec 内存限制: 2 MB提交: 334 解决: 138提交状态讨论版题目描述编程序读入并计算只有一个二元运算符的表达式的值。用到的二元运算符有:“+”、“-”、“*”、“/”、“%”,与C语言的语法一致。输入每行输入一个表达式,格式为:二个整型的操作数a和b,中间用一个符号分开,这个符号就是运算符。测试样例不存在除数为0的情况。输入以a和b为0,且用一个空格分开结束。输出每行对应输入的运算符为“+”、“-”、“*”、“/”、“%”,则计算a+b、a-b、a*b、a/b、a%b的值;否则输出“invalid op”。样例输入33+58*92.21-617/39%30 0样例输出3872invalid op-550提示教材上有非常相似的例题可以参考。#include int main() int a,b; char c; while (scanf(%d%c%d,&a,&c,&b)!=EOF) if (a=0&c=32&b=0) break; else switch(c) case +: printf(%dn,a+b); break; case -: printf(%dn,a-b); break; case *: printf(%dn,a*b); break; case /: printf(%dn,a/b); break; case %: printf(%dn,a%b); break; default : printf(ionvalid opn); break; return 0;*(2_11)问题 K: 求100以内的素数时间限制: 1 Sec 内存限制: 2 MB提交: 612 解决: 197提交状态讨论版题目描述素数是只能被1和自身整除的正整数,根据数学定义1不是素数。素数也叫质数。输入输入为两个整数m和n,满足0=m=n=100。输出从大到小输出mn之间的所有素数,一个素数一行。如果mn之间没有素数,则不输出任何数。输出的所有数在两行“=”之间。样例输入2 12样例输出=117532=提示利用素数的数学规律可以很容易的解出此题,题目给出的数据范围是关#includeint main() int m,n,i,j,N; scanf(%d%d,&m,&n); printf(=n); for(i=n;i1&i=m;i-) for(j=2;jF”表示输出:摄氏华氏温度转换表,若为“F-C”表示输出:华氏摄氏温度转换表。第2、3行为两个整数:high和low,其值在-100到200之间。第4行为step,step精确到小数点后1位。输出输出第一行为C和F,分别表示摄氏和华氏,与小数点对齐。若输出摄氏华氏温度转换表,则C在前、F在后;反之,则输出华氏摄氏温度转换表。从输出的第2行开始为从温度low到温度high(包括low和high)的转换表,温度输出精确到小数点后1位,表格被“-”分为两个宽度相同的部分,其它的测试样例也不会给出超出宽度的数据,格式详见sample。样例输入C-F-10402.5样例输出 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 10.0 - 50.0 12.5 - 54.5 15.0 - 59.0 17.5 - 63.5 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.0提示 输出格式可以通过sample分析出来,因为两栏的总宽度是固定的。一个隐藏的陷阱是step是浮点数,某些浮点数是无法精确存储的,因此经过一定量的计算后这个误差会影响到浮点数的相等性判断,需要加上精度控制。#include int main () double z,C,F,i,m,n; char a,b,c,d; scanf(%c%c%c%c,&a,&b,&c,&d); scanf(%lf,&m); scanf(%lf,&n); scanf(%lf,&z); if(a=C) printf( C - Fn); for(i=m;i %5.1lfn,i,F); else if(a=F) printf( F - Cn); for(i=m;i %5.1lfn,i,C); return 0; *(2_13)问题 M: 1!+2!+k!=?时间限制: 1 Sec 内存限制: 2 MB提交: 758 解决: 205提交状态讨论版求1!+2!+k!=?(unsigned(无符号整型)k=12)#include int main() int k,i,j; unsigned int sum=0,a=1; scanf(%d,&k); for(i=1;i=1;j-) a=a*j; sum=sum+a; a=1;(将a置为1!) printf(%un,sum); return 0; 题目描述求1!+2!+k!=?,并判断是否溢出。输入输入为一个正整数k。输出若1!+2!+k!的值溢出unsigned(无符号整型)的范围输出“overflow”,否则输出1!+2!+k!的结果。样例输出153提示如果一个值溢出某个变量的数据类型存储范围,但仍然存入该变量,那么存入该变量中的值实际上是什么?#include int main() int k,i,j; unsigned int sum=0,a=1; scanf(%d,&k); if(k=12) for(i=1;i=1;j-) a=a*j; sum=sum+a; a=1; printf(%un,sum); else printf(overflown); return 0; 第三次作业(3-1)A Description给出一个十进制的非负整数x,x=216,把它转换成二进制数输出。Input输入为多行,每行一个整数x,至读入EOF结束。Output每行输出x对应的二进制数值。Sample Input0133365535Sample Output01111000011111111111111111HINT本题有多种解法:可以用循环迭代对2的除法和取余操作,不过处理的顺序与输出顺序相反,需要利用数组存储;用取对数或从大到小减去2的整数次幂的方法计算与输出顺序是相同的;也可以用printf()把十进制的数值处理成十六进制,然后1位十六进制转4位二进制;也可以用位运算处理。#include int main() int a20,i,b; while(scanf(%d,&b)!=EOF) for(i=0;i+) ai=b%2; b=b/2; if(b=0) break; for(;i=0;i-) printf(%d,ai); printf(n); return 0; 兔子繁殖问题: 假设一对兔子每月能生一对小兔(一雌一雄),每对小兔出生后的下一个月是没有繁殖能力的,至出生后的第三个月开始又可以每月生一队小兔,问从一对刚出生的小兔开始,经过若干个月后一共有多少兔子(假设在此过程中兔子没有死亡)? 这个问题是意大利数学家菲波那契(Fibonacci)在他1202年出版的算盘全书中提出来的,从第一对刚出生的小兔开始每月的兔子数被乘坐菲波那契序列。 输入 输入的第一个数为n,接下来有n个数字。每个数字为一个月份m(m=45)。 输出 输出为n行,每行为第m个月后的兔子总数。 样例输入 6 1 2 3 4 5 10 样例输出 1 2 3 5 8 89 提示:可以先计算出菲波那契序列并存储下来,然后查询出每月兔子数。#includeint main()int a60=1,1;int i,n,m;for(i=2;i0,有两个不等的实根;2. =0,有两个相同的实根;3. 0。第三行输出为所输入方程的根,分为三种情况:1. 若方程满足0,即有两不等实根x1、x2,则按大小顺序输出这两个实根。2. 若方程满足=0,即有两相同实根x,则输出一个实根。3. 若方程满足0,即有两共轭的虚根x1、x2,则输出两个虚根,虚部符号为正的(即u+vi形式)先输出,虚部符号为负的(x-yi形式)后输出。以上输出均不输出数学上无意义或可省略的的符号,所有数值最多保留6位有效数字。每个样例之后都有一个空行分隔。Sample Input1 2 1-1 2 -1-5 2 -0.2-3 2 03 0 122 4 40Sample OutputCase 1 :x2 + 2x + 1 = 0only one real root : -1Case 2 :x2 - 2x + 1 = 0only one real root : 1Case 3 :5x2 - 2x + 0.2 = 0only one real root : 0.2Case 4 :3x2 - 2x = 0two real roots : 0, 0.666667Case 5 :3x2 + 12 = 0two imaginary roots : 2i, -2iCase 6 :2x2 + 4x + 4 = 0two imaginary roots : -1+i, -1-iHINT输出方程格式的各种情况要想清楚,这一部分测试数据给的很全面。另一个就是浮点数的精度控制,这一部分sample给出了例子。值得注意的是,linux下gcc编译的浮点数运算结果有-0,这是OJ系统Judge端使用的系统;而windows XP下的minGW编译器和VC6不会产生-0,只会输出0;但windows 7下的minGW编译器是能够产生-0的(确实很诡异)。因此使用windows XP的同学忽略了对结果为0的检测,程序需要对结果为0的情况进行全面考虑,确保正确的输出0。这个问题卡了好些同学好几天。关于是否会产生-0,输出表达式0.0/-1的结果就能测试出来。浮点数从负数方向运算出结果为0,则浮点值为-0是符合C语言浮点数运算规则的,目前尚不清楚windows XP系统不能产生-0的原因。#include #include int main()double a,b,c,d,m,x1,x2,t,s;int i=1;while(scanf(%lf,&a)&a!=0)if(a=0) break;if(a!=0)scanf(%lf%lf,&b,&c);if(a0?+:-,fabs(b);if(c=0);else printf(%c %g ,c0?+:-,fabs(c);printf(= 0n);m=b*b-4*a*c;
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 大学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!