#include
int main()
{
int x;
printf("Please enter the number:\n");
scanf("%d",&x);
if(x<=0||x>=10000) printf("error!\n");
else if(x>=0&&x<10) printf("%d: 0-9\n",x);
else if(x>=10&&x<100) printf("%d: 10-99\n",x);
else if(x>=100&&x<1000) printf("%d: 100-999\n",x);
else if(x>=1000&&x<10000) printf("%d: 1000-9999\n",x);
return 0;
}
4.9 计算一元二次方程的根v2.0
题目内容:根据下面给出的求根公式,计算并输出一元二次方程的两个实根,要求精确到小数点后4位。其中a,b,c的值由用户从键盘输入。如果用户输入的系数不满足求实根的要求,输出错误提示 “error!”。程序中所有的数据类型均为float。
#include
#include
int main()
{
float a,b,c,x,y;
printf("Please enter the coefficients a,b,c:\n");
scanf("%f,%f,%f",&a,&b,&c);
x=-b/2/a;
y=b*b-4*a*c;
if(y<0)
printf("error!\n");
else
printf("x1=%7.4f, x2=%7.4f\n",x+sqrt(y)/2/a,x-sqrt(y)/2/a);
return 0;
}
4.10 分数比较
题目内容:利用人工方式比较分数大小的最常见的方法是:对分数进行通分后比较分子的大小。请编程模拟手工比较两个分数的大小。首先输入两个分数分子分母的值,例如"11/13,17/19",比较分数大小后输出相应的提示信息。例如,第一个分数11/13小于第二个分数17/19,则输出"11/13<17/19"。
#include
int main()
{
int a,b,c,d;
int fenshu,fenshu2;
printf("Input a/b, c/d:");
scanf("%d/%d,%d/%d",&a,&b,&c,&d);
fenshu=a*d;
fenshu2=c*b;
if(fenshu>fenshu2)
printf("%d/%d>%d/%d\n",a,b,c,d);
else if(fenshu2>fenshu)
printf("%d/%d,a,b,c,d);
else
printf("%d/%d=%d/%d\n",a,b,c,d);
return 0;
}
4.11 存款利率计算器v2.0
题目内容:设capital是最初的存款总额(即本金),rate是整存整取的存款年利率,n 是储蓄的年份,deposit是第n年年底账号里的存款总额。已知如下两种本利之和的计算方式:
按复利方式计息的本利之和计算公式为:
deposit = capital * (1 + rate)^n
按普通计息方式计算本利之和的公式为:deposit = capital * (1 + rate * n)
编程从键盘输入存钱的本金、存款期限以及年利率,然后再输入按何种方式计息,最后再计算并输出到期时能从银行得到的本利之和,要求结果保留到小数点后4位。
#include
#include
int main()
{
double capital , deposit , rate ;
int n;
char a;
printf("Input rate, year, capital:");
scanf("%lf,%d,%lf",&rate,&n,&capital);
printf("Compound interest (Y/N)?");
scanf("%c",&a);
if (a=='y'||a=='Y')
{
deposit=capital*pow(1+rate,n);
printf("deposit = %.4f\n",deposit);
}
else if(a=='n'||a=='N')
{
deposit=capital*(1+rate*n);
printf("deposit = %.4f\n",deposit);
}
else
printf("error");
return 0;
}
4.12 博弈论之Best Response
在博弈论中,有一种决策称为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
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;
}
第五章 循环
5.1 判断一个整型数据有几位v2.0
题目内容:从键盘输入一个整型数据(int型),编写程序判断该整数共有几位,并输出包含各个数字的个数。例如,从键盘输入整数16644,该整数共有5位,其中有1个1,2个6,2个4。
程序运行结果示例1:
Please enter the number:
12226↙
12226: 5 bits
1: 1
2: 3
6: 1
程序运行结果示例2:
Please enter the number:
-12243↙
-12243: 5 bits
1: 1
2: 2
3: 1
4: 1
输入格式: “%d”
输出格式:
输入提示信息:“Please enter the number:\n”
判断该整数共有几位:"%d: %d bits\n"
包含数字0的个数:“0: %d\n”
包含数字1的个数:“1: %d\n”
包含数字2的个数:“2: %d\n”
包含数字3的个数:“3: %d\n”
包含数字4的个数:“4: %d\n”
包含数字5的个数:“5: %d\n”
包含数字6的个数:“6: %d\n”
包含数字7的个数:“7: %d\n”
包含数字8的个数:“8: %d\n”
包含数字9的个数:“9: %d\n”
为避免出现格式错误,请直接拷贝粘贴题目中给的格式字符串和提示信息到你的程序中。
时间限制:500ms内存限制:32000kb
#include
#include
int main()
{
int n,a,b,c,d,e,f,g,h,i,j,counter=0,num;
a=0;
b=0;
c=0;
d=0;
e=0;
f=0;
g=0;
h=0;
i=0;
j=0;
printf("Please enter the number:\n");
scanf("%d",&n);
num=n;
do{
n=abs(n);
switch(n%10)
{
case 0:a++;break;
case 1:b++;break;
case 2:c++;break;
case 3:d++;break;
case 4:e++;break;
case 5:f++;break;
case 6:g++;break;
case 7:h++;break;
case 8:i++;break;
default :j++;
}
n=n/10;
}while(n);
counter=a+b+c+d+e+f+g+h+i+j;
printf("%d: %d bits\n",num,counter);
if(a){printf("0: %d\n",a);}