简单C语言题目,高手看看~

cocat 2010-04-06 10:57:01
输入一个小写的字母,把它转换成自身的后4个字母的大写形式,并且把结果输出。如:a字母结果输出E(不能用条件处理)

只会用条件写

#include<stdio.h>

int main()
{
char ch;
ch=getchar();
ch=(ch >= 'a' && ch <= 'z') ? (ch-28) : ch;
printf("%c\n",ch);
return 0;
}



不用条件怎么写??
...全文
383 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
yujian596 2010-04-07
  • 打赏
  • 举报
回复
不用条件不行的。根据题意,输入的必须为小写字母,若输入为小写字母,直接输出:ch-('a'-'A')+4;若输入非小写字母,应该报错,重新要求键盘输入,而非输出一个表达式。因此输入的数据分别在小写字母和非小写字母的情况下,最终结果无法以一种兼容的形式输出。
ToWeightAnchor 2010-04-07
  • 打赏
  • 举报
回复
一个低级的文字游戏

诸位大侠,用while或 for就行。

也就是说,把判断写在while 或 for中。

huanmie_09 2010-04-07
  • 打赏
  • 举报
回复

#include<stdio.h>

int main()
{
char ch;
ch=getchar();
/*ch=(ch >= 'a' && ch <= 'z') ? (ch-28) : ch;*/
if(ch >= 'a' && ch <= 'z') {
ch ^= (1<<5); /*将小写字母的第6位置1, 转化为对应的大写字母*/
ch = 'A' + (ch - 'A' + 4) % 26;
}
printf("%c\n",ch);
return 0;
}
qzf368 2010-04-07
  • 打赏
  • 举报
回复
这是想干什么?什么目的?
dragonzht 2010-04-07
  • 打赏
  • 举报
回复
查表最简单,弄一个长度为256的数组
neil_cn 2010-04-07
  • 打赏
  • 举报
回复
楼上的代码只管 a-z 了,那 A-Z 怎么办? 0~255 除了 a-z 之外的又怎样了呢?

So, show 下 hoho~~~


#include <stdio.h>

int main(void)
{
int i = 0;
for(; i < 256; i ++)
{
unsigned char ch1 = i;

printf( "[%3d] --> ", ch1 );

ch1 -= 97;
int ch2 = (int)(ch1 - (26 -1));

ch2 *= -1;
ch2 >>= 31;
ch2 *= -1;

unsigned char ch3 = ch1 + 97;
unsigned char ch4 = (ch1 + 4) % 26 + 65;

unsigned char val = ch2 * ch3 + (!ch2) * ch4;

printf( "[%3d] : [%c]\n", val, val );
}

return 0;
}


我觉得这个才是楼主想要的程序,呵呵
cocat 2010-04-07
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 tianyulei111256 的回复:]
#include<stdio.h>
#include<ctype.h>
void main()
{
int a;
a=getchar();
a=a%26+50;
printf("%c",a);
}
我想这就是你想要的程序,之前那些程序都是用了判断,实际是一个数字区间问题,其实难点在于如果输入小写z那么应该得出的是大写D,楼主对么?
[/Quote]

的确如此~
tangxianghenggood 2010-04-07
  • 打赏
  • 举报
回复
come on
liumangmaoenen 2010-04-07
  • 打赏
  • 举报
回复
是想判断ch是否为a到z之中的字母么?

用if咯~
tianyulei111256 2010-04-07
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<ctype.h>
void main()
{
int a;
a=getchar();
a=a%26+50;
printf("%c",a);
}
我想这就是你想要的程序,之前那些程序都是用了判断,实际是一个数字区间问题,其实难点在于如果输入小写z那么应该得出的是大写D,楼主对么?
FoxSerratifolia 2010-04-07
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 cocat 的回复:]

引用 1 楼 fyhack 的回复:
没明白你的意思。这样?
int main()
{
char ch;
ch=getchar();
// ch=(ch >= 'a' &amp;&amp; ch <= 'z') ? (ch-28) : ch;
printf("%c\n",ch-28);
return 0;
}


这个。。。可以 但是本意好像就是比如得判……
[/Quote]

判断是否为字母不用条件语句要用什么啊?!用if就可以了啊
cocat 2010-04-06
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 fancyivan 的回复:]
引用 13 楼 fancyivan 的回复:

ch = ch - (((ch / 97) + (ch / 122)) % 2) * 28;

这个可能对。


ch只有三种情况:0-96 (x1),或97-121 (x2),或122-127 (x2)。

x1时: ch/97 和 ch/122 分别为 0 0 相加结果为y = 0
x2时: 1 0 1
x3时: 1 1 2……
[/Quote]

那小写改大写,大写改小写怎么写?
cocat 2010-04-06
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 fancyivan 的回复:]
引用 16 楼 fancyivan 的回复:

引用 13 楼 fancyivan 的回复:

ch = ch - (((ch / 97) + (ch / 122)) % 2) * 28;

这个可能对。


ch只有三种情况:0-96 (x1),或97-121 (x2),或122-127 (x2)。

x1时: ch/97 和 ch/122 分别为 0 0 相加结果为y =……
[/Quote]

哎~看上去真复杂。。。看乱了
fancyivan 2010-04-06
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 fancyivan 的回复:]

引用 13 楼 fancyivan 的回复:

ch = ch - (((ch / 97) + (ch / 122)) % 2) * 28;

这个可能对。


ch只有三种情况:0-96 (x1),或97-121 (x2),或122-127 (x2)。

x1时: ch/97 和 ch/122 分别为 0 0 相加结果为y = 0
x2时: ……
[/Quote]

再汗一个.... 错以为z的acsii为121。。原来是122... 所以上面所有的文字中,122改为123,121改为122。
cocat 2010-04-06
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 cocat 的回复:]
引用 13 楼 fancyivan 的回复:
ch = ch - (((ch / 97) + (ch / 122)) % 2) * 28;

这个可能对。


貌似不行,我在GCC下面编译的,输入'a'得出')'
[/Quote]

是我弄错了~输出弄错了,这个可以!什么原理啊?看得晕~
fancyivan 2010-04-06
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 fancyivan 的回复:]

ch = ch - (((ch / 97) + (ch / 122)) % 2) * 28;

这个可能对。
[/Quote]

ch只有三种情况:0-96 (x1),或97-121 (x2),或122-127 (x2)。

x1时: ch/97 和 ch/122 分别为 0 0 相加结果为y = 0
x2时: 1 0 1
x3时: 1 1 2

所以当结果y为0或2时输出ch,结果为1时输出ch-28。

所以 ch - (y % 2)*28 就是想要的。
cocat 2010-04-06
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 fancyivan 的回复:]
ch = ch - (((ch / 97) + (ch / 122)) % 2) * 28;

这个可能对。
[/Quote]

貌似不行,我在GCC下面编译的,输入'a'得出')'
cocat 2010-04-06
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 aimsam 的回复:]
C/C++ code
#include<stdio.h>
#include<ctype.h>

int main()
{
char ch;
ch=getchar();
ch=(toupper(ch) + 4);
printf("%c\n",ch);
return 0;
}
[/Quote]

呵呵~可能没我想得那么难吧~我只是想下能用什么运算符,比如&&或者||能做得出来
fancyivan 2010-04-06
  • 打赏
  • 举报
回复
ch = ch - (((ch / 97) + (ch / 122)) % 2) * 28;

这个可能对。
右脚小拇指 2010-04-06
  • 打赏
  • 举报
回复
呵呵,要不写一个函数,封装一下
然后再调用,这样行不行啊
加载更多回复(11)

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