當前位置:首頁 » 編程語言 » c語言中順序程序
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言中順序程序

發布時間: 2023-05-10 11:33:56

『壹』 c語言順序表的創建程序

/*
*程序不足之處:1,main函數不應該為 void main
* 2,創建空的順序表函數中 SqList L;//定義順序表L L是局部變數,

函數結束即銷毀,應該用指針代替
* 3,SqList CreateList(SqList L) //創建順序表(非空)函數中:

scanf("%d",&L.elem); L裡面的elem本來就是地址,

沒必要再加&符號,且每次輸入都一直放在首地址,

沒達到程序所要表達的意思
* 4,void print(SqList L) //輸出當前順序表 函數中:

printf("%-3d",L.elem); 和上面是一樣的道理
* 5,main函數中沒有將申請的內存釋放
*現將程序稍作修改如下,望採納
*/

#include<stdio.h>
#include<stdlib.h>
#define LIST_INIT_SIZE 100
#define Icreament 20
typedef int ElemType; //用戶自定義數據元素類型

typedef struct
{
ElemType *elem; //順序表的基地址
int length; //順序表的當前長度
int listsize; //預設空間容量
}SqList; //線性表的順序存儲結構

SqList* InitList() //創建空的順序表
{
SqList* L = (SqList*)malloc(sizeof(SqList));//定義順序表L
if(!L)
{
printf("空間劃分失敗,程序退出 ");
return NULL;
}
L->elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L->elem)
{
printf("空間劃分失敗,程序退出 ");
return NULL;
}
L->length=0;
L->listsize=LIST_INIT_SIZE;
return L;
}

int CreateList(SqList* L) //創建順序表(非空)
{
int number; //順序表中元素的個數
int i; //循環變數
printf("請輸入順序表中元素的個數:");
scanf("%d",&number);
if(number > LIST_INIT_SIZE)//一定要判斷輸入的個數是否大於順序表的最大長度
{
printf("輸入個數大於順序表的長度 ");
return 0;
}

for(i=0;i<number;i++)
{
printf("輸入第%d個數: ",i+1);
scanf("%d",L->elem+i);//L->elem+i:每次的輸入都保存在順序表元素中的下一個地址,而不是一直放在元素的首地址
}//給順序表中每個數據元素賦值
L->length=number; //當前順序表的長度
return 1;
}
void print(SqList* L) //輸出當前順序表
{
int i;
for(i=0;i<L->length;i++)
{
printf("%-3d",*(L->elem + i));//L->elem+i:和輸入是一個道理
}
printf(" ");
}
int main()
{
SqList* L = InitList();//申請一個指向順序表的指針,並對其初始化
if(!L)//判斷申請是否成功
{
printf("初始化線性表失敗 ");
return 1;
}
if(!CreateList(L))//判斷創建順序表是否成功
{
printf("創建順序表失敗 ");
return 1;
}
print(L);//列印順序表
free(L->elem);//釋放申請的順序表元素的內存
free(L);//釋放申請的順序表內存
return 0;
}

運行效果如圖:

『貳』 C語言順序查找程序

//順序查找
//思路:從表中最後一個記錄開始,逐個進行記錄的關鍵字和
//給定值的比較,若某個記錄的關鍵字和給定值比較相等,則
//返回返回記錄所在的位置,或查找完所有記錄後還沒有發現
//符合的記錄,則查找失敗。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#define N 10

typedef int DataType;//定義比較的元素類型

//靜態查找表的順序存儲結構
typedef struct{
DataType * data;//數據元素存儲空間基址,按實際長度分配,0號單元留空
//建表時按實際長度分配,0 號單元留空
int length;//表長度
}SSTable;

//創建一個靜態表,內容為20以內的隨機數
void createST(SSTable* ST,int n){
int i;
time_t t;
if(ST!=NULL){
ST->data=(DataType*)calloc(n+1,sizeof(DataType));
if(ST->data!=NULL){
srand((unsigned) time(&t));
for(i=1;i<=n;i++){
ST->data[i]=rand() ;//產生20以內的隨機數
}
ST->length=n;
}
}
}

