elseprintf("max=%d\n",a);
}
方法二:
使用条件表达式,可以使程序更加简明、清晰。
程序如下:
#include
main()
{inta,b,c,temp,max;
printf("请输入3个整数:
");
scanf("%d,%d,%d",&a,&b,&c);
temp=(a>b)?
a:
b;/*将a和b中的大者存人temp中*/
max=(temp>c)?
temp:
c;/*将a和b中的大者与c比较,取最大者*/
printf("3个整数的最大数是%d\n”,max);
}
4.6有一函数:
写一程序,输入x值,输出y值。
解:
#include
main()
{intx,y;
printf("输入x:
");
scanf("%d",&x);
if(x<1)/*x<1*/
{y=x;
printf("x=%3d,y=x=%d\n",x,y);
}
elseif(x<10)/*1≤x-10*/
{y=2*x-1;
printf("x=%3d,y=2*x-1=%d\n",x,y);
}
else/*x≥10*/
{y=3*x-11;
printf("x=%3d,y=3*x-11=%d\n",x,y);
}
}
4.8给一个百分制成绩,要求输出等级’A’、’B’、’C’、’D’、’E’。
90分以上为’A’,80~90分为’B’,70~79分为’C’,60分以下为’D’。
解:
程序如下:
#include
main()
{floatscore;
chargrade;
printf("请输入学生成绩:
");
scanf("%f",&score);
while(score>100||(score<0)
{printf("\n输入有误,请重新输入:
");
scanf("%f",&score);
}
switch((int)(score/10))
{case10:
case9:
grade=’A’;break;
case8:
grade=’B’;break;
case7:
grade=’C’;break;
case6:
grade=’D’;break;
case5:
case4:
case3:
case2:
case1:
case0:
grade=’E’;
}
printf("成绩是%5.1f,相应的等级是%c。
\n",score,grade);
}
说明:
对输入的数据进行检查,如小于0或大于100,要求重新输入。
(int)(score/10)的作用是将(score/10)的值进行强制类型转换,得到一个整型值。
4.9给定一个不多于5位的正整数,要求:
①求它是几位数;②分别打印出每一位数字;③按逆序打印出各位数字。
例如原数为321,应输出123。
解:
#include
main()
{longintnum;
intindiv,ten,hundred,thousand,ten_thousand,place;
/*分别代表个位、十位、百位、千位、万位和位数*/
printf("请输入一个整数(0~99999):
");
scanf("%ld",&num);
if(num>9999)place=5;
elseif(num>999)place=4;
elseif(num>99)place=3;
elseif(num>9)place=2;
elseplace=1;
printf("place=%d\n",place);
ten_thousand=num/10000;
thousand=num/1000%10;
hundred=num/100%10;
ten=num%100/10;
indiv=num%10;
switch(place)
{case5:
printf("%d,%d,%d,%d,%d",ten_thousand,thousand,hundred,ten,indiv);
printf("\n反序数字为;");
printf("%d%d%d%d%d\n",indiv,ten,hundred,thousand,ten_thousand);
break;
case4:
printf("%d,%d,%d,%d",thousand,hundred,ten,indiv);
printf("\n反序数字为:
");
printf("%d%d%d%d\n",indiv,ten,hundred,thousand);
break;
case3:
printf("%d,%d,%d",hundred,ten,indiv);
printf("\n反序数字为:
");
printf("%d%d%d\n",indiv,ten,hundred);
break;
case2:
printf("%d,%d",ten,indiv);
printf("\n反序数字为:
");
printf("%d%d\n",indiv,ten);
break;
case1:
printf("%d",indiv);
printf("\n反序数字为:
");
printf("%d\n",indiv);
break;
}
}
4.10企业发放的奖金根据利润提成。
利润I低于或等于10万元时,奖金可提成10%;利润高于10万元,低于20万元(1000001000000时,超过100万元的部分按1%提成。
从键盘输入当月利润I,求应发放奖金总数。
要求:
(1)用if语句编程序;
(2)用switch语句编程序。
解:
计算利润时,要特别注意不同利润的不同提成比例。
例如,利润为15万元,其中有10万元按10%的比例提成,另外5万元则按7.5%提成。
(1)用if语句编程序。
#include
main()
{longi;
floatbonus,bon1,bon2,bon4,bon6,bon10;
bon1=100000*0.1;/*利润为10万元时的奖金*/
bon2=bon1+100000*0.075;/*利润为20万元时的奖金*/
bon4=bon2+200000*0.05;/*利润为40万元时的奖金*/
bon6=bon4+200000*0.03;/*利润为60万元时的奖金*/
bon10=bon6+400000*0.015;/*利润为100万元时的奖金*/
printf("请输入利润i:
");
scanf("%ld",&i);
if(i<=100000)
bonus=i*0.1;/*利润在10万元以内按0.1提成奖金*/
elseif(i<=200000)
bonus=bon1+(i-100000)*0.075;/*利润在10万至20万元时的奖金*/
elseif(i<=400000)
bonus=bon2+(i-200000)*0.05;/*利润在20万至40万元时的奖金*/
elseif(i<=600000)
bonus=bon4+(i-400000)*0.03;/*利润在40万至60万元时的奖金*/
elseif(i<=1000000)
bonus=bon6+(i-600000)*0.015;/*利润在60万至100万元时的奖金*/
else
bonus=bon10+(i-1000000)*0.01;/*利润在100万元以上时的奖金*/
printf(”奖金是%10.2f\n",bonus);
}
此题的关键在于正确写出每一区间的奖金计算公式。
例如利润在10万元至20万时,奖金应由两部分组成:
①利润为10万元时应得的奖金。
即100000ⅹ0.1;②10万元以上部分应得的奖金。
即(num-100000)ⅹ0.075。
同理,20万~40万这个区间的奖金也应由两部分组成:
①利润为20万元时应得的奖金,即100000ⅹ0.1ⅹ10万ⅹ0.075;②20万元以上部分应得的奖金,即(num-200000)ⅹ0.05。
程序中先把10万、20万、40万、60万、100万各关键点的奖金计算出来,即bon1、bon2、bon4、bon6、hon10;然后再加上各区间附加部分的奖金。
(2)用switch语句编程序。
输入利润i,确定相应的提成等级branch
根据branch确定奖金值
0奖金=i*0.1
1奖金=bon1+(i-105)*0.075
2奖金=bon2+(i-2*105)*0.05
3
4奖金=bon4+(i-4*105)*0.03
5
6奖金=bon6+(i-6*105)*0.015
7
8
9
10奖金=bon10+(i-106)*0.01
输出奖金
#include
main()
{longi;
floatbonus,bon1,bon2,bon4,bon6,bon10;
intc;
bon1=100000*0.1;
bon2=bon1+100000*0.075;
bon4=bon2+200000*0.05;
bon6=bon4+200000*0.03;
bon10=bon6+400000*0.015;
printf("请输入利润i:
");
scanf("%ld",&i);
c=i/100000;
if(c>10)c=10;
switch(c)
{case0:
bonus=1*0.1;break;
case1:
bonus=bon1+(i-100000)*0.075;break;
case2:
case3:
bonus=bon2+(i-200000)*0.05;break;
case4:
case5:
bonus=bon4+(i-400000)*0.03;break;
case6:
case7:
case8:
case9:
bonus=bon6+(i-600000)*0.015;break;
case10:
bonus=bon10+(i-1000000)*0.01;
}
printf("奖金是%10.2f",bonus);
}
4.11输入4个整数,要求按由大到小的顺序输出。
解:
此题采用依次比较的方法排出其大小顺序。
在学习了循环和数组以后,可以有更多的排序方法。
#include
main()
{intt,a,b,c,d;
printf("请输入4个整数:
");
scanf("%d,%d,%d,%d",&a,&b,&c,&d);
printf("\na=%d,b=%d,c=%d,d=%d\n",a,b,c,d);
if(a>b){t=a;a=b;b=t;}
if(a>c){t=a;a=c;c=t;}
if(a>d){t=a;a=d;d=t;}
if(b>c){t=a;b=c;c=t;}
if(b>d){t=b;b=d;d=t;}
if(c>d){t=c;c=d;d=t;}
printf("排序结果如下:
\n");
printf("%d,%d,%d,%d\n",a,b,c,d);
}
4.12有4个圆塔,圆心分别为(2,2)、(-2,2)、(2,-2)、(-2,-2),圆半径为1。
这4个塔的高度分别为10m。
塔以外无建筑物。
今输入任一点的坐标,求该点的建筑高度(塔外的高度为零)。
程序如下:
#include
main()
{inth=10;
floatx1=2,y1=2,x2=-2,y2=2,x3=-2,y3=-2,x4=-2,y4=-2,x,y,d1,d2,d3,d4;
printf("请输入一个点(x,y):
");
scanf("%f,%f",&x,&y);
d1=(x-x1)*(x-x1)+(y-y1)*(y-y1);/*求该点到各中心点的距离*/
d2=(x-x2)*(x-x2)+(y+y2)*(y+y2);
d3=(x+x3)*(x+x3)+(y-y3)*(y-y3);
d4=(x+x4)*(x-x4)*(y+y4)*(y+y4);
if(d1>1&&d2>1&&d3>1&&d4>1)h=0;/*判断该点是否在塔外*/
printf("该点高度为%d\n",h);
}