山东科技大学C语言作业四
更新时间:2023-11-28 11:20:01 阅读量: 教育文库 文档下载
Problem A: 只有一个二元运算符的表达式运算
Time Limit: 1 Sec Memory Limit: 2 MB Submit: 5044 Solved: 1937 [Submit][Status][Web Board]
Description
编程序读入并计算只有一个二元运算符的表达式的值。用到的二元运算符有:“+”、“-”、“*”、“/”、“%”,与C语言的语法一致。
Input
每行输入一个表达式,格式为:二个整型的操作数a和b,中间用一个符号分开,这个符号就是运算符。测试样例不存在除数为0的情况。 输入以a和b为0,且用一个空格分开结束。
Output
每行对应输入的运算符为“+”、“-”、“*”、“/”、“%”,则计算a+b、a-b、a*b、a/b、a%b的值;否则输出“invalid op”。
Sample Input
33+5 8*9 2.2 1-6 17/3 9%3 0 0
Sample Output
38 72 invalid op -5 5 0
#include
int i,a,b; char c;
for(i=0;i<=100;i++)
{for(;scanf(\ if(a==0&&c==' '&&b==0) goto loop; else
switch(c) {
case'+':
printf(\ break; case'-':
printf(\ break; case'*':
printf(\ break; case'/':
printf(\ break; case'%':
printf(\ break; default:
printf(\
} } loop: i=101; }
Problem B: 摄氏——华氏温度转换表
Time Limit: 1 Sec Memory Limit: 2 MB Submit: 6632 Solved: 1711 [Submit][Status][Web Board]
Description
已知华氏温度F,转换为摄氏温度C的公式为C=(F-32)*5/9。
输出给定范围(从low到high)和步长(step)的摄氏——华氏温度转换表
Input
第1行若为“C->F”表示输出:摄氏——华氏温度转换表,若为“F->C”表示输出:华氏——摄氏温度转换表。
第2、3行为两个整数:high和low,其值在-100到200之间。 第4行为step,step精确到小数点后1位。
Output
输出第一行为C和F,分别表示摄氏和华氏,与小数点对齐。若输出摄氏——华氏温度转换表,则C在前、F在后;反之,则输出华氏——摄氏温度转换表。
从输出的第2行开始为从温度low到温度high(包括low和high)的转换表,温度输出精确到小数点后1位,表格被“->”分为两个宽度相同的部分,其它的测试样例也不会给出超出宽度的数据,格式详见sample。
Sample Input
C->F -10
40 2.5
Sample 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 10.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.0
HINT
输出格式可以通过sample分析出来,因为两栏的总宽度是固定的。一个隐藏的陷阱是step是浮点数,某些浮点数是无法精确存储的,因此经过一定量的计算后这个误差会影响到浮点数的相等性判断,需要加上精度控制。
Append Code
[Submit][Status][Web Board]
#include
double low,high; double step,c,f; char ch1,ch2;
scanf(\ if(ch1=='C'&&ch2=='F') {
scanf(\ f=(double)9/5*low+32; if(low==-100||f<=-100) {
printf(\ C -> F\ while(low<=high+0.01) {
f=low*9.0/5.0+32;
printf(\ low+=step; }
return 0; }
printf(\ C -> F\ while(low<=high+0.01) {
f=low*9.0/5.0+32;
printf(\
low+=step; }
return 0; }
else if(ch1=='F'&&ch2=='C') {
scanf(\ c=(low-32)*((double)5/9); if(low==-100||c<=-100) {
printf(\ F -> C\ while(low<=high+0.01) {
c=(low-32)*5/9.0;
printf(\ low+=step; }
return 0; }
printf(\ F -> C\ while(low<=high+0.01) {
c=(low-32)*5/9.0;
printf(\ low+=step; }
return 0; } }
Problem C: 1!+2!+…+k!=?
Time Limit: 1 Sec Memory Limit: 2 MB Submit: 5125 Solved: 1645 [Submit][Status][Web Board]
Description
求1!+2!+…+k!=?,并判断是否溢出。
Input
输入为一个正整数k。
Output
若1!+2!+…+k!的值溢出unsigned(无符号整型)的范围输出“overflow”,否则输出1!+2!+…+k!的结果。
Sample Input
5
Sample Output
153
HINT
如果一个值溢出某个变量的数据类型存储范围,但仍然存入该变量,那么存入该变量中的值实际上是什么?
Append Code
#include
int i,j;
unsigned int s,b,a; s=0;
scanf(\ b=1;
for(i=1;i<=j;i++) { a=b; b=b*i;
if((double)b/a
{ printf(\ return 0; }
s=s+b; }
printf(\ return 0; }
Problem D: 辗转相除法
Time Limit: 1 Sec Memory Limit: 2 MB Submit: 3383 Solved: 1185 [Submit][Status][Web Board]
Description
辗转相除法,也称欧几里得算法,是求最大公约数的算法。辗转相除法首次出现于欧几里得的《几何原本》(第VII卷,命题i和ii)中,而在中国则可以追溯至东汉出现的《九章算术》。
两个整数的最大公约数(亦称公约数)是能够同时整除它们的最大的正整数。辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数的差的最大公约数。例如,252和105的最大公约数是21(252 = 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直到小于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 Input
1 1 2 3 2 2 3 2 4 6 7 5 12 6 18 9 24 36
Sample Output
1 1 1 6 2 2 1 6 2 12 1 35 6 12 9 18 12 72
HINT
按照题目描述所给的算法解题,注意以下几点:辗转相除法对两个数的大小关系有要求,根据倍数和约数的数学定义,一个非0数和0的约数是多少?辗转相除法的计算过程是符合这种定义的。
Append Code
[Submit][Status][Web Board] 错误:#include
int main()
{
int a,b,i,c;
for(;scanf(\
{ c=a*b; if(a==0&&b!=0) printf(\ else if(a!=0&&b==0) printf(\
else {
while(a!=b)
{ if(a>b) a=a-b; if(a
}
printf(\
} } }
正确:#include
{ int a,b,c,m,t;
while(scanf(\ {
if(a==0&&b!=0)
printf(\ else if(a!=0&&b==0)
printf(\
else {
if(a
t=a; a=b; b=t; }
m=a*b; c=a%b; while(c!=0) {
a=b; b=c; c=a%b; }
printf(\ } } }
Problem E: Sum Problem (II) : Input/Output
Practice
Time Limit: 1 Sec Memory Limit: 2 MB Submit: 2765 Solved: 1959 [Submit][Status][Web Board]
Description
计算若干整数的和,这些整数都是小于1000的非负整数。
Input
输入的第一行是一个整数M,后面有M个测试样例。每个测试样例以一个整数N开始,后面接着是N个整数。
Output
每组测试样例对应一行输出,为所给的N个整数之和,顺序与输入对应。
Sample Input
2
3 1 2 3
5 10 15 20 30 50
Sample Output
6 125
HINT
用双重循环解决这个问题,外层循环控制用例的输入,内层循环控制读取N个整数。
Append Code
#include
int m,n,a,i,j,s; scanf(\ for(j=1;j<=m;j++) {
scanf(\ { s=0;
for(i=1;i<=n;i++) {
scanf(\ s=s+a; }
printf(\ } } }
Problem F: Sum Problem (III) : Input/Output
Practice
Time Limit: 1 Sec Memory Limit: 2 MB Submit: 2521 Solved: 1817 [Submit][Status][Web Board]
Description
计算若干整数的和,这些整数都是小于1000的非负整数。
Input
输入为多行,每行为一组测试样例。每个测试样例以一个整数N开始,后面接着是N个整数。当输入的N为0时表示输入结束。
Output
每组测试样例对应一行输出,为所给的N个整数之和,顺序与输入对应。
Sample Input
3 1 2 30
5 10 15 20 30 50 0
Sample Output
6 125
HINT
用双重循环解决这个问题,外层循环控制用例的输入,内层循环控制读取N个整数。
Append Code
#include
int n,a,i,s;
for(;scanf(\ {
if(n==0) break; else { s=0;
for(i=1;i<=n;i++) {
scanf(\ s=s+a; }
printf(\ } } }
Problem G: 百钱买百鸡问题
Time Limit: 1 Sec Memory Limit: 2 MB Submit: 4464 Solved: 800 [Submit][Status][Web Board]
Description
“百钱买百鸡”是我国著名的古代数学问题,中国古代数学家张丘建在他的《算经》中提出了这样一个问题:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?
你的任务是求解下面这个问题。问题是这样描述的:a文钱可买一只公鸡,b文钱可买一只母鸡,c文钱可买d只小鸡。用m文钱买n只鸡,那么有公鸡x只、母鸡y只、小鸡z只。求解出符合题意的x,y,z。
Input
输入为一张表。第一行是一个固定不变的表头,格式见sample。后面有多行,每行为一组测试数据。每组测试数据由6个整数组成,分别为“a,b,c/d,m,n”。满足0
Output
每组测试数据的运行结果输出为一张表,表头固定为“COCKS,HENS,CHICKS”。每组测试数据的一个可行解数出为一行,为三个整数:“x,y,z”。多组解按照公鸡数从少到多的顺序输出。若测试数据无解则输出“Cannot buy!”。两组测试数据之间用一个空行分隔开。
Sample Input
COCK,HEN,CHICK,MONEY,CHICKS 3,2,1/3,100,100 5,3,1/3,100,100 8,5,1/7,100,100 8,5,1/7,300,300
Sample Output
COCKS,HENS,CHICKS 0,40,60 5,32,63 10,24,66 15,16,69 20,8,72 25,0,75
COCKS,HENS,CHICKS 0,25,75 4,18,78 8,11,81 12,4,84
Cannot buy!
COCKS,HENS,CHICKS 8,40,252
HINT
本题重点在于了解多重循环的运行效率问题,减少一层循环可以降低很大规模的运算量。通过在循环体内加计数器可以统计出循环的运行次数,当测试数据变大时,运行次数的增长会非常可观,这就是超时的原因了。
Append Code
Eg:#include
int a,b,c;
for(a=1;a<20;a++) {
for(b=1;b<33;b++) {
for(c=3;c<100;c+=3)
{
if((a+b+c==100)&&(a*5+b*3+c/3==100)) printf(\ } } } }
答案:#include
char s[50];
long int a,b,m,n,x,y,z,flag; int c,d; gets(s);
while(scanf(\ {
flag=0;
for(x=0; x<=n; x++) {
if((((a-b)*x+b*n-m)*d)%(b*d-c)==0) {
z=(((a-b)*x+b*n-m)*d)/(double)(b*d-c); y=n-z-x;
if(fabs(a*x+b*y+z*c/(double)d-m)<0.000000001&&z*c%d==0&&x>=0&&y>=0&&z>=0) {
flag=1; } } }
if(flag==0)
printf(\ else {
printf(\ for(x=0; x<=n; x++) {
if((((a-b)*x+b*n-m)*d)%(b*d-c)==0) {
z=(((a-b)*x+b*n-m)*d)/(double)(b*d-c);
y=n-z-x;
if(fabs(a*x+b*y+z*c/(double)d-m)<0.000000001&&z*c%d==0&&x>=0&&y>=0&&z>=0) {
printf(\ } } } }
printf(\ }
return 0; }
Problem H: Print Graphics Problerm (II)
Time Limit: 1 Sec Memory Limit: 16 MB Submit: 2378 Solved: 845 [Submit][Status][Web Board]
Description
向标准输出上打印一些用ASCII字符组成的图形。
Input
输入为多个整数n,0 Output 若n为偶数,则输出一个正向的n层等腰三角形;n为奇数,则输出一个倒向的n层等腰三角形。三角形由“+”组成。任意两个图形之间有一个空行分隔,格式见sample。 Sample Input 5 4 0 Sample Output +++++++++ +++++++ +++++ +++ + + +++ +++++ +++++++ HINT Append Code [Submit][Status][Web Board] ???< 中文 ????? English ??? All Copyright Reserved 2010-2011 SDUSTOJ TEAM GPL2.0 2003-2011 HUSTOJ Project TEAM Anything about the Problems, Please Contact Admin:admin #include int n,i,j; while(n!=0) { scanf(\ if(n%2==0&&n!=0) { for(i=1;i<=n;i++) { for(j=1;j<=n-i;j++) printf(\ for(j=1;j<=2*i-1;j++) printf(\ printf(\ } } else { for(i=n;i>=1;i--) { for(j=n-i;j>=1;j--) printf(\ for(j=2*i-1;j>=1;j--) printf(\ printf(\ } } printf(\ } return 0; } Problem I: 编写函数:求三个整数的最大值 (Append Code) Time Limit: 1 Sec Memory Limit: 2 MB Submit: 1995 Solved: 913 [Submit][Status][Web Board] Description 求三个整数的最大值。 ----------------------------------------------------------------------------- 编写一个函数maxValue()求三个整数的最大值。其原型为: int maxValue(int a,int b,int c); 功能:函数的三个参数传入a,b,c的值,返回其中最大值。 函数的调用格式见“Append Code”。 Input 输入三个int类型的整数,两两之间用空格隔开。 Output 输出三个整数的最大值。 Sample Input 1 2 3 Sample Output 3 HINT 参看系统首页上的“Append Code”使用说明,讨论版(Web Board)上也有。 Append Code append.c, append.cc, [Submit][Status][Web Board] ???< 中文 ????? English ??? All Copyright Reserved 2010-2011 SDUSTOJ TEAM GPL2.0 2003-2011 HUSTOJ Project TEAM Anything about the Problems, Please Contact Admin:admin #include int maxValue(int a,int b,int c) { int x; x=a>b?a:b; if(x int main() { int x,y,z; scanf(\ printf(\ return 0; } 正确:#include if(a>b&&b>c) return a; else if(b>a&&b>c) return b; else if(c>a&&c>b) return c; } Time Limit: 1 Sec Memory Limit: 2 MB Submit: 1064 Solved: 448 [Submit][Status][Web Board] Description 判断给定的一个字符是否是元音字母(a,e,i,o,u)? ----------------------------------------------------------------------------- 用C语言实现:append.c中函数原型为 int is_vocals(char c); 功能:若c是元音字母返回1,否则返回0。 用C++实现:append.cc中函数原型为 bool isVocals(char c); 功能:若c是元音字母返回true,否则返回false。 函数的调用格式见“Append Code”。 Input 输入一个字母。 Output 如果是一个元音字母,则输出: It is a vocals. 否则输出: It is not a vocals. Sample Input a Sample Output It is a vocals. HINT 参看系统首页上的“Append Code”使用说明,讨论版(Web Board)上也有。 Append Code append.c, append.cc, [Submit][Status][Web Board] ???< 中文 ????? English ??? All Copyright Reserved 2010-2011 SDUSTOJ TEAM GPL2.0 2003-2011 HUSTOJ Project TEAM Anything about the Problems, Please Contact Admin:admin #include if(c=='a'||c=='e'||c=='i'||c=='o'||c=='u'||c=='A'||c=='E'||c=='I'||c=='O'||c=='U') return 1; else return 0; } Problem K: 编写函数:是否水仙花数? (Append Code) Time Limit: 1 Sec Memory Limit: 2 MB #include int main() { int x,a,b,c; Submit: 1219 Solved: 337 scanf (\ a=x; b=x/10; c=x/100; if(a*a*a+b*b*b+c*c*c==x) printf (\Yes, it is a daffodil.\ else printf (\No, it is not a daffodil.\ } [Submit][Status][Web Board] Description 所谓水仙花数,是指一个三位的正整数,它的每个位上的数字的3次幂之和等于它本身。 ----------------------------------------------------------------------------- 用C语言实现:append.c中函数原型为 int is_daffodil(int n); 功能:若n是水仙花数,则返回1,否则返回0。 用C++实现:append.cc中函数原型为 bool isDaffodil(int n); 功能:若n是水仙花数返回true,否则返回false。 函数的调用格式见“Append Code”。 Input 一个正整数n。 Output 如果n是一个水仙花数,则输出: Yes, it is a daffodil. 否则,输出: No, it is not a daffodil. Sample Input 153 Sample Output Yes, it is a daffodil. HINT 参看系统首页上的“Append Code”使用说明,讨论版(Web Board)上也有。 Append Code append.c, append.cc, [Submit][Status][Web Board] ???< 中文 ????? English ??? #include int a,b,c; a=n/100; b=(n-a*100)/10; c=n-a*100-b*10; if(n==a*a*a+b*b*b+c*c*c&&n>=100&&n<=999) return 1; else return 0; } Yes, it is a daffodil. HINT 参看系统首页上的“Append Code”使用说明,讨论版(Web Board)上也有。 Append Code append.c, append.cc, [Submit][Status][Web Board] ???< 中文 ????? English ??? #include int a,b,c; a=n/100; b=(n-a*100)/10; c=n-a*100-b*10; if(n==a*a*a+b*b*b+c*c*c&&n>=100&&n<=999) return 1; else return 0; }
正在阅读:
山东科技大学C语言作业四11-28
高处作业题库01-05
汽车售后服务与管理试卷B卷11-13
组织生活会党员个人问题整改清单07-31
小学,小小主持人大赛,新闻稿11-05
小学生人格心理健康辅导《你是谁——强化角色意识》教案设计04-05
151,700元 东风标致408 1.2THP领先上市05-11
联合电子M7.8系统故障码详解06-04
小学生儿童节作文06-15
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 山东
- 作业
- 语言
- 大学
- 科技
- 2017-2022年台式钻床市场发展前景分析及供需格局研究预测报告目录
- 2011年新型农村养老保险工作总结
- 年产10万吨金红石型钛白粉工厂设计
- 数据结构-第七章 图-考试题
- 上海市第二类医疗器械注册申报资料要求
- 消化内科 教学药历 - 图文
- XX - XX年春季学期教研工作计划
- IBM-PC汇编语言程序设计试题(3)
- 144项PPT使用技巧
- 科技创新中心开展青少年科技创新活动的意义和做法
- K12学习《短文两篇陋室铭爱莲说》导学案
- 黎诣远《微观经济学》(第3版)课后习题详解(2.4第2篇)
- 中国电力优质工程奖评选办法
- 教务处工作职责、工作目标、工作标准、岗位职责及工作流程
- 2015年心理学考研真题及答案
- 农村商业银行个人总结
- 高中语文文言文复习《赵熹传》《许将传》挖空解释词语及全文翻译含答案
- 六年级下语文教学设计-单元整合·群文阅读 第五组“科学精神”人教新课标
- 高考生物一轮复习课时分层作业四十四现代生物科技专题第5课生态工程新人教版选修3
- 关于对全市重点项目建设一线干部实行项目节点考核评价办法