//創建一個靜態表,內容按從小到大排列,以便折半查找
void createST_binary(SSTable* ST,int n){
int i,j=0;
time_t t;
if(ST!=NULL){
ST->data=(DataType*)calloc(n+1,sizeof(DataType));
if(ST->data!=NULL){
for(i=1;i<=n;i++){
ST->data[i]=j;
j+=4;
}
ST->length=n;
}
}
}

//列印出靜態表的內容
void print_SSTable(SSTable* ST){
int i,n=ST->length;
if(ST!=NULL){
for(i=1;i<=n;i++){
printf("%d ",ST->data[i]);
}
printf("\n");
}
}

//順序查找(Sequential Search)
//思路:從表中最後一個記錄開始,逐個進行記錄的關鍵字和
//給定值的比較,若某個記錄的關鍵字和給定值比較相等,則
//返回返回記錄所在的位置,或查找完所有記錄後還沒有發現
//符合的記錄,則查找失敗。
//查找成功:返回記錄所在位置
//查找失敗:返回0
int search_seq(SSTable ST,DataType key){
int i;
if(ST.data==NULL)return 0;
ST.data[0]=key;//設置監視哨。目的在於免去查找過程中每一步都要檢測整
//個表是否查找完畢,是一個很有效的程序設計技巧 。監視
//哨也可以設在高下標處。
for(i=ST.length;ST.data[i]!=key;i--);
return i;
}

//折半查找(Binary Search)
//當記錄的key按關系有序時可以使用折半查找
//思路:對於給定key值,逐步確定待查記錄所在區間,每次將搜索空間減少一半(折半),
//直到查找成功或失敗為止。
int search_binary(SSTable ST,DataType key){
int low,high,mid;
low=1;
high=ST.length;
while(low<=high){//當表空間存在時
mid=(low+high)/2;
if(ST.data[mid]==key){
return mid;//查找成功,返回mid
}
if(key<ST.data[mid]){
high=mid-1;//繼續在前半區間查找
}else{
low=mid+1;//繼續在後半區間查找
}
}
return 0;//查找失敗
}

//分塊查找(只記錄思想)
//分塊查找中,設記錄表長為n,將表的n個記錄分成b=n/s個塊,每個s個記錄
//最後一個記錄數可以少於s個,且表分塊有序,即後一個塊的所有key值大於
//前一個塊的所有key值
//每塊對應一個索引項,索引項記錄了該塊記錄的最大key值和該塊第一記錄的指針(或序號)
//演算法:
//(1)由索引表確定待查找記錄所在的塊;
//(2)在塊內順序查找。

int main(){
int n=20;//在20個數中查找,方便看結果,不要設置得太大
SSTable ST,ST_binary;//分別用於順序查找和折半查找的靜態表
index indtb[n+1];//索引表,用於分塊查找
createST(&ST,n);//創建一個隨機靜態表
createST_binary(&ST_binary,n);//創建一個從小到大順序排列的靜態表

//採用順序查找
printf("原始數據:");
print_SSTable(&ST);
printf("順序查找5的結果:%d\n",search_seq(ST,5));
printf("順序查找10的結果:%d\n",search_seq(ST,10));
printf("順序查找12的結果:%d\n",search_seq(ST,12));
printf("順序查找15的結果:%d\n",search_seq(ST,15));
printf("順序查找20的結果:%d\n",search_seq(ST,20));

printf("--------------------------------------------\n");
//採用折半查找
printf("原始數據:");
print_SSTable(&ST_binary);
printf("折半查找5的結果:%d\n",search_binary(ST_binary,5));
printf("折半查找10的結果:%d\n",search_binary(ST_binary,10));
printf("折半查找12的結果:%d\n",search_binary(ST_binary,12));
printf("折半查找15的結果:%d\n",search_binary(ST_binary,15));
printf("折半查找20的結果:%d\n",search_binary(ST_binary,20));

system("pause");//暫停一下,看看結果
free(ST.data);//不要忘了釋放堆空間
return 0;
}

『叄』 c語言設計順序結構程序

