C Primer Plus 第7章——第一篇

news2024/9/23 3:28:03

你该逆袭了

第7章:重点摘录

  • 零、本章介绍
  • 一、if 语句
  • 二、if else 语句
    • 1、介绍 getchar( ) 和 putchar( )
    • 2、ctype.h 系列 的 字符函数
      • (1)、isalnum( )
      • (2)、isalpha( )
      • (3)、isblank( )
      • (4)、iscntrl( )
      • (5)、isdigit( )
      • (6)、isgraph( )
      • (7)、islower( )
      • (8)、isprint( )
      • (9)、ispunct( )
      • (10)、isspace( )
      • (11)、isupper( )
      • (12)、isxdigit( )
      • (13)、tolower( )
      • (14)、toupper( )
    • 3、多重选择 else if

零、本章介绍

1、关键字:if、else、switch、continue、break、case、default、goto
2、运算符:&&、||、?:
3、函数:gechar( )、putchar( )、ctype.h 系列
4、如何使用 if 和 if else 语句,如何嵌套它们
5、在更复杂的测试表达式中用逻辑运算符组合关系表达式
6、C 的条件运算符
7、switch 语句
8、break 、continue 和 goto 语句
9、使用 C 的字符 I/O 函数:getchar ( ) 和 putchar( )
10、ctype.h 头文件提供的字符分析函数系列

一、if 语句

#include <stdio.h>

int main()
{
	const int FREEZING = 0;
	float temperature = 0;
	int cold_days = 0;
	int all_days = 0;

	printf("enter the list of daily low temperatures.\n");
	printf("use celsius, and enter q to quit.\n");
	while (scanf("%f", &temperature) == 1)
	{
		all_days++;
		if (temperature < FREEZING)
		{
			cold_days++;
		}
	}
	if (all_days != 0)
	{
		printf("%d days total:%.1f%% were below freezing.\n",
			all_days, 100.0 * (float)cold_days / all_days);    //其实,不必使用强制转换类型,因为式子中有 100.0 ,它先进行 100.0 * cold_days,由于 C 的自动转换类型规则,乘积会被强制转换成浮点数
		                                                       //但是,使用强制转换类型,可以明确表达转换类型的意图,保护程序免受不同版本编译器的影响
	}
	if (all_days == 0)
	{
		printf("no data entered!\n");
	}

	return 0;
}

在这里插入图片描述

在这里插入图片描述

二、if else 语句

1、介绍 getchar( ) 和 putchar( )

int getchar ( void );
int putchar ( int character );

//P181 程序清单7.2
//更改输入,空格不变
#include <stdio.h>
#define SPACE ' '   //SPACE 表示 单引号—空格—单引号

int main()
{
	int ch = 0;

	ch = getchar();
	while (ch != '\n')
	{
		if (ch == SPACE)
		{
			putchar(ch);  //打印 空格
		}
		else
		{
			putchar(ch + 1);
		}
		ch = getchar();   //获取下一个字符
	}
	putchar(ch);  // 显示 换行符

	return 0;
}

在这里插入图片描述
在这里插入图片描述

while (ch = getchar() != '\n');   //这种是大错特错,运算发优先级被忽略了

在这里插入图片描述

2、ctype.h 系列 的 字符函数

C 有一系列 专门处理字符 的函数,ctype.h 头文件包含了这些函数的原型。
这些函数接受一个字符作为参数,如果该字符属于特殊类别,就返回一个非零值(真);否则,返回 0(假)。

例如:isalpha( ) 函数的参数是一个字母,则返回一个非零值。

//P182 程序清单7.3 
//替换输入的字母,非字母字符保持不变

#include <stdio.h>
#include <ctype.h>  //包含 isalpha( ) 的函数原型

