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


    题目一

    调整奇数偶数顺序

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

    题目:

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

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

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

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

    代码如下

    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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

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

    可以完美运行

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

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

    那么有没有别的方法呢?

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

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

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

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

    代码表示如下

    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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    运行结果如图

    在这里插入图片描述

    题目二

    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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    题目四

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

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

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

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

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

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

    #include 
    
    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);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

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

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

    那么大家下期再见咯

  • 相关阅读:
    乐吾乐Topology-le5le为智慧电力可视化赋能(一)
    2024年度“阳江市惠民保”正式发布!阳江市专属补充医疗保险全新升级
    【linux命令讲解大全】112.Linux 系统管理工具:dpkg-statoverride 和 dstat 的使用介绍
    敏捷实践之单元测试及最佳实践
    Spring系列文章:Spring中的设计模式
    02--Spring中AOP
    Linux C 进程间通信
    Selenium自动化测试框架工作原理你明白了吗?
    基金合作保密协议
    java毕业生设计住房公积金筹集子系统的网站系统计算机源码+系统+mysql+调试部署+lw
  • 原文地址:https://blog.csdn.net/meihaoshy/article/details/126924469