开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第15天,点击查看活动详情
计算机二级C语言程序设计题
题目:
编写一个函数fun(),其功能是:将ss所指字符串中所有下标为奇数位置上的字母转换为大写(若该位置上不是字母,则不转换)。例如,若输入abc4EFg,则应输出aBc4EFg。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void fun(char *ss)
{
?
}
void main()
{
char tt[50];
void NONO();
printf("\nPlease enter an character string within 50 characters:\n");
gets(tt);
printf("\nAfter changing, the string\n \"%s\"", tt);
fun(tt);
printf("\nbecomes\n \"%s\"\n\n", tt);
NONO();
system("pause");
}
void NONO()
{/* 本函数用于打开文件,输入数据,
调用函数,输出数据,关闭文件。 */
FILE *rf, *wf;
char tt[50];
int i;
rf=fopen("in.dat","r");
wf=fopen("out.dat","w");
for(i=0; i<8; i++)
{
fscanf(rf, "%s", tt);
fun(tt);
fprintf(wf, "%s\n", tt);
}
fclose(rf);
fclose(wf);
}
解题思路:
首先循环字符串中大的所有字符,接着判断字符下表是否为奇数,然后判断字符下标为奇数的位置上是不是小写字母,如满足两个判断条件,则将小写转换为大写,直到循环结束
参考答案:
void fun(char *ss)
{
int i;
int len;
len=strlen(ss);
for(i=0; i<len; i++)
{
if(1 == i%2) //判断下标是否为奇数
{
if(ss[i]>='a' && ss[i]<='z') //若为奇数,再判断是否为a-z之间的字母
{
ss[i]=ss[i]-32; //进行小写向大写转换
}
}
}
}
结果如下:
补充:
ASCII码在C语言中是以整型数字对应的,每一个码都有一个与之对应的整型数据,相同字母的大小写之间的差值为32,那么大写字母转化为小写字母,可以在字母的ASCII的值基础上加上32,反之,小写字母转换为大写字母则需要减去32。例如:
#include <stdio.h>
void main()
{
char m1,m2;
printf("plese input the lower case letter :");
m1=getchar();
m2=m1-32;
printf("%c of ASCII code is %d\n%c of ASCII code is %d\n",m1,m1,m2,m2);
}