本文目录一览:
- 1、c语言表示列表的问题
- 2、一个有关用C语言生成数字列表的问题
- 3、C语言动态列表排序
- 4、C语言如何建立一个列表,编程怎么编,举例说一下,谢谢啦
- 5、C语言宏定义——预处理指令列表
- 6、C语言printf下各种%号列表
c语言表示列表的问题
/*
抱歉,又是我
*/
//#define debug
struct dimension
{
int num_row ;
int num_col ;
} ;
void table_set_entry (const int t[] ,const struct dimension *dim ,const int row ,const int col ,const int v)
{
if (t == 0 || dim == 0 || row 0 || col 0 || row = dim-num_row || col = dim-num_col)
return ;
t[col * dim-num_row + row] = v ;
return ;
}
int table_get_entry (const int t[] ,const struct dimension *dim ,const int row ,const int col)
{
if (t == 0 || dim == 0 || row 0 || col 0 || row = dim-num_row || col = dim-num_col)
return 0 ;
return t[col * dim-num_row + row] ;
}
void table_clear (const int t[] ,struct dimension *dim)
{
if (t == 0 || dim == 0)
return ;
const int* pb = t ;
const int* pe = t + dim-num_row * dim-num_col ;
int* p ;
for (p = pb ; p pe ; p++)
*p = 0 ;
return ;
}
void table_copy (const int a[] ,const int b[] ,struct dimension *dim)
{
if (a == 0 || b == 0 || dim == 0)
return ;
const int* pab = a ;
const int* pae = a + dim-num_row * dim-num_col ;
int* pa ;
const int* pbb = b ;
int* pb ;
for (pa = pab ,pb = pbb ; pa pae ; pa++ ,pb++)
*pb = *pa ;
return ;
}
#ifdef debug
int main ()
{
void table_set_entry (const int t[] ,const struct dimension *dim ,const int row ,const int col ,const int v) ;
int table_get_entry (const int t[] ,const struct dimension *dim ,const int row ,const int col) ;
void table_clear (const int t[] ,struct dimension *dim) ;
void table_copy (const int a[] ,const int b[] ,struct dimension *dim) ;
int t[10][10] ;
int f[100] ;
const struct dimension dim = {10 ,10} ;
const int row = 4 ;
const int col = 7 ;
const int v = 250 ;
table_set_entry (t ,dim ,row ,col ,v) ;
printf ("isn't %d equal to %d ?\n" ,t[col][row] ,table_get_entry (t ,dim ,row ,col)) ;
table_copy (t ,f ,dim) ;
table_clear (t ,dim) ;
printf ("t : %d while f : %d\n" ,t[col][row] ,f[col * dim.num_row + row]) ;
return 0 ;
}
#endif
一个有关用C语言生成数字列表的问题
如果生成的列表是用来打印的:
int i,n; char fmt[80]; scanf("%d,%d",n,k);
sprintf(fmt,"%%0%dd,",n); for ( i=0;ik;i++ ) printf(fmt,i+1);
如果生成的列表需要保存:
int i,n,k; char fmt[80],mlist[1024][10];
scanf("%d,%d",n,k); if ( k1024 ) k=1024; if ( n9 ) n=9;
sprintf(fmt,"%%0%dd,",n); for ( i=0;ik;i++ ) sprintf(mlist[i],fmt,i+1);
C语言动态列表排序
链表吗?以前练习的时候做过一个,你参考下
#includestdio.h
#includestdlib.h
#includeiostream.h
#define OK 1;
#define ERROR 0;
typedef int ElemType;
typedef int Status;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
void CreateList(LinkList L,int n) //创建表
{
int i;
LNode *p;
L=(LinkList)malloc(sizeof(LNode));
L-next=NULL;
for(i=n;i0;i--)
{
p=(LinkList)malloc(sizeof(LNode));
printf("输入第%d个元素的值\n",i);
scanf("%d",p-data);
p-next=L-next;
L-next=p;
}
printf("创建成功!\n");
}
Status GetElem(LinkList L,int i) //得到第i个元素
{
ElemType j=1,e;
LNode *p;
p=L-next;
while(jip)
{
p=p-next;
j++;
}
if(!p||ji)
{
printf("第%d个元素不存在!\n",i);
return ERROR;
}
e=p-data;
printf("第%d个元素是%d\n",i,e);
return OK;
}
Status ListInsert(LinkList L,int i,ElemType e) //插入元素
{
ElemType j;
LNode *p,*s;
p=L;
j=1;
while(pji)
{
p=p-next;
++j;
}
if(!p||ji)
{
printf("不能在第%d中插入\n",i);
}
s=(LinkList)malloc(sizeof(LNode));
s-data=e;
s-next=p-next;
p-next=s;
return OK;
}
Status ListDelete(LinkList L,int i) //删除元素
{
LNode *p,*q;
p=L;
int j=0;
while(p-nextji-1)
{
p=p-next;
j++;
}
if(!(p-next)||ji-1)
{
printf("查找失败!\n");
return ERROR;
}
q=p-next;
p-next=q-next;
free(q);
printf("删除成功!\n");
return OK;
}
void MergeList(LinkList La,LinkList Lb,LinkList Lc) //归并
{
LNode *pa,*pb,*pc;
Lc=pc=La;
pa=La-next;
pb=Lb-next;
while(papb)
{
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;
printf("归并成功!\n");
}
void PList(LinkList L) //打印
{
LNode *p;
p=L-next;
while(p)
{
printf("%d ",p-data);
p=p-next;
}
printf("\n");
}
Status CList(LinkList L) //排序
{
LNode *p;
int flag,e;
p=L;
while(1)
{
flag=0;
for(p=L;p-next-next!=NULL;p=p-next)
{
if(p-next-datap-next-next-data)
{
e=p-next-data;
p-next-data=p-next-next-data;
p-next-next-data=e;
flag=1;
}
}
if(flag==0)
{
printf("排序成功!\n");
return OK;
}
}
}
int main()
{
int count=1,m,n,k,sum,i,j,g;
LinkList list[10];
printf("输入创建表的个数\n");
scanf("%d",m);
for(;count=m;count++)
{
printf("输入第%d个表的元素个数\n",count);
scanf("%d",n);
printf("逆序输入n个元素\n");
CreateList(list[count],n);
printf("第%d个表创建成功\n",count);
}
sum=m+1;
while(1)
{
printf("功能:\n1.查找某位置元素的值\n2.插入元素\n3.删除元素\n4.元素排序\n5.两表合并\n6.显示表内元素\n7.退出\n");
scanf("%d",k);
switch(k)
{
case 1:
printf("输入查找的表\n");
scanf("%d",i);
if(im)
{
printf("不存在表%d\n",i);
break;
}
printf("输入查找位置\n");
scanf("%d",j);
GetElem(list[i],j);
break;
case 2:
printf("输入要插入的表\n");
scanf("%d",i);
if(im)
{
printf("不存在表%d\n",i);
break;
}
printf("输入要插入的位置\n");
scanf("%d",j);
printf("输入要插入的值\n");
scanf("%d",g);
ListInsert(list[i],j,g);
break;
case 3:
printf("输入要删除的表\n");
scanf("%d",i);
if(im)
{
printf("不存在表%d\n",i);
break;
}
printf("输入要删除的位置\n");
scanf("%d",j);
ListDelete(list[i],j);
break;
case 4:
printf("输入要排序的表\n");
scanf("%d",i);
if(im)
{
printf("不存在表%d\n",i);
break;
}
CList(list[i]);
break;
case 5:
printf("输入表1\n");
scanf("%d",i);
if(im)
{
printf("不存在表%d\n",i);
break;
}
printf("输入表2\n");
scanf("%d",j);
if(im)
{
printf("不存在表%d\n",j);
break;
}
MergeList(list[i],list[j],list[sum]);
printf("已经将合并的标放入第%d个表中",sum);
sum++;
m++;
break;
case 6:
printf("输入要显示的表\n");
scanf("%d",i);
if(im)
{
printf("不存在表%d\n",i);
break;
}
PList(list[i]);
break;
case 7:
return 0;
default:
printf("错误的指令!/n");
break;
}
}
}
C语言如何建立一个列表,编程怎么编,举例说一下,谢谢啦
首先定义一个链表。
struct node
{
int id;
struct node * next;
};
接下来写一些操作的函数(插入,删除等等)。
插入函数:
struct node* insert(struct node* pNode, int iTemp)
{
//判断 pNode 是否为空。
if(pNode==NULL)
{
//这个节点是空,返回错误。
return NULL;
}
// 创建一个新的节点。
struct node* tempNode = (struct node*)malloc(sizeof(struct node));
tempNode-id= iTemp;
if(pNode-next == NULL)
{
pNode-next = tempNode;
tempNode-next = NULL;
}else
{
struct node * pNext = pNode-next;
pNode-next = tempNode;
tempNode-next = pNext;
}
return tempNode;
}
int main()
{
struct node* head = (struct node*)malloc(sizeof(struct node));
head-id = 0;
head-next = NULL;
struct node * ptemp;
ptemp = head;
for( int i=1; i10; i++)
{
struct node* temp = insert(ptemp,i);
ptemp = temp;
}
return 0;
}
C语言宏定义——预处理指令列表
#:空指令,无任何效果 #include:包含一个源代码文件 #define:定义宏 #undef:取消已定义的宏 #if:如果给定条件为真,则编译下面代码 #ifdef:如果宏已经定义,则编译下面代码 #ifndef:如果宏没有定义,则编译下面代码 #elif:如果前面的#if给定条件不为真,当前条件为真,则编译下面代码 #endif:结束一个#if……#else条件编译块 #error:停止编译并显示错误信息 预处理指令是以#号开头的代码行。#号必须是该行除了任何空白字符外的第一个字符。#后是指令关键字,在关键字和#号之间允许存在任意个数的空白字符。整行语句构成了一条预处理指令,该指令将在编译器进行编译之前对源代码做某些转换
C语言printf下各种%号列表
%d 按整型数据的实际长度输出
%md m是指输出字段的宽度。如果数据的位数小于m,则在左端补空格;若大于m,则按数据的实际位数输出。
%ld 输出长整型数据
%o 以八进制输出整型数
%x 以十六进制输出整型数
%u 以十进制输出unsigned型数据
%c 输出字符
%s 输出字符串
%ms 输出字符占m列,如果串长度小于m则左边补空格,若大于m则按原长度输出
%-ms 如果串长度小于m,则字符串相左靠,右边补空格
%m.ns 输出占m列,但只取字符串的左端n个字符。这n个字符在m的右侧,左边补空格
%-m.ns 其中m,n含义同上,n个字符输出在m列的左侧,右端补空格。如果nm,则m自动取n值,即保证n个字符正常输出
%f 不指定字符宽度,由系统自动指定,使整数部分全部输出,并输出6位小数。应当注意输出的数字并非全部都是有效数字。单精度数的有效位数一般是7位,而双精度数的有效位数一般是16位。
%m.nf 指定输出的数列占m列,其中有n位小数。若数值长度小于m,左端补空格。
%-m.nf与%m.nf 的区别仅在于使输出的数值向左端靠,右端补空格。
%e 不指定输出数据所占的宽度和数字部分的小数位数
%m.ne和%-m.ne含义与前面相同
%g 假设一个数要用%f和%e输出,用%g格式时自动从这两种格式中选出最短者