首页 > 其他分享 >利用数组处理批量数据之习题

利用数组处理批量数据之习题

时间:2024-10-23 23:10:14浏览次数:6  
标签:arr 批量 int ++ 数组 printf 习题 gets

用筛选法求100以内的素数


//用筛选法求100以内的素数

#include <stdio.h>

int main_6__1(void)
{
	int arr[101] = { 0 };

	for (int i = 0; i < 101; i++)//赋值
		arr[i] = i;

	arr[0] = arr[1] = -1;//挖掉

	for (int i = 0; i < 100; i++)
	{
		if (-1 == arr[i])//被挖掉的就不进行下面的操作
			continue;

		for (int j = i + 1; j < 101; j++)
		{
			if (-1 == arr[j])//被挖掉的就不进行下面的操作
				continue;

			if (0 == (arr[j] % arr[i]))//挖掉
				arr[j] = -1;
		}
	}

	for (int i = 0; i < 101; i++)
	{
		if (-1 != arr[i])
			printf("%d\t", arr[i]);
	}

	printf("\n");

	return 0;
}

运行结果:

用选择法对10个整数排序


//用选择法对10个整数排序

#include <stdio.h>

int main(void)
{
	int arr[10], iMin, z;

	for (int i = 0; i < 10; i++)
	{
		printf("请输入arr[%d]的值\n", i);
		scanf("%d", &arr[i]);
	}

	printf("排序前:\n");

	for (int i = 0; i < 10; i++)
		printf("%d\t", arr[i]);
	
	for (int i = 0; i < 9; i++)
	{
		iMin = arr[i];
		z = i;

		for (int j = i + 1; j < 10; j++)
		{
			if (arr[j] < arr[i])
			{
				if (arr[j] < iMin)
				{
					iMin = arr[j];
					z = j;
				}
			}
		}

		arr[z] = arr[i];
		arr[i] = iMin;
	}

	printf("\n\n排序后:\n");

	for (int i = 0; i < 10; i++)
		printf("%d\t", arr[i]);

	return 0;
}

在VS编译器内会报C4996错误,解决见下文:(下同)

C4996 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. - EricsT - 博客园 (cnblogs.com)

运行结果:

 

求一个3 * 3 整型矩阵对角线元素之和

 


//求一个3 * 3 整型矩阵对角线元素之和

#include <stdio.h>

int main(void)
{
	int arr[3][3] = { 0 };

	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			printf("请输入arr[%d][%d]\n", i, j);
			scanf("%d", &arr[i][j]);
		}
	}

	printf("%d\n", arr[0][0] + arr[1][1] + arr[2][2] + arr[2][0] + arr[0][2]);
	
	return 0;
}

运行结果:

有一个已排序好的数组,要求输入一个数后,按原来的排序规律将它插入数组中


//有一个已排序好的数组,要求输入一个数后,按原来的排序规律将它插入数组中

#include <stdio.h>

int main(void)
{
	int arr[10] = { 1, 4, 6, 9, 13, 16, 19, 28, 40, 100 }, temp;

	printf("old arr\n");
	
	for (int i = 0; i < 10; i++)
		printf("%d\t", arr[i]);

	printf("\n\n请输入需要插入的数\n");
	scanf("%d", &temp);
	printf("\nnew arr\n");

	char isInsert = 0;

	for (int i = 0; i < 10; i++)
	{
		if (isInsert)
		{
			printf("%d\t", arr[i]);
			continue;
		}

		if (temp > arr[i])
		{
			printf("%d\t", arr[i]);
			continue;
		}

		printf("%d\t", temp);
		i--;
		isInsert = 1;
	}

	printf("\n");

	return 0;
}

运行结果:

将一个数组的值按逆序重新存放。例如:8, 6, 5, 4, 1 -> 1, 4, 5, 6, 8


//将一个数组的值按逆序重新存放。例如:8, 6, 5, 4, 1 -> 1, 4, 5, 6, 8

#include <stdio.h>

int main(void)
{
	int arr[] = { 8, 6, 5, 4, 1 };

	printf("arr\n");

	for (int i = 0; i < 5; i++)
		printf("%d\t", arr[i]);
	
	printf("\n\nswap arr\n");

	for (int i = 4; i >= 0; i--)
		printf("%d\t", arr[i]);

	printf("\n");

	return 0;
}

运行结果:


#include <stdio.h>

