简单的C语言120行左右代码

急急急!简单一点的,可以自己修改的

注释部分你可以不要,这样算下来也就120左右了,给你不删掉的原因是你可以理解它的作用,如果可以请采纳!!
#include <stdio.h>
#include <stdlib.h>

typedef struct ListNode   
{                          //单链表存储结构
int data;              //数据域
struct ListNode * next;//指针域
}LNode, * pNode;           //LNode等价于struct ListNode
                           //pNode等价于struct ListNode *
/*--------------------创建链表-----------------------*/                          
pNode CreateList()     
{
pNode head, p, q;      //head为头结点,p为新结点,q连接所有的结点
head=q=(pNode)malloc(sizeof(LNode));  //为头结点申请空间
head->next=NULL;                      //头结点的数据域为空,它的数据域一般没实际意义
int x;
printf("请输入数据,以0结束\n");
scanf("%d", &x);
while(x != 0)
{
p = (pNode)malloc(sizeof(LNode)); //满足条件申请空间生成新的结点
p->data = x;                      //x的值赋值给新结点
p->next = NULL;                   //x的下一个结点未知,置空
q->next = p;                      //q连接下一个结点p
q = p;                            //q后移到新结点,准备连接下一个新的结点
scanf("%d", &x);

}
return head;                          //返回头结点
}
/*------------------输出链表---------------------*/
void PrintList(pNode pHead)                
{
pNode node=pHead->next;               //定义一个结点保存头结点的下一个结点
if(NULL == node)                      //判断链表是否为空
{
printf("链表为空\n");
}
while(node != NULL)                   //输出链表的数据域
{
printf("%-3d",node->data);
node = node->next;                //输出一个结点node后移,准备输出下一个结点
}
printf("\n");
}
/*-------------------链表的长度-------------------*/
int Lenthlist(pNode pHead)               
{
pNode node=pHead->next;               //定义一个结点保存头结点的下一个结点
int len = 0;                          //len计算表长
if(NULL == node)                      //判断链表是否为空
{
printf("链表长度为0\n");
return len;
}
while(node != NULL)                   
{
++len;                            //结点存在,len自加
node = node->next;                //输出一个结点node后移
}
return len;
}
/*------------------查询数据-----------------*/
int FindVal(pNode pHead, int val)         //说明:查到了就返回1,并没有说明查到数据的位置
{
pNode node = pHead->next;
while(node != NULL)

if(val == node->data)
return 1;                     //数据存在返回1
node = node->next;
}
return 0;                             //数据不存在返回0
}
/*-------------------位置查询-------------------*/
int Findpos(pNode pHead, int posnode, int *val) 
{
int len = Lenthlist(pHead);           //先求表长,判断查询的位置是否合法
pNode node = pHead->next;
int s = 0;                            //计算第几个结点
if(posnode<1 && posnode>len)          //查询位置不合法返回0
return 0;
else
{
while(node != NULL)
{
s++;
if(s == posnode)              //查询位置
{
*val = node->data;        //位置合法,所对应的的数据通过指针返回给主函数
break;
}
node = node->next;
}
}
return 1;
}
/*------------------按位置删除结点-----------------*/
pNode DeletNode(pNode pHead, int pos)        
{
pNode node = pHead;                     //保存头结点
int len = Lenthlist(pHead)+1;           //头结点也算入链表长
int s=0;
if(pos<1 || pos>=len)                   //删除的结点的位置不合法
{
printf("你要删除的位置不存在\n");
return pHead;
}
else
{
s++;                                
while(node->next != NULL && s<pos)  //先找到要删除结点前面的那一个结点
{
node = node->next;              
s++;
}
pNode q = node->next;               //保存删除的结点
node->next = q->next;               //删除结点的前一个结点链接删除结点的下一个结点
free(q);                            //释放删除结点的空间
return pHead;
}
}
/*----------------插入结点-----------------*/
pNode InsertNode(pNode pHead, int inserval, int pos)
{
pNode node = pHead;              
int len = Lenthlist(pHead)+1;            //加上了头结点的链表的长度
int s=0;
if(pos<1 || pos>len)                     //判断插入的位置是否合法
{
printf("你要插入的位置不合法\n");
return pHead;
}
while(node!=NULL && s<pos-1)             //找到插入结点的前一个位置
{                                        //这也就是为什么要把头结点算入链表的长度
node = node->next;
s++;
}                                        
pNode newnode = (pNode)malloc(sizeof(LNode)); //申请一个结点的空间
newnode->data = inserval;                     //把插入的数据赋值给新结点的数据域
newnode->next = node->next;       //新结点的指针域指向插入位置的结点
node->next = newnode;                         //插入位置的前一个结点的指针域指向新结点
return pHead;                                 //返回头结点
}
/*-----------------链表的逆置------------------*/
pNode ReverseList(pNode phead)
{
pNode q, p = phead->next;
phead->next = NULL;
while(p != NULL)
{
q = p->next;
p->next = phead->next;
phead->next = p;
p = q;
}
return phead;
}
/*------------------销毁链表-----------------*/
pNode DeleteList(pNode phead)
{
pNode q, p = phead;
while(p!=NULL)
{
q = p;
p = p->next;
free(q);
}
 
return phead;
}

