当前位置:首页 » 编程语言 » 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函数的返回值必须是一个左值。

这意味着某些变量的值发生了更改,可能会影响到循环。