C Primer Plus(第六版)第四章

前导程序

//talkback.c --- 演示与用户交互
#include <stdio.h>
#include <string.h>     //提供strlen()函数的原型

#define DENSITY 62.4    //人体密度(单位:磅/立方英尺)

int main(void)
{
    //定义重量和体积两个变量
    float weight = 0, volume = 0;
    //定义size代表对象的大小(单位是字节),letters代表字符个数
    int size = 0, letters = 0;
    //定义一个可容纳40个字符的数组
    char name[40] = { 0 };

    //提示用户输入名字
    printf("你的名字是?(baby)\n");
    scanf("%s", name);
    //提示用户输入体重
    printf("你的体重是?(110)\n");
    scanf("%f", &weight);

    size = sizeof(name);
    letters = strlen(name);
    volume = weight / DENSITY;

    //输出结果
    printf("%s, your volume is %.2f cubic feet.\n", name, volume);
    printf("你的名字有%d个字符\n", letters);
    printf("我们有%d个字节来存储它\n", size);
    
    return 0;
}

运行结果如下:

字符串简介

前导程序中的 printf("你的名字是?(baby)\n") 为例,其中双引号表示它括起来的是字符串,但是双引号本身不是字符串的一部分。单引号用于标识单个字符,例如 'a' 。

使用字符串

根据%s转换说明,scanf()在遇到第一个空白(空格、制表符和换行符)时就不再读取输入,也就是说此时它只读取一个单词,而不是一整个句子。

明示常量

limits.h和float.h中的一些明示常量

printf()和scanf()

prinft()函数

printf()的转换说明

其中没有float类型的转换说明,因为float类型传递给函数时会自动转换成double类型

printf()的转换说明修饰符

printf()中的标记

演示下%f、%g和%#g

//printf_01.c --- 演示%f、%g和%#g
#include <stdio.h>

int main(void)
{
    float a = 1.5;

    printf("使用%%f输出a的结果是:%f\n", a);
    printf("使用%%g输出a的结果是:%g\n", a);
    printf("使用%%#g输出a的结果是:%#g\n", a);

    return 0;
}

运行结果如下:

演示下%.0f和%#.0f

//printf_02.c --- 演示%.0f和%#.0f
#include <stdio.h>

int main(void)
{
    float a = 1.5;

    printf("使用%%.0f输出a的结果是:%.0f\n", a);
    printf("使用%%#.0f输出a的结果是:%#.0f\n", a);

    return 0;
}

运行结果如下:

转换说明的意义

转换说明把以二进制格式存储在计算机中的值转换成一系列字符(字符串)以便于显示。例如,数字76在计算机内部的存储格式是二进制数01001100。%d转换说明将其转换成字符7和6,并显示为76。

转换不会将原始值替换为转换后的值。实际上,转换说明只是翻译说明。

转换不匹配

不要忽视参数传递中的内容

printf()的返回值

返回值是函数计算后返回给主调程序(calling program)的值。

printf()函数一般返回打印字符的个数(包括空格和不可见的换行符 '\n' );如果有输出错误,printf()则返回一个负值。

打印较长的字符串

printf()语句可以换行书写不同部分,编译器会忽略其中的空白部分。但是,不能在双引号括起来的字符串中间断行。例如:

printf("anne中有%d个字符", 
        number);

字符串断行的三种方法:

1.使用多个printf()语句,只在最后一个语句中使用换行符号。

2.用反斜杠 ' \ '和enter键组合来断行。此时下一行代码必须从最左边开始。如果缩进该行,比如缩进5个空格,那么这5个空格就会成为字符串的一部分。

3.使用多个双引号分割字符串,中间可以用空白隔开。

使用scanf()

scanf()函数所用的转换说明与printf()函数几乎相同。主要区别在float类型和double类型

上面scanf()的转换修饰符的截图是第五版的,和第六版有点区别但不大,没找到第六版的资料,哈哈哈

格式字符串中的普通字符

scanf()函数允许把普通字符放在格式字符串中。处空格字符外的普通字符必须与输入字符串严格匹配。例如,假设在两个转换说明中添加一个逗号:

scanf("%d,%d", &n, &m);

此时用户输入两个数时也必须加上逗号,由于scanf()会跳过数字前面的空白,所以下面三种输入都可以(逗号前面都没有空格。而且由于上面scanf中的逗号是半角格式的英文逗号,所以用户输入的逗号也必须是半角格式的英文逗号,不能是全角格式的中文逗号)(注意:当转换说明是%c时,不会自动跳过输入值前面的空白):

1.数字,数字

2.数字,空格加上数字

3.空格加上数字,空格加上数字

scanf()函数格式字符串中的空白意味着跳过下一个输入项前面的所有空白(所有空白的概念包括没有空格的特殊情况)。例如,对于下面的语句:

scanf("%d加空格,%d", &n, &m);

以下的输入格式都没问题:

数字,数字

空格加数字,数字

数字,空格加数字

空格数字,空格加数字

数字加空格,数字

空格数字加空格,数字

数字加空格,空格加数字

空格加数字加空格,空格加数字

scanf()的返回值

scanf()函数返回成功读取的项数。当输入不匹配时,返回0。当遇到文件结尾时,返回EOF。

printf()和scanf()的*修饰符号