int main()
{
pNode HeadNode;                     //头结点
int length = 0;                     //链表长度

int valnode = 0;                    //查询的数据
int valfinal = 0;                   //查询数据后的结果

int posnode = 0;                    //位置查询
int posfinal = 0; //位置查询后的结果
int posval = 0;                     //位置查询到的数据

int delpos = 0;                     //删除结点的位置

int inval = 0;                      //插入的数据
int inpos = 0;                      //插入的位置

HeadNode = CreateList();        //创建链表后的头结点

length = Lenthlist(HeadNode);      //统计链表结点

/*--------------输出链表的长度----------------*/
// printf("链表长度为:%d\n", length); //输出表长

// PrintList(HeadNode);              //输出链表

/*-----------------查询数据-------------------*/
/* printf("请输入你要查找的数据\n");
scanf("%d", &valnode);
valfinal = FindVal(HeadNode, valnode);
if(valfinal == 1)
printf("你要查找的数据存在\n");
else
printf("你要查找的数据不存在\n");

*/
/*-----------------位置查询-------------------*/
/*  printf("请输入你要查询第几个结点:");
scanf("%d",&posnode);
posfinal = Findpos(HeadNode, posnode, &posval);
if(posfinal == 0)
printf("你要查询的位置不合法\n");
else
printf("第%d个结点的数据为:%d\n", posnode, posval);
*/
/*------------------删除结点-----------------*/
/* printf("请输入要删除结点的位置:\n");
scanf("%d", &delpos);
HeadNode = DeletNode(HeadNode, delpos);
printf("删除结点后的链表:\n");
PrintList(HeadNode);   
*/
/*------------------插入结点-----------------*/
/* printf("请输入要插入的数据:");
scanf("%d",&inval);
printf("请输入要插入的位置:");
scanf("%d",&inpos);
HeadNode = InsertNode(HeadNode, inval, inpos);
PrintList(HeadNode);  
*/
/*-----------------链表的逆置------------------*/
/* HeadNode = ReverseList(HeadNode);
PrintList(HeadNode);     */
/*------------------销毁链表-----------------*/
HeadNode = DeleteList(HeadNode);
    if(HeadNode)
printf("链表空!");

return 0;
}

追问

指针节点什么的都没有学到,能有简单的基本结构,不是错的就行了,大神,能在给我一个更简单的吗??万分感谢

追答

