C语言编程,求解
代码思路:
一、程序需要四个函数,分别是入口主函数、输入函数、输出函数、排序函数。
二、题目要求按首字母排序,未限制大小写,因此不能直接用字母比大小,需根据大小写求字母差值,用差值比较。
三、字符串排序交换,用函数strcpy。
下面是代码:
#include<stdio.h>
#include<string.h>
#define MM 12//月份个数
#define MS 20//字符串长度
void px(char moms[][MS]);// 排序
void showMM(char moms[][MS]);
void inputMM(char moms[][MS]);//手动输入月份名
int main()
{
char moms[12][MS]={"January",\
"February",\
"March",\
"April",\
"May",\
"June",\
"July",\
"August",\
"September",\
"October",\
"November",\
"December"};
printf("%d个月英文名为:\n",MM);
showMM(moms);
px(moms);
printf("%d个月英文名按首字母升序排序后为:\n",MM);
showMM(moms);
inputMM(moms);
printf("输入后的月份英文名:\n");
px(moms);
showMM(moms);
return 0;
}
void inputMM(char moms[][MS])
{
int i;
printf("手动输入%d个月份英文名称(每个名称不超过%d个字符):\n",MM,MS-1);
for(i=0;i<MM;scanf("%s",moms[i]),i++);
}
void showMM(char moms[][MS])
{
int i;
for(i=0;i<MM;printf("%s\n",moms[i]),i++);
printf("\n");
}
void px(char moms[][MS])
{
char strTemp[MS]={0};
int i,j,n1,n2;
for(i=0;i<MM-1;i++)
for(j=i+1;j<MM;j++)
{
if(moms[i][0]>='A' && moms[i][0]<='Z')n1=moms[i][0]-'A';//大小写识别
if(moms[i][0]>='a' && moms[i][0]<='z')n1=moms[i][0]-'a';
if(moms[j][0]>='A' && moms[j][0]<='Z')n2=moms[j][0]-'A';
if(moms[j][0]>='a' && moms[j][0]<='z')n2=moms[j][0]-'a';
memset(strTemp,0,MS);
if(n1>n2)
strcpy(strTemp,moms[i]),strcpy(moms[i],moms[j]),strcpy(moms[j],strTemp);
}
}