第二章
7.编写一个程序,要求用户输入一个美金数量,然后显示出如何用最少的20美元、10美元、5美元、1美元来付款:
Enter a dollar amount : 93
$20 bills : 4
$10 bills : 1
$5 bills : 0
$1 bills : 3
源代码如下:
#include
#include
int main()
{
int a,b;
printf("Enter a dollar amount:");
scanf("%d",&a);
b=a/20;
a-=b*20;
printf("$20 bills: %d\n",b);
b=a/10;
a-=b*10;
printf("$10 bills: %d\n",b);
b=a/5;
a-=b*5;
printf(" $5 bills: %d\n",b);
printf("$10 bills: %d\n",a);
return 0;
}
8、变成计算第一、第二、第三个月还贷后剩余的贷款余额:
编程计算第一、第二、第三个月还贷后剩余的贷款金额,输出时保留两位小数:
Enter amount of loan: 20000.00
Enter interest rate: 6.0
Enter monthly payment: 386.66
Balance remaining after first payment: 19713.34
Balance remaining after second payment: 19425.25
Balance remaining after third payment: 19135.71
提示:每个月的贷款余额减去还款金额后,还需要加上贷款余额与月利率的乘积即利息。
把用户输入的年利率转换成百分数后再除以12就是月利率。
源代码如下:
#include
#include
int main()
{
float loan,rate,payment;
printf("Enter amount of loan:");
scanf("%f",&loan);
printf("Enter interest rate:");
scanf("%f",&rate);
printf("Enter monthly payment:");
scanf("%f",&payment);
loan+=loan*rate*0.01/12;
loan-=payment;
printf("Balance remaining after first payment: $%.2f\n",loan);
loan+=loan*rate*0.01/12;
loan-=payment;
printf("Balance remaining after second payment: $%.2f\n",loan);
loan+=loan*rate*0.01/12;
loan-=payment;
printf("Balance remaining after third payment: $%.2f\n",loan);
return 0;
}
第三章
1、 编写一个程序,以月/日/年的格式接受用户录入的日期信息并以年/月/日的格式将其显示出来:
Enter a date (mm/dd/yy): 2/17/2011
You entered the date 20110217
源代码如下:
#include
#include
int main()
{
int mm,dd,yy;
printf("Enter a date(mm/dd/yyyy):");
scanf("%d/%d/%d",&mm,&dd,&yy);
printf("You entered the date %4.4d%2.2d%2.2d",yy,mm,dd);
getchar();
return 0;
}
运行结果如下:
2、 编写一个程序, 对用户录入的产品信息进行格式化, 程序会话应类似下面这样:
Enter item number:583
Enter unit price:13.5
Enter purchase date(mm/dd/yyyy):10/24/2010
Item Unit Purchase
Price Date
583 $ 13.50 10/24/2010
其中, 数字项和日期项采用左对齐方式, 单位价格采用右对齐方式, 允许最大取值为9999.99的美元。提示:各个列使用水平制表符控制。
源代码如下:
#include
#include
int main()
{
int num,m,d,y;
float price;
printf("Enter item number:");
scanf("%d",&num);
printf("Enter unit price:");
scanf("%f",&price);
printf("Enter purchase date(mm/dd/yyyy):");
scanf("%d/%d/%d",&m,&d,&y);
printf("Item\tUnit\t\tPurchase\n\tPrice\t\tDate\n");
printf("%-d\t$%7.2f\t",num,price);
printf("%2.2d/%2.2d/%d\n",m,d,y);
return 0;
}
4、编写一个程序,提示用户以(xxx)xxx-xxx的格式输入电话号码,并以xxx.xxx.xxx的格式显示改号码:
Enter phone number[(xxx) xxx-xxxx]:(404) 817-6900
You entered 404.817.6900
源代码如下:
#include
#include
int main()
{
int a,b,c;
printf("Enter phone number[(xxx) xxx-xxxx]:");
scanf("(%d) %d-%d",&a,&b,&c);
printf("You entered %d.%d.%d",a,b,c);
return 0;
}
运行结果如下:
6、修改3.2节的addfrac.c程序,使用户可以同时输入两个分数,中间用加号隔开:
Enter two fractions separted by a plus sign:5/6+3/4
The sum is 38/24
源代码如下:
#include
#include
int main()
{
int num1,denom1,num2,denom2,result_num,result_denom;
printf("Enter two fractions separted by a plus sign:");
scanf("%d/%d+%d/%d",&num1,&denom1,&num2,&denom2);
result_num=num1*denom2+num2*denom1;
result_denom=denom1*denom2;
printf("The sum is %d/%d",result_num,result_denom);
return 0;
}
第四章
1.编写一个程序,要求用户输入一个两位数,然后按数位的逆序打印出这个数,程序会话应类似下面这样:
Enter a two-digit number: 28
The reversal is: 82
用%都如两位数,然后分解成两个数字。提示:如果n是整数,那么你n % 10是个位数,而n / 10则是移除个位数后剩下的数。
源代码如下:
#include
#include
int main()
{
int a,b,c;
printf("Enter a two-digit number:");
scanf("%d",&a);
b=a%10;
a=a/10;
c=b*10+a;
printf("The reversal is:%d",c);
return 0;
}
2.扩展上题中的程序使其可以处理3位数。
源代码如下:
#include
#include
int main()
{
int a,b,c=0;
printf("Enter a three-digit number:");
scanf("%d",&a);
while(a>0){
b=a%10;
c=c*10+b;
a/=10;
}
printf("The reversal is:%d",c);
return 0;
}
3.重新编写程序题2中的程序,是新程序不需要利用算术分割就可以显示出3位数的逆序。提示:参考4.1节的upc.c程序。
源代码如下:
#include
#include
int main()
{
int a,b,c;
printf("Enter a three-digit number:");
scanf("%1d%1d%1d",&a,&b,&c);
printf("The reversal is:%1d%1d%1d",c,b,a);
return 0;
}
6.欧洲国家不使用北美的12位通用产品代码(upc),而使用13位的欧洲商品编码。跟upc一样,每个ean码的最后也有一个校验位。
计算校验位的方法也类似:首先把第2位,第4位,第6位,第8位,第10位,第12位相加:然后把第1位,第3位,第5位,第7位,第9位,第11位
数字相加;接着把第一次加法的结果乘以3,再和第二次加法的结果相加;随后再把上述结果减去1;相减后的结果除以10取余数;最后用9减去上一步骤中的得到的余数。
以gulluoglu turkish delight pistachio &coconut为例,其in码为8691484260008.第一个和为6+1+8+2+0+0=17,第二个和为8+9+4+4+6+0=31.
第一个和乘以3再加上第二个和得到82,减1的到81.这个结果除以10的余数时1,在用9减去余数得到8,与原始编码的最后一位一致,
请修改4.1节的upc.c程序以计算ean的校验位。用户把ean的前12位当作一个数输入;
Enter the first 12 digits of an EAN:86914842600
Check digit: 8
源代码如下:
#include
#include
int main()
{
int sum1,sum2;
int a,i1,i2,i3,i4,i5,i6,f1,f2,f3,f4,f5,f6;
printf("Enter the first 12 didits of an EAN:");
scanf("%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d",&f1,&i1,&f2,&i2,&f3,&i3,&f4,&i4,&f5,&i5,&f6,&i6);
sum1=i1+i2+i3+i4+i5+i6;
sum2=f1+f2+f3+f4+f5+f6;
a=sum1*3+sum2-1;
printf("Check digit:%d",(9-(a%10)));
return 0;
}