int main(void)
{
	int arr[10][10] = { 0 };

	for (int i = 0; i < 10; i++)
	{
		arr[i][0] = 1;
		arr[i][i] = 1;
	}

	for (int i = 1; i < 9; i++)
	{
		for (int j = 1; j < i; j++)
			arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
	}

	for (int i = 0; i < 9; i++)
	{
		for (int j = 0; j < i + 1; j++)
			printf("%-3d\t", arr[i][j]);

		printf("\n");
	}

	return 0;
}

运行结果:

找出一个二维数组中的鞍点。即该位置上的元素在该行上最大、在该列上最小。也可能没有鞍点。


//找出一个二维数组中的鞍点。即该位置上的元素在该行上最大、在该列上最小。也可能没有鞍点。

#include <stdio.h>

int main(void)
{
	int arr[4][5] = { 0 };

	for (int i = 0; i < 4; i++)//输入数组
	{
		for (int j = 0; j < 5; j++)
		{
			printf("请输入arr[%d][%d]的值\n", i, j);
			scanf("%d", &arr[i][j]);
		}
	}

	printf("arr:\n");

	for (int i = 0; i < 4; i++)//打印数组
	{
		for (int j = 0; j < 5; j++)
			printf("%d\t", arr[i][j]);

		printf("\n");
	}

	char isSaddlePoint = 0;//默认无鞍点

	for (int i = 0; i < 4; i++)
	{
		for (int j = 0; j < 5; j++)
		{
			int iCheak = arr[i][j];//一个一个检查

			char isCol = 1;//默认列符合条件

			for (int z = 0; z < 4; z++)//检查列
			{
				if (iCheak > arr[z][j])
				{
					isCol = 0;//不符合退出循环
					break;
				}
			}

			if (!isCol)//列不符合条件,跳出检查继续检查下一个
				continue;

			char isRow = 1;//默认行符合条件

			for (int z = 0; z < 5; z++)
			{
				if (iCheak < arr[i][z])
				{
					isRow = 0;//不符合退出循环
					break;
				}
			}

			if (!isRow)//行不符合条件,跳出检查继续检查下一个
				continue;

			//符合条件,打印鞍点,并使鞍点数量+1
			isSaddlePoint++;
			printf("Saddle Point:%d\n", iCheak);
		}
	}

	if (!isSaddlePoint)//无鞍点,提示
		printf("not exist\n");
	else
		printf("\n");

	return 0;
}

运行结果:

有鞍点:  无鞍点:

有15个数按由小到大顺序放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出“无此数”


//有15个数按由小到大顺序放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。
//如果该数不在数组中,则输出“无此数”

#include <stdio.h>

int main(void)
{
	int arr[15] = { 0 };

	for (int i = 0; i < 15; i++)//输入数组
	{
		printf("请输入arr[%d]的值\n", i);
		scanf("%d", &arr[i]);
	}

	printf("\n\narr:\n");
	
	for (int i = 0; i < 15; i++)//打印数组
		printf("%d\t", arr[i]);

	int iTemp;
	printf("请输入待检查的值\n");//输出检查数
	scanf("%d", &iTemp);

	int iMinIndex = 0, iMaxIndex = 14;

	while (iMinIndex < iMaxIndex)
	{
		int iIndex = (iMinIndex + iMaxIndex) / 2;//中间数

		if (arr[iIndex] == iTemp)//相等输出程序结束
		{
			printf("%d\n", iIndex);
			return 0;
		}

		if (arr[iIndex] > iTemp)//小,找左边
			iMaxIndex = iIndex - 1;
		else//大,找右边
			iMinIndex = iIndex + 1;
	}
	
	printf("无此数\n");

	return 0;
}

运行结果:

有一篇文章,共3行文字,每行有80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符的个数


//有一篇文章,共3行文字,每行有80个字符。
//要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符的个数

#include <stdio.h>

int main(void)
{
	char arr[3][80] = { 0 };

	for (int i = 0; i < 3; i++)
	{
		printf("请输入第%d行内容\n", i + 1);
		gets(arr[i]);
	}

	int iUpper = 0, iLow = 0, iDig = 0, iSpace = 0, iOther = 0;

	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 80; j++)
		{
			char ch = arr[i][j];

			if ('\0' == ch)
				break;

			if ((ch >= 'A') && (ch <= 'Z'))
				iUpper++;
			else if ((ch >= 'a') && (ch <= 'z'))
				iLow++;
			else if ((ch >= '0') && (ch <= '9'))
				iDig++;
			else if (' ' == ch)
				iSpace++;
			else
				iOther++;
		}
	}

	printf("\n\narr\n");

	for (int i = 0; i < 3; i++)
		puts(arr[i]);

	printf("\n");
	printf("大写字母:%d\n小写字母:%d\n数字:%d\n空格:%d\n其他:%d\n", 
		iUpper, iLow, iDig, iSpace, iOther);

	return 0;
}

