关于c语言的几个程序

作者&投稿:芝盛 (若有异议请与网页底部的电邮联系)
C语言中,如何用多个文件编写程序~

举个简单的例子!你会容易理解的。
你写一个stack.h的头文件,里面声明几个函数原形:
stack.h
#ifndef STACK_H
#define STACK_H

extern void push(char);
extern char pop(void);
extern int is_empty(void);

#endif

你可以在其相应的stack.c中对这些函数进行实现
stack.c

#include "stack.h"
void push(char)
{
/*your code*/
}

char pop(void)
{
/*your code*/
}

int is_empty(void)
{
/*your code*/
}

在main.c中你可以这样写
#include
#include "stack.h"
int main()
{
push('a');
push('b');
push('c');
while(!is_empty())
putchar(pop());
putchar('
');
return 0;
}
大致格式就是这样,在stack.h(这个名字你可以随便定),在这个头文件中声明函数原形,在相应的stack.c中进行函数定义与实现,主程序文件中包含这个头文件之后就可以调用stack.h中声明的函数,编译后无错误即可执行,你可以试试。

兄弟我可是一个字一个字的打上去的,不是粘贴的。

你是说一个程序有几个源文件吗?
其实主程序要头文件,其它文件不要的,它们只要你把函数编好,在主程序中宏定义后,就可以调用它的函数了!

1.顺序表基本操作
#include<stdio.h>
#include<malloc.h>
#define MaxSize 50
typedef char ElemType;
typedef struct
{ ElemType elem[MaxSize];
int length;
}SqList;
void InitList(SqList *&L)
{
L=(SqList *)malloc(sizeof(SqList));
L->length=0;
}
void DestroyList(SqList*L)
{
free(L);
}
int ListEmpty(SqList *L)
{
return(L->length==0);
}
int ListLength(SqList *L)
{
return(L->length);
}
void DispList(SqList *L)
{
int i;
if(ListEmpty(L)) return;
for(i=0;i<L->length;i++)
printf("%c",L->elem[i]);
printf("\n");
}
int GetElem(SqList *L,int i,ElemType &e)
{
if(i<1||i>L->length)
return 0;
e=L->elem[i-1];
return 1;
}
int LocateElem(SqList *L,ElemType e)
{
int i=0;
while(i<L->length&&L->elem[i]!=e)i++;
if(i>=L->length)
return 0;
else
return i+1;
}
int ListInsert(SqList *&L,int i,ElemType e)
{
int j;
if(i<1||i>L->length+1)
return 0;
i--;
for(j=L->length;j>i;j--)
L->elem[j]=L->elem[j-1];
L->elem[i]=e;
L->length++;
return 1;
}
int ListDelete(SqList *&L,int i,ElemType &e)
{
int j;
if(i<1||i>L->length)
return 0;
i--;
e=L->elem[i];
for(j=i;j<L->length-1;j++)
L->elem[j]=L->elem[j+1];
L->length--;
return 1;
}

void main()
{
SqList *L;
ElemType e;
printf("(1)初始化顺序表L\n");
InitList(L);
printf("(2)依次采用尾插法插入a,b,c,d,e元素\n");
ListInsert(L,1,'a');
ListInsert(L,2,'b');
ListInsert(L,3,'c');
ListInsert(L,4,'d');
ListInsert(L,5,'e');
printf("(3) 输出顺序表L:");
DispList(L);
printf("(4)顺序表L长度=%d\n",ListLength(L));
printf("(5)顺序表L为%s\n",(ListEmpty(L)?"空":"非空"));
GetElem(L,3,e);
printf("(6)顺序表L的第3个元素=%c\n",e);
printf("(7)元素a的位置=%d\n",LocateElem(L,'a'));
printf("(8)在第4个元素位置上插如f元素\n");
ListInsert(L,4,'f');
printf("(9)输出顺序表L:");
DispList(L);
printf("(10)删除L的第3个元素\n");
ListDelete(L,3,e);
printf("(11)输出顺序表L:");
DispList(L);
printf("(12)释放顺序表L\n");
DestroyList(L);
}

2.单链表基本操作
#include<stdio.h>
#include<stdlib.h>

typedef struct LNode
{
char data;
struct LNode *next;
}LNode,*LinkList;

void InitList(LinkList *L) //初始化
{
*L = (LinkList)malloc(sizeof(LNode));
(*L)->next = NULL;
}
char GetElem(LinkList L,int i) //返回i 位置的元素
{
//L为带头结点的单链表的头指针。
LinkList p;
int j;
p = L->next; j = 1; //初始化,p指向第一个结点,j为计数器

while(p && j<i)
{
p = p->next;
++j;
}
if(!p || j>i) exit(1); //i位置元素不存在
return(p->data);
}

void ListInsert(LinkList *L,int i,char e)//插入
{
//在带头结点的单链线性表L中第i个位置前插入元素e
LinkList p,s;
int j;
p = *L; j = 0;
while(p && j<i-1)//寻找第i-1个结点
{
p = p->next;
++j;
}
if(!p || j>i-1) exit(1); //i位置不正确
s = (LinkList)malloc(sizeof(LNode)); //新结点
s->data = e;
s->next = p->next;
p->next = s;
}

void ListDelete(LinkList *L,int i)//删除i位置元素
{
LinkList p,q;
int j;
p = *L; j = 0;

while(p->next && j<i-1)//寻找第i个结点
{//这以p->next开始是为了避开头结点,头结点不可删除
//而且这样是必须的,这样是为了有被删除点前面结点的地址,这样才能有前继结点,连接删除点的后继结点.
p = p->next;
++j;
}

if(!(p->next) || j>i-1) exit(1); //删除位置不合理
q = p->next; //删除该点
p->next = q->next;
free(q);
}

void CreateList(LinkList *L,int n)
{
//逆位序输入n个元素的值,建立带表头结点的单链线性表L
int i;
LinkList p;
(*L) = (LinkList)malloc(sizeof(LNode));
(*L)->next = NULL; //先建立带头结点的单链表
for(i=n;i>0;--i)
{
p = (LinkList)malloc(sizeof(LNode)); //生成新结点
scanf("%c",&p->data);
fflush(stdin);
p->next = (*L)->next;
(*L)->next = p;
}

//*****************另一插入法**************************
q = *L = (LinkList)malloc(sizeof(LNode));
(*L)->next = NULL;

for(i=n;i>0;--i)
{
p = (LinkList)malloc(sizeof(LNode));
scanf("%c",&p->data);
fflush(stdin);
p->next = NULL;
q->next = p;
q = p;
//q->next = p;
}
//***********************************************************
}
void MergeList(LinkList *La,LinkList *Lb,LinkList *Lc)
{
//链表La,Lb按递增排列
LinkList pa,pb,pc;
pa = (*La)->next;
pb = (*Lb)->next;
(*Lc) = pc = (*La);

while(pa && pb)
{
if(pa->data <= pb->data)
{
pc->next = pa;
pc = pa;
pa = pa->next;
}
else
{
pc->next = pb;
pc = pb;
pb = pb->next;
}
}
pc->next = pa?pa:pb; //插入剩余段
//free(Lb); //释放Lb头结点
}
void display(LinkList *L)
{
LinkList di;
di = (*L)->next;
while(di!=NULL)
{
printf("%c\t",di->data);
di = di->next;
}
printf("\n");
}
void main()
{
LinkList link,link2,link3;

InitList(&link);
InitList(&link2);
CreateList(&link,5);
CreateList(&link2,5);
display(&link);
display(&link2);
MergeList(&link,&link2,&link3);
display(&link3);
}

3二分查找算法的实现

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void xuanzhe(int a[], int n)
{
int i, j, min, t;

for (i=0; i<n-1; i++) /*要选择的次数:0~n-2共n-1次*/
{
min = i; /*假设当前下标为i的数最小,比较后再调整*/
for (j=i+1; j<n; j++)/*循环找出最小的数的下标是哪个*/
{
if (a[j] < a[min])
{
min = j; /*如果后面的数比前面的小,则记下它的下标*/
}
}

if (min != i) /*如果min在循环中改变了,就需要交换数据*/
{
t = a[i];
a[i] = a[min];
a[min] = t;
}
}
}
int main(){
int i,n,x;
int mid,left=0,right=999;
int find1=0,find2=0;
double y;
int a[1000];
for(i=0;i<1000;++i){
a[i]=rand();
}
xuanzhe(a,1000);
scanf("%d",&x);
printf("顺序查找:\n");
for(i=0;i<1000;++i){
while(x==a[i]){
printf("找到X=%d,a[%d]\n",x,i);
find1=1;
break;
}
}
if(find1==0){
printf("没有你要找的数\n");
}

printf("%fs\n",clock()/CLOCKS_PER_SEC);
y=clock();
printf("二分查找:\n");
while(!find2&&left<right)
{
mid=(left+right)/2;
if(x==a[mid])
find2=1;
else if(x<a[mid])
right=mid-1;
else left=mid+1;
}
if(find2==1)
printf("找到x=%d ,a[%d]\n",x,mid);
else
printf("没有你要找的数\n");
printf("%fs\n",(clock()-y)/CLOCKS_PER_SEC);
}

4.你可以搜一下,网上很多。这个就不帮你谢了。

5固定分区的主存分配思想,用C语言设计并实现模拟固定分区分配方法
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
typedef int datatype;
//主存分配表的结构体
typedef struct node
{
datatype Num,Size,Address;
int State;//0表示空闲状态,1表示已分配
char Name[10];//作业名,为0表示空闲状态,定义成字符串
struct node *next;
}linknode;
typedef linknode *linklist;
//作业列表的结构体
typedef struct job
{
char Name[10];
int Size;
struct job *next;
}linkjob;
typedef linkjob *joblist;

/*尾插法创建作业队列*/
joblist creatjoblist()
{
joblist head,r,s;
char ch[10];
int x;
head=r=(joblist)malloc(sizeof(linkjob));
printf("\n***************Shanglogo***************\n");
printf("\n******Copyright @ Shanglogo*******\n");
printf("\n***********先创建作业队列:**********\n");
printf("\n");
printf("请分别输入作业的名字及大小并以0结束:\n");
scanf("%s %d",&ch,&x);
while(x)
{
s=(joblist)malloc(sizeof(linkjob));
strcpy(s->Name,ch);
s->Size=x;
r->next=s;
r=s;
scanf("%s %d",&ch,&x);
}
r->next=NULL;
return head;
}

/*尾插法创建带头结点的主存分配表*/
linklist creatlinklist()
{
linklist head,r,s;
int a,b,c,d;
char ch[10];
head=r=(linklist)malloc(sizeof(linknode));
printf("现将主存分区,状态均为空闲:\n");
printf("\n");
printf("请分别输入分区的分区号、大小、起始地址、状态及占用分区的作业名并以0结束:\n");
scanf("%d %d %d %d %s",&a,&b,&c,&d,&ch);

while (a)
{
s=(linklist)malloc(sizeof(linknode));
s->Num=a;
s->Size=b;
s->Address=c;
s->State=d;
strcpy(s->Name,ch);
r->next=s;
r=s;
scanf("%d %d %d %d %S",&a,&b,&c,&d,&ch);

}
r->next=NULL;
return head;
}

/*输出带头结点的单链表*/
void print(linklist head)
{
linklist p;
p=head->next;
printf("此时的主存分配表为:\n");
printf("Num Size Address State Name\n");
while(p)
{
printf("%d%6d%6d%9d%7s\n",p->Num,p->Size,p->Address,p->State,p->Name);
p=p->next;
}
printf("\n");

}

void main()
{
joblist start,q;
linklist head,pre,p;
start=creatjoblist();//创建作业队列
head=creatlinklist();//创建主存分配表
print(head);
q=start->next;
pre=head;
p=head->next;
while(p)
{
while(q&&p->Size>=q->Size&&p->State==0)//q不为空并作业q的长度小于分区p的长度并且状态为空闲
{
p->State=1;
strcpy(p->Name,q->Name);
print(head);
q=q->next;
pre=head;
p=head->next;

}
if(q!=NULL)
{
pre=p;
p=p->next;
}
}
}
费了那么大劲,应该对你有所帮助吧!

第一个程序(修改两处):

//---------------------------------------------------------------------------

#include <stdio.h>
void main()
{
int qh(int x,int y);
int H,h;
float v,L,M,m,s1,s2,T;
printf("请输入里程数,单位为米\n");
scanf("%f",&L); //注意这里
printf("请输入出发时间,格式为 时,分,秒\n");
scanf("%d,%d,%d",&H,&M,&s1);
printf("请输入到达时间,格式为 时,分,秒\n");
scanf("%d,%d,%d",&h,&m,&s2);
T=(float)(qh(H,h))+(m-M)*60+s2-s1;
v=L/T;
}
int qh(int x,int y)
{
int z;
if(x>y)z=(24-x+y)*3600;
else z=(y-x)*3600; //注意这里
return(z);
}

//---------------------------------------------------------------------------

第二个程序(修改4处):
//---------------------------------------------------------------------------

#include<stdio.h>
#include<math.h>
void main()
{
float a,b,c;

float x1,x2,D; /*注意这里,变量声明应该放在执行语句之前*/

printf("标准一元2次方程形式为axx+bx+c=0\n请输入其系数,表示为 a,b,c\n");
scanf("%f,%f,%f,",&a,&b,&c);
D=b*b-4*a*c;
if(D==0) /*注意这里*/
{
x1=x2=(-b)/(2*a);
printf("x1=x2=%f",x1);
}
else if(D>0) /*注意这里*/
{
x1=((-b)+sqrt(D))/(2*a);
x2=((-b)-sqrt(D))/(2*a); /*注意这里*/
printf("x1=%f,x2=%f",x1,x2);
}
else
{
printf("该方程无实数根\n");
}
}

//---------------------------------------------------------------------------

嗯,不错的问题
有兴趣做,有问题HI我


一个c程序中至少包含什么
变量用于存储程序中的数据,可以是整数、浮点数、字符等类型。C语言中的变量需要在使用前进行声明,并且要指定其数据类型。4、语句(Statements):语句是C程序的基本单位,用于执行特定的操作。常见的语句包括赋值语句、条件语句、循环语句等。5、注释(Comments):注释用于增加代码的可读性,并且有助于其他...

几个看不懂的C语言程序
1.void main() { int i,sum; for(i=1;i<=3;sum++) sum+=i; printf(“%d\\n”,sum); } 为什么是死循环?for循环的条件for(i=1;i<=3;i++)这样改就不会了,因为你的i值不变而for循环又出不来,永远无法满足i>3的条件。2. #includevoid main(){ int i; for(i=0;i<=3;...

请问C语言是什么啊? 能给我详细的解释一下么? 谢谢了!
C和C++ 但是,C是C++的基础,C++语言和C语言在很多方面是兼容的。因此,掌握了C语言,再进一步学习C++就能以一种熟悉的语法来学习面向对象的语言,从而达到事半功倍的目的。 C源程序的结构特点 为了说明C语言源程序结构的特点,先看以下几个程序。这几个程 序由简到难,表现了C语言源程序在组成结构上的特点。虽然有...

C语言程序,计算每月煤气费用超过十元的共用几个月?
include <stdio.h> int main() { int count = 0; \/\/ 计数器,统计每月煤气费用超过10元的月份个数 int fee; \/\/ 每月的煤气费用 for (int i = 1; i <= 12; i++) { printf("请输入第%d个月的煤气费用:", i);scanf("%d", &fee);if (fee > 10) { count++;} } printf("...

1、一个C语言程序是由( )。
一个C程序由一个主函数和若干个其他函数组成。若干个的意思就是可以有0个及以上个。c语言的程序模块称为函数。C 语言可以进行多种方式进行程序的设计,它是一种很有特色的高级语言通过若干个函数组成,它具备构成程序设计的 3 种基本结构顺序,选择和循环结构。C语言编辑简洁明了,运算符丰富且功能强大...

C语言的经典编程例子
\/\/最经典的当然是HelloWorld了。 #include "stdio.h"int main(void){ printf("HelloWorld!\\r\\n");}

C语言 编写程序,实现输入n个整数,输出其中最小的数,并指出其是第几个...
1、首先需要定义一个Max最小值变量。2、然后把首地址的值赋予最小值。3、接下来就可以开始进行便利查找。4、如果有个数大于最大值便可以自动替换。5、然后就可以把最小值进行输出。6、然后进行运行后,就可以看到屏幕上显示最小值。

c语言:编写一个程序找出一组单词中的“最小“和“最大“的单词(单词在...
strcmp(largest_word, a);\/*这一步没有运行*\/ 这一行写错了,不是应该strcpy么,不是strcmp。include<stdio.h> include<string.h> int main(){ char ch[5][10];char min[10],max[10];int i;for(i=0;i<5;i++){ gets(ch[i]);} strcpy(min,ch[0]);strcpy(max,ch[0]);for(...

c语言编写一个程序,将十进制整数n 转换成二进制数
include <stdio.h> int transfer(int x){ int p=1,y=0,yushu;while(1){ yushu=x%2;x\/=2;y+=yushu*p;p*=10;if(x<2){ y+=x*p;break;} } return y;} void main(){ \/\/进制转换函数的声明 int transfer(int x);int x;printf("请输入一个十进制数:");scanf("%d",&x);pri...

C语言:编写一个程序用冒泡排序实现升序排列
程序如下:include <stdio.h> int main (){ int a[10];int i, j, t;printf ("请输入十个数:\\n");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] > ...

丹阳市17814027413: 求C语言几个简单程序语句 -
盖饶灵健: 1.#include<stdio.h> void main() { int i,sum=0; for(i=1;i<=10;i++) sum+=i; printf("sum=%d",sum); }2.#include<stdio.h> void main() { int i,j; printf("Please input two numbers:"); scanf("%d%d",&i,&j); if(i>j) printf("The bigger one is %d",i); else ...

丹阳市17814027413: 关于几个C语言程序
盖饶灵健: #include <stdio.h> #define MAX 100 void classification(); void upsort(int *array,int n); void downsort(int *array,int n); int ARRAY_A[MAX],i; void main() { for(i = 0; i < MAX;i++) ARRAY_A[i] = i + 1; /* 产生MAX个整数 */ classification(); for(i = 0;i < ...

丹阳市17814027413: 谁有关于C语言的简单的程序代码,欢迎留言. -
盖饶灵健: #include<stdio.h> int main() { printf("期望输出"); return 0;}

丹阳市17814027413: 关于c语言的一个语句请看下面这个程序:main(){chars1
盖饶灵健: 答:死循环 为什么:附值语句不可能为假,你while()中的判定条件不是判定某一... 要看编译器了,如果好的编译器,比如:VC++6. 0 (兼容C程序).你可能就会跳出...

丹阳市17814027413: C语言的两个程序 -
盖饶灵健: 1.题目要求输入一行字符啊,你的程序只能输入一个字符 你看下我的程序做参考#include main() {int i=0; char a; while((a=getchar())!='\n') {if (i%3==0) printf("\n"); i++; printf("%c ASCII=%d",a,a); } }2.输出a行的话,应该是for(i=0;i另外,for(j=26;...

丹阳市17814027413: 一个C语言程序是由哪几个部分组成,每一个 -
盖饶灵健: 1、头文件:头文件包含程序中要调用的库函数.例如#include<stdio.h> 2、main函数:程序的主体部分,是整个C程序中必不可少的一部分. 3、若干个子函数.需要实现诸多功能,如果仅在mian()函数中编辑,会造成程序可读性变差. ...

丹阳市17814027413: 关于C语言程序 -
盖饶灵健: #include "math.h" #include main() { int m, i, k, h=0, leap=1; p...

丹阳市17814027413: 请推荐几个适合新手的c语言设计程序.谢谢了,各位大侠. -
盖饶灵健: 1、编写程序并输出下面式子的值(要求用循环语句实现)5+10+15+……+490+5002、编写程序,处处下面图形(要求用嵌套的循环语句实现) 、、、、 1 21 321 4321 543213、编程将任意输入的小写字母转化成大写字母并输出4、编写程序,输入一个不多于4位的正整数,判断它是几位数.

丹阳市17814027413: 有关C语言的个小程序 -
盖饶灵健: 因为你函数sun里面的局部变量是int,a/i,因为i是int所以结果没有小数.就会错误.#include#include double sum(int); int main() { int n; double a;double c;printf("Enter n:");scanf("%d",&n);c=sum(n);printf("c=%1f\n",c);system("...

丹阳市17814027413: 有关c语言程序
盖饶灵健: c4=(x>=0?'+':'-'); 如果x>=0,c4='+';如果是负数c4='-'; c3=x%10+48; 这个写得不好 c3=x%10+'0';之后的一样 48是字符'0'的ASCII码值,你看到的字符必须是ASCII码才能%c显示. 下面是等式,帮助你理解ASCII 5+'0'=5+48=53=0x35='5' 十进制 十六进制 字符 48 30 0 49 31 1 ...... 57 39 9 ........ 65 41 A 66 42 B ......

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网