题目为:
设计一个程序,实现以下功能:
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;
}