下面的解答已被2335人点赞
比如说,下面就是一个函数
int add(int x,int y)
{
return x+y;
}
追问
这可以单独做个程序来运行吗?
追答
不行,函数都是拿来被调用的,程序都是从main函数开始运行,所以如果定义了这个函数,那么可以在main函数,或者其他函数里被调用最后一次编辑时间 推荐于2018-02-26 16:07:00
比如说,下面就是一个函数
int add(int x,int y)
{
return x+y;
}
追问
这可以单独做个程序来运行吗?
追答
不行,函数都是拿来被调用的,程序都是从main函数开始运行,所以如果定义了这个函数,那么可以在main函数,或者其他函数里被调用最后一次编辑时间 推荐于2018-02-26 16:07:00
#include <stdio.h>
void test(int );
main()
{int a=100;
printf("%d",test(a));
getch();
}
void test(int )
{int n,m;
m=n/2;
return(m)
}
这是我写的,错误很多
高手指点下,别见笑,本人刚学不久
C语言中一个完整的函数由函数首部和函数体构成,而且定义函数时两者都是必不可少的。最后一次编辑时间 推荐于2017-09-30 13:59:14
函数定义的一般形式如下:
类型标识符 函数名(形参表列) // 这是函数首部
// 以下{ }内的是函数体
{
说明部分
执行部分
}
举例说明如下:
// 定义一个不带返回值的函数
// 函数功能:输出形参的值
void fun(int a, int b)
{
printf("%d, %d\n", a, b);
}
// 定义一个带返回值的函数
// 函数功能:返回2个整数数的最大值
int fun(int a, int b)
{
return a>b ? a : b;
}
有个问题大家还没发现,就是scanf我没写&,编译居然能通过,faint
但即使这样,程序仍然有问题,任意输入2个整数,显示结果是"z="就什么都没有了
C语言调用函数就是先定义并声明函数,之后再根据定义函数的格式调用。
下面举例来说明函数调用方法:
#include<stdio.h>最后一次编辑时间 推荐于2017-10-10 16:09:47
int fun(int x, int y); // 函数声明,如果函数写在被调用处之前,可以不用声明
void main()
{
int a=1, b=2, c;
c = fun(a, b); // 函数的调用,调用自定义函数fun,其中a,b为实际参数,传递给被调用函数的输入值
}
// 自定义函数fun
int fun(int x, int y) // 函数首部
{ // {}中的语言为函数体
return x>y ? x : y; // 返回x和y中较大的一个数
}
#include<math.h>最后一次编辑时间 推荐于2017-09-14 19:01:04
int 型
int abs(int x);
long 型
long labs(int x);
浮点数 float double
double fabs(double x);
程序设计中的函数最后一次编辑时间 推荐于2017-09-10 23:33:25
许多程序设计语言中,可以将一段经常需要使用的代码封装起来,在需要使用时可以直接调用,这就是程序中的函数。比如在C语言中:
int max(int x,int y)
{
return(x>y?x:y;);
}
就是一段比较两数大小的函数,函数有参数与返回值。C++程序设计中的函数可以分为两类:带参数的函数和不带参数的函数。这两种参数的声明、定义也不一样。
带有(一个)参数的函数的声明:
类型名标示符+函数名+(类型标示符+参数)
{
}
不带参数的函数的声明:
void+函数名()
{
}
花括号内为函数体。
带参数的函数有返回值,不带参数的没有返回值。
C++中函数的调用:函数必须声明后才可以被调用。调用格式为:函数名(实参)
调用时函数名后的小括号中的实参必须和声明函数时的函数括号中的形参个数相同。
有返回值的函数可以进行计算,也可以做为右值进行赋值。
#include <iostream>
using namespace std;
int f1(int x, inty)
{int z;
return x+y;
}
void main()
{cout<<f1(50,660)<<endl
}
C语言中的部分函数
main(主函数)
max(求最大数的函数)
scanf(输入函数)
printf(输出函数)
你说的是谭浩强书里的东西吧,disc=b*b-4*a*c最后一次编辑时间 推荐于2017-12-03 09:31:05
disc是随便定义的
其实disc是缩写[Mathematics] discriminant 判别式
第一 简单来说函数就是c语言的模块,一块块的,有较强的独立性,但是可以相互调用。一个c程序就可以是一个函数,里面再包含n个函数,有固定输入和输出格式的子程序,函数具有明确的功能、入口调用参数和返回值。最后一次编辑时间 推荐于2017-09-14 15:32:38
第二 函数体是用花括号括起来的若干语句,他们完成了一个函数的具体功能。
函数体内的前面是定义和说明部分,后面是语句部分。
函数声明与函数体放在一起组成了函数定义。
举个例子:
main()
{
printf(“xx”);
printf("xx2");
}
//函数体是花括号内的所有语句的集合,包括花括号在内
你这个问题看似简单,其实涉及到了函数的声明与定义,以及C语言的标准规范和具体编译器的实现问题。
从标准规范来看:
C语言允许函数里声明函数,但是不建议这么写,因为不利于多文档的组织。
C语言禁止函数里定义函数,但是个别编译器却没遵循标准。
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;
}
#include <stdio.h>
#include <string.h>
#define MAXS 10
void Shift(char s[]);
void GetString(char s[]); /* 实现细节在此不表 */
int main()
{
char s[MAXS];
GetString(s);
Shift(s);
printf("%s\n", s);
return 0;
}
//下面是修改过的答案及原因
void GetString(char s[])
{
scanf("%s", s);
return;//void也写上return比较好
}
void Shift(char s[])
{
int i, t, d = 0, e;
char a[100], b[100], c[100];
memset(a, 0, sizeof(a));//abc数组都没有初始化,里面的数据不能保证是正常的
memset(b, 0, sizeof(b));//可能在你的电脑上数据正常,放在评测机上就错了
memset(c, 0, sizeof(c));
e = strlen(s);
for (i = 0; i<e; i++) {
if (i <= 2) {
a[i] = s[i];
}
if (i>2) {
b[d] = s[i];
d++;
}
}
d = 0;
t = strlen(b);
for (i = 0; i<e; i++) {
if (i<t) {
s[i] = b[i];
//c[i] = b[i];
}
if (i >= t) {
s[i] = a[d];
//c[i] = a[d];
d++;
}
}
// puts(c);
return;//void也写上return比较好
}
追问
感谢大佬了,想再问一下memset函数的功能具体是怎么初始化数组的,还没学过。
追答
memset(a, b, c);最后一次编辑时间 2017-11-15
//把从指针a开始,长度为c字节的内存,每个字节都初始化为b
//也就是说b 必须是0~255之间的数字
c语言的没有fmax()和power()函数最后一次编辑时间 推荐于2018-04-04 10:45:50
fmax()求最大值函数自己程序实现
c语言中有pow(a,b)这个函数 功能:求a的b次方。需包含头文件 math.h