当前位置:首页 » 编程语言 » C语言TODO函数
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

C语言TODO函数

发布时间: 2023-05-29 03:55:39

Ⅰ 一元稀疏多项式计算器 c语言编写

datastruct.h

typedef struct list
{
int c; //多项式的项数
int e; //多项式的指数
struct list *next; //下一结点
};

typedef struct list *LinkList;
typedef struct list Node;

下面是线性表的神郑操作相关函数声明,对应文件ListOper.h:
//File: ListOper.h

#ifndef DATASTRUCT
#define DATASTRUCT
#include "datastruct.h"
#endif

//some functions declaretioin

bool CreateList(LinkList &L);
Node *CreateNode(int e, int c);
void FreeList(LinkList &L);
void SortList(LinkList &L);
void DeleteNextNode(Node *d);
void SweepNextNode(Node *s);
void OutPutList(LinkList &L);

相关函数的实现,对应文件ListOper.cpp:
//File: ListOper.cpp

#include <stdlib.h>清派
#include <iostream>
#ifndef DATASTRUCT
#define DATASTRUCT
#include "datastruct.h"
#endif
#include "ListOper.h"

using namespace std;

bool CreateList(LinkList &L)
{
//TODO: 创建线性链表
Node *head;
head=(Node *)malloc(sizeof(Node));
if(head==NULL)
{
cout << "内存分配错误" << endl;
return false;
}
head->next=NULL;
head->c=0;
head->e=0;
L=head;
return true;
}

Node *CreateNode(int e, int c)
{
//TODO: 创建结点
Node * pos;
pos=(Node *)malloc(sizeof(Node));
if(pos==NULL)
{
cout << "内存分配错误" << endl;
exit(1);
}
pos->e=e;
pos->c=c;
pos->next=NULL;
return pos;
}

void FreeList(LinkList &L)
{
//TODO: 释放整个线性表所占用的内存空间
Node *pos;
Node *next;
pos=L;
while(pos!=NULL)
{
next=pos->答瞎贺next;
free(pos);
pos=next;
}
}

void SortList(LinkList &L)
{
bool flag=true; //是否需要排序标志
Node *head=L->next;
Node *pos;
Node *last;
Node *temp;
if(head->next==NULL)
{
return;
}
while(flag)
{
flag=true;
last=head;
pos=last->next;
if(last==NULL||last->next==NULL)
{
break;
}
while(last!=NULL && last->next!=NULL)
{
flag=false;
pos=last->next;
if(last->e<pos->e) //哈哈哈哈哈,HTML代码
{
SweepNextNode(last);
flag=true;
}
if(last->e==pos->e)
{
last->c+=pos->c;
DeleteNextNode(last);
flag=true;
/*last=last->next;
pos=last->next;*/
}
last=last->next;
}
}
}

void DeleteNextNode(Node *d)
{
Node *temp;
temp=d->next;
d->next=temp->next;
free(temp);
}

void SweepNextNode(Node *s)
//一点偷懒的办法,只交换值,不修改指针
{
int c,e;
c=s->c;e=s->e;
s->c=s->next->c;s->e=s->next->e;
s->next->c=c;s->next->e=e;
}

void OutPutList(LinkList &L)
{
Node *pos;
pos=L->next;
cout << "输出表达式:";
while(pos!=NULL)
{
if(pos->c>0)
{
cout << "+";
}
if(pos->c!=1)
{
cout << pos->c;
}
if(pos->e!=0)
{
cout << "x^";
cout << pos->e;
}
pos=pos->next;
}
cout << endl;
}

主单元文件main.cpp:
#include <iostream>
#include <stdlib.h>
#include <ctype.h>
#include "ListOper.h"

using namespace std;

LinkList AnayString(char aString[], int aLength);

int main(int argc, char *argv[]) //-------------------------------
{
LinkList L;
char InStr[1024];
int len;
cout << "一元稀疏多项式计算器" << endl;
cout << "Copyright@1999-2004, Gashero Liu." << endl;
cout << "作者:刘晓明" << endl << endl;
cout << "请输入一个1024个字符以内的稀疏多项式:";
cin >> InStr;
len=strlen(InStr);
L=AnayString(InStr,len);
SortList(L);
OutPutList(L);
FreeList(L);
system("PAUSE");
return 0;
}