#include<stdio.h>
main()
{
inta,b;
scanf("%d",&a);
b=a/100+a%100/10+a%10;
printf("%d",b);
return0;
}
#include<stdio.h>
main()
{
intk,y;
doublex;
scanf("%d,%d",&y,&k);
x=(y-3)/k;
printf("%ld",x);
return0;
}
#include<stdio.h>
main()
{
charch;
printf("%c%c",ch-1,ch+1);
return0;
}

都是些基礎題型,不會可以追問。

『肆』 c語言簡單順序程序設計原理是什麼

用來描述演算法的圖形稱為流程圖,流程圖使得演算法的描述更加直觀,畫流程圖是進行程序設計的重要步驟,可以藉助流程圖理解程序的設計思路。
認識傳統流程圖的基本圖形:
⑴開始或結束框
(橢圓形框)
⑵輸入輸出框
(平行四邊形框)
⑶處理框
(矩形框)
⑷判斷框
(菱形框)
⑸流程線
⑹連接點,
你搞清這些就差不多了

『伍』 是C語言中建立順序表的程序

C語言中建立順序表的操作順序如下:

1.清空順序表:其實清空只不過將元素長度置0,讓後面插入數據函數的長度從0開始,其實並不是真正清空,之前的數據元素在內存中還存在,只不過可以被新元素覆蓋而已。

2.判斷順序表是否為空

『陸』 用C語言編寫一個有關順序表的程序代碼

#include<stdio.h>
#include<stdlib.h>

#define Size 50

//定義順序表結構體類型

typedef struct Table{
int*head;//順序表頭指針,為整型
int length;//順序表中元素個數
int size; //順序表的長度
}Table;

//創建順序表
Table CreateTable(){
Table T;
if(!(T.head=(int*)malloc(Size*sizeof(int)))){
printf("內存分配錯誤!\n");
exit(0);
}

T.size=Size;
T.length=0;
return T;
}

//增加
void Insert(Table T,int set,int values)//set為插入的位置,values為值
{
//首先判斷插入位置是否正確
if(set<0||set>T.length){
printf("插入位置不正確!\n");
reutrn;
}

//判斷是否有足夠的內存空間存儲增加的數
if(T.length==T.size){
if(!(T.head=(int*)realloc(T.head,(T.size+10)*sizeof(int)))){
printf("內存分配錯誤!\n");
exit(0);
}
T.size+=10;
}

//插入數據
for(int i=s.length;i>set;i--)
T.head[i]=T.head[i-1];

T.head[set]=values;
T.length++;
}

//刪除
void Delete(Tabel T,int set)
{
if(set<0||set>=T.length)
{
printf("刪除數的位置不爭確,刪除失敗!\n");
return;
}

//輸出數據
for(int i=set;i<s.length;i++)
T.head[i]=T.head[i+1];
T.length--;
}

//查找
int Search(Tabel T,int value)
{
for(int i=0;i<T.length;i++)
if(T.head[i]==value)
return i;
return -1;
}

『柒』 C語言程序的運行順序

for多重循環的執行順序是先執行內部循環,再執行外部循環

通過對代碼進行等價轉換,按照上述原理即可知道代碼的執行順序

對於上面代碼:

for(i=0;i<8;i++)
for(j=0;j<10;j++)
scanf("%d,%d",&i,&j);

它等價於下面

for(i=0;i<8;i++){
for(j=0;j<10;j++){
scanf("%d,%d",&i,&j);
}
}

從上面可以看出,每執行完一次j循環,i的值才增加1

但是注意,該代碼有一個陷阱:scanf函數會改變i和j的值

實際執行順序會受用戶輸入的i、j值的不同而不同

對於下面的代碼

for(i=0;i<8;)
min_m(i++)=i
for(j=0;j<8;j++)

它等價於下面的代碼:

for(i=0;i<8;){
min_m(i++)=i
}
for(j=0;j<8;j++){}

會先執行min_m函數8次 然後再執行j循環

注意,該代碼有一個問題,就是min_m函數的返回值必須是一個左值。

這意味著某些變數的值發生了更改,可能會影響到循環。