程序常见错误的类型等作业

发布于:2022-12-13 ⋅ 阅读:(303) ⋅ 点赞:(0)

题目一

调整奇数偶数顺序

作业内容
调整数组使奇数全部都位于偶数前面。

题目:

输入一个整数数组,实现一个函数,

来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,

所有偶数位于数组的后半部分。

题目分析 这里我想到的解法是 创建一个同样的数组 遍历前面一个数组 如果遇到奇数 就把这个数放到前面去 如果是偶数 就把这个数放到后面去

代码如下

int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int arr2[10] = { 0 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	int* left = arr2;
	int* right = &(arr2[sz - 1]);
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		if (arr[i] % 2 == 1)
		{
			*left = arr[i];
			left++;
		}
		else
		{
			*right = arr[i];
			right--;
		}
	}
	for (i = 0; i < 9; i++)
	{
		printf("%d ", arr2[i]);
	}
	return 0;
}

运行结果如下
在这里插入图片描述

可以完美运行

但是这里我没有想到的一点是 我们并不知道一个数组里面有多少个元素

所以说 上面那个方法在某些情况下行不通

那么有没有别的方法呢?

答案当然是有的 既然我们知道 前面的一定是奇数 后面的一定是偶数

那么我们可以从前面开始遍历 遍历到偶数的时候停顿一下

从后面开始遍历 遍历到奇数的时候停顿一下 然后两个数字交换位置 之后继续遍历

直到左边的指针位置大于右边的指针

代码表示如下

int main()
{
	int arr[20] = { 1,2,3,11,15,16,13,22,36,4,5,6,7,8,9,10 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	int* left = arr;
	int* right = &(arr[sz - 1]);
	int i = 0;
	while (left < right)
	{


		while ((*left) % 2 == 1)
		{
			left++;
		}
		while ((*right) % 2 == 0)
		{
			right--;
		}
		if (left<right)
		{
			int tmp = *right;
			*right = *left;
			*left = tmp;
		}
	}
	for ( i = 0; i < sz; i++)
	{
		printf("%d ",arr[i]);
	}
	return 0;
}

运行结果如图

在这里插入图片描述

题目二

strcpy实现

作业内容
模拟实现库函数strcpy

这个大家可以参考我的这一篇博客

strcpy库函数的初步实现到完美优化

题目三

描述
输入一个整数序列,判断是否是有序序列,有序,指序列中的整数从小到大排序或者从大到小排序(相同元素也视为有序)。

数据范围: 3 \le n \le 50 \3≤n≤50 序列中的值都满足 1 \le val \le 100 \1≤val≤100
输入描述:
第一行输入一个整数N(3≤N≤50)。
第二行输入N个整数,用空格分隔N个整数。
输出描述:
输出为一行,如果序列有序输出sorted,否则输出unsorted。

题目分析: 如果要求我们判断一个数组是否有序 我们只需要判断它是否升序或者降序即可

int main()
{
	int n = 0;
	int flag1 = 1;
	int flag2 = 1;
	scanf("%d", &n);
	int arr[1000] = { 0 };
	int i = 0;
	for (  i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
	}
	for ( i = 0; i < n; i++)
	{
		if (arr[i]<arr[i+1])
		{
			flag1 = 0;
		}
	}
	for ( i = 0; i < n-1; i++)
	{
		if (arr[i] > arr[i + 1])
		{
			flag2 = 0;
		}
	}
	if (flag1||flag2)
	{
		printf("sorted");
	}
	else
	{
		printf("unsorted");
	}
	return 0;
}

题目四

描述
输入n个成绩,换行输出n个成绩中最高分数和最低分数的差。
输入描述:
两行,第一行为n,表示n个成绩,不会大于10000。

第二行为n个成绩(整数表示,范围0~100),以空格隔开。
输出描述:
一行,输出n个成绩中最高分数和最低分数的差。

题目分析
这道题目只需要设定一个最大数和一个最小数

然后随着一个个输入数字 我们将它们和最大最小数比较

如果大于最大数 就将它赋值给最大数

如果小于最小数 就将它赋值给最小数

#include <stdio.h>

int main()
{
	int i = 0;
    int n =0;
    scanf("%d",&n);
	int max = 0;
	int min = 100;
	while ((scanf("%d",&i))!=EOF)
	{
		if (max<i)
		{
			max = i;
		}
		if (min>i)
		{
			min = i;
		}
	}
	printf("%d", max - min);
}

以上就是本篇博客的全部内容啦 由于博主才疏学浅 所以难免会出现纰漏 希望大佬们看到错误之后能够

不吝赐教 在评论区或者私信指正 博主一定及时修正

那么大家下期再见咯

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到