本文目錄一覽:
C語言可以實現什麼?
1.2 C 語言的特點
C 語言發展如此迅速, 而且成為最受歡迎的語言之一, 主要因為它具有強大的
功能。許多著名的系統軟體, 如DBASE Ⅲ PLUS、DBASE Ⅳ 都是由C 語言編寫的。
用C 語言加上一些彙編語言子程序, 就更能顯示C 語言的優勢了, 象PC- DOS 、
WORDSTAR等就是用這種方法編寫的。歸納起來C 語言具有下列特點:
1. C是中級語言
它把高級語言的基本結構和語句與低級語言的實用性結合起來。C 語言可以象
彙編語言一樣對位、位元組和地址進行操作, 而這三者是計算機最基本的工作單元。
2. C是結構式語言
結構式語言的顯著特點是代碼及數據的分隔化, 即程序的各個部分除了必要的
信息交流外彼此獨立。這種結構化方式可使程序層次清晰, 便於使用、維護以及調
試。C 語言是以函數形式提供給用戶的, 這些函數可方便的調用, 並具有多種循
環、條件語句控制程序流向, 從而使程序完全結構化。
3. C語言功能齊全
C 語言具有各種各樣的數據類型, 並引入了指針概念, 可使程序效率更高。另
外C 語言也具有強大的圖形功能, 支持多種顯示器和驅動器。而且計算功能、邏輯
判斷功能也比較強大, 可以實現決策目的。
4. C語言適用範圍大
C 語言還有一個突出的優點就是適合於多種操作系統, 如DOS、UNIX,也適用於
多種機型。
C語言編程實現
#includestdio.h
#includestdlib.h
int
main(){
int
a=0;
int
b=0;
long
result=0;
printf(“請輸入兩個數整數a,b:”);
scanf(“%d%d”,a,b);
result=a*a+b*b;
if(result500)
{ printf(“a2+b2500,它的百位以上的值為:%d.”,result/100);
}else
printf(“a2+b2的結果小於500,其值是:%d.”,result);
return
0;}
c語言的實現
#includestdio.h
#includemalloc.h
#define NULL 0
struct node
{
int data;
struct node *next;
};
struct node *head,*head_a;
struct node *create()
{
struct node *tail, *p;
int x;
head=tail=NULL;
printf(“\n請輸入一個整數:\n”);
scanf(“%d”,x);
while(x!=0)
{
p=(struct node *)malloc(sizeof(struct node));
p-data=x;
p-next=NULL;
if(head==NULL)
head=tail=p;
else
{
tail-next=p;
tail=p;
}
printf(“\n請輸入一個整數:\n”);
scanf(“%d”,x);
}
return(head);
}
struct node *unite(struct node *a,struct node *b)
{
struct node *ha;
ha=head_a;
while(ha-next!=NULL)
ha=ha-next;
ha-next=head;
return(a);
}
void sortf()
{
struct node *p;
int temp;
L: p=head_a;
p=head_a;
while(p-next!=NULL)
{
if(p-datap-next-data)
{
temp=p-data;
p-data=p-next-data;
p-next-data=temp;
}
p=p-next;
}
p=head_a;
while(p-next!=NULL)
{
if(p-datap-next-data)
{
goto L;
}
p=p-next;
}
// return(a);
}
void main()
{
struct node *A,*B,*C,*LA;
printf(“\n請輸鏈表A的值,以0結束:\n”);
LA=head_a=A=create();
printf(“\n請輸鏈表B的值,以0結束:\n”);
B=create();
/////////////////////////////
printf(“\n鏈表A的值:\n”);
while(LA!=NULL)
{
printf(“%d\t”,LA-data);
LA=LA-next;
}
C=unite(A,B);
printf(“\n鏈表B的值:\n”);
printf(“\n”);
while(B!=NULL)
{
printf(“%d\t”,B-data);
B=B-next;
}
printf(“\n鏈表C的值:\n”);
printf(“\n”);
LA=head_a;
while(LA!=NULL)
{
printf(“%d\t”,LA-data);
LA=LA-next;
}
printf(“\n”);
printf(“\n經過排序後鏈表C的值:\n”);
printf(“\n”);
sortf();
LA=head_a;
while(LA!=NULL)
{
printf(“%d\t”,LA-data);
LA=LA-next;
}
printf(“\n”);
}
幾經波折才算搞清楚..弄出來了!!!!!!!!!!!!!!!
數據結構如何通過C語言來實現,請舉例說明,儘可能詳細
數據的結構無非就是表:線性表、鏈表,棧,隊列,串,數組,樹、二叉樹,圖,這幾種。
常用的使用指針,或數組建立數據結構,然後對其進行插入、刪除、查找、排序等操作。
以下是C語言實現的循環隊列:
#includestdio.h
#includestdlib.h
#define MAX_QSIZE 5
struct SqQueue
{ QElemType *base; // 初始化的動態分配存儲空間
int front; // 頭指針,若隊列不空,指向隊列頭元素
int rear; // 尾指針,若隊列不空,指向隊列尾元素的下一個位置
};
// bo3-4.cpp 循環隊列(存儲結構由c3-3.h定義)的基本操作(9個)
void InitQueue(SqQueue Q)
{ // 構造一個空隊列Q。在教科書第64頁
Q.base=(QElemType*)malloc(MAX_QSIZE*sizeof(QElemType));
if(!Q.base) // 存儲分配失敗
exit(OVERFLOW);
Q.front=Q.rear=0;
}
void DestroyQueue(SqQueue Q)
{ // 銷毀隊列Q,Q不再存在
if(Q.base) // 隊列Q存在
free(Q.base); // 釋放Q.base所指的存儲空間
Q.base=NULL; // Q.base不指向任何存儲單元
Q.front=Q.rear=0;
}
void ClearQueue(SqQueue Q)
{ // 將隊列Q清為空隊列
Q.front=Q.rear=0;
}
int QueueEmpty(SqQueue Q)
{ // 若隊列Q為空隊列,則返回TRUE;否則返回FALSE
if(Q.front==Q.rear) // 隊列空的標誌
return TRUE;
else
return FALSE;
}
int GetHead(SqQueue Q,QElemType e)
{ // 若隊列Q不空,則用e返回Q的隊頭元素,並返回OK;否則返回ERROR
if(Q.front==Q.rear) // 隊列空
return ERROR;
e=Q.base[Q.front]; // 將隊頭元素的值賦給e
return OK;
}
int EnQueue(SqQueue Q,QElemType e)
{ // 插入元素e為隊列Q的新的隊尾元素。在教科書第65頁
if((Q.rear+1)%MAX_QSIZE==Q.front) // 隊列滿
return ERROR;
Q.base[Q.rear]=e; // 將e插在隊尾
Q.rear=(Q.rear+1)%MAX_QSIZE; // 隊尾指針+1後對MAX_QSIZE取余
return OK;
}
int QueueLength(SqQueue Q)
{ // 返回隊列Q的元素個數,即隊列的長度。在教科書第64頁
return(Q.rear-Q.front+MAX_QSIZE)%MAX_QSIZE;
}
int DeQueue(SqQueue Q,QElemType e) // 在教科書第65頁
{ // 若隊列Q不空,則刪除Q的隊頭元素,用e返回其值,並返回OK;否則返回ERROR
if(Q.front==Q.rear) // 隊列空
return ERROR;
e=Q.base[Q.front]; // 將隊頭元素的值賦給e
Q.front=(Q.front+1)%MAX_QSIZE; // 移動隊頭指針
return OK;
}
void QueueTraverse(SqQueue Q,void(*visit)(QElemType))
{ // 從隊頭到隊尾依次對隊列Q中每個元素調用函數visit()
int i=Q.front; // i最初指向隊頭元素
while(i!=Q.rear) // i指向隊列Q中的元素
{ visit(Q.base[i]); // 對i所指元素調用函數visit()
i=(i+1)%MAX_QSIZE; // i指向下一個元素
}
printf(“\n”);
}
void main()
{
int j;
int i=0,m;
int d;
SqQueue Q;
InitQueue(Q); // 初始化隊列Q,失敗則退出
printf(“初始化隊列後,隊列空否?%u(1:空 0:否)\n”,QueueEmpty(Q));
printf(“請輸入整型隊列元素(不超過%d個),-1為提前結束符:”,MAX_QSIZE-1);
do
{ scanf(“%d”,d); // 由鍵盤輸入整型隊列元素
if(d==-1) // 輸入的是提前結束符
break; // 退出輸入數據循環
i++; // 計數器+1
EnQueue(Q,d); // 入隊輸入的元素
}while(iMAX_QSIZE-1); // 隊列元素的個數不超過允許的範圍
printf(“隊列長度為%d,”,QueueLength(Q));
printf(“現在隊列空否?%u(1:空 0:否)\n”,QueueEmpty(Q));
printf(“連續%d次由隊頭刪除元素,隊尾插入元素:\n”,MAX_QSIZE);
for(m=1;m=MAX_QSIZE;m++)
{ DeQueue(Q,d); // 刪除隊頭元素,其值賦給d
printf(“刪除的元素是%d,請輸入待插入的元素:”,d);
scanf(“%d”,d); // 輸入要入隊的元素給d
EnQueue(Q,d); // 將d入隊
}
m=QueueLength(Q); // m為隊列Q的長度
printf(“現在隊列中的元素為”);
QueueTraverse(Q,print); // 從隊頭到隊尾依次對隊列Q的每個元素調用函數print()
printf(“共向隊尾插入了%d個元素。”,i+MAX_QSIZE);
if(m-20)
printf(“現在由隊頭刪除%d個元素,”,m-2);
while(QueueLength(Q)2)
{ DeQueue(Q,d); // 刪除隊頭元素,其值賦給d
printf(“刪除的元素值為%d,”,d);
}
j=GetHead(Q,d); // 將隊頭元素賦給d
if(j) // 隊列Q不空
printf(“現在隊頭元素為%d\n”,d);
ClearQueue(Q); // 清空隊列Q
printf(“清空隊列後,隊列空否?%u(1:空 0:否)\n”,QueueEmpty(Q));
DestroyQueue(Q); // 銷毀隊列Q
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/199306.html