本文目录一览:
- 1、如何在c语言中实现until语句的功能?
- 2、用C语言编码实现strlen函数
- 3、C语言可以实现为一维数组动态分配内存吗?
- 4、C语言Printf实现机制
- 5、数据结构如何通过C语言来实现,请举例说明,尽可能详细
- 6、c语言完整实现?
如何在c语言中实现until语句的功能?
i=100;\x0d\x0ado {\x0d\x0a i--;\x0d\x0a} while( !(i10)) /* until 是这样,但是在c中这样一写不能循环啦只能从求解方法中找解决办法啦*/
用C语言编码实现strlen函数
根据题意可得如下代码:
#include stdio.h
int strlen(char *s)
{
int i = 0;
while (s[i] != '\0')i++;
return i;
}
int main()
{
char s[10] = "12345";
printf ("%d\n", strlen(s));
return 0;
}
执行结果:
C语言可以实现为一维数组动态分配内存吗?
可以。。
例子如下:
# include stdio.h
# include malloc.h
void main(void)
{
int len,i, *p;
printf("输入要存放元素的个数:");
scanf("%d", len); //输入长度构造动态一维数组
p = (int *)malloc(sizeof(int)*5);
for(i=0; ilen; ++i)
scanf("%d",(p+i)); // p+i等同于p[i];
// 将动态一维数组p的长度增加至6,并将第6个元素赋值为100;
realloc(p,sizeof(int)*6);//realloc重新增加或减少一维数组的长度;
p[5] = 99;
printf("输出内容:\n");
for(i=0; i=len; ++i)
printf("%-5d", p[i]); //p[i]等同于*(p+i);
printf("\n");
第一个是在栈上分配:就是在函数调用栈所在的那个栈上
第二个是在“堆区”分配。
C语言Printf实现机制
无比复杂,不过可以给你一个主要参考,可变参数是保存在一个可变参数表va_list之中的,当执行printf时有一个指向可变参数表首的指针va_start和一个指向可变参数表末尾的指针va_end,程序在遇到占位符时,从可变参数va_list表中从va_start开始去取参数并转换为相应的格式,执行到va_end即可变参数取完,函数中止,我简单的描叙了下,之中还涉及许多其他的转换,就不多说了。
数据结构如何通过C语言来实现,请举例说明,尽可能详细
数据的结构无非就是表:线性表、链表,栈,队列,串,数组,树、二叉树,图,这几种。
常用的使用指针,或数组建立数据结构,然后对其进行插入、删除、查找、排序等操作。
以下是C语言实现的循环队列:
#includestdio.h
#includestdlib.h
#define MAX_QSIZE 5
struct SqQueue
{ QElemType *base; // 初始化的动态分配存储空间
int front; // 头指针,若队列不空,指向队列头元素
int rear; // 尾指针,若队列不空,指向队列尾元素的下一个位置
};
// bo3-4.cpp 循环队列(存储结构由c3-3.h定义)的基本操作(9个)
void InitQueue(SqQueue Q)
{ // 构造一个空队列Q。在教科书第64页
Q.base=(QElemType*)malloc(MAX_QSIZE*sizeof(QElemType));
if(!Q.base) // 存储分配失败
exit(OVERFLOW);
Q.front=Q.rear=0;
}
void DestroyQueue(SqQueue Q)
{ // 销毁队列Q,Q不再存在
if(Q.base) // 队列Q存在
free(Q.base); // 释放Q.base所指的存储空间
Q.base=NULL; // Q.base不指向任何存储单元
Q.front=Q.rear=0;
}
void ClearQueue(SqQueue Q)
{ // 将队列Q清为空队列
Q.front=Q.rear=0;
}
int QueueEmpty(SqQueue Q)
{ // 若队列Q为空队列,则返回TRUE;否则返回FALSE
if(Q.front==Q.rear) // 队列空的标志
return TRUE;
else
return FALSE;
}
int GetHead(SqQueue Q,QElemType e)
{ // 若队列Q不空,则用e返回Q的队头元素,并返回OK;否则返回ERROR
if(Q.front==Q.rear) // 队列空
return ERROR;
e=Q.base[Q.front]; // 将队头元素的值赋给e
return OK;
}
int EnQueue(SqQueue Q,QElemType e)
{ // 插入元素e为队列Q的新的队尾元素。在教科书第65页
if((Q.rear+1)%MAX_QSIZE==Q.front) // 队列满
return ERROR;
Q.base[Q.rear]=e; // 将e插在队尾
Q.rear=(Q.rear+1)%MAX_QSIZE; // 队尾指针+1后对MAX_QSIZE取余
return OK;
}
int QueueLength(SqQueue Q)
{ // 返回队列Q的元素个数,即队列的长度。在教科书第64页
return(Q.rear-Q.front+MAX_QSIZE)%MAX_QSIZE;
}
int DeQueue(SqQueue Q,QElemType e) // 在教科书第65页
{ // 若队列Q不空,则删除Q的队头元素,用e返回其值,并返回OK;否则返回ERROR
if(Q.front==Q.rear) // 队列空
return ERROR;
e=Q.base[Q.front]; // 将队头元素的值赋给e
Q.front=(Q.front+1)%MAX_QSIZE; // 移动队头指针
return OK;
}
void QueueTraverse(SqQueue Q,void(*visit)(QElemType))
{ // 从队头到队尾依次对队列Q中每个元素调用函数visit()
int i=Q.front; // i最初指向队头元素
while(i!=Q.rear) // i指向队列Q中的元素
{ visit(Q.base[i]); // 对i所指元素调用函数visit()
i=(i+1)%MAX_QSIZE; // i指向下一个元素
}
printf("\n");
}
void main()
{
int j;
int i=0,m;
int d;
SqQueue Q;
InitQueue(Q); // 初始化队列Q,失败则退出
printf("初始化队列后,队列空否?%u(1:空 0:否)\n",QueueEmpty(Q));
printf("请输入整型队列元素(不超过%d个),-1为提前结束符:",MAX_QSIZE-1);
do
{ scanf("%d",d); // 由键盘输入整型队列元素
if(d==-1) // 输入的是提前结束符
break; // 退出输入数据循环
i++; // 计数器+1
EnQueue(Q,d); // 入队输入的元素
}while(iMAX_QSIZE-1); // 队列元素的个数不超过允许的范围
printf("队列长度为%d,",QueueLength(Q));
printf("现在队列空否?%u(1:空 0:否)\n",QueueEmpty(Q));
printf("连续%d次由队头删除元素,队尾插入元素:\n",MAX_QSIZE);
for(m=1;m=MAX_QSIZE;m++)
{ DeQueue(Q,d); // 删除队头元素,其值赋给d
printf("删除的元素是%d,请输入待插入的元素:",d);
scanf("%d",d); // 输入要入队的元素给d
EnQueue(Q,d); // 将d入队
}
m=QueueLength(Q); // m为队列Q的长度
printf("现在队列中的元素为");
QueueTraverse(Q,print); // 从队头到队尾依次对队列Q的每个元素调用函数print()
printf("共向队尾插入了%d个元素。",i+MAX_QSIZE);
if(m-20)
printf("现在由队头删除%d个元素,",m-2);
while(QueueLength(Q)2)
{ DeQueue(Q,d); // 删除队头元素,其值赋给d
printf("删除的元素值为%d,",d);
}
j=GetHead(Q,d); // 将队头元素赋给d
if(j) // 队列Q不空
printf("现在队头元素为%d\n",d);
ClearQueue(Q); // 清空队列Q
printf("清空队列后,队列空否?%u(1:空 0:否)\n",QueueEmpty(Q));
DestroyQueue(Q); // 销毁队列Q
}
c语言完整实现?
假定已 声明并初始化了 数组 int nums[],数组元素个数 n, 给了 target 的值。
程序如下:
#include stdio.h
int main()
{
int nums[]={2,7,11,15,3},n=5;
int target=9;
int i,j;
int i1=-1,i2=-1;
for (i=0;in-1;i++)
for (j=i+1;jn;j++){
if (nums[i]+nums[j] ==target){ i1=i;i2=j; break;};
}
if (i10) printf("Can not find the elements !\n");
else printf("Two subscripts are i1=%d i2=%d\n",i1,i2);
return 0;
}
输出:Two subscripts are i1=0 i2=1