重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
你这毛病太多!!
成都创新互联制作网站网页找三站合一网站制作公司,专注于网页设计,网站设计、网站建设,网站设计,企业网站搭建,网站开发,建网站业务,680元做网站,已为近千家服务,成都创新互联网站建设将一如既往的为我们的客户提供最优质的网站建设、网络营销推广服务!
首先没看明白你的
主函数
怎样调用的change
函数
。
再者函数
参数
不够详细啊!!光有一个参数是不够的,还得有个
数组
下标
作参数,好能表示你的
字符
要存到数组的哪个元素里。主函数中调用函数时用
change(num,0,)
下面按照你的
大体
思路
,给你答案。
#includestdio.h
char
a[26];
void
main()
{
int
change(long,int);
long
num;
scanf("%ld",num);
a[change(num,0)]='\0';
printf("%s\n",a);
}
int
change(long
num,int
p)
{
int
i,n;long
x,f;
n=p;
if(n==0num0)
{
a[n]='-';
n++;
num*=-1;
}
if(num10)
{a[n]='0'+num;return
1;}
else
{
x=num;f=1;
while(x9)
{
x=x/10;
f=f*10;
}
a[n]='0'+x;
printf("%d\n",x);
n++;
num=num-x*f;
}
return
change(num,n)+n-p;
}
递归函数有三点要求:
1,递归的终止点,即递归函数的出口
2,不断的递归调用自身
3,递归函数主体内容,即递归函数需要做的事情
ps:3一般可以放在2的前面或者后面,一般1放最前面。另外,2和3可以根据不同的需要合并,比如,有时候递归函数的主体就是返回调用下层函数所得到的结果。
具体例子如下:
void fun(int n)
{
if(n=0) return; //1 这是递归的终点,即出口
fun(n-1); //2、递归函数自身的调用
coutnendl; //3 递归函数的主体内容
}
2,3合并的情况
int fun(int n)
{
if(n=0) return 0;
return fun(n-1)+fun(n-2); //2 3合并
}
函数定义的时候参数的数组 不可以带值的这样定义的
也就是 比如 void AA(a[],b) 但是 如果 []里面再放上内容就错了
可以定义成
void GS (float a[][],float b[],int eps, int n,int N)//
然后在函数内部 定义 i和j
也可以定义成指针型式
函数调用的时候 直接调用名字 什么都不加([])就可以了
/zhidao.baidu.com/question/186344584.html
1.书写标识符时,忽略了大小写字母的区别。
main()
{
int a=5;
printf("%d",A);
}
编译程序把a和A认为是两个不同的变量名,而显示出错信息。C认为大写字母和小写字母是两个不同的字符。习惯上,符号常量名用大写,变量名用小写表示,以增加可读性。
2.忽略了变量的类型,进行了不合法的运算。
main()
{
float a,b;
printf("%d",a%b);
}
%是求余运算,得到a/b的整余数。整型变量a和b可以进行求余运算,而实型变量则不允许进行“求余”运算。
3.将字符常量与字符串常量混淆。
char c;
c="a";
在这里就混淆了字符常量与字符串常量,字符常量是由一对单引号括起来的单个字符,字符串常量是一对双引号括起来的字符序列。C规定以“\”作字符串结束标志,它是由系统自动加上的,所以字符串“a”实际上包含两个字符:‘a'和‘\',而把它赋给一个字符变量是不行的。
4.忽略了“=”与“==”的区别。
在许多高级语言中,用“=”符号作为关系运算符“等于”。如在BASIC程序中可以写
if (a=3) then …
但C语言中,“=”是赋值运算符,“==”是关系运算符。如:
if (a==3) a=b;
前者是进行比较,a是否和3相等,后者表示如果a和3相等,把b值赋给a。由于习惯问题,初学者往往会犯这样的错误。
5.忘记加分号。
分号是C语句中不可缺少的一部分,语句末尾必须有分号。
a=1
b=2
编译时,编译程序在“a=1”后面没发现分号,就把下一行“b=2”也作为上一行语句的一部分,这就会出现语法错误。改错时,有时在被指出有错的一行中未发现错误,就需要看一下上一行是否漏掉了分号。
{ z=x+y;
t=z/100;
printf("%f",t);
}
对于复合语句来说,最后一个语句中最后的分号不能忽略不写(这是和PASCAL不同的)。
6.多加分号。
对于一个复合语句,如:
{ z=x+y;
t=z/100;
printf("%f",t);
};
复合语句的花括号后不应再加分号,否则将会画蛇添足。
又如:
if (a%3==0);
I++;
本是如果3整除a,则I加1。但由于if (a%3==0)后多加了分号,则if语句到此结束,程序将执行I++语句,不论3是否整除a,I都将自动加1。
再如:
for (I=0;I5;I++);
{scanf("%d",x);
printf("%d",x);}
本意是先后输入5个数,每输入一个数后再将它输出。由于for()后多加了一个分号,使循环体变为空语句,此时只能输入一个数并输出它。
7.输入变量时忘记加地址运算符“”。
int a,b;
scanf("%d%d",a,b);
这是不合法的。Scanf函数的作用是:按照a、b在内存的地址将a、b的值存进去。“a”指a在内存中的地址。
8.输入数据的方式与要求不符。①scanf("%d%d",a,b);
输入时,不能用逗号作两个数据间的分隔符,如下面输入不合法:
3,4
输入数据时,在两个数据之间以一个或多个空格间隔,也可用回车键,跳格键tab。
②scanf("%d,%d",a,b);
C规定:如果在“格式控制”字符串中除了格式说明以外还有其它字符,则在输入数据时应输入与这些字符相同的字符。下面输入是合法的:
3,4
此时不用逗号而用空格或其它字符是不对的。
3 4 3:4
又如:
scanf("a=%d,b=%d",a,b);
输入应如以下形式:
a=3,b=4
9.输入字符的格式与要求不一致。
在用“%c”格式输入字符时,“空格字符”和“转义字符”都作为有效字符输入。
scanf("%c%c%c",c1,c2,c3);
如输入a b c
字符“a”送给c1,字符“ ”送给c2,字符“b”送给c3,因为%c只要求读入一个字符,后面不需要用空格作为两个字符的间隔。
10.输入输出的数据类型与所用格式说明符不一致。
例如,a已定义为整型,b定义为实型
a=3;b=4.5;
printf("%f%d\n",a,b);
编译时不给出出错信息,但运行结果将与原意不符。这种错误尤其需要注意。
修改后:
#includestdio.h
void change(int b[],int a[],int n) // 这里要传入a,b,才能把a逆序到b中
{
int i;
for(i=0;in;i++)// 这里要逆序n个,不是n/2
b[i]=a[(n-(i+1))];/
}
int main()
{
int i,b[5],a[5]={1,2,3,4,5};
change(b,a,5);//这里调用也要修改一下
for(i=0;i5;i++)
printf("%d ",b[i]);
printf("\n");
return 0;
}
#include stdio.h
int prime(int n) //一般声明在主函数前,而且有参数的要写好参数
void main()
{
int n;
printf("\ninput an integer:");
scanf("%d",n);
if(prime(n))
printf("\n %d is a prime.\n",n);
else
printf("\n %d is not a prime. \n",n);
}
int prime(int n) //要和声明的函数格式一致
{
int flag=1,i;
for(i=2;in/2 flag==1;i++)
{
if(n%i==0)
flag=0;
}
return(flag);
}