亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? juzhenyunsuanqi.c

?? 是期末的數(shù)據(jù)結(jié)果的課程設(shè)計(jì)
?? C
字號(hào):
#include <stdio.h>
#define MAXSIZE 1000
#define MAXRC 100
typedef struct
{
	int i,j;
	int e;
}Triple;
typedef struct
{
	Triple data[MAXSIZE+1];
	int rpos[MAXRC+1];//存放各行第一個(gè)非零元在存儲(chǔ)數(shù)組中的位置,若該行無非零元,則其rpos[]值為零
	int mu,nu,tu;
}RLSMatrix;

ScanRLSMatrix(RLSMatrix *T)
{//矩陣輸入函數(shù),輸入各行非零元及其在矩陣中的行列數(shù)
	int k;
    printf("        ***********************************************************\n");
	printf("                  請(qǐng)輸入矩陣的行數(shù),列數(shù),非零元素個(gè)數(shù)             \n");
	printf("            ");
	scanf("%d,%d,%d",&(*T).mu,&(*T).nu,&(*T).tu);
	if((*T).tu>MAXSIZE){printf("非零個(gè)數(shù)超出定義范圍!");exit(0);}
	for(k=1;k<=(*T).tu;k++){
			printf("            按行存儲(chǔ)請(qǐng)輸入第%d個(gè)非零元素的行數(shù),列數(shù),其值:",k);
			scanf("%d,%d,%d",&(*T).data[k].i,&(*T).data[k].j,&(*T).data[k].e);
            if(!(*T).data[k].i||!(*T).data[k].j||(*T).data[k].i>(*T).mu||(*T).data[k].j>(*T).nu){
				printf("輸入有誤!");
			    exit(0);
			}

		}
    printf("        ************************************************************\n");

//計(jì)算各行第一個(gè)非零元素在存儲(chǔ)數(shù)組中的位置
//若該行無非零元,則rpos[]值為零
	int num[(*T).mu+1],row,cpot[(*T).mu+1];
	cpot[1]=1;
	for(k=1;k<=(*T).mu;k++)
		num[k]=0;

	for(k=1;k<=(*T).tu;k++)
		++num[(*T).data[k].i];
	for(row=2;row<=(*T).mu;row++)
			cpot[row]=cpot[row-1]+num[row-1];

	for(row=1;row<=(*T).mu;row++){
		if(cpot[row]<=(*T).tu)
		   if((*T).data[cpot[row]].i==row){
			  (*T).rpos[row]=cpot[row];
			}
		   else
			   (*T).rpos[row]=0;
		else
			(*T).rpos[row]=0;
		}
}

PrintRLSMatrix(RLSMatrix T)
{//矩陣輸出函數(shù),輸出矩陣形式
	int a,b,m=0;
    printf("           -----------------------------------------\n");

	for(a=1;a<=(T).mu;a++){printf("                ");
		for(b=1;b<=(T).nu;b++){
			if((T).rpos[a]&&a==(T).data[(T).rpos[a]].i&&b==(T).data[(T).rpos[a]].j){
				//(T).rpos[a]不為零時(shí),輸出該行的非零元
				printf("%4d",(T).data[(T).rpos[a]].e);
				(T).rpos[a]++;
				}
			else
				{
			    printf("%4d",m);}
			}
		printf("\n");
		}
    printf("          ----------------------------------------\n");
}

