C語言經典編程之數組,編程數組

來源:互聯網
上載者:User

C語言經典編程之數組,編程數組

1、元素互換

定義一個整型數組num[10],隨機初始化數組中元素值,然後將頭尾元素兩兩互換,將交換後的數組值輸出。

【代碼】

#include <stdio.h>int main(void){    int num[10] = {};     int i = 0;    int temp;    for(i = 0; i < 10; i++)    {           scanf("%d", &num[i]);    }       for(i = 0; i < 10 / 2; i++)    {           temp = num[i];        num[i] = num[9 - i];         num[9 - i] = temp;    }       for(i = 0; i < 10; i++)    {           printf("%d ", num[i]);    }       printf("\n");    return 0;}


2、矩陣翻轉

定義一個二維數組a[3][4],隨機初始化數組中的元素值,然後將a數組舉證翻轉後存入到b[4][3]中,並將b輸出。

【分析】

輸入:

3 5 1 4  

7 2 6 8 

0 9 4 6

輸出:

3 7 0 

5 2 9 

1 6 4 

4 8 6

【代碼】

#include <stdio.h>int main(void){    int a[3][4] = {};     int b[4][3] = {};     int i = 0;    int j = 0;    int temp;    for(i = 0; i < 3; i++)    {           for(j = 0; j < 4; j++)        {               scanf("%d", &a[i][j]);        }       }       for(i = 0; i < 3; i++)    {           for(j = 0; j < 4; j++)        {               b[j][i] = a[i][j];        }       }       for(i = 0; i < 4; i++)    {           for(j = 0; j < 3; j++)        {               printf("%d ", b[i][j]);        }           printf("\n");    }       printf("\n");    return 0;}

3、圍圈報數

有m個人圍成一圈,開始報數,報到n,退出,問最後剩下的是幾號。(從1號開始)

【分析】

將m個人存到一個數組a[m]中,並將其中的所有元素都記為1,當開始報數,報到n時,該人退出,即將該元素的值置為0。當報數報到數組的最後一個元素時,重新返回第一個元素報數。以此重複,直至剩下最後一個值為1的元素。

【代碼】

#include <stdio.h>int main(void){    int m = 0;//人數    int n = 0;//報數    int a[10] = {};     int i = 0, j = 0, k = 0;//k表示目前出圈的人數//  printf("input:");    scanf("%d %d", &m, &n);//  printf("input:");    for(i = 1; i <= m; i++)    {           a[i] = 1;    }           i = 1;    while(1)    {           if(a[i] == 1)        {               j++;        }           if(j == n)        {               a[i] = 0;            j = 0;            k++;        }           if(k == m - 1)            break;        i++;        if(i > m)        {            i = 1;        }    }//  printf("output:\n");    for(i = 1; i <= m; i++)    {        if(a[i] == 1)            printf("%d\n", i);    }    return 0;}

4、遞增、遞減序列

輸入十個數,任意相鄰的兩個數不同,輸出所有的遞增,遞減序列。

【分析】

輸入:

1 5 9 8 12 21 3 0 -1 9

輸出:

1 5 9

9 8

8 12 21

21 3 0 -1

-1 9

【代碼】

#include <stdio.h>int main(void){    int i, k = -1;     int a[10];    for(i = 0; i < 10; i++)    {           scanf("%d", &a[i]);    }       for(i = 1; i < 10; i++)    {           if(k == (a[i] > a[i - 1]))        {               printf(" %d", a[i]);        }           else        {               k = (a[i] > a[i - 1]);            printf("\n%d %d", a[i - 1], a[i]);        }       }       printf("\n");    return 0;}

5、出現次數最多的數

輸入10個數,找出出現次數最多的數(如果多個並列,則按數字出現順序分別輸出)

【分析】

輸入:

1 5 27 33 24 1 27 18 19 20

輸出:

1 27

【代碼】

