设计一个程序,实现以下功能:1. 设置常量ARRAY_LEN作为数组的长度,随机生成ARRAY_LEN个整数(范围50~150)储存在整型数组---学习笔记

题目为:

设计一个程序,实现以下功能:
1.  设置常量ARRAY_LEN作为数组的长度,随机生成ARRAY_LEN个整数(范围50~150)储存在整型数组num[ARRAY_LEN]中并将其输出、其中ARRAY_LEN的值设定为20。
2.  将num数组的元素进行左小右大的排序,并去除数组中65~90,97~122范围之外的元素(将其值置0),完成后将其输出。
3.  创建字符数组ch[ARRAY_LEN],将2)中非0的元素转换成对应的字符元素并储存在ch数组中,全部转换成小写字母并输出结果。
4.  将ch数组中重复多余的相同字母去除(其值置‘\0’),再进行重新排序(根据ascii值左小右大进行排序且不包括空字符‘\0’),然后输出每个字符元素对应的下标与内容。
5.  用户根据4)的输出结果输入5个下标,根据下标号输出对应字符元素的内容。
其它要求:
a ARRAY_LEN的改变不影响程序的功能。
b 不允许使用函数将代码整合(这一次全都塞main里面)。
c 利用注释划分好每个功能的区域以及做好每个功能的解释。
d 要注意代码的编写格式、不要全在一列或一行,不要漏了{}。

看法与认识:

对于第一题看法与知识,主要练习随机数生成(求m -n,rand()%(n -m+1)+m )。 对于第三的看法,熟悉大小字母之间ASC II码相差32。对于第四题看法,!!!气泡排序法,外循环是轮数,内循环进行比较大小与换位,两个数进行的。对于整个题,我认为考验的是边写代码边调析代码,而是一股脑地写完,慢慢的纠错,在日后写代码时,养成边写代码边发现问题的习惯。

#define ARRAY_LEN 20
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main()
{
	int num[ARRAY_LEN] = { 0 };
	int i = 0;
	srand((unsigned int)time(NULL));
	printf("这是第一题:\n");
	for (i = 0; i < ARRAY_LEN; i++)//1)
	{
		int ret = rand() % (150 - 50 + 1) + 50;//rand()%(n-m+1)+m
		num[i] = ret;
	}
	for (i = 0; i < ARRAY_LEN; i++)
		printf("%d ", num[i]);
	printf("\n");
	//1)
	int j = 0;
	int t = 0;
	 printf("这是第二题:\n");
	for (j = 0; j < ARRAY_LEN; j++)//2)
	{
		for (i = 0; i < (ARRAY_LEN - j - 1); i++)
		{
			if (num[i] > num[i + 1])
			{
				t = num[i];
				num[i] = num[i + 1];
				num[i + 1] = t;
			}
		}
	}
	
	int f = 1;//symbol设数为在区间内
	for (i = 0; i < ARRAY_LEN; i++)
	{
		if (num[i] > 65 && num[i] < 90)
			f = 1;
		else if (num[i] > 97 && num[i] < 122)
			f = 1;
		else
			f = 0;
		if (f == 0)//数不在区间内
			num[i] = 0;
	}
	for (i = 0; i < ARRAY_LEN; i++)
		printf("%d ", num[i]);
	printf("\n");
	//2)
	printf("这是第三题:\n");
	char ch[ARRAY_LEN];//3)
	for (i = 0; i < ARRAY_LEN; i++)
	{
		if (num[i] != 0)
		{
			if (num[i] >= 'A' && num[i] <= 'Z')
				ch[i] = num[i] + ('a' - 'A');

			else
				ch[i] = num[i];
		}
		else
			ch[i] = '\0';
	}
	for (i = 0; i < ARRAY_LEN; i++)
		printf("%c ", ch[i]);//no problem
	printf("\n");
	//3)
	printf("这是第四题:\n");
	for (j = 0; j < ARRAY_LEN; j++)//4)
	{
		for (i = 0; i < (ARRAY_LEN - j - 1); i++)
		{
			if (ch[i] == ch[i + 1])//将ch数组中重复多余的相同字母去除(其值置‘\0’)
				ch[i + 1] = '\0';

			t = ch[i];//换位
			ch[i] = ch[i + 1];
			ch[i + 1] = t;
		}
	}
	for (i = 0; i < ARRAY_LEN; i++)
		printf("%c ", ch[i]);
	printf("\n");

	
	for (j = 0; j < ARRAY_LEN; j++)//ascii大小
	{
		for (i = 0; i < (ARRAY_LEN - j - 1); i++)
		{
			if (ch[i] != '\0')//重新排序(根据ascii值左小右大进行排序且不包括空字符‘\0’)
			{
				if (ch[i] > ch[i + 1])
				{
					t = ch[i];
					ch[i] = ch[i + 1];
					ch[i + 1] = t;
				}
			}
		}
	}
	/*for (i = 0; i < ARRAY_LEN; i++)
		printf("%c ", ch[i]);
	printf("\n");*/

	for (i = 0; i < ARRAY_LEN; i++)
	{
		if (ch[i] != '\0')
		{
			printf("ch[%d]=%c ", i, ch[i]);//每个字符元素对应的下标与内容
		}
	}                       //no problem
	printf("\n");
	 
	printf("这是第五题:\n");
	int n = 0;//5)
	int z[5];
	printf("please input 五个下标:");

	for (n = 0; n< 5; n++)//输出
	{
		scanf("%d", &z[n]);
	}
	for (n= 0; n < 5; n++)
	{
		int c1 = z[n];
		printf("ch[%d]=%c ", c1, ch[c1]);
	}
	printf("\n");
	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值