1 计算器(20分) 输入一个四则运算算式,运算符为+、-、、/,操作数为实型数据,对于除法算式,除数不为0,输出算式中的操作数要求保留小数点后两位。
[测试输入1]1.2+3.4
[测试输出1]1.20+3.40=4.60
[测试输入2]2.52
[测试输出2]2.50*2.00=5.00
时间限制:500ms内存限制:32000kb
代码:
#include<stdio.h>
main()
{
double a,b;
char c;
scanf("%lf%c%lf",&a,&c,&b);
switch(c)
{
case '+':printf("%.2f+%.2f=%.2f",a,b,a+b);break;
case '-':printf("%.2f-%.2f=%.2f",a,b,a-b);break;
case '*':printf("%.2f*%.2f=%.2f",a,b,a*b);break;
case '/':printf("%.2f/%.2f=%.2f",a,b,a/b);break;
}
}
2 日期合法性判定(20分)
从键盘输入一个8位整数表示的日期(即yyyymmdd,表示yyyy年mm月dd日),判断该日期是否为合法日期。
[输入样例] 19990101[输出样例] 1999年1月1日是合法日期
[输入样例] 19361321[输出样例] 1936年13月21日是非法日期
[输入样例] 19780431[输出样例] 1978年4月31日是非法日期
[输入样例] 20000229[输出样例] 2000年2月29日是合法日期
[输入样例] 21000229[输出样例] 2100年2月29日是非法日期
[输入样例] 19980229[输出样例] 1998年2月29日是非法日期
时间限制:500ms内存限制:32000kb
代码:
#include<stdio.h>
int nianxing(int a);
int nianxing(int a)
{
int c;
if((a%4==0 && a%100 !=0)||a%400==0) c=1;
else c=0;
return (c);
}
main()
{
int a,b,c,d;
scanf("%4d%2d%2d",&a,&b,&c);
d=nianxing(a);
if((b>0&&b<13)&&a>1000)
{
if(d==0)
{
if(b==1 || b==3 || b==5 || b==7 || b==8 || b==10 || b==12)
{if(c>0 && c<=31)
printf("%d年%d月%d日是合法日期",a,b,c);
else printf("%d年%d月%d日是非法日期",a,b,c);
}
else if(b==2)
{
if(c>0 && c<=28)
printf("%d年%d月%d日是合法日期",a,b,c);
else printf("%d年%d月%d日是非法日期",a,b,c);
}
else
{
if(c>0 && c<=30)
printf("%d年%d月%d日是合法日期",a,b,c);
else
printf("%d年%d月%d日是非法日期",a,b,c);
}
}
if(d==1)
{
{
if(b==1 || b==3 || b==5 || b==7 || b==8 || b==10 || b==12)
{if(c>0 && c<=31)
printf("%d年%d月%d日是合法日期",a,b,c);
else printf("%d年%d月%d日是非法日期",a,b,c);
}
else if(b==2)
{
if(c>0 && c<=29)
printf("%d年%d月%d日是合法日期",a,b,c);
else printf("%d年%d月%d日是非法日期",a,b,c);
}
else
{
if(c>0 && c<=30)
printf("%d年%d月%d日是合法日期",a,b,c);
else
printf("%d年%d月%d日是非法日期",a,b,c);
}
}
}
}
else printf("%d年%d月%d日是非法日期",a,b,c);
}
3 求完数(20分) 一个正整数如果恰好等于它的因子之和,这个数就称为“完数”,编程找出X之内(包含X)的所有完数并从小到大依次输出各个完数,以空格间隔。例如:6=1+2+3,所以6就是完数。
[样例输入] 100[样例输出] 6 28
[样例输入] 1000[样例输出] 6 28 496
时间限制:500ms内存限制:32000kb
代码:
#include<stdio.h>
#include<math.h>
int wanshu(int a);
int wanshu(int a)
{
int i,c=1;
for(i=2;i<a;i++)
{
if(a%i==0)
{
c+=i;
}
}
if(c==a)
return(1);
else return 0;
}
int main()
{
int n,i,c=0;
scanf("%d",&n);
for(i=2;i<=n;i++)
if(wanshu(i)==1)
{c++;
if(c==1)
printf("%d",i);
else
printf(" %d",i);
}
}
4 生日蜡烛(20分) [题目描述] 某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。现在算起来,他一共吹熄了N根蜡烛。请问,他从多少岁开始办生日party的,现在他多少岁?例如:若N=236,因为236=26+27+28+29+30+31+32+33,所以,他从26岁开始办生日party,他现在33岁。[输入说明] 输入一共吹熄的蜡烛数N。[输出说明] 输出他办生日party的起止年龄数,以空格隔开;若有多种情况,输出起始年龄最小的一种情况。
[样例输入] 236
[样例输出] 26 33
[样例输入] 186
[样例输出] 10 21
时间限制:500ms内存限制:32000kb
代码:
#include<stdio.h>
#include<math.h>
int main()
{
int n,i,j,c=0;
scanf("%d",&n);
for(i=1;i<100;i++)
{
for(j=i,c=0;j<100;j++)
{
c+=j;
if(c==n) break;
}
if(c==n)
{
printf("%d %d",i,j);
break;
}
}
}
5 整数排序(20分) [题目描述] 从键盘输入n个整数,将其从小到大进行排序,并将排序后的结果输出。特别说明:待排序的整数的个数不超过20个。[输入说明] 第一行为n值,第二行输入n个整数,以空格间隔。[输出说明] 输出的数据用空格隔开。[样例输入] 55 6 1 2 3[样例输出]
1 2 3 5 6
时间限制:500ms内存限制:32000kb
代码:
#include<stdio.h>
#include<math.h>
int main()
{
int a[20];
int i,n,t,j;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n-1;i++)
for(j=i;j<n;j++)
if(a[i]>a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
for(i=0;i<n;i++)
printf("%d ",a[i]);
}