#include <stdio.h>int main(void){    int a[10];    int i = 0, j = 0;    int count[10] = {1,1,1,1,1,1,1,1,1,1};    int max = 0;        for(i = 0; i < 10; i++)    {           scanf("%d", &a[i]);    }       for(i = 0; i < 9; i++)    {           //count[i] = 0;        for(j = i + 1; j < 10; j++)        {               if(a[i] == a[j])            {                   if(count[i] != 0)                {                       count[i] ++;                 }                   count[j] = 0;            }           }    /*    for(i = 0; i < 10; i++)    {        if(count[i] != 0)        {            printf("%d ", a[i]);        }    }*/    max = 0;    for(i = 1; i < 10; i++)    {        if(count[i] > count[max])        {            max = i;        }    }    for(i = 0; i < 10; i++)    {        if(count[i] == count[max])        {            printf("%d ", a[i]);        }    }    return 0;}

6、螺旋型NxN矩陣

輸入兩個數,第一個數決定一個nXn的矩陣,第二個數決定從1開始賦值,賦值的上限。

【分析】

輸入:

5 23

輸出:

 1   2   3   4   5

16 17 18 19  6

15  0   0  20  7

14 23 22 21  8

13 12 11 10  9

【代碼】

#include <stdio.h>int main(void){    int i, j, r = 1;    int k = 1;    int n, m;    int a[20][20] = {};             scanf("%d %d", &n, &m);    for(j = 0; j < n; j++)    {           a[0][j] = k++;    }       for(i = n - 1; i >= n / 2; i --)     {           for(j = r; j <= i; j++)        {               a[j][i] = k++;        }           for(j = i; j >= r; j--)        {               a[i][j - 1] = k++;        }           for(j = i; j > r; j--)        {               a[j - 1][r - 1] = k++;        }           for(j = r; j < i; j++)        {               a[r][j] = k++;        }           r ++;     }     for(i = 0; i < n; i ++)    {        for(j = 0; j < n; j ++)        {            if(a[i][j] > m)            {                a[i][j] = 0;            }            printf("%3d", a[i][j]);        }        printf("\n");    }    return 0;}

7、數組插值

有一個已經排好序的數組。現輸入一個數,要求按原來的規律將它插入數組中。

【難度係數】▲▲

【分析】

【代碼】

#include <stdio.h>int main(void){int arr[5] = {1,2,3,5,6};int i = 0;int index = 0;int num = 0;scanf("%d", &num);//找到應該插入的位置for(i = 0; i < 5; i ++){if(num < arr[i]){index = i;break;}}//如果num應該插入下標為0~4的位置,則進行插入//否則不插入if(i != 5){for(i = 4; i > index; i --){arr[i] = arr[i - 1];}arr[index] = num;}for(i = 0; i < 5; i ++){printf("%d ", arr[i]);}printf("\n");return 0;}

8、數組逆序

將一個數組逆序

【難度係數】▲▲▲

【分析】

【代碼】

#include <stdio.h>int main(void){int arr[] = {1,2,3,4,5,6};int i = 0;int temp = 0;int len = sizeof(arr)/sizeof(arr[0]);for(i = 0; i < len/2; i ++){temp = arr[i];arr[i] = arr[len - 1 - i];arr[len - 1 - i] = temp;}for(i = 0; i < len; i ++){printf("%d ", arr[i]);}printf("\n");return 0;}

9、楊輝三角

列印出楊輝三角形(要求列印出10行如)

         1

      1  1

      1  2  1

      1  3  3  1

      1  4  6  4  1

      1  5  10 10 5  1

【難度係數】▲▲▲▲▲

【分析】

楊輝三角:

規律:

當為第一列或者是行和列相等時值為1

否則 a[i][j] = a[i - 1][j - 1] + a[i - 1][j]

【代碼】

#include <stdio.h>int main(void){int arr[10][10] = {};int i, j;for(i = 0; i < 10; i ++){for(j = 0; j <= i; j ++){if(j == 0 || i == j)arr[i][j] = 1;elsearr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];printf("%4d", arr[i][j]);}printf("\n");}return 0;}

10、尾數前置

