C语言家教记录(七)
C语言家教记录(七)
- 导语
- 字符串
- 字面量
- 变量
- 读写字符串
- 操作函数
- 惯用法
- 数组
- 结构
- 联合
- 枚举
- 总结与复习
导语
本次授课的内容如下:字符串,结构体、联合体、枚举
辅助教材为 《C语言程序设计现代方法(第2版)》
字符串
字面量
双引号括起来的字符序列
"to be or not to be, is a question"
字面量需要用\来延续\
printf("When you come to a fork in the road, take it. \
--Yogi Berra");//必须顶格
字面量长度为n,则存储空间为n+1,字符串也可以为空,用单独的\0存储
char*s="abc";//不能修改内容
char ch;
ch = "abc"[1];
printf('\n');//非法,只能是字面量
变量
和整数一样,也可以用数组
说明一下数据的实际存储,探讨各情况下存储用的空间
char date1[8] = "June 14";
//等价于
char date1[8] = {'J', 'u', 'n', 'e', ' ', '1', '4', '\0'};
char date2[9] = "June 14";
char date3[7] = "June 14";
char date4[] = "June 14";char *p;
char s[121];
p=str;
读写字符串
用printf、scanf控制输入输出
char str[] = "Are we having fun yet?";
printf("%s\n", str);
printf("%.6s\n", str);//思考一下会输出什么
scanf("%s",str);
用gets、puts控制输出
char s[121];
gets(s);//不知道数据长度有风险,fgets更好
puts(s);
逐个读入
int read_line(char str[], int n)
{int ch, i = 0;while ((ch = getchar()) != '\n')if (i < n)str[i++] = ch;str[i] = '\0'; /* terminates string */return i; /* number of characters stored */
}
示例程序
int count_spaces(const char s[])
{int count = 0, i;for (i = 0; s[i] != '\0'; i++)if (s[i] == ' ')count++;return count;
}
操作函数
strcpy,strlen,strcat,strcmp
strcpy(str2, "abcd");
strcpy(str1, str2);
strcpy(str1, strcpy(str2, "abcd"));int len;
len = strlen("abc"); /* len is now 3 */
len = strlen(""); /* len is now 0 */
strcpy(strl, "abc");
len = strlen(strl);strcpy(str1, "abc");
strcat(str1, "def"); /* str1 now contains "abcdef" */
strcpy(str1, "abc");
strcpy(str2, "def");
strcat(str1, str2);int strcmp(const char *s1, const char *s2);
if (strcmp(str1, str2) < 0)
惯用法
示例程序
size_t strlen(const char *s)
{const char *p = s;while (*s)s++;return s - p;
}{char *p = s1;while (*p)p++;while (*p++ = *s2++);return s1;
}
数组
探讨存储方式区别
char planets[][8] = {"Mercury", "Venus", "Earth","Mars", "Jupiter", "Saturn","Uranus", "Neptune", "Pluto"};char *planets[] = {"Mercury", "Venus", "Earth","Mars", "Jupiter", "Saturn","Uranus", "Neptune", "Pluto"};
示例程序
#include <string.h>
#define NUM_PLANETS 9
int main(int argc, char *argv[])
{char *planets[] = {"Mercury", "Venus", "Earth","Mars", "Jupiter", "Saturn","Uranus", "Neptune", "Pluto"};int i, j;for (i = 1; i < argc; i++) {for (j = 0; j < NUM_PLANETS; j++)if (strcmp(argv[i], planets[j]) == 0) {printf("%s is planet %d\n", argv[i], j + 1);break;}if (j == NUM_PLANETS)printf("%s is not a planet\n", argv[i]);}return 0;
}
结构
struct {int number;char name[NAME_LEN+1];int on_hand;
} part1, part2;
//介绍存储实现,视为一整个变量,可以认为生成了一个新的类型
struct{
char stu_name[10];
int id;
int grade;
}student;struct {int number;char name[NAME_LEN+1];int on_hand;
} part1 = {528, "Disk drive", 10},part2 = {914, "Printer cable", 5};//初始化,但是不推荐这么用;//通过.运算符进行访问,或者用->
printf("Part number: %d\n", part1.number);
printf("Part name: %s\n", part1.name);
printf("Quantity on hand: %d\n", part1.on_hand);Part1.number = 258; /* changes part1's part number */
Part1.on_hand++;scanf("%d", &part1.on_hand);part2 = part1;struct { int a[10]; } a1, a2;
a1 = a2;
命名
struct part {int number;char name[NAME_LEN+1];int on_hand;
};//一个新的类型struct part part1, part2;//不能直接用partstruct part {int number;char name[NAME_LEN+1];int on_hand;
} part1, part2;typedef struct {int number;char name[NAME_LEN+1];int on_hand;
} Part;//这之后可以用Part直接命名
示例程序
struct part build_part(int number, const char * name, int on_hand)
{struct part p;p.number = number;strcpy (p.name, name);p.on_hand = on_hand;return p;
}
part1 = build_part(528, "Disk drive", 10);
其余部分见书
联合
解释一下存储实现
union {int i;double d;
} u;
union {int i;double d;
} u = {0};
示例程序
#define INT_KIND 0
#define DOUBLE_KIND 1
typedef struct {int kind; /* tag field */union{int i;double d;} u;
} Number;n.kind = INT_KIND;
n.u.i = 82;void print_number(Number n)
{if (n.kind == INT_KIND)printf("%d", n.u.i);elseprintf("%g", n.u.d);
}
枚举
#define SUIT int
#define CLUBS 0
#define DIAMONDS 1
#define HEARTS 2
#define SPADES 3
enum {CLUBS, DIAMONDS, HEARTS, SPADES} s1, s2;
//等价于
enum suit {CLUBS, DIAMONDS, HEARTS, SPADES};
enum suit s1, s2;
//等价于
typedef enum {CLUBS, DIAMONDS, HEARTS, SPADES} Suit;
Suit s1, s2;//c89中的bool
typedef enum {FALSE, TRUE} Bool;enum suit {CLUBS = 1, DIAMONDS = 2, HEARTS = 3, SPADES = 4};typedef struct {enum {INT_KIND, DOUBLE_KIND} kind;union {int i;double d;} u;
} Number;
总结与复习
本次授课讲述第13章和第16章内容,关键点:字符串和新类型
相关文章:
C语言家教记录(七)
C语言家教记录(七) 导语字符串字面量变量读写字符串操作函数惯用法数组 结构联合枚举总结与复习 导语 本次授课的内容如下:字符串,结构体、联合体、枚举 辅助教材为 《C语言程序设计现代方法(第2版)》 字…...

