C语言记录汇总
体会
1>. 在写程序时注意"无符号类型"的使用, 各种类型边界值的情况.
如:
a> 当某个数据不可能为负数时我们一定要考虑用以下类型:
unsigned char, unsigned int, uint32_t, size_t, uint64_t, unsignedlong int,
b> 当有些数据你不知道是正负时一定不要用"a>"中的类型,不然他永远也不可能为负.
c> 数据的边界值要多注意, 如:
uint32_t a,b, c;
uint64_t m;
m = a * b + c;
在该运算中可能出现错误, "a*b"的类型可能超过uint32_t的最大值,这时一定不要忘了类型转换.
m = ((uint64_t)a) * b + c;
2>. 在适当的时候要会自我定义数据类型.
我们都知道linuxC开发中的常见扩展数据类型的定义有:uint8_t, uint16_t, uint32_t, uint64_t, size_t,ssize_t, off_t .... 他之所以要自己定义出数据类型是有道理的, 如: typdef unsigned intuint32_t; 表示uint32_t为32位无符号类型数据, 其实size_t也是32位无符号数据类型,为什么不直接写"unsigned int"呢?
为了程序的可扩展性, 假如将来我们需要的数据大小变成了64bit时,我们只需要将typedef long longsize_t就可以了, 不然我们可要修改好多好多的地方了.这种设计我们同样可以应用到自己的开发中来,当自己设计一个int类型保存某种数据时,但你又没把握将来是不是要用longint时你可以引用一个自己定义的数据类型的啊!
stdint.h
-----------------------------
typedef unsigned int uint32_t;
uint32_t.c
-----------------------------
- #include <stdio.h>
- #if 0
- #include<stdint.h> // uint32_t
- #endif
- typedef unsigned int uint32_t;
- typedef unsigned long long uint64_t;
- int main()
- {
- uint32_t a;
- a = 12;
- printf("a = %x\n", a);
- printf("sizeof(a) = %d\n", sizeof(a));
- uint64_t b;
- b = 12;
- printf("b = %x\n", b);
- printf("sizeof(b) = %d\n", sizeof(b));
- }
- a = c
- sizeof(a) = 4
- b = c
- sizeof(b) = 8
- int main()
- {
- unsigned __int64 a ;
- printf("请输入a:");
- scanf("%I64u",&a);
- printf("a = %I64u\n",a);
- a = (unsigned __int64)1 << 60;
- printf("a = %I64u\n",a);
- a = 1 << 60;//由于没有转换类型,1移位造成越界变成了0
- printf("a = %I64u\n",a);
- return 0;
- }
- #include<stdio.h>
- int main()
- {
- unsigned long long a = (unsigned long long)1 << 63;
- printf("%llu\n",a);
- return 0;
- }
树的双亲表示法
由于树中的每个结点都有唯一的一个双亲结点,所以可用一组连续的存储空间(一维数组)存储树中的各个结点,数组中的一个元素表示树中的一个结点,每个结点含两个域,数据域存放结点本身信息,双亲域指示本结点的双亲结点在数组中位置。
C语言代码实现:
#include<stdio.h>
#include<stdlib.h>
#define MAX_SIZE 20
typedef char ElemType;
typedef struct Snode //结点结构
{
ElemType data;
int parent;
}PNode;
typedef struct //树结构
{
PNode tnode[MAX_SIZE];
int n; //结点个数
}Ptree;
void InitPNode(Ptree &tree)
{
int i,j;
char ch;
printf("请输入结点个数:\n");
scanf("%d",&(tree.n));
printf("请输入结点的序及值其双亲序号:\n");
for(i=0; i<tree.n; i++)
{
fflush(stdin);
scanf("%c,%d",&ch,&j);
tree.tnode[i].data = ch;
tree.tnode[i].parent = j;
}
tree.tnode[0].parent = -1;
}
void FindParent(Ptree &tree)
{
int i;
printf("请输入要查询的结点的序号\n");
scanf("%d",&i);
printf(" %c 的父亲结点序号为 %d\n",tree.tnode[i].data,tree.tnode[i].parent);
}
int main()
{
Ptree tree;
InitPNode(tree);
while(1) //测试
FindParent(tree);
return 0;
}
测试结果:
C语言记录汇总的更多相关文章
- Go语言语法汇总(转)
Go语言语法汇总 分类: 技术2013-09-16 14:21 3007人阅读 评论(0) 收藏 举报 go语言golang并发语法 目录(?)[+] 最近看了看GoLang,把Go语言的语法 ...
- 12天学好C语言——记录我的C语言学习之路(Day 12)
12天学好C语言--记录我的C语言学习之路 Day 12: 进入最后一天的学习,用这样一个程序来综合考量指针和字符串的关系,写完这个程序,你对字符串和指针的理解应该就不错了. //输入一个字符串,内有 ...
- 12天学好C语言——记录我的C语言学习之路(Day 11)
12天学好C语言--记录我的C语言学习之路 Day 11: 因为指针部分比较的难,所以我们花费的时间也是最长的,希望大家耐的住性子,多多理解,多多打代码.好了,废话不多说,来看第11天的学习. //编 ...
- 12天学好C语言——记录我的C语言学习之路(Day 10)
12天学好C语言--记录我的C语言学习之路 Day 10: 接着昨天的指针部分学习,有这么一个题目: //还是四个学生,四门成绩,只要有学生一门功课没及格就输出这个学生的所有成绩 /*//progra ...
- 12天学好C语言——记录我的C语言学习之路(Day 9)
12天学好C语言--记录我的C语言学习之路 Day 9: 函数部分告一段落,但是我们并不是把函数完全放下,因为函数无处不在,我们今后的程序仍然会大量运用到函数 //转入指针部分的学习,了解指针是什么 ...
- 12天学好C语言——记录我的C语言学习之路(Day 8)
12天学好C语言--记录我的C语言学习之路 Day 8: 从今天开始,我们获得了C语言中很有力的一个工具,那就是函数.函数的魅力不仅于此,一个程序到最后都是由众多函数组成的,我们一定要用好函数,用熟练 ...
- 12天学好C语言——记录我的C语言学习之路(Day 7)
12天学好C语言--记录我的C语言学习之路 Day 7: 昨天进行了一天的数组学习,今天大家可以先写几个昨天的程序热热身,回顾回顾,然后今天第一个新程序也是关于数组的,比较难,准备好就开始啦! //输 ...
- 12天学好C语言——记录我的C语言学习之路(Day 6)
12天学好C语言--记录我的C语言学习之路 Day 6: 今天,我们要开始学习数组了. //①数组部分,数组的大小不能够动态定义.如下: //int n; scanf("%d,& ...
- 12天学好C语言——记录我的C语言学习之路(Day 5)
12天学好C语言--记录我的C语言学习之路 Day 5: 第五天的学习开始了,今天我们主要对几个程序进行编写,让自己充分的熟练编程语言,大量的题目会让自己变的精炼.以一个程序(program 5.1) ...
随机推荐
- React组件中的key
React组件中的key 一.key的作用 react中的key属性,它是一个特殊的属性,它是出现不是给开发者用的(例如你为一个组件设置key之后不能获取组件的这个key props),而是给reac ...
- 【紫书】Urban Elevations UVA - 221 离散化
题意:给你俯视图,要求依次输出正视图中可以看到的建筑物 题解:任意相邻的x间属性相同,所以离散化. 坑:unique只能对数组用.下标易错 list不能找某元素的next.用了个很麻烦的处理 数组: ...
- confd
1.下载安装confd ]# wget https://github.com/kelseyhightower/confd/releases/download/v0.15.0/confd-0.15.0- ...
- 8 queen暴力解决法
很容易看出来,在每一行和每一列上有且只能有一个皇后,因此较为复杂的判断就是对角线了.维基百科的页面上有一个非常暴力但是写起来非常简单的解法: 1 2 3 4 5 6 7 8 from itertool ...
- 转:Redis 3.2.1集群搭建
Redis 3.2.1集群搭建 一.概述 Redis3.0版本之后支持Cluster. 1.1.redis cluster的现状 目前redis支持的cluster特性: 1):节点自动发现 2) ...
- 内部排序->插入排序->直接插入排序
文字描述: 将一个记录插入到已排好序的有序表中,从而得到一个新的.记录数增1的有序表 示意图: 算法分析: 时间复杂度为n*n,辅助存储为1,是稳定的排序方法. 代码实现: #include < ...
- 2018/05/02 每日一学Linux 之 .bash_profile和.bashrc的区别
最近一直在学习其他,导致博客就疏忽了,很不好(其实就是自己懒了......). -- 为什么要使用 .bash_profile和.bashrc ? 在平常的使用中,有些文件夹或者命令很长,在执行时需要 ...
- HashMap如何解决取Value值为Null
场景: 用HashMap方法时候,取Keys时候自认为敲的肯定是准确无误,然后能得到对应的Values 值. 但写脚本代码时候不好习惯,没事总喜欢敲个空格建,导致取Keys之后多空格. Featur ...
- SSLv3存在严重设计缺陷漏洞(CVE-2014-3566)
SSLv3存在严重设计缺陷漏洞(CVE-2014-3566) 1.引发问题的原因 SSLv3漏洞(CVE-2014-3566),该漏洞贯穿于所有的SSLv3版本中,利用该漏洞,黑客可以通过中间人攻击等 ...
- CentOS 下安装 Node.js 8.11.3 LTS Version
Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google Chrome V8 JavaScript引擎,简单说是运行在服务端的 JavaScript.下面我们来演示一下Cen ...