當前位置:首頁 » 編程語言 » c語言三元組

c語言三元組

發布時間: 2022-07-21 05:22:57

A. c語言怎麼在main函數中直接寫出一個三元組

你是說輸出一串數據,按3個一組?若是,程序如下。
程序用隨機數,如果你自己已有數據,可以放在數組里,依次輸出便可。
#include<stdio.h>
#include <time.h>
int main() {
int x;
int i,n;
srand(time(0)); //隨機種子
n=5; //假定5組
printf("T={");
for (i=0;i<n;i++){
printf("(");
x=rand()%100;printf("%d,",x);
x=rand()%100;printf("%d,",x);
x=rand()%100;printf("%d),",x);
}
printf("\b}\n");
return 0;
}

例如輸出:T={(54,65,4),(92,58,76),(30,36,70),(74,4,91),(48,31,32)}

B. C語言 三元組 問題

//三元組表示稀疏矩陣

#include<stdio.h>
#define N 1000

typedef struct Elem
{
int i,j;
int e;
} ELEM; /* 表示一個元素的三元組結構 */
void main()
{
ELEM mat[N];
int row,col; /* 行列數 */
int i,j,k=0,n;
int x;
char fn[]="data.txt";
FILE *pf=fopen(fn,"r");
if(!pf){
printf("Error: Can't open the file: %s\n",fn);
return;
}
fscanf(pf,"%d%d",&row,&col); /* 讀取行列數 */
/* 讀取矩陣數據,並存入三元組 */
for(i=0; i<row; i++)
for(j=0; j<col; j++){
fscanf(pf,"%d",&x);
if(x!=0){
mat[k].e=x;
mat[k].i=i;
mat[k].j=j;
if(k%5==0) printf("\n");
k++;
printf("[%2d][%2d]=%3d ",i,j,x);
}
}
printf("\n");
fclose(pf);
n=k; k=0;
/* 將給定的一個三元組(就用前面得到的這個三元組),輸出稀疏矩陣 */
for(i=0; i<row; i++){
for(j=0; j<col; j++){
if(mat[k].i==i && mat[k].j==j){
printf("%3d ",mat[k].e);
k++;
}else
printf("%3d ",0);
}
printf("\n");
}
printf("\n");
}
/*
注意,為了便於測試,將一個稀疏矩陣保存於數據文件data.txt中(該文件放在源程序所在的目錄中),文件的內容如下:
第一行兩個數據(數據間用空格分隔):r c(分別表示矩陣行數和列數)
接下來是矩陣的數據,共有r行,每行c個數據。例如:
10 10
0 0 0 0 0 1 0 0 0 1
2 0 0 0 1 0 0 0 0 0
0 3 0 0 0 0 0 1 0 0
0 0 0 0 0 0 4 0 0 0
0 0 5 0 0 0 0 0 1 0
0 0 0 0 0 1 0 0 0 1
2 0 0 0 1 0 0 0 0 0
0 3 0 0 0 0 0 1 0 0
0 0 0 0 0 0 4 0 0 0
0 0 5 0 0 0 0 0 1 0
*/

C. C語言三元組輸入輸出的轉置矩陣

用三元組存儲的稀疏矩陣的轉置運算

三元組採用行優先表示法,轉置後的矩陣的三元組同樣要採用行優先表示法

0 1 12
0 2 9
2 0 -3
3 5 14
3 2 24
4 1 18
5 0 15
5 3 -7

struct node
{
int i,j; //定義三元組的行、列號
int v; //三元組的值
};

struct sparmatrix
{
int rows,cols; //稀疏矩陣的行、列數
int terms; //稀疏矩陣的非零元個數
struct node data[maxsize]; //存放稀疏矩陣的三元組表
};

(1)按照A的列序進行轉置
由於A的列即為B的行,在a.data(原表)中,按列掃描,則得到的b.data(轉置表)必按行優先存放。

但為了找到A的每一列中所有的非零的元素,每次都必須從頭到尾掃描A的三元組表(有多少列,則掃描多少遍)

