例4.10 运输公司对用户计算运输费用。路程(s km)越远,每吨·千米运费越低。 编写程序:
#include
int c,s;
float p,w,d,f;
printf(\ // 提示输入的数据
scanf(\ // 输入单价、重量、距离 if(s>=3000) c=12; else c=s/250; switch(c) {
case 0: d=0; break; case 1: d=2; break; case 2:
case 3: d=5; break; case 4:
case 5: case 6:
case 7: d=8; break; case 8: case 9: case 10:
case 11: d=10; break; case 12: d=15; break; }
f = p * w * s * (1 - d / 100); printf(\ return 0; }
// 3000km以上为同一折扣
// 3000km以下各段折扣不同,c的值不相同 // c=0,代表250km以下,折扣d=0
// c=1,代表250到500km以下,折扣d=2% // c=2和3,代表500到1000km以下,折扣d=5% // c=4-7,代表1000到2000km以下,折扣d=8% // c=8-11,代表2000到3000km以下,折扣d=10% // c12,代表3000km以上,折扣d=15% // 计算总运费
// 输出总运费,取两位小数 例5.1求1+2+3+?+100,即 n?1编写程序:
#include
int i=1,sum=0; // 定义变量i的初值为1,sum的初值为0
while (i<=100) // 当i>100,条件表达式i<=100的值为假,不执行循环体 { // 循环体开始
sum=sum+i; // 第一次累加后,sum的值为1
?n100 i++; } printf(\ return 0; }
例5.2 用do…while语句求:编写程序:
#include
int i=1,sum=0; do {
sum=sum+i; i++;
}while(i<=100); printf(\ return 0; }
// 加完后,i的值加1,为下次累加作准备 // 循环体结束
// 输出1+2+3?+100的累加和 1001+2+3+…+100,即 ?nn?1 例5.3 while和do---while循环的比较。 编写程序:
(1)用while循环 #include
int i,sum=0;
printf(\ scanf(\ while(i<=10) {
sum=sum+i; i++; };
printf(\ return 0; }
(2)用do?while循环 #include
int i,sum=0;
printf(\ scanf(\ do {
sum=sum+i; i++;
}while(i<=10);
printf(\ return 0; }
例5.4 在全系1000学生中,征集慈善募捐,当总数达到10万元时就结束,统计此时捐款的人数,以及平均每人捐款的数目。 编写程序:
#include
float amount,aver,total; int i;
for (i=1,total=0;i<=1000;i++) {
printf(\ scanf(\
total= total+amount;
if (total>=SUM) break; }
aver=total/i;
printf(\ return 0; }
例5.5 要求输出100~200之间的不能被3整除的数。 编写程序:
#include
for (n=100;n<=200;n++) {if (n%3==0) continue; printf(\ }
printf(\ return 0; }
例5.6 输出以下4*5的矩阵。 1 2 3 4 5 2 4 6 8 10 3 6 9 12 15 4 8 12 16 20 编写程序:
#include
int i,j,n=0;
for (i=1;i<=4;i++) for (j=1;j<=5;j++,n++) { if(n%5==0)printf(\ //控制在输出5个数据后换行 printf(\ }
printf(\ return 0; }
#include
int i,j,n=0;
for (i=1;i<=4;i++) for (j=1;j<=5;j++,n++) { if(n%5==0)printf(\ //控制在输出5个数据后换行 if (i==3 && j==1) break; //遇到第3行第1列,终止内循环 printf(\ }
printf(\ return 0; }
#include
int i,j,n=0;
for (i=1;i<=4;i++) for (j=1;j<=5;j++,n++) { if(n%5==0)printf(\ //控制在输出5个数据后换行 if (i==3 && j==1) continue; //遇到第3行第1列,提前结束执行本次内循环体 printf(\ }
printf(\ return 0; }