函数执行,从右到左执行

 #define _CRT_SECURE_NO_WARNINGS

 #include<stdio.h>
#include<string.h> main()
{
int num = ; printf("%d,%d\n", num, ++num);//函数执行,从右到左执行 system("pause");
}

输出结果:

101,101
请按任意键继续. . .

函数

 #include <stdio.h>
void max(int i, int j) //max是函数的名字,i和j是形式参数,简称形参,void表示函数没有返回值
{
if (i > j)
printf("%d\n", i);
else
printf("%d\n", j);
} main()
{
int a, b, c, d, e, f;
a = , b = , c = , d = , e = -, f = ; max(a, b);
max(c, d);
max(e, f);
}

为什么需要函数?

避免了重复性操作。

有利于程序的模块化。

什么叫函数?

逻辑上:能够完成特定功能的独立的代码单元。

物理上:能够接收数据(当然也可以不接收数据),能够对接收的数据进行处理,能够将数据处理的结果返回(当然也可以不返回任何值)。

总结:函数是个工具,它是为了解决大量类似问题而设计的。函数可以当做一个黑匣子。

如何定义函数?

函数的返回值,函数的名字(函数的形参列表)

{

函数的执行体

}

1 函数定义的本质是详细描述函数之所以能够实现某个特定功能的具体方法

2 return 表达式; 的含义

1) 终止被调函数,向主调函数返回表达式的值

2) 如果表达式为空,则只终止函数,不向主调函数返回任何值

3) break 是用来终止循环和 switch 的。return 是用来终止函数的。

 void f()
{
return; //return只用来终止函数,不向被调函数返回任何值
} int f()
{
return ; //第一,终止函数。第二,向主调函数返回10
}

3 函数返回值的类型也称为函数的类型,因为如果函数名前的返回值类型和函数执行体中的 return 表达式; 中表达式的类型不同的话,则最终函数返回值的类型以函数名前的返回值类型为准

 #include <stdio.h>

 int f()
{
return 10.5; //因为函数的返回值类型是int,所以最终f返回的是10而不是10.5
} main()
{
int i = ;
double x = 6.6; x = f();
printf("%f\n", x);
}

输出格式:

10.000000
请按任意键继续. . .

函数的分类:

有参函数 和 无参函数

有返回值函数 和 无返回值函数

库函数 和 用户自定函数

值传递函数 和 地址传递函数

普通函数 和 主函数(main 函数)

1 一个程序必须有且只有一个主函数

2 主函数可以调用普通函数,普通函数不能调用主函数

3 普通函数可以相互调用

4 主函数是程序的入口,也是程序的出口

7.1 编写函数 isprime(int a),用来判断自变量a是否为素数。若是素数,函数返回整数1,否则返回0。

 #include <stdio.h>
int isprime(int); /*isprime函数的说明语句*/
main()
{
int x;
printf("Enter a integer number:");
scanf("%d", &x); /*从键盘输入一个整数*/
if (isprime(x))
printf("%d is prime\n", x); /*当函数返回1时,输出“是素数”*/
else
printf("%d is not prime\n", x); /*当函数返回0时,输出“不是素数”*/
} int isprime(int a) /*定义isprime函数*/
{
int i;
for (i = ;i <= a / ;i++)
{
if (a%i == )
return ; /*a一旦能被某个数整除,即不是素数,返回0*/
}
return ; /*a不能被2到a/2之间任何一个数整除,返回1*/
}

7.2 编写函数,验证任意偶数为两个素数之和,并输出这两个素数。

若将验证的数放在变量x中,可依次从x中减去i,i从2变化到 x/2 。步骤如下:

(1) i 初值为2

(2) 判断 i 是否是素数,若是,执行步骤(3);若不是,执行步骤(5)

(3) 判断 x - i 是否是素数,若是,执行步骤(4);若不是,执行步骤(5)

(4) 输出结果,返回调用函数

(5) 使i增1

(6) 重复执行步骤(2),直到 i>x/2

 #include <stdio.h>
