• 抬起头,继续前进吧,去把这个不完美的故事,变成你成所期望的样子
  • 登山路上我们会放弃很多东西,但这些被我们丢掉在我们登上山顶之际,都会一一回来
  • 不论开发还是逆向,数学水平的高低直接决定了”你的饭碗里有没有肉”
  • 万丈高楼平地起,勿在浮沙筑高台

《C语言程序设计:现代方法》第三章练习

C 菜鸟 2年前 (2018-01-13) 9198次浏览 已收录 0个评论
[隐藏]

        本篇为菜鸟在学习《C 语言程序设计:现代方法》中第三章做的练习题,如果有错误或疑问的话,欢迎大家指正~

1、函数输出

下面的 printf 函数调用产生的输出分别是什么:
(a)printf(“%6d,%4d”, 86, 1040);
(b)printf(“%12.5e”, 30.253);
(c)printf(“%.4f”, 83.162);
(d)printf(“%-6.2g”, .0000009979);
答:
a、| 86,1040|
b、| 3.02530e+01|
c、|83.1620|
d、|1e-6|

2、浮点数转换说明

编写 printf 函数调用以下列格式来显示 flaot 变量 x
(a)指数表示形式:最小为 8 的字段宽度内左对齐,小数点后保留 1 位数字
(b)指数表示形式:最小为 10 的字段宽度内右对齐,小数点后保留 6 位数字
(c)定点十进制表示形式:最小为 8 个字段宽度内左对齐、小数点后保留三位数字
(d)定点十进制表示形式:最小为 6 个字段宽度内右对齐、小数点后无数字

#include <stdio.h>

main()
{
    float x = 32.89;
    printf("|%-8.1e|\n", x);
    printf("|%10.6e|\n", x);
    printf("|%-8.3f|\n", x);
    printf("|%6.0f|\n", x);
    return 0;
}

3、scanf

说明下列每对 scanf 格式串是否等价?如果不等价,请指出差异
(a)”%d” 与 ” %d”
(b)”%d-%d-%d” 与 “%d -%d -%d”
(c)”%f” 与 “%f ”
(d)”%f,%f” 与 “%f, %f”
答:
a、等价。
b、不等价。差异在于第二个格式串匹配完第一个整数后可以再匹配任意数量的空白字符,而第一个格式串不可以
c、等价
d、不等价。差异在于第二个格式串匹配完逗号后可以再匹配任意数量的空白字符,而第一个格式串不可以

知识点:
1、scanf 函数从输入的数据中定位适当类型的项时,并且会跳过必要的空格
2、格式串中的空白字符也会被用来和输入匹配,一个空白字符或者空白转义序列都可以匹配任意数量的空格、换行符或其他空白字符。

4、日期格式转换

编写一个程序,接收用户录入的日期信息并将其显示。其中,输入日期的形式为 mm/dd/yy,输出日期形式为 yymmdd。格式如下:
Enter a date (mm/dd/yy):2/17/96
You entered the date 960217

#include <stdio.h>

main()
{
    int month, day, year; 

    printf("Please input the date (mm/dd/yy): ");
    scanf("%d/%d/%d", &month, &day, &year);

    printf("You entered the date %d%d%d\n", year, month, day);
    return 0;
}

5、产品信息格式化

编写一个程序,对用户录入的产品信息进行格式化。程序运行后如下:
Enter item number: 583
Enter unit price: 13.5
Enter purchase date (mm/dd/yy):10/24/95
Item Unit Purchase
Price Date
583 $13.50 10/24/95
数字项和日期项采用左对齐的方式;单位价格采用右对齐方式。
美元数量的最大取值为 9999.99

#include <stdio.h>

main()
{
    int item, month, day, year;
    float price;
    
    printf("Enter item number: ");
    scanf("%d", &item);
    printf("Enter unit price: ");
    scanf("%f", &price);
    price = (price > 9999.99) ? 9999.99 : price;
    printf("Enter purchase price(mm/dd/yy): ");
    scanf("%d/%d/%d", &month, &day, &year);
    
    printf("Item\tUnit\tPurchase\n\tPrice\tDate\n");
    printf("%-d\t$%4.2f\t%d/%d/%d\n", item, price, month, day, year);

    return 0;
}

6、国际标准书号

编写一个程序来分解用户录入的 ISBN 信息,格式如下:
Enter ISBN: 0-393-30375-6
Language: 0
Publisher: 393
Book Number: 30375
Check digit: 6

#include <stdio.h>

main()
{
    int language, publisher, bookNumber, checkDigit;
    
    printf("Enter ISBN: ");
    scanf("%d-%d-%d-%d", &language, &publisher, &bookNumber, &checkDigit);

    printf("Language: %d\nPublisher: %d\nBook Number: %d\nCheck digit: %d\n", language, publisher, bookNumber, checkDigit);
    return 0;
}

7、scnaf 格式 1

假设 scanf 函数调用的格式如下:
Scanf(“%d%f%d”, &i, &x, &j);
如果用户录入如下信息:
10.3 5 6
执行调用后,变量 i、x 和 j 的值分别为多少?(假设变量 i 和 j 都是 int 型,而变量 x 是 float 型)
答:i 为 10, x 为 0.300000,j 为 5

知识点:
scanf 整数识别原则。scanf 函数首先找到一个数字、正号或负号,然后继续读取数字直到读到一个非数字时才停止。

8、scanf 格式 2

假设 scanf 函数调用的格式如下:
Scanf(“%f%d%f”, &x, &i, &y);
如果用户录入如下信息:
12.3 45.6 789
执行调用后,变量 x、i 和 y 的值分别为多少?(假设变量 x 和 y 都是 float 型,而变量 i 是 int 型)
答:x 为 12.300000, i 为 45,y 为 0.60000

知识点:
1、浮点数读取原则。寻找一个正号或负号(可选),随后是一串数字(可能含有小数点),然后是一个指数(可选)。
2、转换说明符 f。如果没有指定 p,则默认为 6。


学习心得 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明《C 语言程序设计:现代方法》第三章练习
喜欢 (5)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址