-
统计字符
#include <stdio.h>
int main()
{
int letter=0,blank=0,digit=0,other=0,i,n;
char ch;
scanf("%d",&n);
getchar();
for(i=1;i<=n;i++)
{
ch = getchar(); //此处应用getchar()接收字符,scanf会将最后输入的enter录入
if(ch == ' '|| ch == '\n')
blank++;
else if((ch >= 'a'&& ch <='z')||(ch >= 'A'&& ch <= 'Z'))
letter++;
else if(ch >= '0'&& ch <= '9')
digit++;
else
other++;
}
printf("letter = %d, blank = %d, digit = %d, other = %d",letter,blank,digit,other);
return 0;
}
本题要求最后一个回车表示输入结束,不算在内。而scanf函数不会舍弃最后的回车符,getchar()会舍弃最后的回车符。
-
输出21世纪(2001年至2100年)中截止某个年份以来的所有闰年年份
输入若非21世纪的年份则输出"Invalid year!"。若不存在任何闰年,则输出“None”。
#include <stdio.h>
int main()
{
int x,flag,i;
flag = 0;
scanf("%d",&x);
if(x>=2001 && x<=2100)
{
for(i=2001;i<=x;i++)
{
if((i%4==0&&i%100!=0)||i%400 == 0)
{
printf("%d\n",i);
flag = 1;
}
}
if(flag == 0)
printf("None");
}
else
printf("Invalid year!");
return 0;
}
-
奖金提成
利润≤10000元时,奖金可提10%;
10000<利润≤20000时,低于10000元的部分按10%提成,高于10000元的部分,可提成 7.5%;
20000<利润≤40000时,低于20000元部分仍按上述办法提成,(下同),高于20000元的部分按5%提成;
40000<利润≤60000元时,高于40000元的部分按3%提成;
60000<利润≤100000时,高于60000元的部分按1.5%提成;
利润>100000时,超过100000元的部分按1%提成
注意奖金是整数,无小数
#include <stdio.h>
int main()
{
int t,i,x,p;
scanf("%d",&t);
for(i = 1;i<=t;i++)
{
scanf("%d",&x);
switch(x/10000)
{
case 0:
p = x*0.1;
break;
case 1:
p = 10000*0.1+(x-10000)*0.075;
break;
case 2:case 3:
p =(x-20000)*0.05+10000*0.1+10000*0.075;
break;
case 4:case 5:
p = (x-40000)*0.03+20000*0.05+10000*0.1+10000*0.075;
break;
case 6:case 7:case 8:case 9:
p = (x-60000)*0.015+(60000-40000)*0.03+20000*0.05+10000*0.1+10000*0.075;
break;
default:
p = (x-100000)*0.01+(100000-60000)*0.015+20000*0.03+20000*0.05+10000*0.1+10000*0.075;
break;
}
printf("%d\n",p);
}
return 0;
}
由于最后大于100000的利润不能再单列出来,所以归为到default中。
-
三角形判断
#include <stdio.h>
#include <math.h>
int main()
{
float a,b,c,z;
scanf("%f %f %f",&a,&b,&c);
if(a>b) //通过比较三边长短以便下面的判断能否构成三角形与是否为直角三角形(斜边)
{
z = a;
a = b;
b = z;
}
if(a>c)
{
z = a;
a = c;
c = z;
}
if(b>c)
{
z = b;
b = c;
c = z;
}
if(a<0||b<0||c<0||a+b<=c)
printf("非三角形\n");
else if((fabs(a-b)<0.001) && (fabs(b-c)<0.001)) //浮点数
{
printf("等边三角形\n");
}
else if((fabs(a-b)<0.001) || (fabs (b-c)<0.001))
{
if(fabs( (a*a + b*b)-c*c)< 0.001)
printf("等腰直角三角形\n");
else
printf("等腰三角形\n");
}
else
{
printf("普通三角形\n");
}
return 0;
}
-
求一元二次方程的根
根据系数情况,输出不同结果:
1)如果方程有两个不相等的实数根,则每行输出一个根,先大后小;
2)如果方程有两个不相等复数根,则每行按照格式“实部+虚部i”输出一个根,先输出虚部为正的,后输出虚部为负的;
3)如果方程只有一个根,则直接输出此根;
4)如果系数都为0,则输出"Zero Equation";
5)如果a和b为0,c不为0,则输出"Not An Equation"。
#include <stdio.h>
#include <math.h>
int main()
{
double a,b,c,x,z,x1,x2,d,e;
scanf("%lf %lf %lf",&a,&b,&c);
if(a==0&&b==0&&c==0) //情况4
{
printf("Zero Equation\n");
}
if(a==0&&b==0&&c!=0) //情况5
{
printf("Not An Equation\n");
}
if(a==0 && b!=0 && b*b-4*a*c>0) //判断a是否等于0的情况
{
x = -(c*1.0/b*1.0); //a = 0,则分母b不能为0
printf("%.2f\n",x);
}
if(a!=0 && b*b-4*a*c==0) //a不等于0时,方程只有一个根的情况
{
x = (-b*1.0)/(2.0*a);
printf("%.2f\n",x);
}
if(a!= 0 && b*b-4*a*c>0) //a不为0,方程有两个不相等的实数根
{
x1 = ((-b)+sqrt(b*b-4*a*c))/(2*a*1.0);
x2 = ((-b)-sqrt(b*b-4*a*c))/(2*a*1.0);
if(x1<x2) //大小排列,大的先输出
{
z = x1;
x1 = x2;
x2 = z;
}
printf("%.2f\n",x1);
printf("%.2f\n",x2);
}
if(a!=0 && b*b-4*a*c<0) //a不为0,方程有两个不等的复数根情况 (当△<0时,方程无实数根,但有2个共轭复根。)
{
d = (-b*1.0)/(2*a*1.0);
e = (sqrt(-(b*b-4*a*c))*1.0)/(2*a*1.0);
if(b==0) //分子为0时,实部为0
{
d=0;
}
printf("%.2f+%.2fi\n",d,e);
printf("%.2f-%.2fi\n",d,e);
}
return 0;
}