c语言是一种结构化语言。它层次清晰,便于按模块化方式组织程序,易于调试和维护。c语言的表现能力和处理能力极强。它不仅具有丰富的运算符和数据类型,便于实现各类复杂的数据结构。它还可以直接访问内存的物理地址,进行位(bit)一级的 *** 作。由于c语言实现了对硬件的编程 *** 作,因此c语言集高级语言和低级语言的功能于一体。既可用于系统软件的开发,也适合于应用软件的开发。此外,c语言还具有效率高,可移植性强等特点。因此广泛地移植到了各类各型计算机上,从而形成了多种版本的c语言。
c源程序的结构特点
1一个c语言源程序可以由一个或多个源文件组成。
2每个源文件可由一个或多个函数组成。
3一个源程序不论由多少个文件组成,都有一个且只能有一个main函数,即主函数。
4源程序中可以有预处理命令(include
命令仅为其中的一种),预处理命令通常应放在源文件或源程序的最前面。
5每一个说明,每一个语句都必须以分号结尾。但预处理命令,函数头和花括号“}”之后不能加分号。
6标识符,关键字之间必须至少加一个空格以示间隔。若已有明显的间隔符,也可不再加空格来间隔。
书写程序时应遵循的规则
从书写清晰,便于阅读,理解,维护的角度出发,在书写程序时
应遵循以下规则:
1一个说明或一个语句占一行。
2用{}
括起来的部分,通常表示了程序的某一层次结构。{}一般与该结构语句的第一个字母对齐,并单独占一行。
3低一层次的语句或说明可比高一层次的语句或说明缩进若干格后书写。以便看起来更加清晰,增加程序的可读性。在编程时应力求遵循这些规则,以养成良好的编程风格。
/ 二叉树应用 /#include "stdioh"
#include "stdlibh"typedef char ElemType; / 结点数据的类型 /
typedef struct BiTNode{
ElemType data;
struct BiTNode lchild,rchild;
}BiTNode; / 树结点类型 //栈的定义及基本 *** 作/
#define MaxSize 100
typedef BiTNode SElemType; / 栈和队列的结点类型,用于存放树结点 /
typedef struct {
SElemType elem[MaxSize];
int top;
}SqStack; / 栈 /void InitStack(SqStack pS) / 初始化栈,开始时栈为空 /
{
pS->top=0; / top指向栈顶的上一个元素 /
}int Push(SqStack pS,SElemType e) / 进栈 /
{
if (pS->top==MaxSize-1) / 栈满 /
return 0; pS->elem[pS->top]=e;
pS->top=pS->top+1;
return 1;
}int Pop(SqStack pS,SElemType pe) / 出栈 /
{
if (pS->top==0) / 栈空 /
return 0; pS->top = pS->top - 1;
pe = pS->elem[pS->top];
return 1;
}/队列(循环队列)的定义及基本 *** 作/typedef struct {
SElemType elem[MaxSize];
int front,rear;
}SqQueue; / 队列 /void InitQueue(SqQueue pQ) / 初始化队列,开始时队列为空 /
{
pQ->front=pQ->rear=0;
}int EnQueue(SqQueue pQ,SElemType e) / 进队 /
{
if ((pQ->rear+1)%MaxSize == pQ->front) / 队满 /
return 0;
pQ->elem[pQ->rear] = e;
pQ->rear = (pQ->rear+1)%MaxSize;
return 1;
}int DeQueue(SqQueue pQ,SElemType pe) / 出队 /
{
if (pQ->rear == pQ->front) / 队空 /
return 0;
pe = pQ->elem[pQ->front];
pQ->front = (pQ->front+1)%MaxSize;
return 1;
}
/ 先根遍历 /
void preorder(BiTNode bt)
{ if(bt!=NULL)
{ printf("%c ",bt->data);
preorder(bt->lchild);
preorder(bt->rchild);
}
} / 中根遍历 /
void inorder(BiTNode bt)
{ if(bt!=NULL)
{ inorder(bt->lchild);
printf("%c ",bt->data);
inorder(bt->rchild);
}
}
/ 后根遍历 /
void postorder(BiTNode bt)
{ if(bt!=NULL)
{ postorder(bt->lchild);
postorder(bt->rchild);
printf("%c ",bt->data);
}
}/ 非递归算法的中根遍历(后进先出,用了栈的思想) /
void inorder_fdg(BiTNode bt)
{
BiTNode p;
SqStack s;
InitStack(&s);
p=bt;
do
{ while(p!=NULL)
{ Push(&s,p);
p=p->lchild;
}
if(stop!=0)
{ Pop(&s,&p);
printf("%c ",p->data);
p=p->rchild;
}
}while(stop!=0||p!=NULL);
}/ 用队列实现层次遍历 /
void lev_traverse(BiTNode bt)
{
SqQueue q;
BiTNode p;
p=bt;
InitQueue(&q);
EnQueue(&q,p);
while(!(qrear==qfront)) { / 当队列不空 /
DeQueue(&q,&p);
printf("%c ",p->data); if(p->lchild!=NULL)
EnQueue(&q,p->lchild); if(p->rchild!=NULL)
EnQueue(&q,p->rchild);
}
}
/ 利用先根序列建立二叉树,空的子树也要输入,用空格表示,建立的树通过函数返回,避免使用指针的指针 /
BiTNode crt_bt_pre()
{ char ch;
BiTNode bt;
scanf("%c",&ch); if(ch==' ') bt=NULL;
else
{ bt=(BiTNode )malloc(sizeof(BiTNode));
bt->data=ch;
bt->lchild=crt_bt_pre();
bt->rchild=crt_bt_pre();
}
return(bt);
}/ 利用先根序列建立二叉树,空的子树也要输入,用空格表示,建立的树通过参数返回,注意和上述方法比较,想想还有什么办法? /
void crt_bt_pre_2(BiTNode bt)
{ char ch;
scanf("%c",&ch); if(ch==' ') (bt)=NULL;
else
{ (bt)=(BiTNode )malloc(sizeof(BiTNode));
(bt)->data=ch;
crt_bt_pre_2(&(bt)->lchild);
crt_bt_pre_2(&(bt)->rchild);
}
}
/ 求叶子数 /
int leaf(BiTNode bt)
{
if (bt==NULL) return 0;
else {
if (bt->lchild==NULL&&bt->rchild==NULL) return 1;
else
return leaf(bt->lchild)+leaf(bt->rchild);
}}/ 求树的高度 /
int high(BiTNode bt)
{
if (bt==NULL) return 0;
else {
return max(high(bt->lchild),high(bt->rchild))+1;
}}
/ 二叉树的释放/
void freetree(BiTNode bt)
{ if(bt!=NULL)
{ freetree(bt->lchild);
freetree(bt->rchild);
free(bt);
bt=NULL;
}
}main()
{
BiTNode T,temp[20]; / 笨方法建立二叉树 /
/ temp[0]=(BiTNode)malloc(sizeof(BiTNode));
temp[0]->data = '-'; temp[1]=(BiTNode)malloc(sizeof(BiTNode));
temp[1]->data = '+';
temp[0]->lchild = temp[1]; temp[2]=(BiTNode)malloc(sizeof(BiTNode));
temp[2]->data = '/';
temp[0]->rchild = temp[2]; temp[3]=(BiTNode)malloc(sizeof(BiTNode));
temp[3]->data = 'a';
temp[3]->lchild=NULL; temp[3]->rchild=NULL;
temp[1]->lchild = temp[3]; temp[4]=(BiTNode)malloc(sizeof(BiTNode));
temp[4]->data = '';
temp[1]->rchild = temp[4]; temp[5]=(BiTNode)malloc(sizeof(BiTNode));
temp[5]->data = 'e';
temp[5]->lchild=NULL; temp[5]->rchild=NULL;
temp[2]->lchild = temp[5]; temp[6]=(BiTNode)malloc(sizeof(BiTNode));
temp[6]->data = 'f';
temp[6]->lchild=NULL; temp[6]->rchild=NULL;
temp[2]->rchild = temp[6]; temp[7]=(BiTNode)malloc(sizeof(BiTNode));
temp[7]->data = 'b';
temp[7]->lchild=NULL; temp[7]->rchild=NULL;
temp[4]->lchild = temp[7]; temp[8]=(BiTNode)malloc(sizeof(BiTNode));
temp[8]->data = '-';
temp[4]->rchild = temp[8]; temp[9]=(BiTNode)malloc(sizeof(BiTNode));
temp[9]->data = 'c';
temp[9]->lchild=NULL; temp[9]->rchild=NULL;
temp[8]->lchild = temp[9]; temp[10]=(BiTNode)malloc(sizeof(BiTNode));
temp[10]->data = 'd';
temp[10]->lchild=NULL; temp[10]->rchild=NULL;
temp[8]->rchild = temp[10]; T=temp[0]; /
/输出树和各种遍历、叶子数、树的高度/
/printf("\ntree:\n");
printf(" -\n");
printf(" + /\n");
printf(" a e f\n");
printf("0 0b - 0 00 0\n");
printf(" 0 0c d\n"); printf("\n\nPreOrder:\n");
preorder(T); printf("\nInOrder:\n");
inorder(T); printf("\nPostOrder:\n");
postorder(T); printf("\ninorder_fdg:\n");
inorder_fdg(T); printf("\nlev_traverse:\n");
lev_traverse(T);
printf("\nleaf num:%d",leaf(T));
printf("\nTree high:%d",high(T));
freetree(T); / / 按先序列建树,用空格表示空子树/ printf("\n\nplease input inorder:such as 'abc de g f '\n");
/T = crt_bt_pre();/
crt_bt_pre_2(&T); printf("\n\nPreOrder:\n");
preorder(T); printf("\nInOrder:\n");
inorder(T); printf("\nPostOrder:\n");
postorder(T); printf("\ninorder_fdg:\n");
inorder_fdg(T); printf("\nlev_traverse:\n");
lev_traverse(T);
printf("\nleaf num:%d",leaf(T));
printf("\nTree high:%d",high(T));
freetree(T);
getch();
}
/则正确的switch语句是-----这句看不懂。
float x=15;
int a=1,b=3,c=2;//则正确的switch语句是
switch(a+b) //如果A+B的值为1执行case1 3时执行case3,如果不是1或者3就跳出SWITCH
{ case1:
printf(''\n");
case2+1: //case 3:
printf(''\n'');
}
第一章 程序设计的基本概念
第一节 C语言的发展历史与特点
第二节 程序与程序设计
第三节 算法与算法的描述
第四节 C语言的上机 *** 作
思考题与习题
第二章 C语言程序设计基础
第一节 C语言的程序结构
第二节 数据类型
第三节 运算符与表达式
思考题与习题
第三章 C程序控制结构
第一节 C程序的三种基本控制结构
第二节 顺序结构
第三节 选择结构
第四节 循环结构
思考题与习题
第四章 数组
第一节 数组与数组元素的概念
第二节 一维数组
第三节 二维数组及多维数组
第四节 字符串与字符数组
思考题与习题
第五章 指针
第一节 指针与指针变量的概念
第二节 指针变量的定义和引用
第三节 指针变量与数组
思考题与习题
第六章 函数
第一节 函数的定义
第二节 函数的嵌套调用
第三节 数组作为函数参数
第四节 指针与函数
第五节 变量的使用范围与存储类别
第六节 不同文件中的函数使用
思考题与习题
第七章 编译预处理
第一节 宏定义
第二节 文件包含
第三节 条件编译
思考题与题
第八章 结构体与共用体
第一节 结构体基础
第二节 结构体数组
第三节 结构体指针
第四节 链表
第五节 位段
第六节 共用体
第七节 枚举类型与自定义类型
思考题与习题
第九章 文件
第一节 文件概述
第二节 文件的打开与关闭
第三节 文件的读/写
第四节 文件的定位
思考题与习题
第十章 程序设计方法
第一节 程序设计的基本概念
第二节 结构化程序设计方法
第三节 程序效率
第四节 程序设计风格
思考题与习题
附录
附录A C语言实验
附录B 标准ABSII码表
附录C C语言中的关键字
附录D 运算符的优先级与结合性
以上就是关于C语言中结构化的程序设计是什么全部的内容,包括:C语言中结构化的程序设计是什么、C语言版数据结构程序设计、c语言 选择结构程序设计等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)