全国计算机等级考试二级教程-C语言程序设计_第7章_函数
函数执行,从右到左执行
#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章_函数的更多相关文章
- 全国计算机等级考试二级教程-C语言程序设计_第4章_选择结构
switch什么时候用break,什么时候不用break 调用break:一次执行一个分支,输入一个数据,对应一个级别 不调用break:连续执行多个分支 if...else 可以处理任何情况,大于小 ...
- 全国计算机等级考试二级教程-C语言程序设计_第8章_地址和指针
面试: unsigned int *p1 = # int *p2 = # #define _CRT_SECURE_NO_WARNINGS #include<std ...
- 全国计算机等级考试二级教程-C语言程序设计_第15章_位运算
位运算,不适用于实数,仅仅适用于整数.字符. C语言的位运算只能操作整数.字符,实数是指数方式表示的,不适用于位运算. #define _CRT_SECURE_NO_WARNINGS #include ...
- 全国计算机等级考试二级教程-C语言程序设计_第9章_数组
四维数组,可用于航天卫星,三维+时间 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> ...
- 全国计算机等级考试二级教程-C语言程序设计_第14章_结构体、共用体和用户定义类型
函数的返回值是结构体类型 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> struct ...
- 全国计算机等级考试二级教程-C语言程序设计_第10章_字符串
字符型指针数组 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> //参数中,int a ...
- 全国计算机等级考试二级教程-C语言程序设计_第5章_循环结构
for循环结构的嵌套 外层循环每循环一次,内层循环会完整循环一次. 外层循环是竖. 内层循环是横. for, do...while, while的选择: 如果有固定次数,如阶乘! ,判断素数,用 fo ...
- 全国计算机等级考试二级教程-C语言程序设计_第3章_顺序结构
1输入两个整数给变量x和y:然后输出x和y:在交换x和y中的值后,在输出x和y. #include <stdio.h> main() { int x, y, t; printf(" ...
- 全国计算机等级考试二级教程-C语言程序设计_第2章_C程序设计的初步知识
正负号与被除数一致. 3 % (-5) == 3 (-3) % 5 == -3 不用求余运算符,求出余数. int x, y; 答:x - x / y * y; const int i = 10; c ...
随机推荐
- android HttpGet 另开线程获取网络数据问题
android跨线程通讯可以使用android.os.Handler-android.os.Message这两类对象完成. public static void getResultForHttpGet ...
- project小技巧:快捷键
project小技巧:快捷键 任务升级 ALT + SHIFT + 向左键 任务降级 ALT + SHIFT + 向右键 滚动到表头(第一个任务) Ctr ...
- poj 1852 Ants_贪心
题目大意:很多的蚂蚁都在长度为L(cm)的膀子上爬行,它们的速度都是1cm/s,到了棒子终端的时候,蚂蚁就会掉下去.如果在爬行途中遇到其他蚂蚁,两只蚂蚁的方向都会逆转.已知蚂蚁在棒子的最初位置坐标,但 ...
- 【LeetCode练习题】Gas Station
Gas Station There are N gas stations along a circular route, where the amount of gas at station i is ...
- VMware Workstation虚拟机使用ISO映像文件
VMware Workstation虚拟机使用ISO映像文件 VMware Workstation虚拟机使用ISO映像文件
- how to translate the text of push button
Background:In a project, the need to translate the buttons on the screen, as shown below,the followi ...
- php正则表达式匹配函数
<?php function show($var=null){ if(empty($var)) { echo 'null'; }else if(is_array($var) || is_obj ...
- ASP.Net【如何合并DataTable,并且去重复方法】
虽然DataTable.Merge可以很好的实现,但以下代码写出来更好理解 DataTable DataTable1 = new DataTable(); DataTable DataTable2 = ...
- 关于rem自适应的一点研究
参考地址:http://m.ctrip.com/html5/ https://www.amazon.cn/ rem是相对于html根元素的一个单位.rem是px的16倍,即1rem = 16px;除了 ...
- "margin塌陷现象"div盒子嵌套盒子外边距合并现象
问题描述:原型大概是“一个div嵌套了两个 div,给main设定了background="pink" ,header1设定background=“red” .header2 设定 ...