C语言程序设计现代方法-第2版 第3章 编程答案

1.编写一个程序,以月/日/年( 即 mm/dd/yy ) 的格式接收用户录入的日期信息,并以年月日( 即yyyy/mm/dd ) 的格式将其显示出来:

Enter a date  (mm/dd/yyyy) : 2/17/2011

You entered the  date 20110217

#include<stdio.h>

int main()
{
	int year=0,month=0,day=0;
	
	printf("Enter a date (mm/dd/yyyy): ");
	
	scanf("%d/%d/%d",&month,&day,&year);
	
	printf("You enter the date %d%.2d%.2d",year,month,day);
	
	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

#include<stdio.h>

int main()
{
	int n=0,m=0,d=0,y=0;
	float p=0;
	
	printf("Enter item number: ");
	
	scanf("%d",&n);
	
	printf("Enter unit price: ");
	
	scanf("%f",&p);
	
	printf("Enter purchase date (mm/dd/yyyy): ");
	
	scanf("%d/%d/%d",&m,&d,&y);
	
	printf("\nItem\t\tUnit\t\tPurchase\n");
	printf("\t\tPrice\t\tDate\n");
	printf("%-d\t\t$%7.2f\t%-.2d/%.2d/%.4d",n,p,m,d,y);
	
	
	return 0;
}

3.图书用国际标准书号(ISBN)进行标识。2007年1月1日之后分配的ISBN包含13位数字(旧的ISBN使用10位数字),分为5组,如978-0-393-97950-3。第一组(GS1前缀)目前为978或979。第二组(组标识)指明语言或者原出版国(如0和1用于讲英语的国家)。第三组(出版商编号)表示出版商(393是W.W.Norton出版社的编号)。第四组(产品编号)是由出版商分配的用于识别具体哪一本书的(97950)。ISBN的末尾是一个校验数字,用于验证前面数字的准确性。编写一个程序来分解用户录入的ISBN信息:
Enter ISBN: 978-0-393-97950-3
GS1 prefix: 978
Group identifier: 0 
Publisher code: 393 
Item number: 97950 
Check digit: 3
注意:每组中数字的个数是可变的,不能认为每组的长度都与示例一样。用实际的ISBN值(通
常放在书的封底和版权页上)测试你编写的程序。

#include<stdio.h>

int main()
{
	int a,b,c,d,e;
	
	printf("Enter ISBN:");
	
	scanf("%d-%d-%d-%d-%d",&a,&b,&c,&d,&e);
	
	printf("GS1 prefix: %d\n",a);
	printf("Group identifier: %d\n",b);
	printf("Publisher code: %d\n",c);
	printf("Item number: %d\n",d);
	printf("Check digit: %d\n",e);
	
	return 0;
 } 

4.编写一个程序,提示用户以(xxx) xxx-xxxx 的格式输入电话号码,并以xxx.xxx.xxxx的格式显示该号码:

Enter phone number [(xxx) xxx-xxxx ]:(404)817-6900

You entered 404.817.6900

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;
}

5.编写一个程序,要求用户(按任意次序)输入从1到16的所有整数,然后用4x4矩阵的形式将
它们显示出来,再计算出每行、每列和每条对角线上的和:
Enter the numbers from 1 to 16 in any order:
16 3 2 13 5 10 11 8 9 6 7 12 4 15 14 1

16    3    2  13
  5  10  11    8
  9    6    7  12
  4  15  14   1
Row sums: 34 34 34 34
Column sums: 34 34 34 34
Diagonal sums: 34 34

如果行、列和对角线上的和都一样(如本例所示),则称这些数组成一个幻方(magic square)。这里给出的幻方出现于艺术家和数学家 Albrecht Dürer 在1514年作的一幅画中。(注意,矩阵最后一行中间的两个数给出了该画的创作年代。)

#include<stdio.h>

int main(void)
{
	int num1, num2, num3, num4, num5, num6 , num7 , num8 ;
	int num9, num10, num11, num12, num13, num14, num15, num16;
	int row1, row2, row3, row4;
	int col1, col2, col3, col4;
	int dia1, dia2;
	
	printf("Enter the numbers from 1 to 16 in any order: ");
	scanf(" %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d", 
	&num1, &num2, &num3, &num4, &num5, &num6, &num7, &num8, 
	&num9, &num10, &num11, &num12, &num13, &num14, &num15, &num16);

	printf("%2d %2d %2d %2d\n",num1,num2,num3,num4);
	printf("%2d %2d %2d %2d\n",num5,num6,num7,num8);
	printf("%2d %2d %2d %2d\n",num9,num10,num11,num12);
	printf("%2d %2d %2d %2d\n\n",num13,num14,num15,num16);
	
	row1 = num1 + num2 + num3 + num4;
	row2 = num5 + num6 + num7 + num8;
	row3 = num9 + num10 + num11 + num12;
	row4 = num13 + num14 + num15 + num16;
	
	col1 = num1 + num5 + num9 + num13;
	col2 = num2 + num6 + num10 + num14;
	col3 = num3 + num7 + num11 + num15;
	col4 = num4 + num8 + num12 + num16;
	
	dia1 = num1 + num6 + num11 + num16;
	dia2 = num4 + num7 + num10 + num13;
	
	printf("Row sums: %d  %d  %d  %d  \n", row1, row2, row3, row4);
	printf("Column sums: %d  %d  %d  %d  \n", col1, col2, col3, col4);
	printf("Diagonal sums: %d  %d  \n", dia1, dia2);

	return 0;
}

6.修改3.2节的addfrac.c程序,使用户可以同时输入两个分数,中间用加号隔开:
Enter two fractions separated by a plus sign: 5/6+3/4
The sum is 38/24

#include<stdio.h>

int main()
{
	int num1,num2,result_num,demond1,demond2,result_demond;
	
	printf("Enter two fractions separated by a plus sign:");
	
	scanf(" %d/%d+%d/%d",&num1,&demond1,&num2,&demond2);
	
	result_num=num1*demond2+num2*demond1;
	result_demond=demond1*demond2;
	
	printf("The sum is %d/%d",result_num,result_demond);
	
	return 0;
}

  • 14
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值