【数据结构】——十大排序详解分析及对比
【数据结构】——十大排序详解分析及对比 文章目录 【数据结构】——十大排序详解分析及对比前言1. 排序的概念及其运用1.1 排序的概念1.2 排序的应用 2. 插入排序2.1 直接插入排序2.2 希尔排序 3. 选择排序3.1 选择排序3.2 堆排序 4 交换排序4.1 冒泡排序4.2 快速排序4.2.1 霍…...

散点图适用于什么数据 thinkcell散点图设置不同颜色
在数据可视化的众多工具和技巧中,散点图是一种极为有效的方式,能够揭示变量之间的关系,尤其是在探索数据集的相关性、分布趋势、集群现象时。而在众多助力于制作高质量散点图的工具中,think-cell插件以其高效的操作和丰富的功能&a…...

1. windows搭建Kafka教程
目录 1. 部署zookeeper 1.1 下载地址 1.3 修改zoo配置 1.4 启动zookeepe服务 02 部署kafka 2.1 下载组件包 2.2 解压安装包 2.3 修改配置 2.4 启动kafka服务端 1. 部署zookeeper 1.1 下载地址 下载地址: kafka/zookeeper 下载地址 (qq.com) 1.2 解压 (…...

XSS复现
目录 XSS简单介绍 一、反射型 1、漏洞逻辑: 为什么有些标签可以触发,有些标签不能触发 可以触发的标签 不能触发的标签 为什么某些标签能触发而某些不能 二、DOM型 1、Ma Spaghet! 要求: 分析: 结果: 2、J…...

怎么利用XML发送视频彩信
传统的短信推广主要以文字为主,用户接收到的信息往往显得单调乏味。而视频彩信则不同,它结合了视频和音频的优势,通过生动的画面和悦耳的音乐,给用户带来强烈的视听冲击,从而极大地提高了用户的吸引力。 XML成功返回示…...

5G+工业互联网产教融合创新实训室解决方案
一、建设背景 随着第五代移动通信技术(5G)的快速普及和工业互联网的迅猛发展,全球制造业正面临着前所未有的深刻变革。5G技术凭借其超高的传输速率、极低的延迟以及大规模的连接能力,为工业自动化、智能制造等领域带来了革命性的…...
象棋布局笔记
文章目录 布局中炮(当头炮)当头炮的缺点如何应对平车压马平炮对车的理解中炮对屏风马急进中兵 中炮盘头马盘头马两翼突破 盖马三锤 反宫马克制反宫马 顺手炮 士角炮56炮破解56炮 小当头 屏风马7卒分支3卒分支屏风马红车二进六败招(黑未挺7卒前直接进车)马八进九变车三退一变马二…...

百度AI智能云依赖库OpenSSL库和Curl库及jsoncpp库安装
开发百度AI项目时,需要用到https协议,因此需要安装OpenSSl和curl库。 若只安装curl库,只支持http协议,不支持https协议。此外,还需要jsoncpp库,用以组包及解析与百度AI通信的json格式协议。 1.Ubuntu上安装…...

智慧空调离线语音控制方案:NRK3301芯片的深度解析与应用
随着AI技术的大爆发和智能家居的风潮,语音交互已成为智能家居产品的一项必备技能,在家电、音箱、穿戴设备乃至墙壁开关等贴近生活的产品中应用越来越广泛,智能语音识别是当前最热门的方案之一。 九芯智能顺应家居行业智能语音交互市场需求&a…...

基础第3关:LangGPT结构化提示词编写实践
提示词: # Role: 伟大的数学家 ## Profile - author: LangGPT - version: 1.0 - language: 中文 - description: 一个伟大的数学家,能够解决任何的数学难题 ## Goals: 根据关键词进行描述,避免与已有描述重复。 ## Background: 你正在被…...

Nginx系列-负载均衡
文章目录 Nginx系列-负载均衡1. 负载均衡基础1.1 负载均衡定义1.2 Nginx负载均衡原理 2. 负载均衡策略2.1 轮询(Round Robin)2.2 加权轮询(Weighted Round Robin)2.3 IP哈希(IP Hash)2.4 最少连接ÿ…...

中职物联网实训室
一、中职物联网实训室建设背景 在当今科技日新月异的浪潮中,物联网技术以其迅猛的发展势头,成为了撬动数字化转型的关键杠杆,深刻地重塑着经济社会的面貌。面对这一变革,社会对精通物联网技术的应用型人才需求激增。鉴于此&#x…...

Image-coloring的部署,在Ubuntu22.04系统下——点动科技
一、ubuntu22.04基本环境配置 1.1 更换清华Ubuntu镜像源 删除原来的文件 rm /etc/apt/sources.list开始编辑新文件 vim /etc/apt/sources.list先按i键,粘贴以下内容 # 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释 deb https:…...

Springboot 整合 Swagger3(springdoc-openapi)
使用springdoc-openapi这个库来生成swagger的api文档 官方Github仓库: https://github.com/springdoc/springdoc-openapi 官网地址:https://springdoc.org 目录题 1. 引入依赖2. 拦截器设置3. 访问接口页面3.1 添加配置项,使得访问路径变短…...
netty4报错:io.netty.util.IllegalReferenceCountException: refCnt: 0, decrement: 1
背景:netty执行链中有一串自定义的handler,目前我想要在中间再加上一个pingPonghandler来进行控制帧的处理,从而避免ng的读写超时(客户要求,与他们建立的通道一直连接,不进行断连,从而需要考虑n…...
2022年汽车软件行业产业细分及发展趋势分析
2022年汽车软件行业产业细分及发展趋势分析 连接 2022年汽车软件行业产业细分及发展趋势分析...
如何通过变更让 PostgreSQL 翻车
在开发应用程序和维护其后台数据库集群的过程中,我们经常会遇到实践与理论、开发环境与生产环境之间的差异。其中一个典型的例子就是变更数据库中的列类型。 对于在 PostgreSQL(及其他符合 SQL 标准的系统)中变更列类型的常规操作࿰…...

MySQL表涉及规范
MySQL表设计规范是为了确保数据库表结构的合理性、可读性和可维护性。以下是一些建议和规范: 1.使用InnoDB存储引擎:InnoDB存储引擎提供了事务支持、行级锁定和外键约束,有助于提高数据的完整性和性能。 2.表名和字段名命名规范:…...

服务器Ubuntu22.04系统 使用dcocker部署安装ollama和搭配open_webui使用
服务器Ubuntu22.04系统 使用dcocker部署安装ollama和搭配open_webui使用 一、ubuntu和docker基本环境配置 1.更新包列表: 打开终端,输入以下命令: sudo apt-get updatesudo apt upgrade更新时间较长,请耐心等待 2. 安装docke…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...

select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...

SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...