Educoder-程序設計基礎:函數與數組


第1關:汽車銷量排序

​ 本關任務:需要對2019年主要汽車集團全球的汽車銷量進行統計,編寫一個程序,按從大到小的順序對銷量進行排序

#include <stdio.h>
void carSort(long car[]);  //排序函數
int main()
{
    int i;
    long car[10];
    printf("輸入2019年汽車銷量:\n");
    for (i = 0; i < 10; i++)
    {
        printf("car[%d]=", i);
        scanf("%ld", &car[i]);
    }
    /*********begin *******/
    //調用排序函數
    carSort(car);
    /*********end *******/
    printf("2019年汽車銷量排名如下:\n");
    for (i = 0; i < 10; i++) {
        printf("%ld\t", car[i]);
        if (i == 4)
            printf("\n");
    }
    return 0;
}
/*********begin *******/
//定義排序函數
void carSort(long car[])
{
    int i, j;
    long t = 0;
    for (i = 0; i < 9; i++)
    {
        for (j = i + 1; j < 10; j++)
        {
            if (car[j] > car[i])
            {
                t = car[j];
                car[j] = car[i];
                car[i] = t;
            }
        }
    }
}
/*********end *******/

第2關:回文

#include<stdio.h>
#include<string.h>

#define SIZE 100

int isPalindrome(char arr[], int len);
/**** 輸入字符串,調用函數isPalindrome判斷是否為回文串,然后輸出結果 *******/
int main() {
	char arr[SIZE]; int len;
	scanf("%s", &arr);	//注意是%s, %s用在字符串 %c用在字符
	len = strlen(arr);	//獲取數組長度
	if (isPalindrome(arr, len))		//if (isPalindrome(arr, len)==1)
		printf("yes");
	else
		printf("no");

	return 0;
}
/**** 在下面編寫滿足任務要求的遞歸函數isPalindrome,是回文返回1,不是返回0 *******/
int isPalindrome(char arr[], int len) {
	int i ,j;
	for (i = 0, j = len - 1; i < j && arr[i] == arr[j]; i++, j--);	//滿足i<j同時arr[i]==arr[j]條件才會繼續循環
	if (i > j)
		return 1;
	else
		return 0;
}

第3關:二維數組周邊元素和

​ 本關任務:請編寫函數fun(),函數的功能是:求出某個二維數組(如55列)的周邊元素值之和,作為函數值返回。

輸入: 第一行為一個整數n,代表數組維數。 第二行開始為二維數組賦值。

輸出: 周邊元素之和。

/********** Begin **********/
#include<stdio.h>
void abc(int a[][100], int n)
{
	int i, j, sum = 0;
	for (i = 0; i < n; i++)
		sum = sum + a[i][0] + a[i][n - 1];		//求左右
	for (j = 0; j < n; j++)
		sum = sum + a[0][j] + a[n - 1][j];		//求上下	
	sum = sum - a[0][0] - a[0][n - 1] - a[n - 1][n - 1] - a[n - 1][0];		//去掉四角重復
	printf("%d", sum);
}
int main()
{
	int n, a[100][100], i, j;
	scanf("%d", &n);
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < n; j++)
			scanf("%d", &a[i][j]);
	}
	abc(a, n);
	return 0;
}
/********** End **********/

第4關:矩陣轉置

​ 本關任務:求矩陣轉置。矩陣轉置在數學上的定義為:設A為m×n階矩陣(即m行n列的矩陣),其第i行第j列的元素是a(i,j),定義A的轉置為這樣一個n×m階矩陣B,滿足:B=a(j,i)

#include <stdio.h>
#define SIZE 20 //預定義要進行轉置的矩陣最大大小為 20*20
void outputMatrix(int b[][SIZE], int n, int m);
void inputMatrix(int a[][SIZE], int n, int m);
void matrixTransport(int a[][SIZE], int b[][SIZE], int row, int column);
//矩陣的輸入函數
void inputMatrix(int a[][SIZE], int n, int m)//二維數組參數下標必須要確定
{
    /**********  Begin ***********/
    int i, j;
    for (i = 0; i < n; i++)
        for (j = 0; j < m; j++)
            scanf("%d", &a[i][j]);
    /**********  End  **********/
}
//矩陣的輸出函數
void outputMatrix(int b[][SIZE], int n, int m)
{
    /**********  Begin ***********/
    int i, j;
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
            printf("%d ", b[i][j]);
        printf("\n");
    }
    /**********  End  **********/
}

