2014.3.5-C语言学习小结

知识点:1.结构体	struct2.联合体	union3.枚举4.结构、联合与函数
===========================
结构体思考:如果现在希望保存一个学生的信息,该如何保存sprintf	"zhangsan:18:180”%s:%d:%d, name, height, agechar name[10][100]int age[10]int height[10]1.什么是结构体 struct结构体指的是一种数据结构,是c语言中复合数据类型的一种多种不同数据类型的集合2.结构体的作用结构体可以用来创建复杂的数据结构3.结构体的定义1)定义的语法!!	4.结构体成员声明1)可以声明各种类型的成员2)成员声明时需要注意的地方练习:struct1.定义一个结构体,用来描述时间,具体说该结构体有三个成员,分别描述时分秒信息2.定义一个结构体,用来描述书本的信息,结构体成员包括名称,单价,作者,出版社authorpricepublish5.声明结构体类型变量和初始化.	非指针->	指针6.结构体成员的访问方式练习:1.初始化并输出时间结构体的信息2.初始化并输出书本结构体的信息3.从终端输入书本的信息,并且输出7.结构体数组练习:1.2本书的名称等信息,然后按照每行一本书的信息输出2.建立包含2个学生信息的登记表,其中包括学号,姓名,性别,住址和3门成绩8.结构体指针变量1)指向结构体变量的指针int *p;struct stu *p;9.结构体的嵌套和指针成员1)结构体中嵌套结构体2)结构体中的成员为一个指针变量10.结构体和函数1)思考:结构体在函数传递时是否会和数组一样进行地址传递2)结构体的参数传递方式,值传递和地址传递练习:0.实现一个函数,作用为输入某个学生的学生信息scanf("%d", &s->id);1.实现一个函数,作用为输出某个学生的学生信息2.实现一个函数,作用为遍历所有的学生信息11.结构体的大小和内存对齐1)思考:为什么会出现相同机构体,大小不同的情况2)原因:大致可以分为2点1>平台原因(移植):不是所有的硬件平台都能访问任意地址上的任意数据2>性能原因:经过内存对齐后,cpu的内存访问速度大大提升3)对齐方式 1>和编译器有关,一般32位系统默认以4个字节方式对齐2>本系统以结构体中最大元素的类型进行对齐
===========================
联合体ip协议192.168.1.1fe80::72cd:60ff:fe38:308%en0union{struct ipv4{//...};struct ipv6{//...};};	1.什么是联合体 union1)共享存储空间2)同时只能使用某一种数据类型charint double2.作用1)当多个数据需要共享内存或者多个数据每次只取其一时,可以利用联合体	3.联合体的定义//和结构体操作一致4.联合体成员声明5.联合体类型变量6.联合体大小7.联合体成员输入和输出
===========================
枚举enum size{S,M,L}S = 0M = 1L = 21.什么是枚举 enum所谓枚举是指将变量的值一一列举出来,变量只限于列举出来的值的范围内取值。 2.枚举的作用关心的不是它的值的大小,而是其表示的状态3.枚举变量的声明4.枚举变量的初始化和输入输出5.枚举的本质1)用标识符表示的整数常量集合2)枚举元素不是变量,而是常量,因此枚举元素又称为枚举常量。因为是常量,所以不能对枚举元素进行赋值。 3)枚举元素作为常量,它们是有值的,C 语言在编译时按定义的顺序使它们的值为,1,2,…。 练习:1.定义一个表示衣服码数的枚举集合2.让用户选择码数,然后输出该码数6.使用枚举需要注意的地方1)在一个程序中不允许出现同名的枚举类型2)在一个程序中不允许出现同名的枚举常量
===========================

  

 字符串总结:

