Lesson16 PoEdu培训第二课 C语言篇(8) printf scanf 随堂作业
文章类别: 培训作业 0 评论

Lesson16 PoEdu培训第二课 C语言篇(8) printf scanf 随堂作业

文章类别: 培训作业 0 评论

老师未批改

1. 不运行代码写出下面语句的执行结果:(未知的值请写出未知理由及原因)

printf("%2.2lf", 2.33333);

2.33

printf("%c%c%c", 'A', '49', '44');

该句话会报错, 因为 '49' 和 '\44' 不是一个正确的字符, 不能被正确编译.
非要说答案的话, 只能是 A程序崩溃...

printf("%10+-.3lf", 3.1415927);

该句话会报错, 格式控制符写的不对, 不知道该用什么格式, 结果未知.

2. 请写出下列各项的转换说明符:

1).宽度和位数相同的十进制整数

// %d 
// 如果不加注释, %d 就显示不出来....

2).232.666, 使用0填充至10位

%010g

3).宽度为30, 左对齐的字符串

%-30s

4).宽度为12的十六进制的整数

%#12x

5).宽度为15的unsigned long的整数

%15lu

6).宽度为7, 左对齐, 字符串中的前5个字符.

%-7.5s

3. 请写出读取下列内容的转换说明符

1). 10109

// %d 
// 如果不加注释, %d 就显示不出来....

2). 22.1111

%lf

3). ILoveMark

// %s 
// 如果不加注释, %s 就显示不出来....

4). I Love Mark (要求一次性读取完成)

%s %s %s

5). if 22 (只读取数值)

if %d

4. 编程练习

1). 提示用户以 "姓 名" (英语)的格式输入, 用 "名姓" 的方式打印.

/*************************************************************************
    > 文件名: lesson16.hw.01.c
    > 作者: 花心胡萝卜
    > 邮箱: hxhlb@hxcarrot.com 
    > 创建时间: 2016-09-21 16:19:46
 ************************************************************************/

#include<stdio.h>

int main() {

    printf("请依次输入您的姓和名(英文):\n");
    char strFirstName[20] = { 0 };
    char strLastName[20] = { 0 };
    scanf_s("%s%s", strLastName, sizeof(strLastName), strFirstName, sizeof(strFirstName));
    printf("您的英文姓名为:%s%s\n", strFirstName, strLastName);
    return 0;
}

运行效果:
Alt 1

2). 同上题输出

    a). 包括双引号的姓名("姓 名")
    b). 打印宽度为20, 左端打印.
/*************************************************************************
    > 文件名: lesson16.hw.02.c
    > 作者: 花心胡萝卜
    > 邮箱: hxhlb@hxcarrot.com 
    > 创建时间: 2016-09-21 16:22:11
 ************************************************************************/

#include <stdio.h>
#include <string.h>

#define WIDTH 20

int main() {

    printf("请依次输入您的姓和名(英文):\n");
    char strFirstName[20] = { 0 };
    char strLastName[20] = { 0 };
    scanf_s("%s%s", strLastName, sizeof(strLastName), strFirstName, sizeof(strFirstName));
    printf("您的英文姓名为:\"%s%s\"\n", strFirstName, strLastName);
    printf("您的英文姓名为:\"%s %-*s\"\n", strLastName, WIDTH - strlen(strLastName) - 3, strFirstName);
    return 0;
}

运行效果:
Alt 1

3). 要求用户输入当前带宽(MB)以及所需要下载文件的大小(GB), 计算出所需要的时间(小时), 公式为: 需要下载的大小(MB)/(带宽大小/10)=需要的秒数

/*************************************************************************
    > 文件名: lesson16.hw.03.c
    > 作者: 花心胡萝卜
    > 邮箱: hxhlb@hxcarrot.com 
    > 创建时间: 2016-09-21 16:47:48
 ************************************************************************/

#include <stdio.h>

#define BASE_MULTIPLES 1024
#define MINUTES_SEC 60

int main() {

    int iBandwidth = 0;
    double dFileSize = 0.0;

    printf("请输入您当前的带宽(MB):\n");
    scanf_s("%d", &iBandwidth);

    printf("请输入您要下载的文件大小(GB):\n");
    scanf_s("%lf", &dFileSize);

    double dNeedHours = dFileSize * (double)BASE_MULTIPLES / (double)(iBandwidth / 10) 
        / (double)MINUTES_SEC / (double)MINUTES_SEC;

    printf("您在带宽为[%d]MB的情况下下载大小为[%g]GB的文件需要的时间为[%.4g]小时!", 
            iBandwidth, dFileSize, dNeedHours); 
            
    return 0;
}

运行效果:

Alt 1

4). 使用头文件和宏打印出所有基础类型的最大值和最小值.

/*************************************************************************
    > 文件名: lesson16.hw.04.c
    > 作者: 花心胡萝卜
    > 邮箱: hxhlb@hxcarrot.com 
    > 创建时间: 2016-09-21 17:20:52
 ************************************************************************/

#include <stdio.h>
#include <limits.h>
#include <float.h>

int main() {
    printf("整数最大值:[%d]\n", INT_MAX);
    printf("整数最小值:[%d]\n", INT_MIN);
    printf("无符号整数大值:[%u]\n", UINT_MAX);
    printf("long整数最大值:[%ld]\n", LONG_MAX);
    printf("long整数最小值:[%ld]\n", LONG_MIN);
    printf("无符号long整数最大值:[%lu]\n", ULONG_MAX);
    printf("long long整数最大值:[%lld]\n", LLONG_MAX);
    printf("long long整数最小值:[%lld]\n", LLONG_MIN);
    printf("无符号long long整数最大值:[%llu]\n", ULLONG_MAX);
    printf("一个字符的位数:[%d]\n", CHAR_BIT);
    printf("一个字符最大值:[%d]\n", CHAR_MAX);
    printf("一个字符最小值:[%d]\n", CHAR_MIN);
    printf("有符号字符的最大值:[%d]\n", SCHAR_MAX);
    printf("有符号字符的最小值:[%d]\n", SCHAR_MIN);
    printf("无符号字符的最大值:[%d]\n", UCHAR_MAX);
    printf("short整数最大值:[%d]\n", SHRT_MAX);
    printf("short整数最小值:[%d]\n", SHRT_MIN);
    printf("无符号short整数最大值:[%d]\n", USHRT_MAX);
    printf("浮点数尾数中的位数:[%d]\n", FLT_MANT_DIG);
    printf("浮点数小数点后面精确的位数:[%d]\n", FLT_DIG);
    printf("浮点数最大10进制指数:[%d]\n", FLT_MAX_10_EXP);
    printf("浮点数最小10进制指数:[%d]\n", FLT_MIN_10_EXP);
    printf("浮点数最小值:[%g]\n", FLT_MIN);
    printf("浮点数最大值:[%g]\n", FLT_MAX);
    printf("浮点数满足x+1.0不等于1.0的最小的正数:[%g]\n", FLT_EPSILON);
    printf("也就是说,所有比FLT_EPSILON小的正数x,x+1.0==1.0都是成立的。\n");

    return 0;
}

运行效果:

Alt 1

如有错误,请提出指正!谢谢.

回复