//矩陣的轉置運算
void matrixTransport(int a[][SIZE], int b[][SIZE], int row, int column)
{
    /**********  Begin ***********/
    int i, j;
    for (i = 0; i < row; i++)
    {
        for (j = 0; j < column; j++)
            b[j][i] = a[i][j];
    }
    /**********  End  **********/
}

int main()
{
    //定義數組並初始化
    int a[SIZE][SIZE] = { 0 };
    int b[SIZE][SIZE] = { 0 };//定義數組,注意要初始化
    int row, column;

    //矩陣行,列數的確定
    printf("請輸入您要進行轉置的矩陣的行數(2~20) : row =  ");
    scanf("%d", &row);
    printf("\n請輸入您要進行轉置的矩陣的列數(2~20) : column = ");
    scanf("%d", &column);

    //函數調用及主功能實現
    printf("請輸入一個 %d X %d 的矩陣 \n", row, column);
    inputMatrix(a, row, column);
    matrixTransport(a, b, row, column);
    printf("轉置后的矩陣是 :\n");
    outputMatrix(b, column, row);
    return 0;
}

!第5關:巧排螺旋數陣

螺旋數陣指的是將自然數1,2,3,4,…,nX(n-1),nn,共nXn個數,按有小到大,由外到內、順時針或逆時針方向,排成一個nXn的螺旋形狀的方陣。 順時針方向螺旋陣 4*4

#include <stdio.h>
void rotation_clockwise(int a[][20], int n)
{
    int i, j, sum;
    sum = 1;
    for (i = 1; i <= n / 2; i++)
    {
        for (j = 1; j <= n; j++)//向右
        {
            if (a[i][j] == 0)
                a[i][j] = sum++;
        }
        for (j = i; j <= n; j++)//向下
        {
            if (a[j][n - i + 1] == 0)
                a[j][n - i + 1] = sum++;
        }
        for (j = n - i + 1; j >= i; j--)//向左
        {
            if (a[n - i + 1][j] == 0)
                a[n - i + 1][j] = sum++;
        }
        for (j = n - i + 1; j >= i; j--)//向上
        {
            if (a[j][i] == 0)
                a[j][i] = sum++;
        }
    }
} //順時針螺旋
void rotation_anticlockwise(int a[][20], int n)
{
    int i, j, sum;
    sum = 1;
    for (i = 1; i <= n / 2; i++)
    {
        for (j = 1; j <= n; j++)
        {
            if (a[j][i] == 0)
                a[j][i] = sum++;

        }
        for (j = i; j <= n; j++)
        {
            if (a[n - i + 1][j] == 0)
                a[n - i + 1][j] = sum++;
        }
        for (j = n - i + 1; j >= 1; j--)
        {
            if (a[j][n - i + 1] == 0)
                a[j][n - i + 1] = sum++;

        }
        for (j = n - i + 1; j >= 1; j--)
        {
            if (a[i][j] == 0)
                a[i][j] = sum++;

        }
    }

} //逆時針螺旋

int main()
{
    int i, j, n, a[20][20] = { 0 }, z;
    char* s[2] = { "順時針方向螺旋陣", "逆時針方向螺旋陣" };
    while (1)
    {
        printf("\n\n輸入行數n(1到19):\n");
        scanf("%d", &n);
        if (n < 1 || n>19)
            break;
        printf("\n\n選擇螺旋方向:1.順時針 2.逆時針\n");
        scanf("%d", &z);
        printf("\n");

        /******begin  *******/
        //調用函數
        if (z == 1)
            rotation_clockwise(a, n);
        else if (z == 2)
            rotation_anticlockwise(a, n);
        /******end  *******/

        printf("\t%s\n\n", s[z - 1]);
        for (i = 1; i <= n; i++) {
            for (j = 1; j <= n; j++)
                printf("%4d", a[i][j]);
            printf("\n");
        }
    }
    return 0;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM