㈠ 用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;
}