㈠ 用c語言編寫一個數據排序的程序,怎麼做啊。求給個思路
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>
voidbubble_sort(inta[],intn)
{
inti,j,temp;
for(j=0;j<n-1;j++)
{
for(i=0;i<n-1-j;i++)
{
if(a[i]>a[i+1])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
}
}
}
intmain(void)
{
inti,n,*pdata;
intmin,max;
intmin_cnt=0,max_cnt=0;
scanf("%d",&n);
pdata=(int*)malloc(sizeof(int)*n);
if(pdata==NULL)
{
printf("動態內存分配失敗! ");
exit(0);
}
srand(time(NULL));
for(i=0;i<n;i++)
{
*(pdata+i)=rand()%60-10;
}
bubble_sort(pdata,n);
for(i=0;i<n;i++)
{
printf("%d ",*(pdata+i));
}
min=*(pdata+0);
max=*(pdata+n-1);
for(i=0;i<n;i++)
{
if(min>=*(pdata+i))
{
min_cnt++;
}
break;
}
for(i=n-1;i>=0;i--)
{
if(max<=*(pdata+i))
{
max_cnt++;
}
break;
}
printf("最高溫度%d出現次數%d ",max,max_cnt);
printf("最低溫度%d出現次數%d ",min,min_cnt);
getch();
return0;
}
/*圖形化界面需要你自己去研究了*/
㈡ 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語言編寫一段程序,建立一個順序表(需要自己輸入數據,並插入數據、刪除數據)。
#include<stdio.h>
#defineLIST_INIT_SIZE10
#defineLISTINCREMENT10
#defineERROR0
typedefstruct{
int*elem;
intlength;
intlistsize;
}SqList;
voidInitList_Sq(SqList*l)
{
l->elem=(int*)malloc(LIST_INIT_SIZE*sizeof(int));
if(!l->elem)exit(0);
l->length=0;
l->listsize=LIST_INIT_SIZE;
}
intInList(SqList*l)
{
int*p,*newbase;
p=l->elem;
while(1)
{
for(;p<l->elem+l->listsize;p++)
{
scanf("%d",p);if(*p==-1)break;l->length++;
}
if((p==l->elem+l->listsize))
{
newbase=(int*)realloc(l->elem,(l->listsize+LISTINCREMENT)*sizeof(int));
p=l->elem+l->length;
l->listsize=l->listsize+LISTINCREMENT;
if(!l->elem)returnERROR;
}
if(*p==-1)break;
}
return1;
}
voidPrList(SqList*l)
{
int*p,i;
p=l->elem;
for(;p<l->elem+l->length;p++)
printf("%d",*p);
}
intListInsert_sq(SqList*l,inti,inte)
{
int*newbase,*p,*q;
if(i<1||i>l->length)returnERROR;
if(l->length==l->listsize)
{
newbase=(int*)realloc(l->elem,(l->listsize+LISTINCREMENT)*sizeof(int));
if(!newbase)returnERROR;
l->elem=newbase;
l->listsize+=LISTINCREMENT;
}
q=l->elem+i-1;
for(p=l->elem+l->length-1;p>=q;p--)
*(p+1)=*(p);
*q=e;
l->length+=1;
return1;
}
intListDelet_sq(SqList*l,inti)
{
int*p,e;
if((i<1)||(i>l->length))returnERROR;
p=l->elem+i-1;
e=*p;
for(;p<l->elem+l->length-1;p++)
*p=*(p+1);
l->length--;
printf("要刪除的元素是:%d ",e);
return1;
}
voidmain()
{
inti,j,n;
chara;
SqListla;
InitList_Sq(&la);
printf("請輸入順序表中的元素: ");
if(!InList(&la))returnERROR;
do
{
printf("請輸入需要插入元素的位置及元素:(a,b) ");
scanf("%d,%d",&i,&j);
if(!ListInsert_sq(&la,i,j))returnERROR;
printf("是否還需要插入元素?(N/Y)");
getchar();
scanf("%c",&a);
if(a=='N'||a=='n')break;
}while(1);
do
{
printf("請輸入需要刪除元素的位置: ");
scanf("%d",&i);
if(!ListDelet_sq(&la,i))returnERROR;
printf("是否還需要刪除元素?(N/Y)");
getchar();
scanf("%c",&a);
if(a=='N'||a=='n')break;
}while(1);
printf("最後的順序表為: ");
PrList(&la);
}
㈣ 用c語言編寫的單片機程序是按什麼順序執行的
先從主程序執行,即 void main ,然後順序執行,除非遇到中斷
#include<reg51.h>
............................//宏定義
..........................;//全局變數
void main()
{
....................;//初始化
while(1)
{
...................;//主程序
}
}
㈤ 求用C語言編寫一個程序實現順序棧初始化,出棧,入棧,判棧空,判棧滿,急需,謝謝
#define STACK_SIZE 100
#define PUSH_POP_SUCCESS 1
#define PUSH_POP_ERROR 0
struct _stackbuf {
int _collection[STACK_SIZE];
int _top;
};
typedef struct _stackbuf S_STACK;
typedef unsigned int u_int_f;
// 入棧
u_int_f push(S_STACK *stack, int d){
if (stack->_top >= STACK_SIZE) return PUSH_POP_ERROR;
stack->_collection[stack->_top++] = d;
return PUSH_POP_SUCCESS;
}
// 出棧
u_int_f pop(S_STACK *stack, int *e){
if (!stack->_top) return PUSH_POP_ERROR;
*e=stack->_collection[--(stack->_top)];
return PUSH_POP_SUCCESS;
}
int main(){
S_STACK stack = { {0},0 };
push(&stack, 1);
push(&stack, 2);
push(&stack, 3);
int gv = 0;
pop(&stack, &gv);
printf("%d\n", gv);
system("PAUSE");
return 0;
}
㈥ 如何用C語言編寫一個排序程序
樓上的用的是C++
若單純的用C那就是這樣
#include<stdio.h>
#define
print
"NO.%d
%d
%d
%d
%d
%3.2f
%3.2f\n",1+i,stu[i].num,stu[i].mat,stu[i].ENG,stu[i].com,stu[i].aver,stu[i].total//宏定義節約時間
struct
student
{
int
num;
int
mat;
int
ENG;
int
com;
float
aver;
float
total;
}stu[10];//定義結構體變數
void
main()
{
int
i;
void
take_turn_print(struct
student
stu1[10])
;
float
sum(int
x,int
y,int
z);//聲明求和函數
for(i=0;i<10;i++)
scanf("%d%d%d%d",&stu[i].num,&stu[i].mat,&stu[i].ENG,&stu[i].com);
for(i=0;i<10;i++)
{
stu[i].total=sum(stu[i].mat,stu[i].ENG,stu[i].com);//調用求和函數
stu[i].aver=stu[i].total/3;
}
take_turn_print(stu);//調用排序
列印函數
}
void
take_turn_print(struct
student
stu1[10])
{
void
change(int
*x,int
*y);//聲明換位函數
void
change1(float
*x,float
*y);//聲明換位函數
int
i,j;
for(j=0;j<9;j++)//冒泡排序
為理解簡單
就沒用別的排序方法
哈哈
{
for(i=0;i<9-j;i++)
{
if(stu1[i].aver<stu1[i+1].aver)
{
change(&stu1[i].num,&stu1[i+1].num);//
值交換
change(&stu1[i].mat,&stu1[i+1].mat);//
值交換
change(&stu1[i].ENG,&stu1[i+1].ENG);//
值交換
change(&stu1[i].com,&stu1[i+1].com);//
值交換
change1(&stu1[i].aver,&stu1[i+1].aver);//
值交換
change1(&stu1[i].total,&stu1[i+1].total);//
值交換
}
}
}
for(i=0;i<10;i++)
printf(print);//列印
}
void
change(int
*x,int
*y)
{
int
i;
i=*x;
*x=*y;
*y=i;//利用指針做變數替換
}
void
change1(float
*x,float
*y)
{
float
i;
i=*x;
*x=*y;
*y=i;//利用指針做變數替換
}
float
sum(int
x,int
y,int
z)
{
float
i;
i=(float)(x+y+z);
return(i);
}
前幾天也是幫同學做這樣的題
一模一樣
看來你也是WH大學的
㈦ C語言:編寫一個程序用冒泡排序實現升序排列
程序如下:
#include <stdio.h>
int main ()
{
int a[10];
int i, j, t;
printf ("請輸入十個數: ");
for (i = 0; i < 10; i++)
{
printf ("a[%d]=", i+1);
scanf ("%d",&a[i]);
}
for (j = 0;j < 9; j++)
for (i = 0; i < 9 - j; i++)
if (a[i] > a[i+1])
{
t = a[i];
a[i] = a[i+1];
a[i+1] = t;
}
printf ("由小到大的順序為: ");
for (i = 0; i < 10; i++)
{
printf ("%d,",a[i]);
}
printf (" ");
return 0;
}
運行結果
請輸入十個數:
a[1]=7
a[2]=8
a[3]=9
a[4]=6
a[5]=5
a[6]=4
a[7]=1
a[8]=2
a[9]=3
a[10]=99
由小到大的順序為:
1,2,3,4,5,6,7,8,9,99。
冒泡排序演算法的原理如下:
1、比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
2、對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。
3、針對所有的元素重復以上的步驟,除了最後一個。
4、持續每次對越來越少的元素重復上面的步驟,直到沒有任何一對數字需要比較。
(7)c語言編寫一個程序順序擴展閱讀:
冒泡排序的思想:
首先,從表頭開始往後掃描數組,在掃描過程中逐對比較相領兩個元素的大小。若相鄰兩個元素中,前面的元素大於後面的元素,則將它們互換,稱之為清去了一個逆序。
在掃描過程中,不斷地將兩相鄰元素中的大者往後移動,最後就將數組中的最大者換到了表的最後,這正是數組中最大元素應有的位置。
然後,在剩下的數組元素中(n-1個元素)重復上面的過程,將次小元素放到倒數第2個位置。不斷重復上述過程,直到剩下的數組元素為0為止,此時的數組就變為了有序。
假設數組元素的個數為西,在最壞情況下需要的比較總次數為:(n-1)+(n-2)...+2+1)-n(n-1)/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語言中 編寫一個程序實現從小到大排序
#include<stdio.h>
#include<stdlib.h>
intcmp(constvoid*a,constvoid*b)
{
return*(int*)a-*(int*)b;
}
intmain(intargc,char**argv)
{
inta[]={1,-2,53,49,144,65,267,98,112};
inti;
qsort(a,sizeof(a)/sizeof(int),sizeof(int),cmp);
for(i=0;i<sizeof(a)/sizeof(int);++i)
printf("%d",a[i]);
printf(" ");
return0;
}
如果要自己實現排序函數的話
#include<stdio.h>
voidqsort(int*a,intleft,intright)
{
intp=(left+right)/2;//以中間數作為主元
intk=a[p];
inti=left,j=right;
while(i<j)
{
//從左邊開始將大於主元的數放在主元右邊
while((i<=p)&&(a[i]<=k))
++i;
if(i<p)
{
a[p]=a[i];
p=i;
}
//從右邊開始將小於主元的數放在左邊
while((j>=p)&&(a[j]>=k))
--j;
if(j>p)
{
a[p]=a[j];
p=j;
}
}
a[p]=k;
//如果左邊的數大於1個則遞歸左邊
if(p-left>1)
qsort(a,left,p-1);
//如果右邊的數大於1個則遞歸右邊
if(right-p>1)
qsort(a,p+1,right);
}
intmain(intargc,char**argv)
{
inta[]={1,-2,53,49,144,65,267,98,112};
inti;
qsort(a,0,sizeof(a)/sizeof(int)-1);
for(i=0;i<sizeof(a)/sizeof(int);++i)
printf("%d",a[i]);
printf(" ");
return0;
}