请教各位高手我这两题错在哪里?

hajinshu 2004-03-23 10:11:36
1、编写一个函数fun,要求将一个数字字符串转换为一个整数(不能调用c提供的字符串转换为整数的函数)。例如,如输入字符串“-1234”,则函数把它转换为整数值-1234。
#include "stdio.h"
#include "string.h"
long fun(char *p)
{
long s=0,t;
int i=0,n=strlen(p),k,sl;
if (p[0]=='-')
i++;
for (j=i;j<=n-i;j++)
{
t=p[j]-'0';
sl=10;
for (k=j;k<n-i;k++)
t*=sl;
s+=t;
}
if (p[0]=='-')
return -s;
else
return s;
}
main()
{
char s[6];
long n;
printf("Enter a string:\n");
gets(s);
n=fun(s);
printf("ld\n",n);
}
...全文
22 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
mrubbish 2004-03-24
  • 打赏
  • 举报
回复
我觉得第一个可以这样:
#include <stdio.h>
#include <string>
using namespace std;
long fun(char *p)
{
long s=0;
string p1;
p1 = *(p+1);
s = atoi(p);
if (p[0]=='-')
return -s;
else
return s;
}
void main(void)
{
char s[6];
long n;
printf("Enter a string:\n");
gets(s);
n=fun(s);
printf("%ld\n",n);
}
fanged 2004-03-24
  • 打赏
  • 举报
回复
第二题缺乏中间变量。
fanged 2004-03-24
  • 打赏
  • 举报
回复
第一题:
#include <iostream>
#include <math.h>

using namespace std;

void main()
{
char *p="-12312345";
cout<<"p:"<<p<<endl;
long int a=0;
int b=0;
int flag=0;
long int powi=0;
int i=strlen(p);
if(p[0]=='-')
{
p++;
flag=1;
}
while(*p)
{
i--;
powi=pow(10,i);
b=(*p)-'0';
a=a+(b*powi);
p++;
}
if(flag==1)
{
a=(-a);
}
cout<<"a:"<<a<<endl;
}
nobush 2004-03-23
  • 打赏
  • 举报
回复
2:
没有中间变量,如何交换?
#include "stdio.h"
#include "conio.h"
int fun(int array[3][3])
{
int i,j,tmp;
for (j=0;j<3;j++)
for (i=0;i<j;i++)
{
tmp=array[j][i];
array[j][i]=array[i][j];
array[i][j]=tmp;
}
}
main()
{
int i,j;
int array[3][3]={{100,200,300},{400,500,600},{700,800,900}};
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
printf("%7d",array[i][j]);
printf("\n");
}
clrscr();
printf("Converted array:\n");
fun(array);
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
printf("%7d",array[i][j]);
printf("\n");
}
}
newgina 2004-03-23
  • 打赏
  • 举报
回复
int fun(int array[3][3])
{
int i,j;
for (i=0;i<3;i++)
for (j=0;j<3;j++)
array[j][i]=array[i][j];
}
这个函数把原有的值覆盖了,在这个函数进行到i=2的时候矩阵里已经不是原来的那几个数了
junnyfeng 2004-03-23
  • 打赏
  • 举报
回复
给一个你参考就知道了

#include <stdio.h>

void convert(int a[ ][3],int b[ ][3])
{
int i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
a[i][j]=b[j][i];
}
}

void main()
{
int z[3][3]={ {100 , 200 , 300},
{400 , 500 , 600},
{700 , 800 , 900}};

int y[3][3]={0};
int i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++){
printf("%d ",z[i][j]);
if(j==2)
printf("\n");
}


convert(y,z);
printf("after converting:\n");

for(i=0;i<3;i++)
for(j=0;j<3;j++){
printf("%d ",y[i][j]);
if(j==2)
printf("\n");
}


}
nobush 2004-03-23
  • 打赏
  • 举报
回复
1、低位不要10乘:

#include "stdio.h"
#include "string.h"
long fun(char *p)
{
long s=0,t;
int j,i=0,n=strlen(p),k,sl;
if (p[0]=='-')
i++;
for (j=i;j<=n-1;j++)
{
t=p[j]-'0';
s=s*10+t;
}
if (p[0]=='-')
return -s;
else
return s;
}
main()
{
char s[6];
long n;
printf("Enter a string:\n");
gets(s);
n=fun(s);
printf("%ld\n",n);
}

hajinshu 2004-03-23
  • 打赏
  • 举报
回复
2、编写程序,实现矩阵的转置。
例如,若输入下面的矩阵:
100 200 300
400 500 600
700 800 900

则程序输出:
100 400 700
200 500 800
300 600 900

#include "stdio.h"
#include "conio.h"
int fun(int array[3][3])
{
int i,j;
for (i=0;i<3;i++)
for (j=0;j<3;j++)
array[j][i]=array[i][j];
}
main()
{
int i,j;
int array[3][3]={{100,200,300},{400,500,600},{700,800,900}};
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
printf("%7d",array[i][j]);
printf("\n");
}
clrscr();
printf("Converted array:\n");
fun(array);
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
printf("%7d",array[i][j]);
printf("\n");
}
}
结果输出:
100 200 300
200 500 600
300 600 900
请问我错在那里?

69,382

社区成员

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

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