首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

c语言级次考试代码求教

2013-04-21 
c语言等级考试代码求教  main()  {char ch[2][5]{6937,8254},*p[2]  int i,j,s0  for(i0i2i++

c语言等级考试代码求教

  main()
  {  char ch[2][5]={"6937","8254"},*p[2];
  int i,j,s=0;
  for(i=0;i<2;i++)p[i]=ch[i];
  for(i=0;i<2;i++)
  for(j=0;p[i][j]>′′;j+=2)
  s=10*s+p[i][j]-′0′;
  printf("%dn",s);}


这个输出的结果为什么是6385???求高手解释下不胜感激
[解决办法]
int main( void)
{
char ch[2][5]={"6937","8254"},*p[2];
int i,j,s=0;

for(i=0;i<2;i++)p[i]=ch[i];//p[0]指向“6937”,p[1]指向“8254”

for(i=0;i<2;i++)
{
for(j=0;p[i][j]>' ';j+=2)
{
s=10*s+p[i][j]-'0';//将上一个数值乘以10再加上本次取得的数值(p[i][j]-'0'是将字符转换成数字)
printf("%d\n",s);
}
}
printf("%d\n",s);
}

[解决办法]
{  char ch[2][5]={"6937","8254"},*p[2];

这句定义了一个二维字符数组,里面有两个以为字符数组,每个长度都是5,第一个(ch[0])里面的值为'6937',第二个(ch[1])里面的值为'8254'。然后定义了一个字符指针数组。
for(i=0;i<2;i++)p[i]=ch[i];

这里是对p[0]和p[1]进行初始化,使p[0]指向第一个字符串。p[1]指向第二个字符串。就是说*p[1]='6',*p[2]='8'。
for(j=0;p[i][j]>′′;j+=2)
s=10*s+p[i][j]-′0′;

这里其实是把char转化为int了。是转化两个里面的,而且不是顺序转化,是隔一个转化一个。p[i][j]里面其实存储的是那个数字的ASCII码。0-9的ASCII码是顺序排列的。所以每个数字的ASCII码减去0的ASCII码就是它的整形值,然后如果后面还有,就把前面得到的乘以10,再加后面的,因为是隔一个提取,所以左后的结果是整形6385

热点排行