知识点:1.字符和字符处理函数2.字符串的本质和字符串输入输出函数3.字符串转换函数4.常用字符串处理函数5.字符串查找函数6.字符串分割函数7.字符串替换8.常用字符串处理函数实现9.sscanf函数
=================================
字符和字符处理1.复习ascii码'0'~'9'		'a'~'z'		'A'~'Z'48		 97		 652.字符的本质	思考:sizeof(char) 和sizeof('a')1)字符的本质为一个int类型的ascii码2)字符变量保存的是ascii码,但是ascii码只需要一个字节即可保存3.使用字符判断函数isdigit	数字字符isalpha	字母(大小写)isalnum	数字字符和字母islower	小写字母isupper	大写字母isspace	空格字符0 --表示测试不成立1 --表示测试成立练习:1.用户输入一个字符串,统计其中数字,字母,空格的个数	2.分别统计出大小写字母的个数4.使用字符转换函数tolower	大写转换为小写int	tolower(int c)toupper	小写转换为大写int 	toupper(int c)练习:	1.将用户输入的字符串中的大写字母转换为小写字母 2.将用户输入的字符串中的数字 小写字母全部转换为*号3.将用户输入的字符串中的其他字符转换为?号其他字符不包括数字,字母,空格Hell+ worldHell? world
=================================
字符串  char s1[100] = "hello world";char *s2 = "hello world";0.字符串不以字符数组引用时为一个常量//栈char str[] = "hello";char str[12] = {'h', 'e','l','l', 'o','\0'};char str[100];//只读数据段   char *p = "hello world";printf("%s", str);  string  scanf("%s");		不包含空格的输入scanf("%[^\n]"); 	包含空格的输入printf("hello world");char  str[] = "hello world"char str[] = {'h','e','l','o','\0'};1.字符串的本质1)字符串本质为字符串常量"hello world"2.思考:sizeof('A')和sizeof("A")字符常量按照4个字节处理字符串常量为了节省内存空间,字符串中的所有字符均以char类型处理3.回忆char *str和char str[]区别NSString	NSMutableString
=================================
字符串的输入输出1.字符串的输入和输出0)字符串输入输出函数1>回忆scanf获取字符串scanf("%s");2>如何获取带空格的字符串%[^\n]3>puts		string4>字符串输出puts函数会在字符串输出后添加换行符号printf("%s\n", str);1)字符串的输入与溢出问题思考:字符数组在输入时候的长度问题2)解决方法fgets用法:fgets(buf, 100, stdin);从标准输入获取指定长度的字符串,包含字符串结束符
=================================
字符串转换函数		100 + 200需求:现在用户输入一个算术表达式,要求得到对应的结果思考:如何将字符串中的字符数字转换为真实的数字1.字符串转换函数1)atol和atoi和atof函数atof返回double2)实现atoi函数(支持正负数)示例:实现个位数的负数转换练习:实现n位数的的正负数转换3)strtol函数  1010  0x123456字符串中不能出现和当前进制相悖的数据1>atoi的增强版	2, 8, 10, 162>函数说明:将指定字符串按照base的进制方式转换为10进制base范围为2~36====================================
字符串常用函数需求:用户需要知道输入的字符数的长度1.字符串长度计算函数1)strlen函数使用  "hello world"while (str[i] != '\0'){cnt++;i++;}2)思考:strlen和sizeof的区别	3)思考:strlen长度的大小需求:用户需要我们在软件中实现选中字符的复制功能2.字符串拷贝函数strcpy	会将src内的所有内容拷贝到dst数组中,包括\0strncpy 思考:strncpy拷贝后是否会包含结束符练习:实现一个字符串拷贝模块需求:用户需要在软件中实现一个字符串的查找功能3.单个字符的查找strchr    查找字符第一次出现的地址		strrchr   查找字符最后一次出现的地址练习:    输入一个字符串,再输入一个字符查找并打印第一次出现和最后一次出现的字符并输出该字符的地址4.字符串查找到strstr,strcasestr,strnstr	需求:用户需要输入一个名字,判断该用户是否存在5.字符串比较函数strcmp,strcasecmpstrncmp,strncasecmpint strncmp(const char *s1, const char *s2, int n);1)比较顺序:s1是否和s2相同2)比较结果:0为相同,非0为不同,并且返回对应的差值思考:非0的结果表示什么3)思考:当s1比s2长度长的话会如何返回s1最后一个字符和s2结束符的差练习:0.编写一个模拟登陆程序,输入用户名和密码,判断用户名和密码是否和所设定的一致1.编写一个验证程序,判断用户输入的字符串是否以qianfeng开头需求:用户现在需要将输入的两个字符串组合成一个完整的字符串6.字符串连接strcat,strncat练习:先输入自己的姓,再输入名字,最后将连接好的名字输出需求:用户现在需要按照一定的格式分割一个字符串7.字符串分割函数  1)strtok使用1>要分割的内容2>分割符,分割标记2)如何获取下一个字符串3)注意0>不能截取字符串常量1>截取后的长度2>如果在下一次截取前截取另外一个字符串会如何练习:1.顺序输出分割后的所有字符串2.查找字符串中的最长单词,并且输出该单词需求:现在用户需要实现一个文本的查找替换功能8.单个字符替换strchr9.字符串替换strstr和strncpy联合实现hello world=====================================
常用字符串处理函数的实现1.字符处理函数的实现2.字符串处理函数的实现strlenint mystrlen(const char *str);strcpyvoid  mystrcpy(char *dst, const char *src);strchrchar *mystrchr(char *str, int c);strrchr char *mystrrchr(char *str, int c);strcmpint  mystrcmp(const char *s1, const char *s2)strcatvoid  mystrcat(char *s1, const char *s2);====================================“11:59:59”
sprintf和sscanf%[^'|']需求:用户需要将每个用户的信息按照以下格式输出1.字符串格式化函数1)sprintf使用2)printf和sprintf对比int sprintf(const char *s, const char *fmt, …)练习:1.按照以下格式输出时间年-月-日 时:分:秒	需求:用户需要将刚才的用户信息重新解析为单个的属性2.字符串格式化读取函数1)sscanf使用集strtok和atoi等函数于一体2)scanf和sscanf对比
====================================超大数相加	“123” + “123” = “246”   2  = ’2‘
“123423413412374891374238476123846183474183”
“123423413412374891374238476123846183474183”

  

 位操作总结:

 

