大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
程序稍微修改一下:
创新互联长期为上千余家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为浠水企业提供专业的网站制作、成都网站设计,浠水网站改版等技术服务。拥有十余年丰富建站经验和众多成功案例,为您定制开发。
1 #include stdio.h
2 int gcd(int x, int y);
3 int main()
4 {
5 int x, y;
6 while (~scanf("%d%d", x, y))
7 {
8 int sum = x/gcd(x,y)*y;
9 printf("%d\n",gcd(x,y));
10 printf("--\n");
11 printf("%d\n",sum);
12 }
13 return 0;
14 }
15 int gcd(int x, int y)
16 {
17 while (x != y)
18 if (x y) x = x - y;
19 else y = y - x;
20 }
Output:
3 5
1
15
--
22 22
22
22
--
12 24
12
24
为什么会出现这样的情况呢?输入x,y数值关系不一样的时候gcd函数的值不一样。
这就是汇编和寄存器的知识了。
另外 VC6.0编译是不能通过的,gcc编译支持这样的函数。
参考:
在gcd函数,当x==y时候,寄存器存了x和y的值,当调用gcd时候,即使没有返回值,寄存器也会将栈顶数值返回。
当输入非法字符,如^A时候,进入死循环 while (~scanf("%d%d", x, y))中,
默认x和y的值从寄存器中输入,即是当gcd函数中x==y的时候x和y的值。
函数的返回值类型和参数类型是两个相对独立的概念,并不需要保持一致
定义子函数类型的意义是让函数调用者得到想要的调用结果:
比如求数组平均值:(传入的的是整型数组,返回的是数组所有元素的平均值)
float GetAvg(int a[5])
{
float avg;
.....
......
return avg;
}
float avgsz = GetAvg(a);
子函数在声明后可以先调用,后定义;避免编译器猜数据。操作方法如下:
1、函数的声明,函数有两种类型,一种是有返回值的,前面用int float double char 来定义,如int f(int n);前面的int就是返回值类型。
2、 如果函数不需要返回值,那么就用void来写在前面,如void f(int n);注意声明后面加分号。
3、 函数的定义,有返回值的函数一般就是 int f(int) { 函数内容 return 返回的结果}。注意f()没有分号。
4、没有返回值的函数结构为void f(){函数内容,发f(int n)后面也没有分号。
5、看一下函数的调用,有返回值的一般语言定义一个变量如c=f(n)。
在C语言中主函数调用子函数,子函数被主函数调用,这就是它们之间的联系。编写函数主要有以下步骤,首先对函数进行定义,语法格式为:
类型说明符 函数名 (含类型说明的形式参数表)
{
语句序列
}
形式参数的作用是实现主函数和被调函数之间的联系。通常将函数所处理的数据、影响函数功能的因素或函数处理的结果作为形参。
然后还要确定函数的返回值及类型,格式为:
return 表达式;
这个语句的另一个作用是结束当前函数的执行。一个函数可以不将任何值返回主函数,此时它的类型标识符为void,可以不写return语句,也可以写一个不带表达式的return;语句。
扩展资料
C语言编程书写规则:
1、一个说明或一个语句占一行。
2、用{} 括起来的部分,通常表示了程序的某一层次结构。{}一般与该结构语句的第一个字母对齐,并单独占一行。
3、低一层次的语句或说明可比高一层次的语句或说明缩进若干格后书写。以便看起来更加清晰,增加程序的可读性。在编程时应力求遵循这些规则,以养成良好的编程风格。
参考资料来源:《C++语言程序设计(第4版)》郑莉 董源 何江舟 编著 清华大学出版社
第三章 函数 3.1 函数的定义与使用
参考资料来源:百度百科--c语言
跟你打个比方吧,就像文件夹的子文件夹和父文件夹一样。子函数与父函数是函数嵌套里的,括号外面的是括号里面的父函数,里面是外面的子函数。
在C语言中,函数中需要用到的子函数都要在这个函数之前声明,否则会提示有错误,例如:void mux(int,int);
当然有区别了,定义是具体的函数要实现什么功能,而声明就是告诉大家你在后面要用到的函数