运行结果:


#include <stdio.h>

int main(void)
{
	for (int i = 0; i < 5; i++)
	{
		for (int j = 0; j < 9; j++)
		{
			if (j < i)
				printf(" \t");
			else if (j > i + 4)
				printf(" \t");
			else
				printf("*\t");
		}

		printf("\n");
	}

	return 0;
}

运行结果:

即第1个字母变成第26个字母,第i个字母变成第(26-i+1)个字母,非字母字符不变。要求编程序将密码译回原文,并输出密码和原文


#include <stdio.h>

int main(void)
{
	char str[1024] = { 0 }, strNew[1024] = { 0 };

	printf("请输入密码\n");
	gets_s(str);//vs在2015之后不可用gets,但是可以用gets_s代替

	for (int i = 0; i < sizeof(str); i++)
	{
		char ch = str[i];

		if ('0' == ch)
			break;

		if ((ch >= 'A') && (ch <= 'Z'))
			ch = 26 - (ch - 'A' + 1) + 1 + 'A' - 1;
		else if ((ch >= 'a') && (ch <= 'z'))
			ch = 26 - (ch - 'a' + 1) + 1 + 'a' - 1;

		strNew[i] = ch;
	}

	printf("\n\n密码:\n");
	puts(str);
	printf("原文:\n");
	puts(strNew);

	return 0;
}

运行结果:

编一程序,将两个字符串连接起来,不要用 strcat 函数


//编一程序,将两个字符串连接起来,不要用 strcat 函数

#include<stdio.h>

int main(void)
{
	char str1[1024] = { 0 }, str2[1024] = { 0 }, str3[2048] = { 0 }, j = 0;

	printf("请输入第一个字符串:\n");
	gets_s(str1);//vs在2015之后不可用gets,但是可以用gets_s代替
	printf("请输入第二个字符串:\n");
	gets_s(str2);

	for (int i = 0; i < sizeof(str1); i++, j++)
	{
		if ('\0' == str1[i])
			break;

		str3[j] = str1[i];
	}

	for (int i = 0; i < sizeof(str2); i++, j++)
	{
		if ('\0' == str2[i])
			break;

		str3[j] = str2[i];
	}

	puts(str3);

	return 0;
}

运行结果:

编写一个程序,将两个字符串 s1 和 s2 比较,若 s1 > s2 输出一个正数;若 s1 = s2 输出0;若 s1 < s2 输出一个负数。不要用 strcpy 函数。两个字符串用 gets 函数读入。输出的正数或负数的绝对值应是相比较的两个字符串响应字符的ASCII码的差值。例如 ‘A’与 ‘C’相比,输出 -2 。


//编写一个程序,将两个字符串 s1 和 s2 比较,若 s1 > s2 输出一个正数;若 s1 = s2 输出0;若 s1 < s2 输出一个负数。不要用 strcpy 函数。
// 两个字符串用 gets 函数读入。输出的正数或负数的绝对值应是相比较的两个字符串响应字符的ASCII码的差值。例如 ‘A’与 ‘C’相比,输出-2 。

#include <stdio.h>

int main(void)
{
	char str1[1024] = { 0 }, str2[1024] = { 0 };
	int iRet;

	printf("请输入第一个字符串\n");
	gets_s(str1);//vs在2015之后不可用gets,但是可以用gets_s代替
	printf("请输入第二个字符串\n");
	gets_s(str2);

	for (int i = 0; i < ((sizeof(str1) > sizeof(str2)) ? sizeof(str1) : sizeof(str2)); i++)
	{
		char ch1 = str1[i], ch2 = str2[i];

		if ((ch1 == ch2) && (ch1 == '\0'))
		{
			printf("0\n");
			return 0;
		}
			

		if (ch1 == ch2)
			continue;

		printf("%d\n", ch1 - ch2);
		break;
	}

	return 0;
}

运行结果:

编写一个程序,将字符数组 s2 中的全部字符复制到字符数组 s1 中,不用 strcpy 函数。复制时,'\0'也要复制过去。'\0'后面的字符不复制。


//编写一个程序,将字符数组 s2 中的全部字符复制到字符数组 s1 中,不用 strcpy 函数。复制时,'\0'也要复制过去。'\0'后面的字符不复制。