知识点:1.位运算符2.位移运算符1.将指定位设置为1
2.将指定位设置为0
3.获取指定位的内容==========================
复习二进制1.二进制转换   10--> /2  取余数   10102.原码,反码,补码-1        0xffffffff   %d	%#x	%#o3.二进制高位和低位0000 00014.二进制输出函数1010
==========================
位操作1.什么是位操作位操作是程序设计当中对位模式按位或二进制数的一元和二元操作. 在许多古老的微处理器上, 位运算比加减运算略快, 通常位运算比乘除法运算要快很多. 在现代架构中, 情况并非如此:位运算的运算速度通常与加法运算相同(仍然快于乘法运算).2.作用1)加快某些算术元素操作,例如乘法和除法使用位移效率较高2)标志位设置
==========================
位运算符		1.位运算符	<< ,   >>,   &, |, ~, ^ 1)对比逻辑运算符 &&, ||, !2.位与操作 &1)按位&运算符的运算方法按顺序,每一位进行比较,如果两位都为1,结果为1,相反为02)十六进制表示二进制4)作用:1.清空某一位2.获取某一位示例: 0&0, 1&0, 0&1, 1&1-1 & 1       练习:1.手工运算,然后程序验证:1010 1100 & 1110 0111		164—>0xa41110 1101 & 1010 0101		165->0xa5	 3.位或操作 |1)按位|运算的运算方法对应位只要一个为1,结果为1,如果都为0,结果为0练习:1.手工运算,然后程序验证:1010 1100 | 1110 0111		2391110 1101 | 1010 0101  	237&	0	10  0	01  0	1|	0	10  0	11  1	14.位取反 ~			  1)位取反运算方法所有位按位取反2)注意取反结果练习:手工运算,然后程序验证:1.~11011111    0xffffff202.~-15.位异或(xor) ^	1)运算方法对应位不同为1,相同为0^	0	10	0	11	1	0练习:手工运算,然后程序验证1. 1 ^ 1, 1 ^ 2, 1 ^ 32. -1 ^ 10两数交换的位操作版本
===========================
位移操作   2^n		|0000 0001|  1.左移运算符 << 1)运算方式高位移出位舍弃,低位补0	      示例:1111 0001 << 1练习:	手工运算,然后程序验证1.  1 << 0, 1 << 1, 1 << 2, 1 << 32.  -1 << 11 << 31|0000 0010|			|1111 1000||0000 0001|			|1111 1100|0|0000 0000|1			|1111 1110|000000 0001 >> 1    1 / 2   1%22.右移运算符 >>1)运算方式1>无符号右移		unsigned 高位补02>有符号右移		-2    2移出位舍弃,高位补符号位练习:手工运算,然后程序验证1.  1  >> 0,1 >> 1, 4 >> 1, 8 >> 12.  -10 >> 1-5 >> 1========================================
应用示例:1.指定位清0思考:如何设置第n位为0n  & ~(1 << num)练习:定义一个函数,作用为设置指定为0函数原型:int set0(int n, int num)2.指定位设置为1思考:如何设置第n位为1n | (1 << num)练习:定义一个函数,作用为设置指定位为1函数原型:int set1(int n, int num)3.获取某一位的值n >> num & 1
00000000思考:如何可以获取指定位的值练习:定义一个函数,作用为获取某一位的值函数原型:int get_bits(int n, int num)4.二进制转换函数思考:如何利用位操作可以获取到一个数的二进制函数原型:void binshow(unsigned int n, int size)		     
=========================================
扩展1.如何循环左移或者右移int的所有位	1 2 3 4 55 1 2 3 4      unsigned1010010110102.利用位操作实现简单的加密解密功能^

  