FasttransposeRLSMatrix(RLSMatrix M,RLSMatrix *Q)
{//矩陣快速轉(zhuǎn)置
	int col,t,p,q,num[M.nu],cpot[M.nu];
	(*Q).mu=M.nu;(*Q).nu=M.mu;(*Q).tu=M.tu;
	if((*Q).tu){
		for(col=1;col<=M.nu;++col)num[col]=0;
		for(t=1;t<=M.tu;++t)++num[M.data[t].j];//求M中每一行含非零元素的個(gè)數(shù)
		cpot[1]=1;
		//求第col列中第一個(gè)非零元在(*Q).data中的序號(hào)
		for(col=2;col<=M.nu;++col)cpot[col]=cpot[col-1]+num[col-1];
		for(p=1;p<=M.tu;++p){
			col=M.data[p].j;q=cpot[col];
			(*Q).data[q].i=M.data[p].j;
			(*Q).data[q].j=M.data[p].i;
			(*Q).data[q].e=M.data[p].e;
			++cpot[col];
		}
	}
//計(jì)算各行第一個(gè)非零元素在存儲(chǔ)數(shù)組中的位置
//若該行無非零元,則rpos[]值為零
	int Num[(*Q).mu+1],row,Cpot[(*Q).mu+1],k;
	Cpot[1]=1;
	for(k=1;k<=(*Q).mu;k++)
		Num[k]=0;

	for(k=1;k<=(*Q).tu;k++)
		++Num[(*Q).data[k].i];
	for(row=2;row<=(*Q).mu;row++)
			Cpot[row]=Cpot[row-1]+Num[row-1];

	for(row=1;row<=(*Q).mu;row++){
		if(Cpot[row]<=(*Q).tu)
		   if((*Q).data[Cpot[row]].i==row){
			  (*Q).rpos[row]=Cpot[row];
			}
		   else
			   (*Q).rpos[row]=0;
		else
			(*Q).rpos[row]=0;
		}
	return 1;
}

HeRLSMatrix(RLSMatrix *M,RLSMatrix *N,RLSMatrix *Q)
{//矩陣求和函數(shù)
    if((*M).mu!=(*N).mu||(*M).nu!=(*N).nu)
		{printf("不滿足矩陣相加的條件!");return 0;}
	int k=1;
	Triple *p,*q;
	//設(shè)置兩個(gè)指針,分別指向M,N的第一個(gè)非零元位置,移動(dòng)指針進(jìn)行比較,得出相加后的新矩陣非零元
	p=&(*M).data[1];
	q=&(*N).data[1];
	while(p<(*M).data+(*M).tu+1&&q<(*N).data+(*N).tu+1)
		if((*p).i<=(*q).i)
			if((*p).i<(*q).i){
				(*Q).data[k].i=(*p).i;
				(*Q).data[k].j=(*p).j;
				(*Q).data[k].e=(*p).e;
				k++;p++;
				}
			else
				if((*p).j<=(*q).j)
				    if((*p).j<(*q).j){
						(*Q).data[k].i=(*p).i;
						(*Q).data[k].j=(*p).j;
						(*Q).data[k].e=(*p).e;
						k++;p++;
						}
				    else
						{
						(*Q).data[k].i=(*p).i;
						(*Q).data[k].j=(*p).j;
						(*Q).data[k].e=(*p).e+(*q).e;
						k++;p++;q++;
						}
				else {
					(*Q).data[k].i=(*q).i;
					(*Q).data[k].j=(*q).j;
					(*Q).data[k].e=(*q).e;
					k++;q++;
					}
		else
			{
			(*Q).data[k].i=(*q).i;
			(*Q).data[k].j=(*q).j;
			(*Q).data[k].e=(*q).e;
			k++;q++;
			}
        if(p<=(*M).data+(*M).tu)
           while(p<=(*M).data+(*M).tu){
			   (*Q).data[k].i=(*p).i;
			   (*Q).data[k].j=(*p).j;
			   (*Q).data[k].e=(*p).e;
			   k++;p++;
			   }
        if(q<=(*N).data+(*N).tu)
           while(q<=(*N).data+(*N).tu){
			   (*Q).data[k].i=(*q).i;
			   (*Q).data[k].j=(*q).j;
			   (*Q).data[k].e=(*q).e;
			   k++;q++;
			   }

	(*Q).mu=(*M).mu;(*Q).nu=(*M).nu;(*Q).tu=k-1;

//計(jì)算各行第一個(gè)非零元素在存儲(chǔ)數(shù)組中的位置
//若該行無非零元,則rpos[]值為零

	int num[(*Q).mu+1],row,cpot[(*Q).mu+1];
	cpot[1]=1;
	for(k=1;k<=(*Q).mu;k++)
		num[k]=0;

	for(k=1;k<=(*Q).tu;k++)
		++num[(*Q).data[k].i];
	for(row=2;row<=(*Q).mu;row++)
			cpot[row]=cpot[row-1]+num[row-1];

	for(row=1;row<=(*Q).mu;row++){
		if(cpot[row]<=(*Q).tu)
		   if((*Q).data[cpot[row]].i==row){
			  (*Q).rpos[row]=cpot[row];
			}
		   else
			   (*Q).rpos[row]=0;
		else
			(*Q).rpos[row]=0;
	}
}


