新手c语言讲解及题目分享(十八)--基本输入输出函数专项练习

本文主要讲解c语言的基础部分,基本的输入与输出,通过手动的输入从而得到自己想要的预期值。

参考书目和推荐学习书目:通过网盘分享的文件:C语言程序设计电子教材 (1).pdf
链接: https://pan.baidu.com/s/1JFqSaCKZ0A2Lr944e72NUA?pwd=p648 提取码: p648

目录

前言

一.格式输出函数 prinft( )

printf( )常用格式字符

printf()格式符举例

二.格式化输入函数 scanf( )

scanf( )格式字符

三.字符输出函数 putchar( )

四.字符输入函数 getchar()

五.经验总结和习题分享

1.经验总结

2.习题分享

1.字符复制

2.忽略空白字符

3.字符统计

4.字符转换

5.字符交换

6.句子反转

前言

C 语言的输入输出操作是通过函数来实现的,这样可以增加用户程序的通用性和可移植 性。C 语言标准函数库提供的 printf( )标准输入函数和 scanf( )标准输出函。 C 语言的标准函数库中的输人输出函数是以标准的输入输出设备为输入输出对象。标准 的输入输出设备一般是指终端设备的计算机键盘显示器(终端)。 在使用输入输出函数时需要把包含标准函数的头文件(stdio.h)“包含”到用户的程序 中。注,最常用的 printf( )和 scanf( )不需要头文件支持即可使用。

“包含”头文件需要使用#include 预编译命令如:

#include <stdio.h>

#include 要写在程序的开头部分,stdio 是 standard input output 的缩写,h 为 head 的缩 写,表示标准输入输出头文件。

说明:#include 指令除了使用尖括号,还可以使用双引号。如:

#include "stdio.h" 

尖括号方式又叫做标准方式, C 语言编译系统编译时会在系统存放头文件的子文件夹中 查找要使用的头文件(如 stdio.h)。双引号方式则是先在用户当前程序所在文件夹去查找,找 不到才会使用标准方式去找。用户自行编写的库文件应该使用双引号方式,使用系统提供的 头文件既可使用尖括号的方式也可使用双引号方式。

一.格式输出函数 prinft( )

格式输出函数 printf 向计算机系统默认的输出设备(显示终端)输出一个或多个任意指 定类型的数据,是 C 语言中使用频率最高的输出库函数,它可以输出任何类型的多个数据,

其调用格式为:

printf("格式控制字符串",输出列表)

其中,“格式控制字符串”是用双引号括起来的字符串(双引号不可省略),可以包括 3 种字符: (1)格式说明符由“%”和格式字符组成,如%c、%d、%f 等,用于指定输出项的输出 格式

(2)转义字符:以反斜线“\”开头,后面跟一个或几个字符,如 n、\:等,常用来控制 光标的位置。

(3)普通字符是除了格式说明符和转义字符之外的其他字符,这些字符将按原样输出。 输出列表是要输出的数据。

当列表中出现两个或两个以上数据时需要用“,”隔开。数 据可以是表达式、常量、变量输出列表与格式说明符按顺序一一对应。

printf( )常用格式字符

格式

说明

示例

输出

d

用于输出十进制有符号整数

printf("a=%d"a)

a=5

f

用于输出浮点数

printf("a=%f"a)

a=6.170000

c

用于输出字符

printf("c=%c"a)

c=A

s

用于输出字符串

printf("s=%s"a)

s=china

Ee

用于输出浮点数的标准指数形式

printf("a=%e"a)

a=8.7 23000e+04

Xx

用于输出无符号十六进制整数

printf("a=%x"a)

a=f4

o

用于输出无符号八进制整数

printf("a=%o"a)

a=775

printf()格式符举例

输出

输出

说明

printf"%5d""222"

□□222

输出5 位整数,右对齐,左边补齐空格

printf"%-5d""222"

222□□

输出5 位整数,左对齐,右边补齐空格

printf"%2d""222"

222

输出数据超过指定列宽按实际数据输出

printf"%05d""222"

00222

在列宽前加一个0代表输出一个小于列宽的数值时,在输出项前用0 齐。

printf"%6s""HTML"

□□HTML

输出列宽为6 字符串,右对齐,左边补空格

printf"%6.2f""31.4"

31.40

输出6 位浮点数,小数2 位,整数3 位,小数点1 ,不够6 位右对齐

printf"%.2f""31.4"

31.40

整数原样输出,小数输出2

printf"%.3s""HTML"

HTM

n>mn 3,输出3 位字符

注:以上的格式输出举例会经常见到,因此可以根据上述表自己练习一遍。

二.格式化输入函数 scanf( )

函数 scanf( )按指定格式读入键盘输入的数据并存入指定内存区域中,其调用格式为:

scanf("格式控制字符串",地址列表)

其中,“格式控制字符串”与 printf( )相似,可以包含普通字符和控制字符,普通字符原 样输入。地址列表是由多个地址组成的列表,可以是变量地址或其他地 址形式。

scanf( )格式字符

格式

说明

di

用于输入十进制符号整数

f

用于输入浮点数

c

用于输入字符

s

用于输入字符串

Ee

用于输入浮点数的标准指数形式

Xx

用于输入无符号十六进制整数

o

用于输入无符号八进制整数

l

用于长整型输入,可加载在格式控制符doxu 前以double 数据(%lf %le)输入

h(整数)

数据最小宽度