转载于:https://www.cnblogs.com/firstrate/p/3583243.html

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

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

相关文章

什么是Tomcat?

如今&#xff0c;基于Web的应用越来越多&#xff0c;传统的Html已经满足不了如今的需求。我们需要一个交互式的Web&#xff0c;于是便诞生了各种Web语言。如Asp&#xff0c;Jsp&#xff0c;Php等。当然&#xff0c;这些语言与传统的语言有着密切的联系&#xff0c;如Php基于C和…

react学习(72)--row上面加样式

<Row><Col><Buttonstyle{{marginTop: 24px,marginBottom: 24px,float: right,marginRight: 24px,}}type"primary"onClick{this.addApply}>新增申请</Button></Col></Row>

禁止摄像机跟随`Actor`旋转 Learn Unreal Engine (with C++)

禁止摄像机跟随Actor旋转 Learn Unreal Engine (with C) SpaceshipBattle fanxingin/UE4项目 - 码云 - 开源中国 (gitee.com) 如果直接将摄像机绑定在根组件上,在根组件旋转时,摄像机也会跟着旋转 那么如何让摄像机不跟随根组件旋转,只跟着根组件移动 禁止摄像机跟随根组件…

大脑可以自动修复酗酒造成的脑细胞损坏

英国路透社报道&#xff0c;国际科研小组研究发现&#xff0c; 过量饮酒会损坏大脑细胞&#xff0c;而大脑本身可以修复一些损坏。但他们警告酗酒者应该尽快清醒&#xff0c;因为持续大量饮酒的时间越长&#xff0c;大脑对损坏的修复能力越弱。“这项研究传达给酗酒者的主要信息…

邮件发送---在.net2003和2005中

smtpClient发邮件错误&#xff1a;不允许使用邮箱名称。 服务器响应为: You are not authorized to send mail, authentication is required 使用smtpClient发送邮件时&#xff0c;经常跑出难以明白的错误。其实主要都和我们申请的免费邮箱有关系。有些邮箱不支持&#xff0c;…

开发人员如何成为架构师

很多架构师都是从好的开发人员逐步过渡而来的&#xff0c;但并非每个好的开发人员都希望成为架构师&#xff0c;而且他们并不是都适合做架构师。无论您是打算进行职业转型的开发人员&#xff0c;还是寻找能承担体系结构设计责任的合适人选的经理&#xff0c;都务必对此转型过程…

WSL2 安装中文输入法教程 简单有效