LinkList AnayString(char aString[], int aLength) //---------------
//TODO: 字符串分析函数
{
LinkList L=NULL;
Node *pos=NULL;
Node *last;
Node *head;
CreateList(L);
head=L;
last=head;
int c=0;
int e=0;
char temp[1];
char tp;
bool plus=true;
char status='n'; //状态指示符,我省略了系数为负的情况
/*
n: 非运算状态
c: 正在计算系数
e: 正在计算指数
p: 指数为0
f: 完成了一个项目的输入
*/
for(int i=0;i<aLength;i++)
{
temp[0]=aString[i];
tp=temp[0];
switch(status)
{
case 'n':
{
c=0;e=0;
status='c';
if(tp=='-')
{
plus=false;
continue;
}
if(isdigit(tp))
{
c=atoi(temp);
continue;
}
if(tp=='x')//多项式以x开头
{
c=1;
status='e';
continue;
}
}
case 'c':
{
if(isdigit(aString[i]))
{
if(plus)
{
c=c*10+atoi(temp);
}
else
{
c=c*10-atoi(temp);
}
continue;
}
if(tp=='x')
{
if(c==0)
{
c=1;
}
status='e';
e=0;
continue;
}
//此处考虑了常数项出现在其他位置的可能
if(tp=='+')
{
plus=true;
status='p';
continue;
}
if(tp=='-')
{
plus=false;
status='p';
continue;
}
/*if(temp[0]=='^')
{
status='e';
e=0;
continue;
}*/ //此种情况不可能出现
continue;
} //正在解析系数
case 'e':
{
if(tp=='^')
{
continue;
}
if(isdigit(tp))
{
e=e*10+atoi(temp);
continue;
}
if(tp=='+')
{
plus=true;
status='f';
continue;
}
if(tp=='-')
{
plus=false;
status='f';
continue;
}
} //正在解析系数
case 'p':
{
e=0;
status='f';
continue;
}
case 'f':
{
pos=CreateNode(e,c);
last->next=pos;
last=pos;
c=0;e=0;
status='c';
i--;
continue;
}
}
}
pos=CreateNode(e,c);
last->next=pos;
return L;

不知道是不是你需要的

Ⅱ 用C语言编写一Total函数,求N行M列的二维数组中所有数的和

当行列较多,或元素数值较大时,唯搭并和可能很大指迹,所枝档以Total函数用double送返。
元素数值用 float 型 (允许输入float,int值)。
N,M不定,所以动态分配数组。
假定N,M大于等于2。

#include <stdio.h>
#include <stdlib.h>

double Total(float **a,int N,int M) ; // 函数原型

main (int argc, char *argv[])
{

int i,j;
float **a;
int N,M;

Lab1:
printf("Enter N: ");
scanf("%d",&N);
if (N <=1 ) {
printf("N must >= 1\n");
goto Lab1;
}

Lab2:
printf("Enter M: ");
scanf("%d",&M);
if (M <=1 ) {
printf("M must >= 1\n");
goto Lab2;
}

a = (float **) malloc( N * sizeof(float));

for(i=0; i < M ; i++)
*(a+i) = (float *)malloc(M * sizeof(float));

// a[j][i]; j行,i列

for (j=0;j<N;j++) for (i=0;i<M;i++) {
printf("enter: a[%d][%d]=",j,i);
scanf("%f", &a[j][i]);
}
printf("%lf",Total(a,N,M)) ;
}

double Total(float **a,int N,int M)
{
int i,j;
double sum;
sum=0;
for (j=0;j<N;j++) for (i=0;i<M;i++) sum = sum + a[j][i];
return sum;
}

Ⅲ c语言一个判断正方形的问题 请大神在判断函数里面帮我写一下

在你程序基础上修改的

#include<stdio.h>
#include<stdlib.h>

typedefstructcoordinate
{
intx;
inty;
}coordinate;

typedefstruct
{
coordinatea;
coordinateb;
coordinatec;
coordinated;
}quadrangle;

quadrangle*LoadData(char*filename,int*num)
{
FILE*fp;
inti;
quadrangle*testdata;

if((fp=fopen(filename,"rt"))==NULL)
{
printf("File%scannotbefound! ",filename);
exit(-1);
}

fscanf(fp,"%d ",num);
testdata=(quadrangle*)malloc((*num)*sizeof(quadrangle));
for(i=0;i<(*num);i++)
{
fscanf(fp,"%d%d ",&testdata[i].a.x,&testdata[i].a.y);
fscanf(fp,"%d%d ",&testdata[i].b.x,&testdata[i].b.y);
fscanf(fp,"%d%d ",&testdata[i].c.x,&testdata[i].c.y);
fscanf(fp,"%d%d ",&testdata[i].d.x,&testdata[i].d.y);
fscanf(fp," ");
}

fclose(fp);

returntestdata;
}

/*Iftheinputshapeisasquare,return1;elsereturn0.*/
intIsSquare(quadrangle*shape)
{
coordinatev1,v2;
doublelen1sqr,len2sqr;
doubledotProct,crossProct;

v1.x=shape->a.x-shape->b.x;
v1.y=shape->a.y-shape->b.y;
v2.x=shape->c.x-shape->d.x;
v2.y=shape->c.y-shape->d.y;

len1sqr=v1.x*v1.x+v1.y*v1.y;
len2sqr=v2.x*v2.x+v2.y*v2.y;
if(len1sqr!=len2sqr)
return0;

crossProct=v1.x*v2.y-v1.y*v2.x;
if(crossProct==0){
v2.x=shape->a.x-shape->c.x;
v2.y=shape->扮册a.y-shape->c.y;
len2sqr=v2.x*v2.x+v2.y*v2.y;
dotProct=v1.x*v2.x+v1.y*v2.y;
if(dotProct==0){
len2sqr=v2.x*v2.x+v2.y*v2.y;
if(len1sqr==len2sqr)
return枯山1;
return0;
}
v2.x=shape->a.x-shape->d.x;
v2.y=shape->a.y-shape->d.y;
dotProct=v1.x*v2.x+v1.y*v2.y;
if(dotProct==0){
len2sqr=v2.x*v2.x+v2.y*v2.y;
if(len1sqr==len2sqr)
return1;
return0;
}
}

dotProct=v1.x*v2.x+v1.y*v2.y;
if(dotProct==0){
v1.x=shape->a.x-shape->c.x;
v1.y=shape->a.y-shape->c.y;
v2.x=shape->a.x-shape->d.x;
v2.y没缺中=shape->a.y-shape->d.y;
len1sqr=v1.x*v1.x+v1.y*v1.y;
len2sqr=v2.x*v2.x+v2.y*v2.y;
dotProct=v1.x*v2.x+v1.y*v2.y;
if(len1sqr==len2sqr&&dotProct==0)
return1;
}

return0;
}

intmain()
{
intnumber;
inti;
intresult;

quadrangle*data;
data=LoadData("test2.txt",&number);

for(i=0;i<number;i++)
{
result=IsSquare(&data[i]);
if(result)
printf("Yes ");
else
printf("No ");
}

if(data!=NULL)
free(data);

return0;
}

Ⅳ 在C语言中,GOTO函数怎么使用,需注意什么语法

i=0;
start:
c=a+b;
a=b;
printf(“%d”,i);
for(i=0;i<100;i++)
{
if(i==50)
goto start
}
这是随便打的一个程序没有任何意义,就是当i=50的时候会跳到goto后面所指向的位置(在此处是c=a+b;前面),goto在C中是一个及有问题的语句,所有用goto的语句都可以用别的语句实现,使用goto语句极大的降低程序的可读性,最好不要使用这条语句

Ⅳ c语言 谁给我写个修改文件信息的函数代码

文件是二进制的 还是字符串的 ?

在带尘吗 说话 你还想不想解决问题了?

你要是二进制的我直接就可以处理了

你现在是字符串的 我就衫没需要知道你存入蠢塌禅的格式

进行解析 快给我你的文件内容格式

Ⅵ C语言常用的函数有哪些

C语言库函数,常用库函数有:

1、scanf格式输入函数

2、printf格式输出函数

3、systemdos命令函数

4、sort排序

5、main主函数

6、fgets文件读取字符串函数

7、fputs文件写入字符串函数

8、fscanf文件格式读取函数

9、fprintf文件格式写入函数

10、fopen打开文件函数

11、getchar输入字符函数

12、putchar输出字符函数

13、malloc动态申请内存函数

14、free释放内存函数

15、abs求绝对值数学函数

16、sqrt求平方根数学函数

(6)C语言TODO函数扩展阅读

语言组成:


1、数据类型

C的数据类型包括:整型、字符型、实型或浮点型(单精度和双精度)、枚举类型、数组类型、结构体类型、共用体类型、指针类型和空类型。

2、常量与变量

常量其值不可改变,符号常量名通常用大写。

变量是以某标识符为名字,其值可以改变的量。标识符是以字母或下划线开头的一串由字母、数字或下划线构成的序列,请注意第一个字符必须为字母或下划线,否则为不合法的变量名。变量在编译时为其分配相应存储单元。

3、数组

如果一个变量名后面跟着一个有数字的中括号,这个声明就是数组声明。字符串也是一种数组。它们以ASCII的NULL作为数组的结束。要特别注意的是,方括内的索引值是从0算起的。

4、指针

如果一个变量声明时在前面使用 * 号,表明这是个指针型变量。换句话说,该变量存储一个地址,而 *(此处特指单目运算符 * ,下同。C语言中另有 双目运算符 *) 则是取内容操作符,意思是取这个内存地址里存储的内容。指针是 C 语言区别于其他同时代高级语言的主要特征之一。

Ⅶ 编写函数把华氏温度转为摄氏温度,公式为C=(F-32)*5/9,在主函数中输入和输出……

按照你的要求编写的华氏温度转为摄氏温丛斗度的C语言程序如下

#include<stdio.h>

float FtoC(float F)

{

return (F-32)*5/9.0;

}

int main()

{

float F,C;

printf("请输入华氏扰扮度: ");

scanf("%f",&F);//输入华氏度

C=FtoC(F);//调用FtoC函数实现华氏度转摄氏度

printf("摄氏度为%.2f",C);//打印摄氏度,保缓郑灶留两位小数

return 0;

}

Ⅷ 输入一个十进制整数,输出其对应的二进制数,用C语言的函数知识。

#include<stdio.h>

int main()

int i,j,n,m=-1,a[16];

printf("请输入十进制数");

scanf("%d",&n);

while(n!=0)

i=n%2;

a[++m]=i;

n=n/2;

for(j=m;j>=0;j--)

printf("%d",a[j]);

return0;

(8)C语言TODO函数扩展阅读:

main函数用法

1、C++中的main函数

C++继承了C语言的大部分特性,因此保留了“程序总是从main函数开始执行,且总是默认从main函数的return语句或结尾处结束运行”这一传统,但是要注意,C++中的main函数要想作为程序执行的出入口,必须写在全局(Global)范围,

不能写成某个结构体或某个类的成员。虽然main函数可以作为结构体或者类的成员函数,但相应地会失去作为程序出入口的功能。

C++中全局main函数的书写格式与C语言完全相同,功能也完全相同,且同一C++程序同样只能有一个全局main函数。

2、Java中的main函数

Java同样是以main函数作为程序执行出入口的,但Java作为“更纯洁”的面向对象语言,它的main函数与C/C++有很大的不同。

首先,返回值的概念淡化,在Java Application中main不允许返回值,因此int main是被禁止的,必须使用void main,int main仅限在JavaBean中使用。

其次,Java中所有的函数必须属于类,没有什么全局函数一说,因此main函数不能是全局成员,必须是某个类的成员。

第三,由于main函数变成了类的成员函数,因此要想直接被系统调用,还必须使用public static使其成为静态函数并具有公开权限。

第四,main函数的参数被简化,只需要提供字符串数组即可,不需要提供参数个数(这是由于Java的数组具有下标检查功能的原因)

Java Application中的main函数一般格式如下(类名可以自定义,但保存为Java源码时,主文件名必须与类名相同,否则可能无法运行)

public class MainDemo{

public static void main(String[]args){

//TODO:在此处写入主函数的内容

}

}

Java Applet的运行机制与Java Application完全不同,因此不需要main函数

3、C#中的main函数

C#中的main函数与Java大同小异,同样必须是类成员,同样使用字符串数组作唯一参数,同样是静态函数,同样的void main,

与之不同的是:main的首字母变成了大写,即"Main函数“,且是否限定为public级别已经无所谓了(默认没有public,但某些场合可能还是需要public)

另外,需要注意的是,C#中不再有”类名必须与主文件名同名“的限制,即使类名不和主文件名相同,程序照样可以运行。

C#应用程序中的main函数默认是这样的(注意main的首字母已是大写)

C#和C/C++、java不同的是C#不在拘泥于必须从main()函数开始执行,C#是属于事件触发。

class Program{

static void Main(string[]args){

Ⅸ c语言中 等待的函数是什么呢

包含头文件:
#include
<windows.h>
调用
Sleep(3000);
就是等待3000毫秒(3秒)。第一个字母S大写。
--------
也可以自己写一个
等待
整数秒的函数:
#include
<time.h>
void
wait
(
int
seconds
)
{
clock_t
endwait;
endwait
=
clock
()
+
seconds
*
CLK_TCK
;
while
(clock()
<
endwait)
{}
}
调用
wait(3);
就是等待3秒

Ⅹ c语言递归函数 输出十进制数的二进制的补码,怎么写

如果是正数,补码=原码,如果是负数,x = x + 1 + 0xffffffff,再对x求原码
scanf("%d", &x);
x = (x + 1 + 0xffffffff) % 0xffffffff;
//TODO...再对x求原码就行
//这里0xFFFFFFFF为int能表示的最大值,如果int占4个字节的话,一般都是4个字节