int isprime(int); /*isprime函数的说明语句*/
void even(int); /*even函数的说明语句*/
main()
{
int a;
printf("Enter a even number:");
scanf("%d", &a);
if (a % == )
{
even(a);
}
else printf("The %d is not even number\n", a);
} void even(int x) /*定义even函数*/
{
int i;
for (i = ;i <= x;i++)
{
if (isprime(i))
if (isprime(x - i))
{
printf("%d=%d+%d\n", x, i, x - i);
return;
}
}
} int isprime(int a) /*定义isprime函数*/
{
int i;
for (i = ;i <= a / ;i++)
{
if (a%i == )
return ; /*a一旦能被某个数整除,即不是素数,返回0*/
}
return ; /*a不能被2到a/2之间任何一个数整除,返回1*/
}

7.3 编写函数 sum(int n) 用以求 ∑f(x) ,和数作为函数值返回。这里 f(x)=x^(2)+1

 #include <stdio.h>
int sum(int); /*sum函数的说明语句*/
int f(int); /*f函数的说明语句*/
main()
{
int a, b;
printf("Enter a integer number:"); /*输入一个整数*/
scanf("%d", &a);
b = sum(a); /*调用sum函数求f(x)的累加和*/
printf("a=%d sum=%d", a, b);
} int sum(int n) /*定义sum函数*/
{
int x, s = ;
for (x = ;x <= n;x++)
{
s += f(x);
}
return s; /*返回累加和*/
} int f(int x) /*定义f(x)函数*/
{
return x*x + ;
}

7.4 编写函数 myupper(ch),把ch中的小写字母转换成大写字母作为函数值返回,其他字符不变。主函数中不断输入字符,用字符@结束输入,同时不断输出结果。

按要求 myupper 函数的返回值类型应当是 char 类型。程序如下:

 #include <stdio.h>
#include <ctype.h>
char myupper(char ch)
{
if (ch >= 'a'&&ch <= 'z')
ch = ch - ;
return ch;
} main()
{
char c;
while ((c = getchar()) != '@')
{
c = myupper(c);
putchar(c);
}
}

7.5 编写函数统计输入字符的个数,用@字符结束输入。在主函数中调用此函数,输出统计结果。

 #include <stdio.h>
long countch(); /*countch函数说明语句*/
main()
{
long n;
n = countch();
printf("n=%ld\n", n);
} long countch()
{
long cn;
for (cn = ;getchar() != '@';cn++);
return cn;
}

7.6 编写函数,根据整型形参n的值,计算如下公式的值:

1-1/2+1/3-1/4+1/5-1/6+1/7-...+ ((-1)^(n+1)) /n

 #include <stdio.h>
double fun(int);
main()
{
int n;
double a;
scanf("%d", &n);
a = fun(n);
printf("%f", a);
} double fun(int n)
{
int k, s = ;
double add = ;
for (k = ;k <= n;k++)
{
add = add + 1.0*s / k;
s = -s;
}
return add;
}

7.7 编写函数,根据整型形参m的值,计算如下公式的值:

t=1-1/(2*2)-1/(3*3)-...-1/(m*m)

 #include <stdio.h>
double fun(int);
main()
{
int m;
double a;
scanf("%d", &m);
a = fun(m);
printf("%f", a);
} double fun(int m)
{
int k, j = ;
double add = , t;
for (k = ;k <= m;k++)
{
t = 1.0 *j / (k*k);
add = add + t;
j = -;
}
return add;
}

