我的代碼邏輯是:
創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的濱湖網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
矩陣行指針初值指向每行首地址,迭代依次取所有行指針指向值組成新行,所有行指針自增。最終組合新的矩陣。
#include?stdio.h
#include?malloc.h
int?**getList(int?row,int?clo);//獲取矩陣地址空間
void?setNum(int?**nList,int?n);//填寫數(shù)值
void?prtList(int?**nList,int?row,int?clo);//打印矩陣
int?**zz(int?**nList,int?row,int?clo);//轉(zhuǎn)置函數(shù)
int?main()
{
int?row,clo,**nList=NULL,**nListSave=NULL;
printf("輸入矩陣行列數(shù):");
scanf("%d%d",row,clo);
nList=getList(row,clo);
setNum(nList,row*clo);
printf("輸入的矩陣為:\n");
prtList(nList,row,clo);
printf("轉(zhuǎn)置后的矩陣為:\n");
nListSave=zz(nList,row,clo);
free(nList);
nList=nListSave;
prtList(nList,clo,row);
return?0;
}
int?**zz(int?**nList,int?row,int?clo)
{
int?*nSave=NULL,**listSave=NULL,**listp=nList,*p=NULL,i,j;
nSave=(int?*)malloc(sizeof(int)*row*clo);
listSave=(int?**)malloc(sizeof(int*)*clo);//倒置后的矩陣
p=nSave;
for(j=0;jclo;j++)
{
for(i=0;irow;i++)
{
*p++=*listp[i];
listp[i]=listp[i]+1;
}
}
for(i=0;iclo;i++)
listSave[i]=nSave[i*row];
for(i=0;irow;i++)
free(nList[i]);//釋放原矩陣行空間
return??listSave;
}
void?prtList(int?**nList,int?row,int?clo)
{
int?i,j;
for(i=0;irow;i++)
{
for(j=0;jclo;j++)
printf("%d?",nList[i][j]);
printf("\n");
}
}
void?setNum(int?**nList,int?n)
{
int?*p=nList[0];
printf("填寫矩陣中%d個數(shù)值:\n",n);
while(n--0)
scanf("%d",p++);
}
int?**getList(int?row,int?clo)
{
int?*nums,**nList,i;
nums=(int?*)malloc(sizeof(int)*row*clo);
nList=(int?**)malloc(sizeof(int*)*row);
for(i=0;irow;i++)
nList[i]=nums[i*clo];
return?nList;
}
統(tǒng)計行數(shù)可以通過統(tǒng)計換行符\n來實現(xiàn)。不過需要注意的是,有些文件最后一行并不存在換行符,所以代碼中需要對此作處理。
可以在達(dá)到文件結(jié)尾后,判斷前一個字符,如果不是換行符,那么應(yīng)補(bǔ)加最后一行統(tǒng)計。
代碼如下:
假定輸入文件為in.txt,該文件存在且可讀。
#include?stdio.h
int?main()
{
FILE?*?fp?=?NULL;?//文件指針。
int?c,?lc=0;?//c為文件當(dāng)前字符,lc為上一個字符,供結(jié)尾判斷用。
int?line?=?0;?//行數(shù)統(tǒng)計
fp?=?fopen("in.txt",?"r");//以只讀方式打開文件。
while((c?=?fgetc(fp))?!=?EOF)?//逐個讀入字符直到文件結(jié)尾
{
if(c?==?'\n')?line?++;?//統(tǒng)計行數(shù)。
lc?=?c;?//保存上一字符。
}
fclose(fp);?//關(guān)閉文件
if(lc?!=?'\n')?line?++;//處理末行
printf("文件共有%d行。\n",?line);
return?0;
}
樣例輸入輸出:
如in.txt有如下內(nèi)容:
test?line1
test?line2
則會輸出:
文件共有2行。
循環(huán)讀入字符,遇到\n累計行數(shù),最終輸出累計值即可。
以EOF作為終止條件的代碼如下:
#include?stdio.h
int?main()
{
int?cnt?=?1;//最少會輸出一行,每遇到一個換行,表示多輸入了一行。
int?c;
while((c?=?getchar())!=EOF)
{
if(c?==?'\n')?cnt++;//統(tǒng)計行數(shù)。
}
printf("%d\n",cnt);
return?0;
}
一般來說 是一個概念
像注釋行 空行什么的,統(tǒng)計行數(shù)都會統(tǒng)計進(jìn)去的,除非是有特別說明
代碼行數(shù)和源代碼行數(shù),這個就像代碼和源代碼一樣,是同一個東西的兩種說法而已。
#include?stdio.h
int?hangshu(char?file[])//輸入工程目錄下的文件名,或者其他目錄下絕對路徑名例如:c:\\1.txt;
{
char?c;
int?h=0;
FILE?*fp;
fp=fopen(file,"r");
if(fp==NULL)
return?-1;//表示文件打開錯誤
while((c=fgetc(fp))!=EOF)
{
if(c=='\n')
h++;
else
{
c=fgetc(fp);//這是處理最后一行可能沒有換行標(biāo)志,但是確文件結(jié)束。
if(c==EOF)
{
h++;
break;
}
}
}
return?h;
}
int?main()
{
int?hs=hangshu("c:\\1.txt");//這里說明你要打開的文件。這個是c盤根目錄下文件
int?hst=hangshu("1.txt");//工程目錄下的文件。
printf("行數(shù):%d\n",hs);
printf("行數(shù):%d\n",hs);
}
如上是用c編寫的,不是c++.
運行的時候可以把中文注釋去掉。
完全可以運行的,我已經(jīng)測試過了。