printf()函数中可以用*修饰符代替字段宽度,但还是要用一个参数告诉函数字段宽度应该是多少。

下面的程序演示了相关用法:

//seconds_varwid.c --- 使用变宽输出字段
#include <stdio.h>
int main(void)
{
    //定义width表示字段宽度,定义precision表示精确度
    unsigned width = 0, precision = 0;
    int number = 256;
    double weight = 242.5;

    printf("请输入一个字段宽度:(6)\n");
    scanf("%u", &width);
    printf("number的值为:%0*d\n", width, number);

    printf("请输入一个字段宽度:(8)\n");
    scanf("%u", &width);
    printf("请输入一个精确度:(3)\n");
    scanf("%u", &precision);
    printf("Weight = %0*.*f\n", width, precision, weight);

    return 0;
}

运行结果如下:

scanf()函数中把*放在%和转换说明字符之间时,会使得scanf()函数跳过相应的输入项。

示例程序如下:

//third_skiptwo.c --- 跳过输入中的前两个整数
#include <stdio.h>

int main(void)
{
    int n = 0;

    printf("please enter three integers:(2013 2014 2015)\n");
    scanf("%*d %*d %d", &n);
    printf("the last integer was %d\n", n);

    return 0;
}

运行结果如下:

printf()的用法提示

其中的本地化设置暂时用不到,以后有时间研究后再补吧

注:

以上内容为本人学习时的一些笔记,有问题可以私信或留言一起交流,想要电子资料的私信留下联系方式并说明来意

  • 45
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 第七章主要介绍了C语言中的函数,包括函数的定义、调用、参数传递、返回值等方面的内容。具体内容包括: 1. 函数的定义和调用:介绍了如何定义函数以及如何调用函数,包括函数的返回类型、函数名、参数列表和函数体等。 2. 函数的参数传递:介绍了C语言中的参数传递方式,包括值传递和地址传递,以及如何在函数中使用参数。 3. 函数的返回值:介绍了函数的返回值类型和返回值的作用,以及如何在函数中使用返回值。 4. 函数的声明和定义:介绍了函数的声明和定义的区别,以及如何在不同的文件中使用函数。 5. 函数的递归:介绍了递归函数的概念和使用方法,以及递归函数的优缺点。 6. 函数指针:介绍了函数指针的概念和使用方法,以及如何在程序中使用函数指针。 总的来说,第七章是C语言中非常重要的一章,对于理解和使用函数有很大的帮助。 ### 回答2: 《C Primer Plus》第六版第七章主要介绍了C语言中的输入和输出函数。这章的内容包括标准I/O库、`printf()`、`scanf()`等函数以及文件输入输出等。 在这一章中,首先讲解了如何使用标准I/O库进行输入输出。标准I/O库提供了一组函数,可以用于从键盘读取输入,或将结果输出到屏幕上。`printf()`函数可以用于格式化输出,可以控制输出的格式,比如输出特定长度的整数、浮点数等。`scanf()`函数可以用于从键盘读取输入,并将其存储到变量中,也可以使用特定的格式来读取特定类型的数据。 接下来,讲解了如何使用`getchar()`和`putchar()`函数。`getchar()`函数用于从键盘读取单个字符,`putchar()`函数用于向屏幕输出单个字符。 此外,还介绍了文件的输入输出。通过使用`fopen()`函数打开文件,可以读取或写入文件的内容。使用`fprintf()`函数可以将数据写入文件中,使用`fscanf()`函数可以从文件中读取数据并存储到变量中。同时还介绍了如何使用`fclose()`函数关闭文件。 最后,本章还讲解了格式化输出的一些高级特性,比如控制字段宽度、对齐方式以及使用转换说明符等。 通过学习《C Primer Plus》第六版第七章,我们能够了解C语言中输入输出的基本概念和原理,掌握使用输入输出库函数进行读写操作的方法,以及如何进行文件的读写操作。这对于日后编写C语言程序以及处理文件输入输出都有着重要的作用。 ### 回答3: C Primer Plus第六版第七章主要介绍了C语言中的函数。函数是一段完成特定任务的可重复使用的代码块,它可以接收输入参数并返回一个值。 在这一章中,我们学习了如何定义函数并明确函数的返回类型、函数名和参数列表。通过使用函数,我们可以将程序中的代码划分为更小、更可管理的部分。函数的主要好处之一是提高了代码的可读性和可维护性。 我们还学习了传递参数的不同方式,包括按值传递、按地址传递以及传递指针。这些方法允许我们在函数之间传递数据,并在函数内部对数据进行修改。 此外,我们还研究了递归函数的概念。递归函数是指可以调用自身的函数。使用递归可以通过将问题划分为更小的子问题来解决复杂的问题。 在这一章中,我们还学习了函数的作用域和生命周期。函数的作用域定义了函数内部和外部变量的可见性。函数的生命周期指的是函数在程序运行期间的保持状态的时间。 最后,我们还讨论了函数的多文件组织和调用。通过将函数定义和函数声明分离到不同的文件中,我们可以更好地组织和管理大型项目的代码。 通过学习C Primer Plus第六版第七章,我们可以更好地理解和应用函数在C语言中的重要性。掌握函数的知识将有助于我们编写更模块化、可读性更强、可维护性更高的代码。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值