第6章利用數(shù)組處理批量數(shù)據(jù)-創(chuàng)新互聯(lián)

某不知名學(xué)校C語言作業(yè) 這次作業(yè)和往常一樣 不給輸入 輸出 不解釋數(shù)據(jù) 不給答案

創(chuàng)新互聯(lián)是網(wǎng)站建設(shè)技術(shù)企業(yè),為成都企業(yè)提供專業(yè)的網(wǎng)站建設(shè)、網(wǎng)站制作,網(wǎng)站設(shè)計(jì),網(wǎng)站制作,網(wǎng)站改版等技術(shù)服務(wù)。擁有十年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制適合企業(yè)的網(wǎng)站。十年品質(zhì),值得信賴!

感覺習(xí)慣了 但還是惡心 能不做學(xué)校的題就不做學(xué)校的題吧....要刷基礎(chǔ)題去菜鳥不香嗎...

算了 我也是找罪受

數(shù)組有幾個(gè)知識點(diǎn):

1.數(shù)組從0開始 比如a[1]實(shí)際上是存兩個(gè)數(shù)據(jù) a[0]和a[1]

2.但是二維數(shù)組a[3][3]表示的確是3*3的矩陣 也就是9個(gè)數(shù)據(jù)

3.數(shù)組越界會導(dǎo)致答案出現(xiàn)一個(gè)亂七八糟的數(shù)字 也就是說你的數(shù)組大小必須大于元素?cái)?shù)量

先來看題吧

第一題

輸出矩陣各元素的值

編寫程序在一個(gè)二維數(shù)組(int a[5][5];)中形成并按下列形式輸出矩陣各元素的值。 1└┘0└┘0└┘0└┘0↙ 2└┘1└┘0└┘0└┘0↙ 3└┘2└┘1└┘0└┘0↙ 4└┘3└┘2└┘1└┘0↙ 5└┘4└┘3└┘2└┘1↙

分析 不要在意那些亂碼 那是出題人**了 其實(shí)那就是空格和換行

他要你輸出的是這個(gè)玩意

個(gè)人代碼如下

# includeint main()
{   //初始化數(shù)組
	int a[5][5]={1,0,0,0,0,2,1,0,0,0,3,2,1,0,0,4,3,2,1,0,5,4,3,2,1} ;
	for(int i=0;i<5;i++){
		for(int j=0;j<5;j++){
			printf("%d ",a[i][j]);//d后面加空格
		}
		printf("\n");//注意換行位置
	}

	return 0;
}

如果你連二維數(shù)組遍歷都不會的話 我這里推薦一下這里有個(gè)三流文章:

各種矩陣

第二題

計(jì)算A與B的交集

編寫程序,它能讀入構(gòu)成集合A,B的兩組非零整數(shù)x1,x2 ,……,xm ,y1 ,y2 ,……,yn 。計(jì)算A與B的交集A∩B,再以由小到大的順序輸出A∩B中的元素,A∩B為空時(shí)無輸出。

第一行輸入集合的長度,第二行輸入集合A中的數(shù)字,每個(gè)數(shù)字以空格隔開,第三行輸入集合B中的數(shù)字,每個(gè)數(shù)字以空格隔開。

示例1:

輸入:
4 5
1 3 5 7
5 3 1 9 10

輸出:
1 3 5

分析:我覺得這道題應(yīng)該是這里面最難的一道了 難的不是找交集 是排序啊?

排序有差不多十大類吧 是基礎(chǔ)算法的一種?

排序后呢 可以用一個(gè)哈希表存儲每個(gè)數(shù)字的次數(shù) 也可以用雙指針?biāo)惴〝?shù)據(jù)大的話時(shí)間快一點(diǎn)

不過呢 這些方法其實(shí)都嚴(yán)重超綱 大二過來都人麻了 這老師還真是非??吹闷鹞覀儼?/p>

然后我這里排序用的是快速排序 也是最好用的一種 C語言沒有排序函數(shù) 需要自己手寫 模板一般如下 如果你以后學(xué)其他語言而且不走算法崗的話 這個(gè)東西不用背

