7-27 计算天数 (15 分)
本题要求编写程序计算某年某月某日是该年中的第几天。
输入格式:
输入在一行中按照格式“yyyy/mm/dd”(即“年/月/日”)给出日期。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。闰年的2月有29天。
输出格式:
在一行输出日期是该年中的第几天。
输入样例1:
2009/03/02
结尾无空行
输出样例1:
61
结尾无空行
输入样例2:
2000/03/02
输出样例2:
62
#include<stdio.h>
int main()
{
int i,sum=0,year,month,day,num[12]={31,28,31,30,31,30,31,31,30,31,30,31};
scanf("%d/%d/%d",&year,&month,&day);
if(month==1)
sum=day;
else if(month==2)
sum=num[0]+day;
else
{
for(i=0;i<month-1;i++)
sum=sum+num[i];
sum=sum+day;
if((year%4==0&&year%100!=0)||year%400==0)
sum=sum+1;
}
printf("%d",sum);
return 0;
}
检测用户错误输入(4分)
题目内容:
根据scanf()的返回值判断scanf()是否成功读入了指定的数据项数,使程序在用户输入123a时,能输出如下运行结果:
123a↙
Input error!
输入格式: "%d %d"
输出格式:
如果成功读入指定的数据项数,输出格式为:"a = %d, b = %d\n" (注意:等号的两边各有一个空格)
输入非法数据,输出格式为:"Input error!"
为避免出现格式错误,请直接拷贝粘贴题目中给的格式字符串和提示信息到你的程序中
#include<stdio.h>
int main(){
int a,b,x;
x=scanf("%d %d",&a,&b);
if(x==2)
{
printf("a = %d, b = %d\n",a,b);
}
else
{
printf("Input error!");
}
return 0;
}
闰年判断(6分)
题目内容:
从键盘任意输入一个公元年份(大于等于1),判断它是否是闰年。若是闰年输出“Yes”,否则输出“No”。要求对输入数据进行合法性判断。
已知符合下列条件之一者是闰年:
(1)能被4整除,但不能被100整除;
(2)能被400整除。
运行结果示例1:
2015↙
No
运行结果示例2:
2016↙
Yes
运行结果示例3:
-123↙
Input error!
运行结果示例4:
a↙
Input error!
输入格式: "%d"
输出格式:
是闰年,输出:"Yes\n"
不是闰年,输出:"No\n"
输入数据不合法,输出:"Input error!\n"
为避免出现格式错误,请直接拷贝粘贴题目中给的格式字符串和提示信息到你的程序中。
#include <stdio.h>
int main()
{
int year;
if(scanf("%d",&year)!=1)
{
printf("Input error!\n");
}
else
{
if(year < 0)
{
printf("Input error!\n");
}
else
(((year % 4 == 0)&&(year % 100 != 0)) || (year % 400 == 0))
?printf("Yes\n") : printf("No\n");
}
}
分数比较(4分)
题目内容:
利用人工方式比较分数大小的最常见的方法是:对分数进行通分后比较分子的大小。请编程模拟手工比较两个分数的大小。首先输入两个分数分子分母的值,例如"11/13,17/19",比较分数大小后输出相应的提示信息。例如,第一个分数11/13小于第二个分数17/19,则输出"11/13<17/19"。
程序的运行结果示例1:
Input a/b, c/d:11/13,17/19↙
11/13<17/19
程序的运行结果示例2:
Input a/b, c/d:17/19,23/27↙
17/19>23/27
程序的运行结果示例3:
Input a/b, c/d:3/4,18/24↙
3/4=18/24
输入提示信息:"Input a/b, c/d:" (注意:逗号后面有一个空格)
输入格式: "%d/%d,%d/%d"
输出格式:
比较的结果是大于:"%d/%d>%d/%d\n"
比较的结果是小于:"%d/%d<%d/%d\n"
比较的结果是相等:"%d/%d=%d/%d\n"
为避免出现格式错误,请直接拷贝粘贴题目中给的格式字符串和提示信息到你的程序中。
#include<stdio.h>
int main()
{
int a,b,c,d;
printf("Input a/b, c/d:" );
scanf("%d/%d,%d/%d",&a,&b,&c,&d);
if((float) a / b > (float) c / d)
{
printf("%d/%d>%d/%d\n",a,b,c,d);
}
else if((float) a / b < (float) c / d)
{
printf("%d/%d<%d/%d\n",a,b,c,d);
}
else
{
printf("%d/%d=%d/%d\n",a,b,c,d);
}
return 0;
}
存款利率计算器v2.0(4分)
题目内容:
设capital是最初的存款总额(即本金),rate是整存整取的存款年利率,n 是储蓄的年份,deposit是第n年年底账号里的存款总额。已知如下两种本利之和的计算方式:
-
按复利方式计息的本利之和计算公式为:
-
按普通计息方式计算本利之和的公式为:
deposit = capital * (1 + rate * n)
编程从键盘输入存钱的本金、存款期限以及年利率,然后再输入按何种方式计息,最后再计算并输出到期时能从银行得到的本利之和,要求结果保留到小数点后4位。
提示:使用数学函数需要加入头文件 <math.h>
程序的运行结果示例1:
Input rate, year, capital:0.0225,2,10000↙
Compound interest (Y/N)?Y
deposit = 10455.0625
程序的运行结果示例2:
Input rate, year, capital:0.0225,2,10000↙
Compound interest (Y/N)?n
deposit = 10450.0000
输入提示信息:"Input rate, year, capital:"
输入提示信息:"Compound interest (Y/N)?"
本金、存款期限以及年利率的输入格式: "%lf,%d,%lf"
是否选择复利计算的输入格式: " %c" (注意:%c的前面有一个空格。输入的字符大小写皆可,即Y或y,N或n皆可)
输出格式:"deposit = %.4f\n"
为避免出现格式错误,请直接拷贝粘贴题目中给的格式字符串和提示信息到你的程序中。
#include<stdio.h>
int main()
{
double rate,capital,deposit;
int year;
char c;
printf("Input rate, year, capital:");
scanf("%lf,%d,%lf",&rate,&year,&capital);
printf("Compound interest (Y/N)?");
scanf(" %c",&c);
if(c == 'Y' || c == 'y')
{
deposit = pow((1.0 + rate),year) * capital;
}
else
{
deposit = capital * (1 + rate * year);
}
printf("deposit = %.4f\n",deposit);
return 0;
}
存款利率计算器v3.0(9分)
题目内容:
设capital是最初的存款总额(即本金),rate是整存整取的存款年利率,n 是储蓄的年份,deposit是第n年年底账号里的存款总额。已知如下两种本利之和的计算方式:
-
按复利方式计息的本利之和计算公式为:
-
按普通计息方式计算本利之和的公式为:
deposit = capital * (1 + rate * n)
已知银行整存整取不同期限存款的年息利率分别为:
存期1年,利率为 0.0225
存期2年,利率为 0.0243
存期3年,利率为 0.0270
存期5年,利率为 0.0288
存期8年,利率为 0.0300
若输入其他年份,则输出"Error year!"
编程从键盘输入存钱的本金和存款期限,然后再输入按何种方式计息,最后再计算并输出到期时能从银行得到的本利之和,要求结果保留到小数点后4位。
程序的运行结果示例1:
Input capital, year:10000,2↙
Compound interest (Y/N)?Y↙
rate = 0.0243, deposit = 10491.9049
程序的运行结果示例2:
Input capital, year:10000,2↙
Compound interest (Y/N)?n↙
rate = 0.0243, deposit = 10486.0000
程序的运行结果示例3:
Input capital, year:1000,4↙
Compound interest (Y/N)?y↙
Error year!
输入提示信息:"Input capital, year:"
输入提示信息:"Compound interest (Y/N)?"
存期输入错误的提示信息: "Error year!\n"
本金及存款期限的输入格式: "%lf,%d"
是否选择复利计算的输入格式: " %c" (注意:%c的前面有一个空格。输入的字符大小写皆可,即Y或y,N或n皆可)
输出格式:"rate = %.4f, deposit = %.4f\n"
为避免出现格式错误,请直接拷贝粘贴题目中给的格式字符串和提示信息到你的程序中。
#include<stdio.h>
#include<math.h>
int main()
{
int n;
double capital,rate,deposit;
char ch;
printf("Input capital, year:");
scanf("%lf,%d",&capital,&n);
switch(n)
{
case 1:rate=0.0225;break;
case 2:rate=0.0243;break;
case 3:rate=0.0270;break;
case 5:rate=0.0288;break;
case 8:rate=0.0300;break;
default:rate=1.000000;break;
}
printf("Compound interest (Y/N)?");
scanf(" %c",&ch);
if(rate==1.000000)
{
printf("Error year!\n");
}
else
{
switch(ch)
{
case'y':
case'Y':
deposit=capital*pow(1+rate,n);
printf("rate = %.4f, deposit = %.4f\n",rate,deposit);
break;
case'n':
case'N':
deposit=capital * (1 + rate * n);
printf("rate = %.4f, deposit = %.4f\n",rate,deposit);
break;
}
}
}
博弈论之Best Response(6分)
题目内容:
在博弈论中,有一种决策称为Best Response,通俗的意思就是选择一种策略使得团体利益最大化。C语言学习成绩的评定方式分为两种,一种是自由刷题模式(compete),没有固定标准,刷题越多者排名越靠前,其期末分数越高;另一种是规定每个人必须做够多少道题(standard),达到要求就能取得相应分数。
假设一个班级中的学生分为A、B两类,A类同学学习热情很高,乐于做题,采用compete模式可以获得成就感并且在期末拿到高分,compete模式可以让他们有10分的收益;采用standard模式他们也可以在期末拿到高分,但不能满足他们的求知欲,standard模式可以让他们有8分的收益。B类同学仅仅希望期末拿高分,如果采用compete模式,他们竞争不过A类同学,期末成绩不理想,因此compete模式能给他们6分的收益;如果采用standard模式,他们可以完成规定任务并拿到高分,因此standard模式可以让他们有10分的收益。
编程输入A类和B类同学分别占班级总人数的百分比,分别计算并输出采用compete和standard两种刷题模式下的全班总收益,并输出这个班级在这场博弈中的Best Response是哪种模式。
注: 程序中使用的数据类型为float
程序运行结果示例1:
Input percent of A and B:0.2 0.8↙
compete = 6.8000
standard = 9.6000
The Best Response is standard!
程序运行结果示例2:
Input percent of A and B:0.8 0.2↙
compete = 9.2000
standard = 8.4000
The Best Response is compete!
程序运行结果示例3:
Input percent of A and B:0.5 0.5↙
compete = 8.0000
standard = 9.0000
The Best Response is standard!
输入提示信息:"Input percent of A and B:"
输入格式: "%f%f"
输出格式:"compete = %.4f\nstandard = %.4f\n"
输出提示信息:"The Best Response is compete!"
输出提示信息:"The Best Response is standard!"
为避免出现格式错误,请直接拷贝粘贴题目中给的格式字符串和提示信息到你的程序中。
#include<stdio.h>
int main()
{
float A,B,compete,standard;
printf("Input percent of A and B:");
scanf("%f%f", &A, &B);
compete =A * 10 + B * 6;
standard =A * 8 + B * 10;
printf("compete = %.4f\nstandard = %.4f\n", compete, standard);
if (compete>standard){
printf("The Best Response is compete!");
}else{
printf("The Best Response is standard!");
}
return 0;
}