第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()
,函數的功能是:求出某個二維數組(如5
行5
列)的周邊元素值之和,作為函數值返回。
輸入: 第一行為一個整數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;
}