问答题 请编写一个函数fun,它的功能是:将ss所指字符串中所有下标为奇数位置上的字母转换成大写(若该位置上不是字母,则不转换)。
例如:若输入“abe4Efg”,则应输出“aBc4EFg”。
注意:部分源程序在文件PROG1.C中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
文件PROG1.C内容如下:
#include<stdio.h>
#include<string.h>
void fun ( char *ss )
void main ( )
char tt[81] ;
printf("/nPlease enter an string within 80 characters: /n" ) ;
gets( tt ) ;
printf( " /n/nAfter changing, the string/n /" % s/ , tt ) ;
fun( tt ) ;
printf( " /nbecomes/n /"% s/"/n" , tt) ;

【正确答案】void fun (char *ss)
{
int i:
int n:
n=strlen(ss);
for(i=l;i<n;i=i+2)
if(ss[i]>='a'&&ss[i]<='z')ss[i]='A'+ss[i]-'a';
}
【答案解析】[解析] 参考答案中函数fun使用的算法是:首先利用函数strlen求出字符串的长度,for循环中i从1开始,即从第一个奇数下标开始,每次循环i都加2,确保取出下标为奇数的字符进行转换处理。若i<n为真,则对ss[i]进行是否为小写字母的判断,若是小写字母就需要将其转换成大写,转换方法是:ss[i]='A'+ss[i]-'a'(利用ss[i]-'a'求出字符ss[i]的ASCII码与字符a的ASCII码的差值,再加上字符'A'的ASCII码就求出了小写字母对应的大写字母);或者直接使用ss[i]=ss[i]-32也可。为了确保每次都取出奇数下标的字符进行处理,所以变量i每次要加上2。在main函数中输入原字符串,调用fun函数并输出转换后的结果。
[归纳总结] 本套试题的程序填空和程序设计题考查的是字符的转换。字符转换处理的关键是:要准确找到转换的规则。常见的字符转换包括大写字母和小写字母的相互转换、数字字符与面值相同的整数之间的相互转换。