bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

第6章利用數組處理批量數據-創新互聯

某不知名學校C語言作業 這次作業和往常一樣 不給輸入 輸出 不解釋數據 不給答案

創新互聯是網站建設技術企業,為成都企業提供專業的網站建設、網站制作,網站設計,網站制作,網站改版等技術服務。擁有十年豐富建站經驗和眾多成功案例,為您定制適合企業的網站。十年品質,值得信賴!

感覺習慣了 但還是惡心 能不做學校的題就不做學校的題吧....要刷基礎題去菜鳥不香嗎...

算了 我也是找罪受

數組有幾個知識點:

1.數組從0開始 比如a[1]實際上是存兩個數據 a[0]和a[1]

2.但是二維數組a[3][3]表示的確是3*3的矩陣 也就是9個數據

3.數組越界會導致答案出現一個亂七八糟的數字 也就是說你的數組大小必須大于元素數量

先來看題吧

第一題

輸出矩陣各元素的值

編寫程序在一個二維數組(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↙

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

他要你輸出的是這個玩意

個人代碼如下

# includeint main()
{   //初始化數組
	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;
}

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

各種矩陣

第二題

計算A與B的交集

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

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

示例1:

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

輸出:
1 3 5

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

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

排序后呢 可以用一個哈希表存儲每個數字的次數 也可以用雙指針算法數據大的話時間快一點

不過呢 這些方法其實都嚴重超綱 大二過來都人麻了 這老師還真是非常看得起我們啊

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

void quick_sort(int q[], int l, int r)//分別是數組地址 左邊界 右邊界
{
    if (l >= r) return;//比如a[100] 三個參數就是 (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);
}

然后個人代碼如下(多用的是循環寫 沒有用到超綱知識

# 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]);等價于一個交換函數 沒辦法C連交換函數都要手寫
		{  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);//函數聲明 可以不寫
	int n,m;

	int idx=0;//計數

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

距離坐標原點最遠的點

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

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

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

個人代碼如下

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

	return 0;
}

11.16更新正經寫法:

#include#includetypedef struct DOT//結構體 寫起來簡便一點
{
    double x;
    double y;
    double distance;//距離 初中學的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);//坐標存儲
        scanf("%lf",&dots[i].y);
        dots[i].distance = (dots[i].x * dots[i].x)  + (dots[i].y * dots[i].y);//距離計算
        if (dots[i].distance >Max) {//不用開方了 以免數據溢出或整除 直接比平方也能比大小
            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;
}
第四題

選擇排序法應用

用選擇排序法對10個整數進行排序[1,12,4,9,10,22,-7,0,99,8]

分析:我自己用的是快速排序 因為選擇排序效率低 非常容易超時 選擇排序就是一個個遍歷 一個個比大小 呃呃 等我有時間再寫一個選擇排序吧 不過還是推薦用快速排序 因為 選擇排序 真的很菜;

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

個人代碼如下

# 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]);
  }
  
  
}
第五題

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

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

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

# 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];//橫縱坐標相等
		
	}
	printf("%d",sum);

	return 0;
}
第六題

數組逆序存放

輸入一個長度為5的int型,將數組中的值按逆序重新存放。例如,原來順序為8,6,5,4,1,要求改為1,4,5,6,8

分析:沒什么難點 就輸出的時候和輸入范方向遍歷就行

個人代碼如下:

# 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;
}
第七題

連接字符串

編一程序,將兩個字符串連接起來,不要用strcat函數

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

個人代碼如下:

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

比較字符串

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

分析:C語言不能直接進行字符串的比較,但是我們有一個函數strcmp可以比較兩個字符串

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

所以這題就是考一個函數用法

個人代碼如下:

#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;
}
第九題:

刪除數組中重復出現的數據

鍵盤輸入一個長度為10的int型數組,刪除數組中重復出現的數據 如,原數組是: 1 4 2 3 4 1 2 5 5 9,輸出:1 4 2 3 5 9

個人代碼如下:

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

二維數組變換

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

分析:還是推薦看看我的矩陣文章(再次打廣告) 我們發現左下角的數都有一個規律

就是縱坐標<=橫坐標 因此我們就可以選出左下角的數 同時我們上一次作業寫了判斷素數的函數

再寫一次就行了 要換成它的下一個素數 就是不斷+1然后再用寫的判斷素數函數判斷即可

個人代碼如下:

# includeconst int N=10010;
int prime(int n) {
	for (int i = 2; i< n  ; i++) {
		if (n % i == 0)//有因數 返回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;//計數
   for(int i=0;i<4;i++){
   	for(int j=0;j<4;j++){
   		if(j<=i&&prime(a[i][j])){//如果是左下角的數而且是素數
   			cnt++;//計算器加1
   			while(!(prime(a[i][j]+k)))k++;//一個一個往后加1 如果是素數循環停止
   			a[i][j]+=k;
		   }else if(j<=i&&!prime(a[i][j]))//如果不是素數 令他等于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 又寫完作業了 如果題目還有其他做法我再補充 先洗洗睡了

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

你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧

文章名稱:第6章利用數組處理批量數據-創新互聯
分享鏈接:http://vcdvsql.cn/article18/djjdgp.html

成都網站建設公司_創新互聯,為您提供服務器托管做網站品牌網站建設網站維護企業建站標簽優化

廣告

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