int main()
{
	int ch;

	while ((ch = getchar()) != '\n')
	{ 
		if (isalpha(ch))   //如果是一个字符,
		{
			putchar(ch + 1);    //显示该字符的下一个字符
		}
		else
		{
			putchar(ch);   //标点符号、空格之类的就原样输出
		}
	}
	putchar(ch);  //显示 换行符

	return 0;
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(1)、isalnum( )

isalnum( )
检查字符是否为 字母 或者 数字

//isalnum( ) 
//检查字符是否为 字母 或者 数字

#include <stdio.h>
#include <ctype.h>

int main()
{
	int i = 0;
	char str[10] = "abcd...";

	while (isalnum(str[i]))
	{
		i++;
	}
	printf("the first %d character are alphanumeric.\n", i);  //the first 4 character are alphanumeric.
	
	return 0;
}

(2)、isalpha( )

功能:检查字符是否为 字母
返回值:如果确实是字母,则为不同于零的值(即 true);否则为零(即 false)。

//isalpha( )
//检查字符是否为 字母

#include <stdio.h>
#include <ctype.h>

int main()
{
	int i = 0;
	char str[10] = "c++";

	while (str[i])
	{
		if (isalpha(str[i]))
		{
			printf("character %c is alphabetic\n", str[i]);
		}
		else
		{
			printf("character is not alphabetic\n", str[i]);
		}
		i++;
	}

	return  0;
}

在这里插入图片描述

(3)、isblank( )

//isblank( )
// int isblank ( int c );
//功能:检查是否是标准的空白字符(空格、水平制表符、换行符)或者任何其他本地化指定为空白的字符
//返回值:如果 c 确实是空白字符,则为不同于零的值(即 true);否则为零(即 false)。

#include <stdio.h>
#include <ctype.h>

int main()
{
	char c = 0;
	int i = 0;
	char str[] = "example sentence to test isblank\n";
	while (str[i])
	{
		c = str[i];
		if (isblank(c))
		{
			c = '\n';
		}
		putchar(c);
		i++;
	}
	return 0;
}
//此代码逐个字符打印出 C 字符串,用换行符替换任何空白字符

(4)、iscntrl( )

//iscntrl( )
//int iscntrl ( int c );
//功能检查字符是否为控制字符
//对于标准 ASCII 字符集(由“C”区域设置使用),
//控制字符是 ASCII 代码 0x00 (NUL) 和 0x1f (US) 之间的字符,加上 0x7f (DEL)。

#include <stdio.h>
#include <ctype.h>

int main()
{
	int i = 0;

	char str[] = "first line \n second line \n";
	while (iscntrl(str[i]))
	{
		putchar(str[i]);
		i++;
	}
	
	return 0;
}
//此代码逐个字符打印字符串,直到遇到中断 while 循环的控制字符。
//在这种情况下,将只打印第一行,
//因为该行以“\n”结尾,该字符是控制字符(ASCII 代码 0x0a)。

(5)、isdigit( )

//isdigit()
// int isdigit ( int c );
//功能:检查是否为十进制数。十进制数字是以下任意数字:0 1 2 3 4 5 6 7 8 9
//返回值:如果确实是十进制数字,则为不同于零的值(即 true)。否则为零(即 false)。

#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>   //atio() 的头文件

int main()
{
	char str[] = "1776ad";
	int year = 0;

	if (isdigit(str[0]))
	{
		year = atoi(str);  //atio( ) 分析 C 字符串,将其内容解释为整数,该整数作为 类型的值返回。
		printf("the year that followed %d was %d.\n", year, year + 1);
	}

	return 0;
}

//The year that followed 1776 was 1777

(6)、isgraph( )

//isgraph
//int isgraph ( int c );
//检查是否为:除空格之外的任意可打印字符
//返回值:一个不同于零的值(即 true),如果 c 确实具有图形表示作为字符。否则为零(即 false)

#include <stdio.h>
#include <ctype.h>

int main()
{
	char ch[] = "abcdefg hhj";
	int i = 0;

	while (isgraph(ch[i]))
	{
		i++;
	}
	printf("%d\n", i);  // 7 

	return 0;
}

(7)、islower( )

//islower()
// int islower ( int c );
//功能:检查是否为 小写字母
//返回值:如果 c 确实是小写字母,则为不同于零的值(即 true)。否则为零(即 false)。

#include <stdio.h>
#include <ctype.h>

int main()
{
	int i = 0;

	char str[] = "test string.\n";
	while (islower(str[i]))
	{
		i++;
	}
	printf("%d\n", i);   // 4 

	return 0;
}

(8)、isprint( )

//isprint()
//int isprint ( int c );
//功能:检查字符是否可打印,可打印字符是在显示器上占据打印位置的字符(这与控制字符相反,使用 iscntrl 进行检查)。
//对于标准 ASCII 字符集(由“C”区域设置使用),打印字符的 ASCII 代码均大于 0x1f (US),0x7f (DEL) 除外。
//返回值:如果确实是可打印字符,则为不同于零的值(即 true)。否则为零(即 false)。

#include <stdio.h>
#include <ctype.h>

int main()
{
    int i = 0;
    char str[] = "first line \n second line \n";
    while (isprint(str[i]))
    {
        putchar(str[i]);
        i++;
    }
    return 0;    
}
//first line
//此代码逐个字符打印字符串,直到选中不可打印的字符并中断 while 循环。
//在这种情况下,将仅打印第一行,因为该行以换行符 ('\n') 结尾,该换行符不是可打印字符。

(9)、ispunct( )

//ispunct()
//int ispunct ( int c );
//检查字符是否是标点符号(除空格和字母数字字符以外的任何可打印的字符)
//返回值:如果确实是标点符号,则为不同于零的值(即 true)。否则为零(即 false)。

#include <stdio.h>
#include <ctype.h>

int main()
{
	int i = 0;
	int cx = 0;
	char str[] = "hello,welcome.";

	while (str[i])
	{
		if (ispunct(str[i]))
		{
			cx++;
		}
		i++;
	}
	printf("sentence contains %d punctuation characters.\n", cx);  // 2

	return 0;
}

(10)、isspace( )

//isspace()
//int isspace ( int c );
//功能:检查字符是否为空白字符
//空白字符(空格、换行符、换页符、回车符、垂直制表符、水平制表符、其他本地化定义的字符)
//返回值:如果确实是空格字符,则为不同于零的值(即 true)。否则为零(即 false)。

#include <stdio.h>
#include <ctype.h>

int main()
{
	char c = 0;
	int i = 0;
	char str[] = "example sentence to test isspace\n";

	while (str[i])
	{
		c = str[i];
		if (isspace(c))
		{
			c = '\n';
		}
		putchar(c);
		i++;
	}

	return 0;
}

(11)、isupper( )

//isupper()
//int isupper ( int c );
//功能:检查字符是否为大写字母
//返回值:如果确实是大写字母,则为不同于零的值(即 true)。否则为零(即 false)。

#include <stdio.h>
#include <ctype.h>

int main()
{
	int i = 0;
	char str[] = "Test String.\n";
	char c = 0;

	while (str[i])
	{
		c = str[i];
		if (isupper(c))
		{
			c = tolower(c);   //大写字母转化为小写字母
		}
		putchar(c);          
		i++;                 //test string.
	}

	return 0;
}

(12)、isxdigit( )

//isxdigit( )
//int isxdigit ( int c );
//功能:检查字符是否为十六进制数字
//返回值:一个不同于零的值(即 true),如果 c 确实是十六进制数字。否则为零(即 false)。

#include <stdio.h>
#include <ctype.h>

int main()
{
    char str[] = "ffff";
    long int number;
    if (isxdigit(str[0]))
    {
        number = strtol(str, NULL, 16);
        printf("The hexadecimal number %lx is %ld.\n", number, number);
    }

    return 0;        //The hexadecimal number ffff is 65535.
}
//isxDigit 用于检查 str 中的第一个字符是否为有效的十六进制数字,因此是否是 strtol 转换为整数值的有效候选项。

(13)、tolower( )

//tolower()
//int tolower ( int c );
//功能:如果参数是大写字符,该函数返回小写字符;否则,返回原始参数。
//返回值:如果存在此类值,则为小写字母,相当于 c,否则为 c(不变)。该值以 int 值的形式返回,该值可以隐式转换为 char。

#include <stdio.h>
#include <ctype.h>

int main()
{
    int i = 0;
    char str[] = "Test String.\n";
    char c;

    while (str[i])
    {
        c = str[i];
        putchar(tolower(c));
        i++;
    }

    return 0;
}

(14)、toupper( )

//toupper()
//int toupper ( int c );
//功能:如果参数是小写字符,该函数返回大写字符;否则,返回原始参数
//返回值:如果存在此类值,则为大写字母,则等效于 c,否则为 c(不变)。该值以 int 值的形式返回,该值可以隐式转换为 char。

#include <stdio.h>
#include <ctype.h>

int main()
{
    int i = 0;
    char str[] = "Test String.\n";
    char c;

    while (str[i])
    {
        c = str[i];
        putchar(toupper(c));
        i++;
    }

    return 0;
}

3、多重选择 else if

//P188 程序清单7.5
//使用嵌套 if 语句显示一个数的约数

#include <stdio.h>
#include <stdbool.h>    //包含这个头文件,就可以用 bool 代替 _Bool 类型,用 true 和 false 分别代替 1 和 0 ;

int main()
{
	unsigned long num = 0;   //待测试的数
	unsigned long div = 0;   //可能的约数
	bool isPrime = 0;        //素数标记

	printf("please enter an integer for analysis; ");
	printf("enter q to quit.\n");
	while (scanf("%lu", &num) == 1)
	{
		for (div = 2, isPrime = true; (div * div) <= num; div++)    //测试的数字只要到 num 的 平方根 就可以
		{                                                           //原因:(1)还没有学习 sqrt() 函数;(2)整数乘法比求平方根快
			if (num % div == 0) 
			{
				if ((div * div) != num)
				{
					printf("%lu is divisible by %lu and %lu.\n",
						num, div, num / div);
				}
				else
				{
					printf("%lu is divisible by %lu.\n",
						num, div);
				}
				isPrime = false;
			}
		}
		if (isPrime)
		{
			printf("%lu is prime.\n", num);
		}
		printf("please enter another integer for analysis; ");
		printf("enter q to quit.\n");
	}
	printf("bye.\n");

	return 0;
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1990013.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CV党福音:YOLOv8实现分类

YOLO作为目标检测领域的常青树&#xff0c;如今以及更新到了YOLOv10&#xff0c;并且还有YOLOX、YOLOS等变体&#xff0c;可以说该系列已经在目标检测领域占据了半壁江山&#xff0c;如今&#xff0c;YOLOv8的发行者ultralytics竟有一统江山之意&#xff0c;其在提出的框架中不…

基于Springboot+Vue3的简易教学管理系统

作品展示 基于SpringbootVue3的简易信息教学管理系统 第1章 系统设计 1.1 系统功能模块设计 该系统实现的功能模块包括&#xff1a; 教师端&#xff1a; 学生信息管理&#xff1a;添加、删除、修改以及查询学生信息 √课程信息管理&#xff1a;添加、删除、修改以及查…

智慧图书馆:构建高效视频智能管理方案,提升图书馆个性化服务

一、背景分析 随着信息技术的飞速发展&#xff0c;智慧图书馆作为现代公共文化服务的重要载体&#xff0c;正逐步从传统的纸质阅读空间向数字化、智能化方向转型。其中&#xff0c;视频智能管理方案作为智慧图书馆安全管理体系的重要组成部分&#xff0c;不仅能够有效提升图书…

深入浅出Mysql 第二期

从更新语句中看日志系统 探究技术的本质&#xff0c;享受技术的乐趣&#xff01;由于时间原因以及自己的原因导致拖更了&#xff0c;不过没关系&#xff0c;我保证后面每天一更&#xff0c;周末休息&#xff01;好了&#xff0c;闲话少说&#xff0c;今天我们通过一个更新操作…

数组案例练习进阶版---对数组中的元素进行排序(冒泡法)

在上篇文章中&#xff0c;我们一起学习了常用排序法中的选择排序法&#xff0c;今天&#xff0c;我们将一起来学习新的排序方法——冒泡法排序 那么首先&#xff0c;什么是冒泡法呢&#xff1f; 首先&#xff0c;第一列&#xff0c;我们有四个大小不一的球&#xff0c;我们称最…

4款ai 制作 ppt工具帮你提高工作效率

在这个高度重视可视化展示的环境当中&#xff0c;PPT在许多的场合中都骑着非常重要的作用&#xff0c;但PPT制作过程却常常令人感到烦恼。而最近我发现了4个堪称神器的PPT制作工具&#xff0c;可以分享给大家。 1、笔灵 ppt 直通车&#xff1a;https://ibiling.cn/ppt-zone 这…

数据结构与算法 - 红黑树

一、概述 1. 历史 红黑树是一种自平衡二叉查找树&#xff0c;最早由一名叫Rudolf Bayer的德国计算机科学家于1972年发明。然而&#xff0c;最初的树形结构不是现在的红黑树&#xff0c;而是一种称为B树的结构&#xff0c;它是一种多叉树&#xff0c;可以用于在磁盘上存储大量…

美国司法部对谷歌反垄断案的最新进展,Google每年给苹果200亿?

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点点 美国司法部对谷歌反垄断案的前因和最新进展 美国司法部对谷歌的反垄断案是一个复杂且历时长久的法律过程&#xff0c;其核心争议在于谷歌是否利…

CentOS 7.6 安装 Weblogic

注&#xff1a;本教程是以虚拟机作为安装环境&#xff0c;如果您公司需要安装 Weblogic 服务器&#xff0c;请先以虚拟机模拟安装一遍&#xff0c;否则出现失误&#xff0c;概不负责&#x1f601;。 一、环境 虚拟机&#xff1a;VMware Workstation 16 Linux&#xff1a;Cent…

@Autowired提示:Field injection is not recommended

1、问题 在项目升级版本过程中&#xff0c;Autowired提示Field injection is not recommendedField injection is not recommended Inspection info: Reports injected or autowired fields in Spring components. The quick-fix suggests the recommended constructor-based d…

Linux 下查看 CPU 使用率

目录 一、什么是 CPU 使用率二、查看 CPU 利用率1、使用 top 查看2、用 pidstat 查看3、用 ps 查看4、用 htop 查看5、用 nmon 查看6、用 atop 查看7、用 glances 查看8、用 vmstat 查看9、用 sar 查看10、dstat11、iostat 三、总结 CPU 使用率是最直观和最常用的系统性能指标&…

Linux下自动监控进程运行状态

目录 背景应用举例1、使用crontab脚本监控服务2、使用shell脚本监控服务2.1 编写自定义监控脚本2.2 运行脚本 背景 假设有一个服务需要长期运行&#xff0c;但可能会由于某种原因导致服务意外停止&#xff0c;不能及时发现&#xff0c;某天来到公司后发现出问题了才意识到服务…

【linux】curl命令用法

curl命令认识 curl命令其实在平常工作中就已经在使用了&#xff0c;但是一直没有系统看过&#xff0c;就在这记录下&#xff0c;以后要用的话&#xff0c;可以在这儿查阅。 curl命令写的更清楚一点其实是cURL&#xff08;client url&#xff0c;客户端URL或者command url命令…

时间复杂度计算方法以及常见题型

时间复杂度是衡量算法运行时间随输入规模增长而增长快慢的一种度量方式。它并不是指算法在特定硬件上的实际运行时间&#xff0c;而是算法在理想环境下执行时间的增长趋势。计算时间复杂度时&#xff0c;我们主要关注算法中执行次数最多的操作&#xff08;即基本操作&#xff0…

算法板子:匈牙利算法——二分图的最大匹配

目录 1. 基础概念 &#xff08;1&#xff09;二分图的概念 &#xff08;2&#xff09; 匈牙利算法的作用 2. 代码 1. 基础概念 &#xff08;1&#xff09;二分图的概念 顶点集 V 分为两个集合&#xff0c;且图中每条边依附的两个顶点都分属于这两个子集&#xff0c;也就是第…

了解反向代理如何工作吗?

在当今数字化时代&#xff0c;网络通讯扮演着重要的角色&#xff0c;而代理技术为网络通讯提供了更多的灵活性和安全性。作为两种重要的代理技术&#xff0c;代理服务器和反向代理的运行原理和用途各有不同。本文将重点介绍反向代理的运行原理&#xff0c;深入探讨其在网络通讯…

运动耳机哪款好?多方位实测五大风靡网络的爆款,第一款竟然连奥运冠军都在用

随着健康意识的提升&#xff0c;将骨传导耳机作为运动伴侣的国人日益增多&#xff0c;其市场年度销售额已突破新高。然而&#xff0c;作为深耕运动装备领域多年的专家&#xff0c;我深感有责任告诫广大运动爱好者&#xff0c;在选择骨传导耳机时&#xff0c;务必保持警惕&#…

PD虚拟机共享文件夹 PD虚拟机共享蓝牙设备怎么设置 PD虚拟机如何共享文件

PD虚拟机&#xff08;Parallels Desktop&#xff09;是为有双系统使用需求人士设计的Mac系统软件。PD虚拟机可以在Mac电脑中设置Windows系统的应用软件。有了PD虚拟机的帮助&#xff0c;大家可以直接在Mac系统中使用其他如Windows的虚拟机系统&#xff0c;除此以外&#xff0c;…

软件RAID配置实战(2个案例场景)

文章目录 3、软件RAID管理-mdadm工具安装mdadm组件格式示例选项说明mdadm命令其它常用选项 4、相关查询命令查看创建RAID的进度查看RAID磁盘详细信息查看文件系统的磁盘空间使用情况 5、RAID配置示例场景1&#xff1a;RAID5步骤 场景2&#xff1a;RAID10步骤 6、移除RAID阵列 接…

031_java.util.concurrent.CopyOnWriteArrayList

继承体系 CopyOnWriteArrayList存在的目的是为了解决在高并发下list的读写。设计上希望只阻塞写行为&#xff0c;不会阻塞读行为。CopyOnWriteArrayList设计就基于此&#xff0c;在内部含有ReentrantLock用作修改时加锁&#xff0c;CopyOnWriteArrayList下有很多可以写方法&…