ChaRLSMatrix(RLSMatrix *M,RLSMatrix *N,RLSMatrix *Q)
{//矩陣求差函數(shù)
    if((*M).mu!=(*N).mu||(*M).nu!=(*N).nu)
		{printf("不滿足矩陣相減的條件!");return 0;}
	int i;
	for(i=1;i<=(*N).nu;i++)
		(*N).data[i].e*=-1;
	HeRLSMatrix(&(*M),&(*N),&(*Q));

}

JiRLSMatrix(RLSMatrix M,RLSMatrix N,RLSMatrix *Q)
{//矩陣求積函數(shù)
	int arow,ctemp[N.nu+1],p,tp,i=1,j=1,t,q,ccol,h=1,n=1;
	if(M.nu!=N.mu){
		printf("不滿足矩陣相乘的條件!");exit(0);}
	(*Q).mu=M.mu;(*Q).nu=N.nu;(*Q).tu=0;
	if(M.tu*N.tu!=0){
	    for(arow=1;arow<=M.mu;arow++){//處理M的每一行
			for(n=0;n<N.nu+1;n++)
			ctemp[n]=0;//當(dāng)前行累加器清零
            if(M.rpos[arow]!=0){//若arow行無非零元,則計(jì)算下一個(gè)有非零元的行
				p=M.rpos[arow];
			    if(arow<M.mu){
				   if(M.rpos[arow+1]==0){
					  if(arow+1<M.mu){
						 while(arow+i<M.mu&&M.rpos[arow+i]==0)
							   i++;
						 tp=M.rpos[arow+i];
						 if(tp==0)
							tp=M.tu+1;
					  }
					else tp=M.tu+1;
				   }
				else tp=M.rpos[arow+1];
			    }
			    else tp=M.tu+1;
		        for(p;p<tp;p++){//對(duì)當(dāng)前行中的每一個(gè)非零元
			        if(N.rpos[M.data[p].j]!=0){
				       q=N.rpos[M.data[p].j];//若該行存在非零元,找到對(duì)應(yīng)元在N中的行號(hào)
				       if(M.data[p].j<N.mu){
				          if(N.rpos[M.data[p].j+1]==0){
					         if(M.data[p].j+1<N.mu){
						        while(M.data[p].j+1<N.mu&&N.rpos[M.data[p].j+j]==0)
							          j++;
						        t=N.rpos[M.data[p].j+j];
						        if(t==0)
							       t=N.tu+1;
					         }
					         else t=N.tu+1;
				          }
				          else t=N.rpos[M.data[p].j+1];
			           }
			           else t=N.tu+1;
			           for(q;q<t;q++){
				           ccol=N.data[q].j;
				           ctemp[ccol]+=M.data[p].e*N.data[q].e;
			           }
		           }
                }//求得Q中第arow行的非零元
            for(ccol=1;ccol<=N.nu+1;ccol++)//存儲(chǔ)該行的非零元到Q中
			    if(ctemp[ccol]){
					if(h>MAXSIZE){printf("非零個(gè)數(shù)超出定義范圍!");exit(0);}
				   (*Q).data[h].i=arow;
				   (*Q).data[h].j=ccol;
				   (*Q).data[h].e=ctemp[ccol];
				   h++;
				}
		    }
	    }
    }
    (*Q).tu=h-1;

//計(jì)算各行第一個(gè)非零元素在存儲(chǔ)數(shù)組中的位置
//若該行無非零元,則rpos[]值為零

    int num[(*Q).mu+1],row,cpot[(*Q).mu+1],k;
	cpot[1]=1;
	for(k=1;k<=(*Q).mu;k++)
		num[k]=0;

	for(k=1;k<=(*Q).tu;k++)
		++num[(*Q).data[k].i];
	for(row=2;row<=(*Q).mu;row++)
			cpot[row]=cpot[row-1]+num[row-1];

	for(row=1;row<=(*Q).mu;row++){
		if(cpot[row]<=(*Q).tu)
		   if((*Q).data[cpot[row]].i==row){
			  (*Q).rpos[row]=cpot[row];
			}
		   else
			   (*Q).rpos[row]=0;
		else
			(*Q).rpos[row]=0;
		}
}