有n個整數,使其前面各數順序向後移m個位置,最後m個數變成最前面的m個數。

【難度係數】▲▲▲▲

【分析】

C語言規定:聲明數組時,數組的長度必須是常量,但是gcc編譯器允許聲明數組時包含變數,但是在聲明數組之前變數必須被賦值且一旦聲明,數組的長度不能再改變,聲明數組時不能被初始化,但後面可以賦值。

【代碼】

#include <stdio.h>void arr_move(int arr[], int len, int m){int i = 0, j = 0;int temp = 0;for(i = len - m; i < len; i ++){temp = arr[i];for(j = i; j > i - (len - m); j --){arr[j] = arr[j - 1];}arr[j] = temp;}}int main(void){int n = 0;int i = 0;int m = 0;scanf("%d", &n);int arr[n];for(i = 0; i < n; i ++){arr[i] = i + 1;printf("%d ", arr[i]);}printf("\n");scanf("%d", &m);arr_move(arr, n, m);for(i = 0; i < n; i ++){printf("%d ", arr[i]);}printf("\n");return 0;}

11、統計字串

輸入一行字元,最大長度為100,統計出其中有多少個字串,不算標點。例如:

輸入:Hi, Welcome to saif!!

輸出:4

【難度係數】▲▲▲

【分析】

【代碼】

#include <stdio.h>int is_alpha(char ch){if(ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z') return 1;elsereturn 0;}int is_digit(char ch){if(ch >= '0' && ch <= '9')return 1;elsereturn 0;}int is_biaodian(char ch){if(ch < '0' || ch > '9' && ch < 'A' || ch > 'Z' && ch < 'a' || ch > 'z')return 1;else return 0;}int main(void){char str[100] = {};int counter = 0;int i = 0;scanf("%[^\n]", str);while(str[i] != '\0'){if((is_alpha(str[i]) || is_digit(str[i]))&& is_biaodian(str[i + 1])){counter ++;}i ++;}printf("\n%d\n", counter);return 0;}

12、找長度最長的字串

輸入一行字元,找出其中長度最大的單詞。要求從鍵盤輸入一行字元,列印出其中長度最大的字串。例如:

輸入:when i was young i'd listen to the radio waiting for my favorite songs

輸出:favorite

【難度係數】▲▲▲▲

【分析】

【代碼】 

#include <stdio.h>int main(void){char str[100] = {};int i = 0;int counter = 0;int max = 0;int index = 0;int pos = 0;scanf("%[^\n]", str);while(1){if(str[i] != ' '){counter ++;printf("counter = %d\n", counter);}if(str[i] == ' ' || str[i] == '\0'){if(max < counter){max = counter;index = pos;printf("max = %d, index = %d\n", max, index);}}if(str[i] == ' ' && str[i + 1] != ' '){pos = i + 1;counter = 0;printf("pos = %d\n", pos);}if(str[i] == '\0')break;i ++;}i = index;while(str[i] != ' ' && str[i] != '\0'){printf("%c", str[i]);i ++;}printf("\n");return 0;}

13、矩陣轉置

例如:

  1 2 3 4     1 5 3 4

  5 6 7 8 ->2 6 2 7  

  3 2 5 9     3 7 5 2

  4 7 2 3     4 8 9 3

【難度係數】▲▲▲▲

【分析】

【代碼】

#include <stdio.h>int main(void){int n = 0;int i, j;int temp = 0;scanf("%d", &n);int arr[n][n];for(i = 0; i < n; i ++){for(j = 0; j < n; j ++){scanf("%d", &arr[i][j]);}}for(i = 0; i < n; i ++){for(j = 0; j < n; j ++){printf("%d", arr[i][j]);}printf("\n");}for(i = 0; i < n; i ++){for(j = 0; j < i; j ++){temp = arr[i][j];arr[i][j] = arr[j][i];arr[j][i] = temp;}}for(i = 0; i < n; i ++){for(j = 0; j < n; j ++){printf("%d", arr[i][j]);}printf("\n");}return 0;}



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.