1. 首页 > 科技

c语言问题:xxx_proc_srch(a,b,c)是函数声明吗? c语言交换a和b的值

c语言问题:xxx_proc_srch(a,b,c)是函数声明吗?c语言交换a和b的值

C语言函数声明的问题

我也来 说几句。。

标准编译器 对函数的调用 都要

先申明 才能 调用

(生产的时候就这样设定的)。。我推荐试用

大点的 vs2005,vc2000.

小点的 Dev-cpp ,Turboc 3.0 (2.0 不支持鼠标有点 麻烦)

这里 就涉及: 申明和定义之间的区别。

申明-- 不开辟内存,仅仅告诉编译器,申明的部分存在,要预留一点空间。

定义-- 开辟内存。

申明 属于 预编译范畴的。最好写在头文件中(楼主,自定义头文件学了没有啊?)(申明都写在头文件中,只是一种好的编程习惯)

因为 在编译的时候,编译器先处理一些特殊数据(宏定义,函数的申明,变量的申明),在这个过程中,编译器 通过申明 可以预测整个定义需要的内存大小,并且 把这些大小预留起来,留给定义的时候使用(因为虽然定义,但是在 main函数里面没有调用,一样的不分配内存)。

如果不事先申明,直接定义,有可能会造成系统崩溃,出现内存不足,不能分配。 然而现在内存都是1G左右了,所以一般空间都足够,所以你也可以不申明直接定义函数。

但是一旦内存紧张,就会出错,而且程序简洁性就很低。(不看到定义,还不知道原来还定义了这么一个函数!!!)

还有 变量也一样,标准的都是 先申明在定义。

extern int i; //申明

int i=0; //定义并初始化为0

int i; //定义

.。。。。。。。。。。。。。。。。。

所以 从现在其要养成良好的编程习惯

先申明,在定义。

申明最好都放在 一块,并且都在头文件中(为了便于管理)。

C语言中不能在函数里面声明函数吗

你这个问题看似简单,其实涉及到了函数的声明与定义,以及C语言的标准规范和具体编译器的实现问题。

  从标准规范来看:

1. C语言允许函数里声明函数,但是不建议这么写,因为不利于多文档的组织。

2. C语言禁止函数里定义函数,但是个别编译器却没遵循标准。

3. C语言的标准和编译器的实现并不是完全统一,为了可移植性,建议一切都按C语言标准中推荐的做法来写。

  我还写了个代码附带注释,程序在CFree这个IDE(内置gcc编译器)上运行是通过的,但是在VC++6上就可能通不过了,主要是编译器具体实现不同。

#include <stdio.h>

//函数外 

//声明,允许,推荐的做法 

int add1(int a, int b);

int main(int argc, char *argv[])

{

//函数内

//声明,允许,但是不建议这么写 

int add2(int a, int b);

//C语言标准里禁止函数内定义函数、

//但是有个别编译器也允许这样做,比如GCC

//此种写法不通用,强烈不建议使用 

int add3(int a, int b)

{

return a+b;

//C99标准中,调用函数之前,必须保证声明已出现过 

printf("%d\n", add1(1,2));

printf("%d\n", add2(2,3));

printf("%d\n", add3(3,4));

return 0;

}

//函数外 

//定义,允许

int add1(int a, int b)

{

return a+b;

}

//定义,允许

int add2(int a, int b)

{

return a+b;

}

  -->您的采纳是我们的动力<--

c语言编程问题,编写代码,a+b问题,求大神帮忙哇( ๑ŏ ﹏ ŏ๑ )

【解题思路】这道题的难点是超多位数,也就是说40位数用最长的基础类型都表示不下。这个时候可以用数组,最简单的就是你定义三个长度为40的字符数组,每个元素存放一个0-9的数值,然后逐位进行加运算,碰到超过10的就进位。

【程序代码】

#include

#include

#include

using namespace std;

int main()

{char a[40]={0},b[40]={0},c[41],d,i,j,k;

 printf("请输入第一个位:");        //显示输入提示

 for(i=0;i<40;i++)                 //通过循环读入a数组

    {do{d=getch();                 //从键盘获取一个字符

        if(d==13||d==' ') break;   //如果读到的是回车或空格退出循环

        }while(d<'0'||d>'9');      //如果输入的为非数字,忽略重输

     printf("%c",d);               //显示字符(因为getch函数不回显) 

     if(d==13||d==' ') break;      //如果是回车或空格结束读取 

     c[i]=d-'0';}                  //否则的话让c[i]等于输入的数值

 i--;

 for(k=i;k>=0;k--) a[i-k]=c[k];    //倒序排列 

/*关于输入有很多种方法,可以用cin, scanf(),也可以用getchar(),各有优劣,这里之所以用getch(),是因为getch不回显,这样可以及时作出判断,不是数字就直接忽略。

另外为什么要倒序,是为了保证a[0]和b[0]都是个位数,这样后面加法运算时,不用去费劲的对齐*/ 

 printf("\n请输入第二个位:");      //显示输入提示

 for(j=0;j<40;j++)                 //通过循环读入b数组

    {do{d=getch();                 //从键盘获取一个字符

        if(d==13||d==' ') break;   //如果读到回车或空格退出循环

        }while(d<'0'||d>'9');      //如果输入的为非数字,忽略重输

     printf("%c",d);               //显示字符(因为getch函数不回显) 

     if(d==13||d==' ') break;      //如果是回车或空格结束读取 

     c[j]=d-'0';}                  //否则的话让c[j]等于输入的数值

 j--;

 for(k=j;k>=0;k--) b[j-k]=c[k];    //倒序排列 

 for(k=0;k<41;k++) c[k]=0;         //初始化c数组

 if (i

 printf("\n两个数的和等于:");      //显示结果

 for(k=0;k<=d;k++)                 //通过循环计算

    {c[k]=(c[k]+a[k]+b[k]);        //算出和 

     c[k+1]=c[k]/10;               //如果超过10则进位

     c[k]=c[k]%10;}                //取个位数,避免超过10 

 if(c[d+1]!=0) d++;                //如果最高位有进位,则最高位再加一位

 for(k=d;k>=0;k--)                 //用循环显示出c数组的每一位 

     printf("%d",c[k]);            //显示出c数组的每一位 

 printf("\n",d);                   //换行 

 system("PAUSE");                  //暂停屏幕,以看清结果

 return 0;}                        //结束程序【运行结果】

数据结构c语言那些函数的声明怎么写

int add(int x, int y); //这就是函数声明

int main(void)

{

........

}

int add(int x, int y) //函数定义

{

........

}