#include <stdio.h>

int main(void)
{
	char s1[1024] = { 0 }, s2[1024] = { 0 };

	printf("请输入需要复制的字符串\n");
	gets_s(s2);//vs在2015之后不可用gets,但是可以用gets_s代替

	for (int i = 0; i < ((sizeof(s1) > sizeof(s2)) ? sizeof(s1) : sizeof(s2)); i++)
	{
		char ch = s2[i];

		if ('\0' == ch)
		{
			s1[i] = ch;
			break;
		}

		s1[i] = ch;
	}

	puts(s1);

	return 0;
}

运行结果:

标签:arr,批量,int,++,数组,printf,习题,gets
From: https://www.cnblogs.com/EricsT/p/18496079

相关文章

  • 操作系统 第三章 第一节(王道计算机操作系统+课后习题提炼)
    本文是对王道计算机408操作系统+王道2025操作系统考研复习指导部分的提炼总结,个人心得,包含视频内容和课后习题的提炼.本人是26届408考生,本文属于考研复习的笔记,会持续更新~建议搭配视频和指导书食用~~视频课请看王道计算机考研408操作系统本文是操作系统第三章第一......
  • 【数据结构】-数组
    数组特点:数组的地址连续,可以通过下标获取数据。1.数组扩容步骤:$1.创建一个比原来数组更长的新数组$2.让原来数组当中的数据依次复制到新数组当中$3.让arr指向新数组,原数组空间释放  2.数组插入2.1最后位置插入$1.判断数组当中有没有位置,用size记录当......
  • VBA代码按模板批量新建Excel工作簿&自动填充单元格信息(2.0)
    <<<<接续投稿的1.01.代码①用于将模板复制到新建工作簿中,代码②用于将源文件(即新建工作簿所需名单所在的那个文件,也是粘贴代码的那个文件)。因此,完成“按模板批量与自动填充信息”这一操作需要准备三个文件。(文件命名没有严格要求,在操作过程中统一即可,图片中仅作演示)(1)——>......
  • javascript数组splice和slice介绍
    一splice1.概述splice是JavaScript数组对象的一个方法,用于改变原数组的内容。它可以添加、删除或替换数组中的元素。2.语法array.splice(start,deleteCount,item1,item2,...)start:需要改变的数组的起始索引。如果是负数,则表示从数组末尾开始计数。de......
  • 2024-10-23:最高频率的 ID。用go语言,给定两个长度相等的整数数组 nums 和 freq, 其中num
    2024-10-23:最高频率的ID。用go语言,给定两个长度相等的整数数组nums和freq,其中nums中的每个元素表示一个ID,而freq中的每个元素表示对应ID在此次操作后出现的次数变化。如果freq[i]为正数,则表示在这次操作中nums[i]的ID会增加freq[i]次;如果freq[i]为负数,则表示在这次操作中nums[i......
  • C语言经典20例(输入数组元素,求出最大值和最小值,并输出)
    在c语言中,要实现要实现“输入数组元素,并求出最大值和最小值,并输出”主要步骤主要有以下几步:1.必要的头文件。2.定义数组大小。3.从用户那里接受数组元素的输入4.使用循环遍历数组。找出最大值和最小值5.输出最大值和最小值代码如下:#include<stdio.h>intmain(){......
  • 每日算法一练:剑指offer——数组篇(4)
    数据流中的中位数        中位数 是有序整数列表中的中间值。如果列表的大小是偶数,则没有中间值,中位数是两个中间值的平均值。例如,[2,3,4] 的中位数是 3[2,3] 的中位数是 (2+3)/2=2.5设计一个支持以下两种操作的数据结构:voidaddNum(intnum) -从数据......
  • KMP数组!启动!
    ......
  • 批量文件重命名的方法
    批量文件重命名软件主页:http://6laohu.com将指定目录下的所有文件按照配置的规则批量重命名立即下载使用介绍下载 批量文件重命名软件 无需安装直接运行,按界面上操作步骤可将指定目录下的所有文件按照配置的规则批量重命名,并把重命名后的文件复制到指定目录下(原文件不会......
  • 批量图片添加水印
    批量图片添加水印软件主页:http://6laohu.com将指定目录下的所有图片批量添加您配置的水印文字立即下载 使用介绍下载 批量图片添加水印软件 无需安装直接运行,按界面上操作步骤即可将指定目录下的所有图片批量添加您配置的水印文字,并复制到指定目录下(原图片不会修改),免......