C语言程序设计——编程题(MOOC 2020春季结业考试版)

1 计算器(20分) 输入一个四则运算算式,运算符为+、-、、/,操作数为实型数据,对于除法算式,除数不为0,输出算式中的操作数要求保留小数点后两位。
[测试输入1]1.2+3.4
[测试输出1]1.20+3.40=4.60
[测试输入2]2.5
2
[测试输出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]);
}
  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

笙殇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值