目录
前言
1、转置矩阵
1.1 题目
描述
输入描述:
输出描述:
1.2解题
分析:
程序:
2、KiKi判断上三角矩阵
2.1 题目
描述
输入描述:
输出描述:
2.2 解题
分析:
程序:
3、有序序列判断
3.1 题目
描述
输入描述:
输出描述:
3.2解题
分析:
程序:
结语
前言
纸上得来终觉浅,觉知此事要躬行。C语言的学习不仅要了解理论知识,更要不断练习,在练习中成长。下面我将给出几到例题,并分析讲解,帮助我们在实践中了解C语言。
1、转置矩阵
1.1 题目
描述
KiKi有一个矩阵,他想知道转置后的矩阵(将矩阵的行列互换得到的新矩阵称为转置矩阵),请编程帮他解答。
输入描述:
第一行包含两个整数n和m,表示一个矩阵包含n行m列,用空格分隔。 (1≤n≤10,1≤m≤10)
从2到n+1行,每行输入m个整数(范围-231~231-1),用空格分隔,共输入n*m个数,表示第一个矩阵中的元素。
输出描述:
输出m行n列,为矩阵转置后的结果。每个数后面有一个空格。
1.2解题
分析:
此题就是一个对二维数组的操作,只需要在输入时按照行和列的顺序输入,输出时按照列到行反过来输出即可。
程序:
int main()
{
int a[10][10] = { 0 };
int n = 0;
int m = 0;
scanf("%d%d", &n, &m);
for (int i = 0;i < n;i++)
{
for (int j = 0;j < m;j++)
{
scanf("%d", &a[i][j]);
}
}
for (int i = 0;i < m;i++)
{
for (int j = 0;j < n;j++)
{
printf("%d ", a[j][i]);
}
printf("\n");
}
return 0;
}
2、KiKi判断上三角矩阵
2.1 题目
描述
KiKi想知道一个n阶方矩是否为上三角矩阵,请帮他编程判定。上三角矩阵即主对角线以下的元素都为0的矩阵,主对角线为从矩阵的左上角至右下角的连线。
输入描述:
第一行包含一个整数n,表示一个方阵包含n行n列,用空格分隔。 (2≤n≤10)
从2到n+1行,每行输入n个整数(范围-231~231-1),用空格分隔,共输入n*n个数。
输出描述:
一行,如果输入方阵是上三角矩阵输出"YES"并换行,否则输出"NO"并换行。
2.2 解题
分析:
此题先输入数据,然后对左下角的数据进行判断,只要出现非0则不为上三角矩阵,输出NO。如果判断完成后未发现问题,则为上三角矩阵,输出YES
程序:
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
int arr[10][10] = { 0 };
int i = 0;
int j = 0;
int p = 1; //标记,如果是上三角矩阵,则为1,否则为0.
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++)
{
if (((i - j) > 0) && (arr[i][j] != 0))
{
p = 0;
goto end;
}
}
}
end:
if (p == 1)
{
printf("YES\n");
}
else
{
printf("NO\n");
}
return 0;
}
3、有序序列判断
3.1 题目
描述
输入一个整数序列,判断是否是有序序列,有序,指序列中的整数从小到大排序或者从大到小排序(相同元素也视为有序)。
数据范围:3≤n≤50 序列中的值都满足 1≤val≤100
输入描述:
第一行输入一个整数N(3≤N≤50)。
第二行输入N个整数,用空格分隔N个整数。
输出描述:
输出为一行,如果序列有序输出sorted,否则输出unsorted。
3.2解题
分析:
此题需要从两种情况进行分析:升序和降序。
用一个变量(我用的p)来标记升序和降序以及不升不降,然后看整个数列的升降情况是否统一,也就是在遍历整个数组时p是否改变。这里要注意的是,当前后两个数据相同时,并没有破坏数列的有序性,所以需要特别判断。
程序:
#include<stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
int arr[50] = { 0 };
int i = 0;
int p = 0;
int f = -1;
int k = 1;
for (i = 0;i < n;i++)
{
scanf("%d", &arr[i]);
}
for (i = 1;i < n;i++)
{
if (arr[i] > arr[i - 1])
{
p = 0; //降序标记
}
else if (arr[i] < arr[i - 1])
{
p = 1; //升序标记
}
else
{
p = -1; //未改变标记
}
if ((f != p) && (f != -1))
{
k = 0;
}
f = p;
}
if (k == 1)
{
printf("sorted");
}
else
{
printf("unsorted");
}
return 0;
}
结语
不要小瞧每一次练习,每天保持练习,持之以恒,我们的C语言技术才会越发熟练。希望大家都能越来越好,不辜负自己的努力。