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

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

时间:2024-09-06 11:52:26浏览次数:14  
标签:输出 putchar 字符 -- 格式 输入输出 printf 新手 输入

本文主要讲解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

E,e

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

printf("a=%e",a);

a=8.7 23000e+04

X,x

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

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>m,n 为3,输出3 位字符

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

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

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

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

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

scanf( )格式字符

格式字符

说明

d,i

用于输入十进制符号整数

f

用于输入浮点数

c

用于输入字符

s

用于输入字符串

E,e

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

X,x

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

o

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

l

用于长整型输入,可加载在格式控制符d,o,x,u 前以及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的项目,如果喜欢就点点关注吧,大佬们!!!!————

标签:输出,putchar,字符,--,格式,输入输出,printf,新手,输入
From: https://blog.csdn.net/qq_74267366/article/details/141953657

相关文章

  • AI人像风格重绘,三分钟学会去接单涨粉到不停!
    前几天收到用户反馈说他在小红书和抖音快手上接单【真人转动漫】很赚钱!我心想这东西不是好久好久以前的吗,为什么还很赚钱!我冒着疑惑的态度问了下去,发现他说的真人转动漫非以前的,学名应该叫【AI人像风格重绘】,继续往下看。我看了一下他做的确实不错,图片中的内容保持,风格变......
  • 代码随想录算法训练营第十天| 232.用栈实现队列 、 225. 用队列实现栈 、20. 有效的括
    学习文章链接:代码随想录文章目录一、232.用栈实现队列二、225.用队列实现栈三、20.有效的括号四、1047.删除字符串中的所有相邻重复项一、232.用栈实现队列题目链接:232.用栈实现队列栈的操作:stack<int>s;s.empty();//如果栈为空则返回true,......
  • ArrayList和LinkedList的区别
    >List子体系特点:A:有序的(存储和读取的顺序是一致的)B:有整数索引C:允许重复的 <!--more-->**List的特有功能**````voidadd(intindex,Eelement):将元素添加到index索引位置上Eget(intindex):根据index索引获取元素Eremove(intindex):根据index索引删除元素Es......
  • Kubernetes-etcd备份恢复
    目录使用etcdctl备份与恢复简介集群信息etcdctl安装下载安装同步到其他节点配置环境变量查看集群状态查看所有key查看指定key备份所有节点创建备份目录备份etcd数据恢复删除资源所有master节点停止etcd所有master节点备份原有数据master01恢复master02恢复master03恢复所有节点启......
  • 《Represent, Compare, and Learn: A Similarity-Aware Framework for Class-Agnostic
    摘要论文提出了一个用于类别无关计数(Class-AgnosticCounting,CAC)的相似性感知框架。类别无关计数的目标是在给定少量示例的情况下,对查询图像中的所有实例进行计数。该框架通过联合学习表示和相似性度量来改进计数性能。作者首先提出了一个基础的双线性匹配网络(BilinearMatc......
  • 非常值得一看,最低月薪上万的运维安全工程师学习路线_运维学习路线_运维开发学习路线
    ......
  • 深入解析:Spring Boot中使用Log4j2进行日志管理
    在现代Java应用开发中,日志管理是不可或缺的一部分。SpringBoot框架提供了一种简便的方式来集成日志系统,但默认使用的是Logback。本文将详细介绍如何在SpringBoot应用中使用Log4j2作为日志实现,并展示如何通过SLF4JAPI进行日志记录。引入依赖首先,我们需要在pom.xml文件中......
  • 配置 Buildroot 的命令行提示符显示用户名和主机名
    配置Buildroot的命令行提示符显示用户名和主机名在Buildroot构建根文件系统之前,如果你想预先配置命令行提示符,使其在系统启动时显示用户名和主机名,可以通过以下几种方法在构建过程中设置这些配置文件。你可以通过Buildroot的配置选项或修改根文件系统的文件内容来实......
  • 英国签署首个实施AI保障措施的国际条约
    英国政府签署了首个关于人工智能的国际条约,旨在防止该技术被滥用,如传播虚假信息或使用带有偏见的数据进行决策。在这项具有法律约束力的协议下,各国必须实施保障措施,防范人工智能对人权、民主和法治可能构成的任何威胁。这项条约名为《人工智能框架公约》,由国际人权组织欧洲理......
  • 打破信息差|纯文科生如何入局AI大模型行业?
    一、做AI大模型有多赚钱?......