谁帮我解释一下这个功能的函数每步实现的功能,就是每步是啥意思
请编写一个函数fun,它的功能是:将一个数字字符串转换为一个整数(不得调用C语言提供的将字符串转换为整数的函数)。例如,若输入字符串“-1234”,则函数把它转换为整数值...
请编写一个函数fun,它的功能是:将一个数字字符串转换为一个整数(不得调用C语言提供的将字符串转换为整数的函数)。例如,若输入字符串“-1234”,则函数把它转换为整数值-1234。
long fun(char *p)
{
int i,len,t;
long x=0;
len=strlen(p);
if(p[0]==’-‘)
{ t=-1;len--;p++;}
else t=1;
while(*p)
x=x*10-48+(*p++);
return x*t;
} 展开
long fun(char *p)
{
int i,len,t;
long x=0;
len=strlen(p);
if(p[0]==’-‘)
{ t=-1;len--;p++;}
else t=1;
while(*p)
x=x*10-48+(*p++);
return x*t;
} 展开
2个回答
展开全部
前面的是定义变量;
len=strlen(p);//取传入的字符串长
if(p[0]==’-')//判断输入的是否是负数
{ t=-1;len--;p++;}//是,则将负号保留,跳过符号位
else t=1;//否,则符号保留为正
while(*p)
x=x*10-48+(*p++);//用while循环将数字字符串转换为相应的数值
return x*t;//返回值为 x*t 即为该数值x添加符号
//这样说可以么?不知道有没有说清楚。呵呵
len=strlen(p);//取传入的字符串长
if(p[0]==’-')//判断输入的是否是负数
{ t=-1;len--;p++;}//是,则将负号保留,跳过符号位
else t=1;//否,则符号保留为正
while(*p)
x=x*10-48+(*p++);//用while循环将数字字符串转换为相应的数值
return x*t;//返回值为 x*t 即为该数值x添加符号
//这样说可以么?不知道有没有说清楚。呵呵
追问
这里怎么突然冒出个p[0]呢,开始也没定义数组p[],若判断输入的数是负数,len--,和p++是怎么实现将负号保留,跳过符号位,还有为什么x=x*10-48+(*p++)怎么实现字符串转化为相应的数值的啊,还有你说的那跳过符号位是什么意思啊,我c语言还是菜鸟不过报了二级,急啊,请指教啊
追答
p是指针,你传入一个数组后,p可以当数组用。指针是一个难点,一时也讲不清楚。
假如你输入的数据是:-1234。在数组中就存了5个数据,依次为:-,1,2,3,4。p[0]就是数组的第一位,如果是-号,则t=-1,这样在最后你把转换出来的数据,乘以t,就可以实现符号的保留。
p++就是跳过符号位,因为你要转换的是数字。本来p是指向-号的,++以后就指向1。
本来*p是ASCII码的值,1对应的ASCII码值为49.所以你用1的ASCII码值49-48就等于数值1。乘以10是要还原数值。如:12就等于1*10+2,123=((1*10)+2)*10)+3。所以每次的结果都要*10后才加上各位的数值。
展开全部
#include <stdio.h> // 把标准库文件stdio.h包含进来
#define N 20 // 定义了一个宏N 值为20
fun(int *a, int n, int x) // 声明并定义函数fun, 此处应加返回值类型int.参数: 一个整形指针, 两个整形
{
int p = 0, i;
a[n] = x;
while (x != a[p])
p = p+1;
if (p == n)
{
return -1;
}
else
{
/********found********/
for (i=p; i<n; i++)
a[i] = a[i+1];
return n-1;
}
}
main() // 函数执行入口
{
// 整形数组w, 初始化
int w[N] = , x, n, i;
n = 10;
printf("The original data:\n"); // 标准打印函数
for (i=0; i<n; i++) // for 循环, 循环次数为10
printf("%5d", w[i]); // 打印
printf("\nInput x (to delete):"); // 打印
scanf("%d", &x); // 标准输入函数, 此为输入一个整形值
printf("Delete :%d\n", x); // 打印整型x的值, 输出到屏幕
n = fun(w, n, x); // 调用fun函数, 返回值赋值给n
if (n == -1) // if判断
{
printf("***Not be found!***\n\n"); // n为-1,则打印该句
}
else
{
printf("The data after delete :\n"); // n不为-1
for (i=0; i<n; i++) // for 循环, 次数10, 打印w的每个元素的值
printf("%5d", w[i]); // w[i]值, 由i指定
printf("\n\n"); // 打印出两个回车
}
}
#define N 20 // 定义了一个宏N 值为20
fun(int *a, int n, int x) // 声明并定义函数fun, 此处应加返回值类型int.参数: 一个整形指针, 两个整形
{
int p = 0, i;
a[n] = x;
while (x != a[p])
p = p+1;
if (p == n)
{
return -1;
}
else
{
/********found********/
for (i=p; i<n; i++)
a[i] = a[i+1];
return n-1;
}
}
main() // 函数执行入口
{
// 整形数组w, 初始化
int w[N] = , x, n, i;
n = 10;
printf("The original data:\n"); // 标准打印函数
for (i=0; i<n; i++) // for 循环, 循环次数为10
printf("%5d", w[i]); // 打印
printf("\nInput x (to delete):"); // 打印
scanf("%d", &x); // 标准输入函数, 此为输入一个整形值
printf("Delete :%d\n", x); // 打印整型x的值, 输出到屏幕
n = fun(w, n, x); // 调用fun函数, 返回值赋值给n
if (n == -1) // if判断
{
printf("***Not be found!***\n\n"); // n为-1,则打印该句
}
else
{
printf("The data after delete :\n"); // n不为-1
for (i=0; i<n; i++) // for 循环, 次数10, 打印w的每个元素的值
printf("%5d", w[i]); // w[i]值, 由i指定
printf("\n\n"); // 打印出两个回车
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询