很多教程我都参考过 大多有问题 只有这个简单明了实用 WSL2安装中文输入法教程 https://monkeywie.cn/2021/09/26/wsl2-gui-idea-config/

VB2005.Net 环境下使用Jmail组件发送邮件

配置环境&#xff1a;.Net Framework 2.0 测试版2&#xff0c;w3Jmail4.4&#xff0c;Windows XP (sp2) 使用过程:1.首先安装jmail4.4 2.找到jmail.dll&#xff08;安装目录下&#xff09;copy 到D:/Microsoft Visual Studio 8/SDK/v2.0/Bin 目录下 3.假设你把Visual Basic …

好片与烂片

短短的几天&#xff0c; 就看到这么多的留言&#xff0c; 其实是有点喜出望外的&#xff0c;因为&#xff0c; 我在上传这些文字的时候&#xff0c; 是怀着一种惴惴然和惶恐的心情的&#xff0c;因为&#xff0c; 我不知道我的“谬论”是否可以登上大雅之堂&#xff0c;是否能…

react学习(73)--子组件this

componentDidMount() {console.log(this.props, props);console.log(this, this);this.props.onRef && this.props.onRef(this);}

C++ 17 inline static 实现单例模式

C 17 inline 内联定义静态变量 正在学习C20新标准,突然看到C17拓展inline变量,突然想到可不可以在类内部直接初始化静态变量,整个单例模式呢 不需要在类外部初始化静态变量 实现懒加载,需要的时候才加载 线程安全 外部无法调用构造函数,析构函数 代码如下: /** 多线程条…

通过configSource提高web.config配置灵活性

很多时候我们会有这样的情况&#xff0c;开发环境和测试环境中的配置文件是不一样的&#xff0c;最明显的就是数据库连接串&#xff0c;这样&#xff0c;每次我们发布一个测试版本&#xff0c;都要手动去修改一下配置文件&#xff0c;是不是很麻烦的说。其实利用web.config中的…

实现分页的通用存储过程

显示指定表、视图、查询结果的第X页 对于表中主键或标识列的情况,直接从原表取数查询&#xff0c;其它情况使用临时表的方法 如果视图或查询结果中有主键,不推荐此方法 如果使用查询语句,而且查询语句使用了order by,则查询语句必须包含top 语句--感谢csdn.net邹建 --*//*--调…

React(74)--onRef在react中的使用

当在子组件中调用onRef函数时&#xff0c;正在调用从父组件传递的函数。this.props.onRef&#xff08;this&#xff09;这里的参数指向子组件本身&#xff0c;父组件接收该引用作为第一个参数&#xff1a;onRef {ref >&#xff08;this.child ref&#xff09;}然后它使用t…

CS144 lab0 笔记

CS144 lab0 笔记 下学期就学习计算机网络了,假期正好找个lab预习一下 配置 直接用 WSL2 Clion(安装在WSL2上) 做的实验,还是比用vscode方便一些的 直接fork仓库git clone …用clion打开,他都会自动生成开始写代码 实验 writing webget(入门) 这个实验就是让你熟悉一下网络…

ASP.NET常用代码

1. 打开新的窗口并传送参数&#xff1a; 传送参数&#xff1a; response.write("<script>window.open(*.aspx?id"this.DropDownList1.SelectIndex"&id1"...")</script>")接收参数&#xff1a; string a Request.QueryString(…

一步步学习SPD2010--第二章节--处理SP网站(6)---- 探索SP网站

SP技术没有一个界面&#xff1b;你可以通过使用Web浏览器或者兼容程序如Office 应用程序&#xff0c;包括SPD。你可以选择适合你必须完成的任务的接口。然而&#xff0c;根据你选择的程序&#xff0c;你可能有SP网站的不同视图。如果你使用MS Word&#xff0c;你只看到了网站和…

江民公司网络版问题汇总三

客户端和主控连接问题 登录江民控制台时&#xff0c;查找主机IP地址时查找不到&#xff0c;下面的客户端也查找不到主控的IP地址。<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />1&#xff0e; 如果您的主控机器是XP 或者2003…