C语言题目练习

目录

前言

1、转置矩阵

[1.1 题目](#1.1 题目)

描述

输入描述:

输出描述:

1.2解题

分析:

程序:

2、KiKi判断上三角矩阵

[2.1 题目](#2.1 题目)

描述

输入描述:

输出描述:

[2.2 解题](#2.2 解题)

分析:

程序:

3、有序序列判断

[3.1 题目](#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解题

分析:

此题就是一个对二维数组的操作,只需要在输入时按照行和列的顺序输入,输出时按照列到行反过来输出即可。

程序:

cpp 复制代码
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

程序:

cpp 复制代码
#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是否改变。这里要注意的是,当前后两个数据相同时,并没有破坏数列的有序性,所以需要特别判断。

程序:

cpp 复制代码
#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语言技术才会越发熟练。希望大家都能越来越好,不辜负自己的努力。

相关推荐
To_OC2 小时前
LC 51 N 皇后:我以为难的是回溯,结果栽在了对角线下标
javascript·算法·leetcode
Scott9999HH2 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
2401_841495642 小时前
【操作系统】进程同步与互斥实验报告
c++·算法·操作系统·进程·并发·同步·互斥
码智社3 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海3 小时前
python 列表、元组、集合和字典
开发语言·python
萧瑟余晖4 小时前
JDK 26 新特性详解
java·开发语言
马优晨4 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
a1117766 小时前
2FA 验证码生成器(github登录验证 app)
笔记·学习
我的xiaodoujiao6 小时前
API 接口自动化测试详细图文教程学习系列32--Allure测试报告2
python·学习·测试工具·pytest