全国计算机等级考试二级教程-C语言程序设计_第7章_函数的更多相关文章

  1. 全国计算机等级考试二级教程-C语言程序设计_第4章_选择结构

    switch什么时候用break,什么时候不用break 调用break:一次执行一个分支,输入一个数据,对应一个级别 不调用break:连续执行多个分支 if...else 可以处理任何情况,大于小 ...

  2. 全国计算机等级考试二级教程-C语言程序设计_第8章_地址和指针

    面试: unsigned int *p1 = &num; int *p2 = &num; #define _CRT_SECURE_NO_WARNINGS #include<std ...

  3. 全国计算机等级考试二级教程-C语言程序设计_第15章_位运算

    位运算,不适用于实数,仅仅适用于整数.字符. C语言的位运算只能操作整数.字符,实数是指数方式表示的,不适用于位运算. #define _CRT_SECURE_NO_WARNINGS #include ...

  4. 全国计算机等级考试二级教程-C语言程序设计_第9章_数组

    四维数组,可用于航天卫星,三维+时间 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> ...

  5. 全国计算机等级考试二级教程-C语言程序设计_第14章_结构体、共用体和用户定义类型

    函数的返回值是结构体类型 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> struct ...

  6. 全国计算机等级考试二级教程-C语言程序设计_第10章_字符串

    字符型指针数组 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> //参数中,int a ...

  7. 全国计算机等级考试二级教程-C语言程序设计_第5章_循环结构

    for循环结构的嵌套 外层循环每循环一次,内层循环会完整循环一次. 外层循环是竖. 内层循环是横. for, do...while, while的选择: 如果有固定次数,如阶乘! ,判断素数,用 fo ...

  8. 全国计算机等级考试二级教程-C语言程序设计_第3章_顺序结构

    1输入两个整数给变量x和y:然后输出x和y:在交换x和y中的值后,在输出x和y. #include <stdio.h> main() { int x, y, t; printf(" ...

  9. 全国计算机等级考试二级教程-C语言程序设计_第2章_C程序设计的初步知识

    正负号与被除数一致. 3 % (-5) == 3 (-3) % 5 == -3 不用求余运算符,求出余数. int x, y; 答:x - x / y * y; const int i = 10; c ...

随机推荐

  1. Activity Window View的关系

    http://blog.csdn.net/chiuan/article/details/7062215 http://blog.163.com/fenglang_2006/blog/static/13 ...

  2. Matlab与.NET混编解决人脸识别问题

    原文 http://www.cnblogs.com/asxinyu/archive/2013/05/29/3107013.html 如果这些文章对你有用,有帮助,期待更多开源组件介绍,请不要吝啬手中的 ...

  3. Inno Setup 安装inf文件的一个例子

    原文 http://zwkufo.blog.163.com/blog/static/2588251201063033524889/ ; INF安装例子; [Setup]; 注意: AppId 的值是唯 ...

  4. c++11介绍

    C++11标准是 ISO/IEC 14882:2011 - Information technology -- Programming languages -- C++ 的简称[1]  . C++11 ...

  5. poj 1088 滑雪_记忆化搜索

    题意:略 直接用记忆化搜索就行了 #include<cstdio> #include<iostream> using namespace std; int n,m; int m ...

  6. android 拍照 onCreate() 调用两次的问题

    拍照的代码网上都有就不写了!自己找下就ok了! 1 旋转屏幕导致问题! 这种情况很好解决:在androidManifest.xml 中设置activity 添加属性   android:configC ...

  7. [置顶] Firefox OS 学习——简单了解知识

    什么是Firefox OS ? Firefox OS 是一个为网页设计而生的能编译和独立的手机网页操作系统,我们相信在接下来的时代,网页应用将充满整个新兴操作设备,这也为当前许多网页开发者不需要太多的 ...

  8. ASP.NET 委托,异步调用例子 .

    简要介绍:1.定义异步执行需要调用的方法2.定义具有与异步执行方法相同签名的委托(Delegate):3.调用 BeginInvoke 和 EndInvoke 方法.   3.1. BeginInvo ...

  9. [caffe]深度学习之图像分类模型AlexNet解读

    在imagenet上的图像分类challenge上Alex提出的alexnet网络结构模型赢得了2012届的冠军.要研究CNN类型DL网络模型在图像分类上的应用,就逃不开研究alexnet.这是CNN ...

  10. 在SSH框架中增加SiteMesh的支持

    1)引入jar包,如下两个jar包需要导入到系统的lib文件夹中: sitemesh-2.4.jar struts2-sitemesh-plugin-2.2.1.1.jar 2)修改web.xml增加 ...