void quick_sort(int q[], int l, int r)//分別是數(shù)組地址 左邊界 右邊界
{
    if (l >= r) return;//比如a[100] 三個(gè)參數(shù)就是 (a,0,100)

    int i = l - 1, j = r + 1, x = q[l + r >>1];
    while (i< j)
    {
        do i ++ ; while (q[i]< x);
        do j -- ; while (q[j] >x);
        if (i< j) swap(q[i], q[j]);
    }
    quick_sort(q, l, j), quick_sort(q, j + 1, r);
}

然后個(gè)人代碼如下(多用的是循環(huán)寫 沒有用到超綱知識

# includevoid quick_sort(int q[], int l, int r)
{
    if (l >= r) return;

    int i = l - 1, j = r + 1, x = q[l + r >>1];
    while (i< j)
    {
        do i ++ ; while (q[i]< x);
        do j -- ; while (q[j] >x);
        if (i< j) //swap(q[i], q[j]);等價(jià)于一個(gè)交換函數(shù) 沒辦法C連交換函數(shù)都要手寫
		{  int temp=q[i];
		   q[i]=q[j];
		   q[j]=temp;
        
    }
    quick_sort(q, l, j), quick_sort(q, j + 1, r);
}
}



int main(){
	void quick_sort(int q[], int l, int r);//函數(shù)聲明 可以不寫
	int n,m;

	int idx=0;//計(jì)數(shù)

	scanf("%d%d",&n,&m);//輸入要的數(shù)組長度
	int a[9999],b[9999],c[9999];//防止數(shù)組越界!
	for(int i=0;i
第三題

距離坐標(biāo)原點(diǎn)最遠(yuǎn)的點(diǎn)

設(shè)平面上有n個(gè)點(diǎn)(0<=n<=100 ),每個(gè)點(diǎn)用一對坐標(biāo)(x,y)表示,編寫程序找出距離坐標(biāo)原點(diǎn)(0,0)最遠(yuǎn)的點(diǎn)(可能不止一個(gè))。

分析:這道題說也不說明白 數(shù)據(jù)給的也少 直接printf都能過

所以 我是菜狗 沒有看懂題目 等我再去想想

個(gè)人代碼如下

#includeint main() {
	printf("9.00,10.00");

	return 0;
}

11.16更新正經(jīng)寫法:

#include#includetypedef struct DOT//結(jié)構(gòu)體 寫起來簡便一點(diǎn)
{
    double x;
    double y;
    double distance;//距離 初中學(xué)的x平方加y平方開根號
}DOT;

int main () {
    int n;
    int i;
    double Max = 0;
    scanf("%d",&n);
    DOT dots[100];
    for (i = 0; i< n; i ++)
    {
        scanf("%lf",&dots[i].x);//坐標(biāo)存儲
        scanf("%lf",&dots[i].y);
        dots[i].distance = (dots[i].x * dots[i].x)  + (dots[i].y * dots[i].y);//距離計(jì)算
        if (dots[i].distance >Max) {//不用開方了 以免數(shù)據(jù)溢出或整除 直接比平方也能比大小
            Max = dots[i].distance;//選擇排序原理
        }
    } 
    for ( i = 0; i< n; i ++)
    {
        if (dots[i].distance == Max)
        {
            printf ("%.2lf,%.2lf\n",dots[i].x,dots[i].y);//輸出
        }
        
    }
    return 0;
}
第四題

選擇排序法應(yīng)用

用選擇排序法對10個(gè)整數(shù)進(jìn)行排序[1,12,4,9,10,22,-7,0,99,8]

分析:我自己用的是快速排序 因?yàn)檫x擇排序效率低 非常容易超時(shí) 選擇排序就是一個(gè)個(gè)遍歷 一個(gè)個(gè)比大小 呃呃 等我有時(shí)間再寫一個(gè)選擇排序吧 不過還是推薦用快速排序 因?yàn)?選擇排序 真的很菜;