这算比较简单的了,更简单的也就60、70行的了

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-05-09
如何用c语言编程 求1+(1+2)+(1+2+3)+(1+2+3+4)……+(1+2+3+……+n
#include<stdio.h>
int main()
{
int i,n,m=0,s=0;
printf("Please input the number:\n");
scanf("%d",&n);
printf("n=%d\n",n);
for(i=1;i<n+1;i++)
{
m+=i;
s+=m;
}
printf("s=%d\n",s);
return 0;
}追问

大神,你这个有行嘛

追答

难道真的交上去一个自己搞不懂的东西??简单最好。。。

追问

这个很好,关键是行数不够,老师要120行左右的

追答http://zhidao.baidu.com/link?url=FLPqXe4NPFEKThlyExN3PzJBfApdwFO_CLDoFMpJsY2Aaaq7NuJwvmrBbKmdojqDr5fgBXvoo3f4sKx0oaPdca

这里有一个你应该看得懂

本回答被网友采纳
第2个回答  2014-05-09
你这是要什么??追问

交作业啊,实现一个简单的功能就行了

第3个回答  2014-05-09
//*************************************************************************************************
//* *
//* ******************************LCD12864驱动程序************************** *
//* *
//*************************************************************************************************

//*************************************************************************************************
//* *
//* ******************************头文件及宏定义************************** *
//* *
//*************************************************************************************************
#include <at89x51.h>

#define RST P2_0
#define E P2_1
#define RW P2_2
#define DI P2_3
#define CS1 P2_5
#define CS2 P2_4
#define LCDPORT P0

#define BUSYSTATUS P0_7 //忙状态位。
//#define DISONSTATUS P0_5 //显示开关状态位。
//#define RSTSTATUS P0_4 //复位状态位。

#define LCDSTARTROW 0xC0 //设置起始行指令。
#define LCDPAGE 0xB8 //设置页指令。
#define LCDLINE 0x40 //设置列指令。

//*************************************************************************************************
//* *
//* ********************************读忙标志位********************************* *
//* *
//*************************************************************************************************
bit bCheckBusy()
{
LCDPORT=0xFF;
RW=1;
DI=0;
E=1;
E=0;
return BUSYSTATUS;
}

//*************************************************************************************************
//* *
//* ********************************写数据********************************* *
//* *
//*************************************************************************************************
void vWriteData(unsigned char ucData)
{
while(bCheckBusy());
LCDPORT=0xFF;

RW=0;
DI=1;
LCDPORT=ucData;
E=1;
E=0;
}

//*************************************************************************************************
//* *
//* ********************************写指令********************************* *
//* *
//*************************************************************************************************
void vWriteCMD(unsigned char ucCMD)
{
while(bCheckBusy());
LCDPORT=0xFF;

RW=0;
DI=0;
LCDPORT=ucCMD;
E=1;
E=0;
}

//*************************************************************************************************
//* *
//* ********************************LCD初始化函数******************************* *
//* *
//*************************************************************************************************
void vLCDInitialize()
{
CS1=1;
CS2=1;
vWriteCMD(0x38); //8位形式,两行字符。
vWriteCMD(0x0F); //开显示。
vWriteCMD(0x01); //清屏。
vWriteCMD(0x06); //画面不动,光标右移。
vWriteCMD(LCDSTARTROW); //设置起始行。
}

//*************************************************************************************************
//* *
//* ******************************显示自定义行********************************* *
//* *
//*************************************************************************************************
//在8×128的格子里显示自定义长度的一行
void vShowCustomRow(unsigned char ucPage,unsigned char ucLine,unsigned char ucWidth,unsigned char *ucaRow)
{
unsigned char ucCount; //取值范围:ucPage:0~7;ucLine:0~127;
if(ucLine<64) //ucWidth:0~127;ucLine+ucWidth<1128。
{
CS1=1;
CS2=0;
vWriteCMD(LCDPAGE+ucPage);
vWriteCMD(LCDLINE+ucLine);
if((ucLine+ucWidth)<64)
{
for(ucCount=0;ucCount<ucWidth;ucCount++)
vWriteData(*(ucaRow+ucCount));
}
else
{
for(ucCount=0;ucCount<64-ucLine;ucCount++)
vWriteData(*(ucaRow+ucCount));

CS1=0;
CS2=1;
vWriteCMD(LCDPAGE+ucPage);
vWriteCMD(LCDLINE);
for(ucCount=64-ucLine;ucCount<ucWidth;ucCount++)
vWriteData(*(ucaRow+ucCount));
}
}
else
{
CS1=0;
CS2=1;
vWriteCMD(LCDPAGE+ucPage);
vWriteCMD(LCDLINE+ucLine-64);
for(ucCount=0;ucCount<ucWidth;ucCount++)
vWriteData(*(ucaRow+ucCount));
}
}
//*************************************************************************************************
//* *
//* *****************************汉字显示函数*********************************** *
//* *
//*************************************************************************************************
//此函数将16×16汉字显示在8×128的格子里。
void vShowOneChin(unsigned char ucPage,unsigned char ucLine,unsigned char *ucaChinMap)
{
vShowCustomRow(ucPage,ucLine,16,ucaChinMap);
vShowCustomRow(ucPage+1,ucLine,16,ucaChinMap+16);

}
//*************************************************************************************************
//* *
//* *****************************字符显示函数*********************************** *
//* *
//*************************************************************************************************
//此函数将8×16字符显示在8×128的格子里。
void vShowOneChar(unsigned char ucPage,unsigned char ucLine,unsigned char *ucaCharMap)
{
vShowCustomRow(ucPage,ucLine,8,ucaCharMap);
vShowCustomRow(ucPage+1,ucLine,8,ucaCharMap+8);

}

//*************************************************************************************************
//* *
//* **********************************显示图片*********************************** *
//* *
//*************************************************************************************************
void vShowGraph(unsigned char ucPage,unsigned char ucLine,unsigned char ucWidth,unsigned char ucHigh,unsigned char * ucaGraph)
{
unsigned char ucCount;
for(ucCount=0;ucCount<ucHigh;ucCount++)
vShowCustomRow(ucPage+ucCount,ucLine,ucWidth,ucaGraph+ucCount*ucWidth);
}
相似回答