當前位置:首頁 » 編程語言 » 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個位元組