第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;
}