注:格式控制字符串中出现的普通字符必须按原样输入;地址列表中只能出现地址,不能是变量名;在使用%c 来输入字符时,转义字符、空格等符号是会作为有效字符输入的;输入数据时不能指定精度;输入数据时,当遇到以下情况会认为输入结束。 ① 遇到空格或回车或跳格(Tab)键时。 ② 指定宽度结束时。 ③ 遇到非法输入时。

三.字符输出函数 putchar( )

putchar( )函数输出一个字符,使用更加简单。

putchar 的一般形式:

putchar(参数)

注:(1)putchar( )函数一次只能输出一个字符。

(2)putchar( )函数可直接用整型作为参数,输出对应 ASCII 码的字符。

(3)putchar( )可输出转义字符。

(4)在使用该函数之前必须要加载 stdio.h 头文件: #include <stdio.h>

四.字符输入函数 getchar()

getchar( )函数用表输入 1 个字符。

getchar( )函数的一般形式: getchar( )

注:(1)getchar( )函数从计算机默认输入设备(键盘)输入一个字符,如果输入多个字 符也只接受第一个。

(2)getchar( )没有参数。

(3)接收到的字符作为返回值可赋值给字符型或整型变量,也可不赋值。

(4)在键盘上输入的字符不能有引号,以回车结束输入

(5)与 putchar( )一样,使用前要使用 include 命令包含头文件 stdio.h

五.经验总结和习题分享

1.经验总结


学习 C 语言的输入与输出函数,关键在于熟练掌握 `scanf`、`printf`、`getchar` 和 `putchar` 等基本函数的使用。实践中,要注意格式化字符串的精确匹配,以及处理不同数据类型时的细节差异。此外,对于输入函数,要特别注意缓冲区管理和错误处理,避免因未读取或错误读取而导致程序异常。随着经验的积累,你会更加熟练地运用这些函数,实现高效、灵活的数据交互,为编写更复杂的程序打下坚实的基础。
 

2.习题分享

1.字符复制

编写一个程序,使用 getchar() 读取字符,直到读取到文件结束符(EOF),并使用 putchar() 将每个读取的字符输出。

#include <stdio.h>

int main() {
    int c;
    while ((c = getchar()) != EOF) {
        putchar(c);
    }
    return 0;
}
2.忽略空白字符

修改上面的程序,使其忽略所有空白字符(空格、制表符、换行符)。

#include <stdio.h>

int main() {
    int c;
    while ((c = getchar()) != EOF) {
        if (c != ' ' && c != '\t' && c != '\n') {
            putchar(c);
        }
    }
    return 0;
}
3.字符统计

编写一个程序,使用 getchar() 读取字符,并统计读取的字符总数、字母字符总数、数字字符总数和空白字符总数。

#include <stdio.h>

int main() {
    int c, total_chars = 0, total_letters = 0, total_digits = 0, total_whitespace = 0;
    
    while ((c = getchar()) != EOF) {
        total_chars++;
        if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
            total_letters++;
        } else if (c >= '0' && c <= '9') {
            total_digits++;
        } else if (c == ' ' || c == '\t' || c == '\n') {
            total_whitespace++;
        }
    }
    
    printf("Total characters: %d\n", total_chars);
    printf("Total letters: %d\n", total_letters);
    printf("Total digits: %d\n", total_digits);
    printf("Total whitespace characters: %d\n", total_whitespace);
    
    return 0;
}
4.字符转换

编写一个程序,将所有输入的小写字母转换成大写字母,并使用 putchar() 输出结果。非字母字符保持不变

#include <stdio.h>

int main() {
    int c;
    while ((c = getchar()) != EOF) {
        if (c >= 'a' && c <= 'z') {
            c = c - 'a' + 'A';
        }
        putchar(c);
    }
    return 0;
}
5.字符交换

编写一个程序,它读取两个字符,并交换它们的顺序后输出

#include <stdio.h>

int main() {
    char first, second;
    printf("Enter two characters: ");
    first = getchar();
    second = getchar();
    
    // 输出交换后的字符
    putchar(second);
    putchar(first);
    
    return 0;
}
6.句子反转

编写一个程序,读取一整行输入,然后使用 putchar() 将该行字符以相反的顺序输出。

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

#define MAX_LEN 1000  // 假设输入的句子不会超过这个长度

int main() {
    char line[MAX_LEN];
    int i;

    // 读取一行输入
    if (fgets(line, MAX_LEN, stdin) != NULL) {
        // 反转字符串
        int len = strlen(line);
        for (i = len - 1; i >= 0; i--) {
            if (line[i] == '\n') {
                continue;  // 跳过换行符
            }
            putchar(line[i]);
        }
        putchar('\n');  // 在句子末尾添加换行符
    }

    return 0;
}

7.字符过滤器

编写一个程序,读取输入并仅输出数字字符。所有非数字字符将被忽略

#include <stdio.h>

int main() {
    int c;
    while ((c = getchar()) != EOF) {
        if (c >= '0' && c <= '9') {
            putchar(c);
        }
    }
    return 0;
}

8.行数统计

编写一个程序,读取输入直到 EOF,并使用 putchar() 输出每一行之前的行号。

#include <stdio.h>

int main() {
    int c, line_number = 1;
    while ((c = getchar()) != EOF) {
        if (c == '\n') {
            line_number++;
            printf("%d: ", line_number);
        } else {
            putchar(c);
        }
    }
    return 0;
}

————由于博主还是大三的在读生,时间有限,每天会不定时更新一些学习经验和一些32的项目,如果喜欢就点点关注吧,大佬们!!!!————

  • 19
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

樱娆π

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值