*pMaxIndex=i;
}
if(a[*pMinIndex]>a[i]){
*pMinIndex=i;
}
}
}
7.6不用strcat函数编程实现字符串连接函数strcat的功能,将字符串t连接到字符串s的尾部。
[提示:
参考例7.5,用i和j分别作为字符数组s和字符数组t的下标,先将i和j同时初始化为0,然后移动i使其位于字符s的尾部即字符串结束标志处,再将字符数组t中的字符依次拷贝到字符数组s中。
]
答案:
voidstrcat(char*s,char*t)
{
while(*s)s++;
while(*s++=*t++);
}
7.7编程从键盘输入一个字符串,将其字符顺序颠倒后重新存放,并输出这个字符串。
答案:
#include
#include
intmain()
{
chars[100]={0};
scanf("%s",s);
intstart=0;
intend=strlen(s)-1;
for(;startinttemp=s[start];
s[start]=s[end];
s[end]=temp;
}
printf("%s\n",s);
}
7.8*编程判断输入的一串字符是否为“回文”。
所谓“回文”就是指顺读和倒读都一样的字符串,例如"level"、"ABCCBA"都是回文。
[提示:
由题意可知,回文就是一个对称的字符串,利用这一特点可采用如下算法进行判断:
(1)设置两个指针pStart和pEnd,让pStart指向字符串首部,让pEnd指向字符串尾部;
(2)利用循环从字符串两边对指针所指字符进行比较,当对应的两字符相等且两指针未超越对方时,使指针pStart向前移动一个字符位置即加1,使指针pEnd向后移动一个字符位置即减1,一旦发现对应的两字符不等或两指针以互相超越(不可能是回文),则立即停止循环;
(3)根据退出循环时两指针的位置,判断字符串是否为回文。
]
答案:
#include
#include
intmain()
{
chars[100]={0};
scanf("%s",s);
intstart=0;
intend=strlen(s)-1;
intflag=1;
for(;startif(s[start]!
=s[end]){
flag=0;
break;
}
}
printf("%s\n",flag?
"YES":
"NO");
}
7.9*编写一个能对任意m×n的矩阵进行转置的函数Transpose。
[提示:
参考例7.9,用指针变量做函数参数编程实现。
]
答案:
#include
voidTranspose(int*arrDest,int*arrSource,intm,intn)
{
for(inti=0;ifor(intj=0;j*(arrDest+m*j+i)=*(arrSource+n*i+j);
}
}
}
intmain()
{
ints[3][4]=
{
0,1,2,3,
4,5,6,7,
8,9,10,11,
};
intt[4][3];
Transpose(&t[0][0],&s[0][0],3,4);
for(inti=0;i<4;i++){
for(intj=0;j<3;j++){
printf("%4d",t[i][j]);
}
printf("\n");
}
}
7.10*用指针数组编程实现:
任意从键盘输入一个数字表示的月份值n,程序输出该月份的英文表示,若n不在1~12之间,则输出“Illegalmonth”。
答案:
#include
intmain()
{
char*months[]={
"January","February","March","April","May","June",
"July","August","September","October","November","December",
};
intm;
scanf("%d",&m);
if(m<1||m>12){
printf("Illegalmonth\n");
}
else{
printf("%s\n",months[m-1]);
}
}
7.11*用指针数组编程改写例7.4中的两个函数DayofYear和MonthDay。
答案:
由于函数原型和用途都不知,故此题没有答案。