用指针数组编程实现:从键盘任意输入一个整数表示月份值n(1-12之间),要求:①输出该月份的英文表示,若n不在1~12之间,则输出“输入的月份不正确”,②若n在1~12之间,则按月份的字母顺序从小到大输出月份的名称。
时间: 2023-05-31 16:21:05 浏览: 262
数组和指针-通俗易懂-很应该看看
### 回答1:
可以定义一个指针数组,每个指针指向一个字符串,表示月份的英文名称。然后根据输入的月份值n,输出对应的英文名称。
具体实现可以参考以下代码:
```c
#include <stdio.h>
#include <string.h>
int main()
{
char *months[] = {"January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"};
int n;
printf("请输入月份值n(1-12之间):");
scanf("%d", &n);
if (n < 1 || n > 12) {
printf("输入的月份不正确\n");
} else {
printf("该月份的英文表示为:%s\n", months[n-1]);
printf("按字母顺序从小到大输出月份的名称:\n");
for (int i = 0; i < 12; i++) {
for (int j = i+1; j < 12; j++) {
if (strcmp(months[i], months[j]) > 0) {
char *temp = months[i];
months[i] = months[j];
months[j] = temp;
}
}
printf("%s\n", months[i]);
}
}
return 0;
}
```
运行结果示例:
```
请输入月份值n(1-12之间):6
该月份的英文表示为:June
按字母顺序从小到大输出月份的名称:
April
August
December
February
January
July
June
March
May
November
October
September
```
### 回答2:
首先,我们需要了解每个月份的英文表示。一月至十二月分别为:January、February、March、April、May、June、July、August、September、October、November、December。
接着,我们可以用一个指针数组来存储每个月份的英文表示。数组的下标表示月份值减去1,数组元素存储该月份的英文表示。
例如,数组的定义为:
char *months[] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
接下来,我们可以从键盘接收一个整数表示月份值n。如果n不在1~12之间,我们可以直接输出“输入的月份不正确”即可。如果n在1~12之间,我们将其作为数组下标访问months数组,输出该月份的英文表示即可。
代码如下:
#include <stdio.h>
int main()
{
int n;
printf("请输入一个月份值 n(1-12之间):");
scanf("%d", &n);
char *months[] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
if(n<1 || n>12)
printf("输入的月份不正确\n");
else
printf("%s\n", months[n-1]);
return 0;
}
当输入1时,输出:January
当输入13时,输出:输入的月份不正确
当输入7时,输出:July
当输入12时,输出:December
按照题目要求,如果月份值在1~12之间,应该按照月份的字母顺序从小到大输出月份的名称。因此,我们可以通过对数组进行排序,来实现输出符合要求的月份名称列表。
代码如下:
#include <stdio.h>
#include <string.h>
int main()
{
int n;
printf("请输入一个月份值 n(1-12之间):");
scanf("%d", &n);
char *months[] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
if(n<1 || n>12)
printf("输入的月份不正确\n");
else
{
// 对数组进行排序
int i, j;
char *temp;
for(i=0; i<12; i++)
for(j=0; j<11-i; j++)
if(strcmp(months[j], months[j+1])>0)
{
temp = months[j];
months[j] = months[j+1];
months[j+1] = temp;
}
// 输出排序后的月份列表
for(i=0; i<12; i++)
printf("%s\n", months[i]);
}
return 0;
}
当输入1时,输出:
April
August
December
February
January
July
June
March
May
November
October
September
当输入13时,输出:输入的月份不正确
当输入7时,输出:
April
August
December
February
January
July
June
March
May
November
October
September
当输入12时,输出:
April
August
December
February
January
July
June
March
May
November
October
September
可以看出,程序按照题目要求,输出了月份的英文名称,并按照字母顺序从小到大的顺序进行了排序。
### 回答3:
本题可以通过使用指针数组来实现。首先要创建一个指针数组,数组元素为字符串类型,分别存储12个月份的英文名称。
接下来,从键盘输入要表示的月份值n。如果n不在1~12之间,则输出“输入的月份不正确”;否则,先将n减去1,然后使用指针数组输出该月份的英文表示。
在输出时,我们可以通过使用循环和字符串比较函数来实现按字母顺序从小到大输出月份名称的要求。具体的实现方法和代码如下所示:
```c
#include <stdio.h>
#include <string.h>
int main() {
char *months[] = {"January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"};
int n;
printf("Please enter a month number: ");
scanf("%d", &n);
if (n < 1 || n > 12) {
printf("The input month is incorrect.\n");
} else {
n -= 1; // 将月份值转换为下标
// 循环输出月份名称,按字母顺序从小到大
for (int i = 0; i < 11; i++) {
for (int j = i + 1; j < 12; j++) {
if (strcmp(months[i], months[j]) > 0) {
char *temp = months[i];
months[i] = months[j];
months[j] = temp;
}
}
}
printf("The month is %s.\n", months[n]);
}
return 0;
}
```
在上述代码中,我们首先创建了一个指针数组months,用来存储12个月份的英文名称。然后从键盘输入月份值n,如果n不在1~12之间,则输出错误信息;否则,将n转换为下标,使用指针数组输出该月份的英文名称。
为了满足按字母顺序输出月份名称的要求,我们使用了冒泡排序算法来实现。在循环中,我们比较相邻两个数组元素的大小关系,将较大的字符串放在后面,较小的字符串放在前面。通过多次重复这样的循环,可以将整个数组按字母顺序从小到大排序。最终,输出指针数组中下标为n的元素,即输入月份对应的英文名称。
需要注意的是,这里的排序算法只是一种简单的实现,在实际程序中可能会使用更高效的排序算法。
阅读全文