黑马程序员--C语言入门疑难点----进制,文件
2014-09-26 17:24
441 查看
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
关于进制转换,我觉得挺好玩的不就是几个公式了,就如我第一次所学的二进制转换为十进制,十进制转换为二进制,那样的类型其实也挺有趣的转化为十进制数,如哦我所给的一个二进制数“101101001”我就设十进制数是Z
首先有个公式可套:Z=1*X8+0*X7+1*X6+1*X5+0*X4+1*X3+0*X2+0*X1+1*X0把只是X换为2,算出来的就是你所得到的此二进制数所对应的十进制数同理:如八进制数转换为十进制数就是把X换为8,十六进制数转换十进制数把X换为16,至于二进制数转化为八进制数更有意思;首先我引进一个例子:这是一个比较特殊的二进制数:111111111111
首先把这组数按三个数划分一组(从右开始划分):如,111,111,111,111 于结果是7777然后就分别把化为各组的数组转化为是进制数,最后进把你刚才算出的数按原来的顺序排起来,于是得到的结果就是你想要的那十六进制就是把数组中的每四个划分一组(从右开始划分的)如111111111111划分结果为1111,1111,1111,
方法与上面一样,于是它的结果是ff关于十进制转化二进制,八进制和十六进制,方法都是一样的同二进制方法雷同
链表:
链表是C语言中另外一个难题。牵扯到结点,动态分配空间等等。用结构作为链表的结点是非常合适的,例如:
struct node
{
int data;
struct node *next;
}
其中next是指向自身所在结构类型的指针,这样就可以把一个个结点相连,构成链表。
链表结构的一大优势就是动态分配存储,不会像数组一样必须在定义见确定大小,造成浪费。用malloc和free函数即可实现开辟和释放存储单元。其中,malloc的参数多用于sizeof运算符计算得到。
链表的基本操作有:正反向建立链表,输出链表;删除列表中结点;在链表中插入结点等等。
typedef struct
4000
node
{
char data;
struct node *next;
}NODE;
正向建立链表
NODE *create()
{
char ch=‘a’;
NODE *p,*h=null,*q=null;
while (ch<'z')
{
p=(NODE *)mallco(sizeof(NODE));
p->data =ch;
if(h==null)
h=p;
else q->next=p;
}
q->next=null;
return h;
}
逆向建立:
NODE *create()
{
char ='a';
NODE *p=,*h=null;
while(ch<'z')
{
p=(NODE *)mallco(sizeof(NODE));
p->data=ch;
p->next=h;
h=p;
ch++;
}
return h;
}
用递归实现链表逆序输入:
void output (NODE *h)
{
if(h!=null)
{
output(h->next);
printf("%d",h->data);
}
}
插入结点:
NODE *insert(NODE *h,int x)
{
NODE *next,*current=h;
while (current !=null&&(currnet->data)(x))
{
front = current;
current=currnet->next;
}
new =(NODE *)mallco(sizeof((NODE));
new->data=x;
new->next=current;
if(current==h)
h=new;
else front->next=new;
return h;
}
关于进制转换,我觉得挺好玩的不就是几个公式了,就如我第一次所学的二进制转换为十进制,十进制转换为二进制,那样的类型其实也挺有趣的转化为十进制数,如哦我所给的一个二进制数“101101001”我就设十进制数是Z
首先有个公式可套:Z=1*X8+0*X7+1*X6+1*X5+0*X4+1*X3+0*X2+0*X1+1*X0把只是X换为2,算出来的就是你所得到的此二进制数所对应的十进制数同理:如八进制数转换为十进制数就是把X换为8,十六进制数转换十进制数把X换为16,至于二进制数转化为八进制数更有意思;首先我引进一个例子:这是一个比较特殊的二进制数:111111111111
首先把这组数按三个数划分一组(从右开始划分):如,111,111,111,111 于结果是7777然后就分别把化为各组的数组转化为是进制数,最后进把你刚才算出的数按原来的顺序排起来,于是得到的结果就是你想要的那十六进制就是把数组中的每四个划分一组(从右开始划分的)如111111111111划分结果为1111,1111,1111,
方法与上面一样,于是它的结果是ff关于十进制转化二进制,八进制和十六进制,方法都是一样的同二进制方法雷同
链表:
链表是C语言中另外一个难题。牵扯到结点,动态分配空间等等。用结构作为链表的结点是非常合适的,例如:
struct node
{
int data;
struct node *next;
}
其中next是指向自身所在结构类型的指针,这样就可以把一个个结点相连,构成链表。
链表结构的一大优势就是动态分配存储,不会像数组一样必须在定义见确定大小,造成浪费。用malloc和free函数即可实现开辟和释放存储单元。其中,malloc的参数多用于sizeof运算符计算得到。
链表的基本操作有:正反向建立链表,输出链表;删除列表中结点;在链表中插入结点等等。
typedef struct
4000
node
{
char data;
struct node *next;
}NODE;
正向建立链表
NODE *create()
{
char ch=‘a’;
NODE *p,*h=null,*q=null;
while (ch<'z')
{
p=(NODE *)mallco(sizeof(NODE));
p->data =ch;
if(h==null)
h=p;
else q->next=p;
}
q->next=null;
return h;
}
逆向建立:
NODE *create()
{
char ='a';
NODE *p=,*h=null;
while(ch<'z')
{
p=(NODE *)mallco(sizeof(NODE));
p->data=ch;
p->next=h;
h=p;
ch++;
}
return h;
}
用递归实现链表逆序输入:
void output (NODE *h)
{
if(h!=null)
{
output(h->next);
printf("%d",h->data);
}
}
插入结点:
NODE *insert(NODE *h,int x)
{
NODE *next,*current=h;
while (current !=null&&(currnet->data)(x))
{
front = current;
current=currnet->next;
}
new =(NODE *)mallco(sizeof((NODE));
new->data=x;
new->next=current;
if(current==h)
h=new;
else front->next=new;
return h;
}
相关文章推荐
- 黑马程序员 ---C语言入门疑难点---3
- 黑马程序员--C语言入门疑难点---位运算
- 黑马程序员--C语言入门疑难点--自增自减
- 黑马程序员---C语言入门疑难点---内存管理(7)
- 黑马程序员---c语言入门疑难点----指针
- 黑马程序员----c语言入门疑难点--几个经典的算法
- 黑马程序员_学习笔记8用类加载器的方式管理资源和配置文件及类加载器的总结
- 黑马程序员 C#中文件读写常用类的用法
- 黑马程序员_第四篇:一个将文件导入数据库的例子
- 黑马程序员_王康 java利用DOM4J解析XML文件
- 黑马程序员_File类代码练习(列出文件目录)
- PHP开发中最常见的文件操作疑难解答
- 黑马程序员---.NET高级之文件流FileStream操作
- 黑马程序员---文件的读写
- linux下xxd以16进制显示二进制文件内容
- 黑马程序员——txt文件导入导出
- PHP动态网站制作中关于文件操作的疑难问答
- 两个关于.NET读取EXCEL文件地疑难
- C语言入门教程——3:文件
- 读取文件以进制方式存至数据库中以及读取