main()
{
	RLSMatrix M,N,Q;
    char ch;
	printf("                         ***************************                        \n");
	printf("                         **                       **                        \n");
	printf("                         **     稀疏矩陣運(yùn)算器    **                        \n");
	printf("                         ** --------------------- **                        \n");
	printf("                         ***************************                        \n");
	printf("    _____________________________________________________________________     \n");
	printf("   |                               請(qǐng)選擇                                |    \n");
	printf("   |   A.加法    B.減法     C.乘法    D.轉(zhuǎn)置  Y.繼續(xù)運(yùn)算     N.結(jié)束運(yùn)算  |    \n");
    printf("   |_____________________________________________________________________|    \n\n");
	printf("\2 輸入數(shù)字時(shí)請(qǐng)用逗號(hào)隔開!\n\n");
	printf("     ->");
	scanf("%c",&ch);
	while(ch!='N'){//進(jìn)行循環(huán)運(yùn)算
		switch(ch){//進(jìn)行運(yùn)算選擇
			case'A':{ printf("       請(qǐng)輸入要求和的兩個(gè)矩陣:\n\n");
			          printf("       輸入第一個(gè)矩陣:\n\n");
					  ScanRLSMatrix(&M);
					  printf("       輸入的第一個(gè)矩陣為:\n\n");
					  PrintRLSMatrix(M);
					  printf("       輸入第二個(gè)矩陣:\n\n");
					  ScanRLSMatrix(&N);
					  printf("       輸入的第二個(gè)矩陣為:\n\n");
					  PrintRLSMatrix(N);
					  HeRLSMatrix(&M,&N,&Q);
					  printf("       兩矩陣之和為:\n\n");
					  PrintRLSMatrix(Q);
					  printf("      是否繼續(xù)運(yùn)算(Y/N)?\n\n");
					  printf("     ->");
					  ch=getchar();
					};break;
			case'B':{ printf("        請(qǐng)按次序輸入要求差的兩個(gè)矩陣:\n\n");
			          printf("        輸入第一個(gè)矩陣:\n\n");
					  ScanRLSMatrix(&M);
					  printf("        輸入的第一個(gè)矩陣為:\n\n");
					  PrintRLSMatrix(M);
					  printf("        輸入第二個(gè)矩陣:\n\n");
					  ScanRLSMatrix(&N);
					  printf("        輸入的第二個(gè)矩陣為:\n\n");
					  PrintRLSMatrix(N);
					  ChaRLSMatrix(&M,&N,&Q);
					  printf("        兩矩陣之差為:\n\n");
					  PrintRLSMatrix(Q);
					  printf("是否繼續(xù)運(yùn)算(Y/N)?\n\n");
					  printf("     ->");
					  ch=getchar();
					}break;
			case'C':{printf("         請(qǐng)按次序輸入要求積的兩個(gè)矩陣:\n\n");
			          printf("        輸入第一個(gè)矩陣:\n\n");
					  ScanRLSMatrix(&M);
					  printf("        輸入的第一個(gè)矩陣為:\n\n");
					  PrintRLSMatrix(M);
					  printf("        輸入第二個(gè)矩陣:\n\n");
					  ScanRLSMatrix(&N);
					  printf("        輸入的第二個(gè)矩陣為:\n\n");
					  PrintRLSMatrix(N);
					  JiRLSMatrix(M,N,&Q);
					  printf("        兩矩陣之積為:\n\n");
					  PrintRLSMatrix(Q);
					  printf("是否繼續(xù)運(yùn)算(Y/N)?\n\n");
					  printf("     ->");
					  ch=getchar();
					}break;

			case'D':{printf("請(qǐng)輸入要轉(zhuǎn)置的矩陣:\n\n");
			         ScanRLSMatrix(&M);
					 printf("        輸入的要轉(zhuǎn)置的矩陣為:\n\n");
					 PrintRLSMatrix(M);
					 FasttransposeRLSMatrix(M,&Q);
					 printf("轉(zhuǎn)置矩陣為:\n\n");
					 PrintRLSMatrix(Q);
					 printf("是否繼續(xù)運(yùn)算(Y/N)?\n\n");
					 printf("     ->");
					 ch=getchar();
				    }break;

			case'Y':{printf("請(qǐng)選擇運(yùn)算\n");
			         printf("     ->");
					 ch=getchar();
					}break;
			default:printf("->");ch=getchar();break;
			}
	}
printf("                                   運(yùn)算結(jié)束!\n\n");
printf("            \1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1謝謝使用!\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\n\n");
getch();
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美日韩不卡| 精品国内二区三区| 99久久精品免费| 久久草av在线| 天天色图综合网| 亚洲精品日产精品乱码不卡| 国产欧美一区二区三区网站| 91精品国产入口| 3d动漫精品啪啪1区2区免费| 高清成人免费视频| 国产精品一区二区三区四区| 免费观看30秒视频久久| 日本aⅴ精品一区二区三区| 亚洲综合色视频| 亚洲精品成人悠悠色影视| 亚洲素人一区二区| 一区二区三区在线视频免费| 国产精品天美传媒| 亚洲欧美一区二区三区国产精品 | 亚洲日本一区二区三区| 国产精品卡一卡二| 国产精品久久久久久久第一福利| 久久久久国产免费免费 | 中文字幕亚洲区| 亚洲欧美日韩中文字幕一区二区三区 | 日本美女一区二区| 国产精品一级片在线观看| 国产成人精品1024| 在线亚洲高清视频| 91精品国产色综合久久| 久久亚洲一级片| 中文字幕一区二区三区不卡在线 | 免费不卡在线视频| 国产成人亚洲综合a∨婷婷图片 | 日本韩国视频一区二区| 4438成人网| 国产亚洲欧美日韩在线一区| ㊣最新国产の精品bt伙计久久| 亚洲乱码一区二区三区在线观看| 视频在线观看91| 国产精品中文字幕欧美| 日本韩国精品一区二区在线观看| 日韩欧美国产一区二区在线播放| 9久草视频在线视频精品| 久久成人久久爱| 99久久综合国产精品| 欧美一区二区大片| 亚洲午夜视频在线| 国产成人精品一区二| 欧美一级二级在线观看| 亚洲蜜桃精久久久久久久| 国产一区二区三区| 日韩欧美专区在线| 婷婷国产v国产偷v亚洲高清| 风流少妇一区二区| 2024国产精品| 日本不卡一二三| 欧美日韩亚洲综合在线| 亚洲三级电影网站| 91捆绑美女网站| 中文字幕亚洲电影| www.综合网.com| 日韩一区中文字幕| 99久久精品国产精品久久| 欧美极品美女视频| 成人黄色国产精品网站大全在线免费观看 | 久久久精品日韩欧美| 另类欧美日韩国产在线| 欧美va日韩va| 国产成人小视频| 一区二区中文视频| 91国内精品野花午夜精品| 亚洲精品国产一区二区精华液| 色综合色综合色综合| 一区2区3区在线看| 欧美一区二区三区婷婷月色| 日韩电影一区二区三区四区| 欧美一区二区视频在线观看2020 | 成人深夜福利app| 国产精品麻豆久久久| 色8久久人人97超碰香蕉987| 亚洲精品免费电影| 91视频一区二区| 日韩电影在线免费| 国产欧美日韩综合精品一区二区| 不卡免费追剧大全电视剧网站| 中文字幕在线播放不卡一区| 91黄色在线观看| 免费成人在线网站| 国产精品国产三级国产| 欧美人牲a欧美精品| 国产一区二区主播在线| 亚洲色图一区二区| 精品国产伦一区二区三区免费| 成人综合在线视频| 免费视频一区二区| 亚洲国产乱码最新视频| 国产精品三级av在线播放| 欧美一区二区三区精品| 91网址在线看| 成人免费va视频| 狠狠狠色丁香婷婷综合激情| 又紧又大又爽精品一区二区| 欧美激情艳妇裸体舞| 日韩午夜精品视频| 欧美浪妇xxxx高跟鞋交| 成人国产电影网| 国产91综合一区在线观看| 久久成人18免费观看| 日韩中文字幕不卡| 亚洲国产精品一区二区尤物区| 国产精品欧美久久久久无广告| 精品国产一区二区在线观看| 欧美精品久久久久久久久老牛影院| 91网上在线视频| 91麻豆高清视频| 欧美日韩精品系列| 91精品视频网| 日韩欧美高清在线| 欧美mv日韩mv亚洲| 国产日产精品一区| 国产欧美一区二区在线| 一区二区中文字幕在线| 亚洲黄色在线视频| 日本vs亚洲vs韩国一区三区二区| 青娱乐精品在线视频| 经典一区二区三区| 成人夜色视频网站在线观看| 大桥未久av一区二区三区中文| 国产很黄免费观看久久| 99热在这里有精品免费| 欧美日韩一区二区不卡| 欧美电影免费观看高清完整版在线 | 一本一本久久a久久精品综合麻豆| 不卡区在线中文字幕| 色狠狠一区二区三区香蕉| 欧美高清精品3d| 中文字幕免费不卡| 亚洲国产精品久久一线不卡| 蜜臀av性久久久久蜜臀aⅴ| 国产乱人伦偷精品视频免下载| 成人黄页毛片网站| 91精品久久久久久蜜臀| 日韩一区中文字幕| 捆绑调教一区二区三区| 91在线观看视频| 欧美一区二区精美| 亚洲人妖av一区二区| 天天综合网天天综合色| 成人av综合一区| 欧美精品一区二区三区在线播放| 亚洲欧美日韩系列| 国产91富婆露脸刺激对白| 在线综合+亚洲+欧美中文字幕| 国产精品久久久久久亚洲毛片 | 理论片日本一区| 欧美视频中文一区二区三区在线观看 | 亚洲欧洲日韩在线| 国产精品久久免费看| 午夜精品免费在线观看| 国产成人av一区二区三区在线| 欧美日韩在线一区二区| 精品99一区二区| 亚洲成人先锋电影| 成人黄动漫网站免费app| 欧美mv日韩mv| 日本成人在线电影网| 欧美视频一区二区三区四区| 国产欧美一区二区在线观看| 秋霞电影网一区二区| 欧美日韩亚州综合| 亚洲无人区一区| 91电影在线观看| 亚洲一区二区三区四区在线 | 久久精品免费观看| 日韩视频一区在线观看| 一级精品视频在线观看宜春院 | 美女性感视频久久| 日韩三级在线观看| 国产麻豆欧美日韩一区| 国产性天天综合网| 粉嫩一区二区三区性色av| 国产日韩欧美a| 99re这里只有精品视频首页| 中文字幕五月欧美| 色播五月激情综合网| 亚洲高清不卡在线| 欧美一区二区大片| 国产成人夜色高潮福利影视| 国产精品视频一二三区| 欧美日韩精品一区视频| 国产在线播放一区| 成人免费在线播放视频| 欧美精品丝袜久久久中文字幕| 日本不卡视频一二三区| 中文字幕一区在线观看| 欧美色综合久久| 国产成人av一区二区三区在线 | 国产精品一区二区视频| 亚洲高清免费一级二级三级|