void transpose(struct sparmatrix a)
{
struct sparmatrix b; /*b為a的轉置*/
int ano,bno=0,col,i;
b.rows=a.cols; b.cols=a.rows;
b.terms=a.terms;
if (b.terms>0)
{
for ( col=0; col<a.cols; col++) /*按列號掃描*/
for( ano=0;ano<a.terms;ano++) /*對三元組掃描*/
if (a.data[ano].j==col) /*進行轉置*/
{ b.data[bno].j=a.data[ano].i;
b.data[bno].i=a.data[ano].j;
b.data[bno].v=a.data[ano].v;
bno++;
}
}
…………….

(2)按照A的行序進行轉置
即按a.data中三元組的次序進行轉置,並將轉置後的三元組放入b中恰當的位置。

若能在轉置前求出矩陣A的每一列col(即B中每一行)的第一個非零元轉置後在b.data中的正確位置pot[col](0≤col<a.cols),那麼在對a.data的三元組依次作轉置時,只要將三元組按列號col放置到b.data[pot[col]]中,之後將pot[col]內容加1,以指示第col列的下一個非零元的正確位置。

void fastrans(struct sparmatrix a)
{
struct sparmatrix b;
int pot[maxsize],col,ano,bno,t,i;
b.rows=a.cols; b.cols=a.rows;
b.terms=a.terms;
if(b.terms>0)
{
for(col=0;col<=a.cols;col++)
pot[col]=0;
for( t=0;t<a.terms;t++) /*求出每一列的非零元個數*/
{
col=a.data[t].j;
pot[col+1]=pot[col+1]+1;
}

pot[0]=0;
for(col=1;col<a.cols;col++) /*求出每一列的第一個非零元在轉置後的位置*/
pot[col]=pot[col-1]+pot[col];
for( ano=0;ano<a.terms;ano++) /*轉置*/
{ col=a.data[ano].j;
bno=pot[col];
b.data[bno].j=a.data[ano].i;
b.data[bno].i=a.data[ano].j;
b.data[bno].v=a.data[ano].v;
pot[col]=pot[col]+1;
}
}

D. c語言三元組問題。

一、你這個代碼寫的是C++語言的方式,需要將文件名寫成rrr.cpp才可以!

二、有一處錯誤,需要調整一下,以下為修改後的代碼

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

typedefintElemSet;
typedefintStatus;
voidInitTriplet(ElemSet*&T,ElemSetv1,ElemSetv2,ElemSetv3);//
StatusDestroyTriplet(ElemSet*T);
ElemSetGet(ElemSet*T,inti,ElemSet*e);
StatusPut(ElemSet*T,inti,ElemSete);
ElemSetMax(ElemSet*T);
ElemSetMin(ElemSet*T);

intmain()
{
ElemSet*T;
InitTriplet(T,100,200,300);//
ElemSete;
printf("第二個元素的值=%d ",Get(T,2,&e));
Put(T,3,150);
ElemSeta=Get(T,3,&a);
printf("第三個元素的值=%d ",a);
printf("最大的元素值=%d ",Max(T));
printf("最小的元素值=%d ",Min(T));
DestroyTriplet(T);
system("pause");
return0;
}

voidInitTriplet(ElemSet*&T,ElemSetv1,ElemSetv2,ElemSetv3)//因為你傳遞的是一維指針,如果只是普通參數傳遞,則,T的變化不能反應到主程序中去,所以,要定義成引用變數!
{
T=(ElemSet*)malloc(ArSize*sizeof(ElemSet));
if(!T)
{
printf("內存分配失敗! ");
exit(EXIT_FAILURE);
}
T[0]=v1;
T[1]=v2;
T[2]=v3;
}
StatusDestroyTriplet(ElemSet*T)
{
free(T);
T=NULL;
return1;
}
ElemSetGet(ElemSet*T,inti,ElemSet*e)
{
if(i<1&&i>3)
return0;
*e=T[i-1];
return*e;
}
StatusPut(ElemSet*T,inti,ElemSete)
{
if(i<1&&i>3)
return0;
T[i-1]=e;
return1;
}

ElemSetMax(ElemSet*T)
{
ElemSetmax=T[0];
for(inti=1;i<ArSize;i++)
if(T[i]>max)
max=T[i];
returnmax;
}
ElemSetMin(ElemSet*T)
{
ElemSetmin=T[0];
for(inti=1;i<ArSize;i++)
if(T[i]<min)
min=T[i];
returnmin;
}

E. C語言數據結構問題,用結構體表示三元組(可以是不同類型的),並編程實現三元組基本操作給了我源代碼

兄弟,你在fun函數中的t是局部變數,也就是說你並沒有為全局變數分配內存。要這樣改:
status fun(int **t,int v1,int v2,int v3)
{
*t=(int *)malloc(3*sizeof(int));
if(!(*t))exit(OVERFLOW);
(*t)[0]=v1;(*t)[1]=v2;(*t)[2]=v3;
return OK;
}
調用時:
fun(&t,v1,v2,v3);

F. 用C語言實現整形三元組A(12,5,34)和浮點型三元組B(12.5,1.2,124.6)的構造,

// Triplet.h 頭文件


#ifndef _TRIPLET_H_

#define _TRIPLET_H_


#include<malloc.h>

#include<stdio.h>

#include<process.h>

#define OK 1

#define ERROR 0

#define OVERFLOW -1


typedef int Status;

typedef int ElemType; // 更改三元組數據類型 int, float, double

typedef ElemType *Triplet;


Status InitTriplet(Triplet &T, ElemType v1, ElemType v2, ElemType v3); // 初始化三元組

Status DestroyTriplet(Triplet &T); // 銷毀三元組


Status Get(Triplet T, int i, ElemType &e); // 得到三元組的值

Status Put(Triplet T, int i, ElemType e); // 給三元組賦值


Status Ascending(Triplet T); // 升序排列

Status Descending(Triplet T); // 降序排列


Status Max(Triplet T, ElemType &e); // 取得三元組最大值

Status Min(Triplet T, ElemType &e); // 取得三元組最小值


#endif


——————————————————————————————————

// Triplet.cpp 三元組各函數定義源文件


#include "Triplet.h"

Status InitTriplet(Triplet &T, ElemType v1, ElemType v2, ElemType v3)

{ // 操作結果:構造三元組T,依次置T的三個元素的初值為v1,v2和v3

if (!(T = (ElemType *)malloc(3 * sizeof(ElemType))))

exit(OVERFLOW);

T[0] = v1, T[1] = v2, T[2] = v3;

return OK;

}


Status DestroyTriplet(Triplet &T)

{ // 操作結果:三元組T被銷毀

free(T);

T = NULL;

return OK;

}


Status Get(Triplet T, int i, ElemType &e)

{ // 初始條件:三元組T已存在,1≤i≤3。操作結果:用e返回T的第i元的值

if (i<1 || i>3)

return ERROR;

e = T[i - 1];

return OK;

}


Status Put(Triplet T, int i, ElemType e)

{ // 初始條件:三元組T已存在,1≤i≤3。操作結果:改變T的第i元的值為e

if (i<1 || i>3)

return ERROR;

T[i - 1] = e;

return OK;

}


Status Ascending(Triplet T)

{ // 初始條件:三元組T已存在。操作結果:將T的三個元素按升序排列

for (int i = 0; i < 3; i++){

for (int j = 0; j < 2 - i; j++){

if (T[j]>T[j + 1]){

ElemType temp = T[j];

T[j] = T[j + 1];

T[j + 1] = temp;

}

}

}

return OK;

}


Status Descending(Triplet T)

{ // 初始條件:三元組T已存在。操作結果:將T的三個元素按降序排列

for (int i = 0; i < 3; i++){

for (int j = 0; j < 2 - i; j++){

if (T[j]<T[j + 1]){

ElemType temp = T[j];

T[j] = T[j + 1];

T[j + 1] = temp;

}

}

}

return OK;

}


Status Max(Triplet T, ElemType &e)

{ // 初始條件:三元組T已存在。操作結果:用e返回T的三個元素中的最大值

e = T[0] >= T[1] ? T[0] >= T[2] ? T[0] : T[2] : T[1] >= T[2] ? T[1] : T[2];

return OK;

}


Status Min(Triplet T, ElemType &e)

{ // 初始條件:三元組T已存在。操作結果:用e返回T的三個元素中的最小值

e = T[0] <= T[1] ? T[0] <= T[2] ? T[0] : T[2] : T[1] <= T[2] ? T[1] : T[2];

return OK;

}


——————————————————————————————————

// main1.cpp 如果Triplet.h里是typedef int ElemType; 即聲明的整型三元組 主函數源文件


#include "Triplet.h"

int main(){

Triplet T;

ElemType m;

Status i;

i = InitTriplet(T, 12, 5, 34);


printf("整型三元組A:");

for (int k = 1; k <= 3; k++){

Get(T, k, m);

printf("%d ", m);

}

printf(" ");


if ((i = Max(T, m)) == OK)

printf("整型三元組中的最大值為:%d ", m);


Descending(T);

printf("降序排序後的三元組: 整型三元組A:");

for (int k = 1; k <= 3; k++){

Get(T, k, m);

printf("%d ", m);

}

printf(" ");


DestroyTriplet(T);


return 0;

}

G. c語言 三元組 還原

是這個意思吧?

#include <stdio.h>
struct TDATA
{
int x, y;
int n;
};
int main()
{
struct TDATA t[]={{5,2,9}, {3,6,8}, {1,4,6},{2,3,7}};
int *m;
int xmax=-1, ymax=-1;
int i, j;
for(i=0; i<sizeof(t)/sizeof(t[0]); i++)
{
if (xmax < t[i].x) xmax=t[i].x;
if (ymax < t[i].y) ymax=t[i].y;
}
m = (int*)malloc((xmax+1)*(ymax+1)*sizeof(int));
memset(m, 0, (xmax+1)*(ymax+1)*sizeof(int));
for(i=0; i<sizeof(t)/sizeof(t[0]); i++)
{
*(m+(t[i].y-1)*ymax+t[i].x-1) = t[i].n;
}

printf("\n");
for(i=0;i<ymax;i++)
{
for(j=0; j<xmax; j++)
{
printf("%d ", *(m+i*ymax+j));
}
printf("\n");
}
free(m);
return 0;
}

H. c語言中的三元組的操作問題!!!

&本身表示引用,如此寫會更明白 int*&,就是一個指向整形指針的引用。
這個引用起什麼作用呢?它可以讓T保留在函數中的改變。考慮如下程序:

typedef int ElemType;
typedef ElemType *Triplet;

void test(Triplet& T)
{
cout << *T << endl;

int two = 2;
T = &two;

cout << *T << endl;
}

int main()
{
int one = 1;
Triplet T = &one;

test(T);

cout << *T << endl;

return 0;
}

其結果為 1 2 2;
如果去掉&,結果為 1 2 1。
也就是說,用了&,T在函數的局部區域里,相當於一個全局變數,而不是局部變數。被改變後的值保留了下來。如果沒有&,T在函數中被復制了一份,只作用於局部區域。
《Effective C++》的作者如是說:在C++底層實現中,&其實最終是用指針實現的。

I. 用C語言怎麼編程 三元組

可以用結構體實現
struct three{
//第一部分
//第二部分
//第三部分
}

熱點內容
緩存網易音樂在內存卡 發布:2025-03-01 00:46:24 瀏覽:123
零基礎編程培訓學費要多少 發布:2025-03-01 00:46:13 瀏覽:32
聯通50兆上傳速度 發布:2025-03-01 00:41:16 瀏覽:777
老師腳本本 發布:2025-03-01 00:41:11 瀏覽:625
初中貓腳本 發布:2025-03-01 00:40:38 瀏覽:485
車船編程 發布:2025-03-01 00:36:23 瀏覽:904
伺服器已禁用設備是什麼意思 發布:2025-03-01 00:25:55 瀏覽:211
python下載html 發布:2025-03-01 00:16:55 瀏覽:956
ftp未找到命令 發布:2025-03-01 00:15:54 瀏覽:942
vivo怎麼清除賬戶密碼 發布:2025-03-01 00:10:03 瀏覽:115