快速排序就是上面那個(gè)模板 至于原理 那是算法的內(nèi)容了 一言兩語也講不明白

個(gè)人代碼如下

# includevoid quick_sort(int q[], int l, int r)
{
    if (l >= r) return;

    int i = l - 1, j = r + 1, x = q[l + r >>1];
    while (i< j)
    {
        do i ++ ; while (q[i]< x);
        do j -- ; while (q[j] >x);
        if (i< j) //swap(q[i], q[j]);
		{  int temp=q[i];
		   q[i]=q[j];
		   q[j]=temp;
        
    }
    quick_sort(q, l, j), quick_sort(q, j + 1, r);
}
}
int main(){
  int a[]={1,12,4,9,10,22,-7,0,99,8};
  quick_sort(a,0,9);//模板 yyds
  for(int i=0;i<10;i++){
  	printf("%d ",a[i]);
  }
  
  
}
第五題

求整型矩陣主對角線元素之和

求一個(gè)3*3的整型矩陣主對角線元素之和 1,2,3 4,5,6 7,8,9

分析:對角線 就是橫坐標(biāo)和縱坐標(biāo)相等的點(diǎn) 我在矩陣那篇文章也寫過(打個(gè)廣告)

# includeint main()
{
	int sum=0;
	int a[3][3]={1,2,3,4,5,6,7,8,9};
	for(int i=0;i<3;i++){
			sum+=a[i][i];//橫縱坐標(biāo)相等
		
	}
	printf("%d",sum);

	return 0;
}
第六題

數(shù)組逆序存放

輸入一個(gè)長度為5的int型,將數(shù)組中的值按逆序重新存放。例如,原來順序?yàn)?,6,5,4,1,要求改為1,4,5,6,8

分析:沒什么難點(diǎn) 就輸出的時(shí)候和輸入范方向遍歷就行

個(gè)人代碼如下:

# includeint main()
{
	int a[4];
	int i;
	for(i=0;i<5;i++){
		scanf("%d",&a[i]);
	}
	for(int j=4;j>=0;j--){//反向遍歷輸出
		printf("%d ",a[j]);
	}
	
	return 0;
}
第七題

連接字符串

編一程序,將兩個(gè)字符串連接起來,不要用strcat函數(shù)

分析:c語言字符串只能用字符數(shù)組的方法解決 我們用strlen函數(shù)可以得到字符串的長度 然后在遍歷字符串的時(shí)候把字符串2的遍歷起點(diǎn)放在字符串1后面即可 看代碼更容易理解

個(gè)人代碼如下:

#include#include//字符串頭文件
int main()
{
    int i, j, k, m;
    char str1[99];//開大一點(diǎn)防止數(shù)組越界
    char str2[99];
    scanf("%s",str1);//字符串輸入用%s
    scanf("%s",str2);
    j=strlen(str1);//字符串1長度
    k=strlen(str2);//字符串2長度
    for (i=j, m=0; i
第八題

比較字符串

編一個(gè)程序,比較兩個(gè)字符串s1和s2,若s1>s2,輸出一個(gè)正數(shù);若s1=s2,輸出0;若s1

分析:C語言不能直接進(jìn)行字符串的比較,但是我們有一個(gè)函數(shù)strcmp可以比較兩個(gè)字符串

比較原理如下http://t.csdn.cn/SCqmK

所以這題就是考一個(gè)函數(shù)用法

個(gè)人代碼如下:

#include#includeint main()
{
    int  j, k;
    char str1[99];//防止越界
    char str2[99];
    scanf("%s",str1);
    scanf("%s",str2);
    
  printf("result:%d\n", strcmp(str1, str2));
    return 0;
}
第九題:

刪除數(shù)組中重復(fù)出現(xiàn)的數(shù)據(jù)

鍵盤輸入一個(gè)長度為10的int型數(shù)組,刪除數(shù)組中重復(fù)出現(xiàn)的數(shù)據(jù) 如,原數(shù)組是: 1 4 2 3 4 1 2 5 5 9,輸出:1 4 2 3 5 9

個(gè)人代碼如下:

#includeint main()
{
	int A[10],i,j;//數(shù)組為10夠了
	
	for(i=0;i<10;i++)
	{
		scanf("%d",&A[i]);
	}
	
	for(i=0;i<10;i++)//其實(shí)只有10個(gè)數(shù)字 數(shù)組有11的位置 所以遍歷到9
	{
		if(A[i]!=0)//如果不為空
		{
			for(j=i+1;j<10;j++)
			{
				if(A[i]==A[j])//如果重復(fù)
				{
					A[j]=0;//標(biāo)記為0
				}
			}
		}
	}
	
	for(i=0;i<10;i++)
	{
		if(A[i]!=0)//沒有標(biāo)記為0的都輸出
		{
			printf("%d ",A[i]);
		}
	 } 
	return 0;	
}
第十題

二維數(shù)組變換

對一個(gè)4×4的二維數(shù)組左下三角的全部元素(包含對角線上的元素)作如下變換: 若該數(shù)是素?cái)?shù)則用它的后繼素?cái)?shù)替換; 若該數(shù)不是素?cái)?shù),則用0替換該數(shù)。 將變換后的數(shù)組及其數(shù)組左下三角的元素中的素?cái)?shù)個(gè)數(shù)打印出來。 測試數(shù)據(jù): 原數(shù)組: 3 6 4 17 8 5 9 10 9 19 7 20 4 14 21 23

分析:還是推薦看看我的矩陣文章(再次打廣告) 我們發(fā)現(xiàn)左下角的數(shù)都有一個(gè)規(guī)律

就是縱坐標(biāo)<=橫坐標(biāo) 因此我們就可以選出左下角的數(shù) 同時(shí)我們上一次作業(yè)寫了判斷素?cái)?shù)的函數(shù)

再寫一次就行了 要換成它的下一個(gè)素?cái)?shù) 就是不斷+1然后再用寫的判斷素?cái)?shù)函數(shù)判斷即可

個(gè)人代碼如下:

# includeconst int N=10010;
int prime(int n) {
	for (int i = 2; i< n  ; i++) {
		if (n % i == 0)//有因數(shù) 返回0
			return 0;
	}
	return 1;//沒有 返回1
}

int main()
{
   int a[4][4]={3, 6, 4 ,17 ,8, 5,9 ,10 ,9, 19, 7, 20, 4, 14 ,21, 23};
   int k=1;
   int cnt=0;//計(jì)數(shù)
   for(int i=0;i<4;i++){
   	for(int j=0;j<4;j++){
   		if(j<=i&&prime(a[i][j])){//如果是左下角的數(shù)而且是素?cái)?shù)
   			cnt++;//計(jì)算器加1
   			while(!(prime(a[i][j]+k)))k++;//一個(gè)一個(gè)往后加1 如果是素?cái)?shù)循環(huán)停止
   			a[i][j]+=k;
		   }else if(j<=i&&!prime(a[i][j]))//如果不是素?cái)?shù) 令他等于0
		   	a[i][j]=0;
		   
	   }
   }
    for(int i=0;i<4;i++){
   	for(int j=0;j<4;j++){
   		printf("%d ",a[i][j]);//遍歷輸出
   	}
   	printf("\n");//注意換行
   	
   }
   printf("count=%d",cnt);
  
   
	
	return 0;
}

nice 又寫完作業(yè)了 如果題目還有其他做法我再補(bǔ)充 先洗洗睡了

如果有啥不懂或是寫錯(cuò)的地方 歡迎討論指正

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

文章名稱:第6章利用數(shù)組處理批量數(shù)據(jù)-創(chuàng)新互聯(lián)
分享鏈接:http://muchs.cn/article18/djjdgp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、做網(wǎng)站、品牌網(wǎng)站建設(shè)網(wǎng)站維護(hù)、企業(yè)建站標(biāo)簽優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)