文章标题
来源:互联网 发布:win7端口查看 编辑:程序博客网 时间:2024/05/24 01:10
函数
首先,什么是函数?函数是完成特定任务的独立程序代码单元。语法规则定义了函数的结构和使用方式。虽然C中的函数和其他语言中的函数、子程序、过程作用相同,但是细节上略有不同。一些函数执行某些动作,如printf()把数据打印到屏幕上;一些函数找出一些值供程序使用,如strlen()把指定字符串的长度返回给程序。一般而言,函数可以同时具备以上两种功能。
- 函数的三要素:返回值、参数列表、声明。
* */#include <stdio.h>#include <string.h>//main函数作为整个程序的入口,返回值给了他的父进程//char *argv[]指针数组:[]优先级很高,argv[]代表数组,里面所有的元素是char*类型,每个main函数的参数都是字符串(char *)//直接给main函数传参,一空格表示一个参数的结束int main(int argc, char *argv[]){ //strcmp比较两个字符串大小strcmp(const char *s1, const char *s2) int ret = strcmp("08", "123467"); printf("ret = %d.\n", ret); ret = strcmp("923456", "123467"); printf("ret = %d.\n", ret); char *p = "中国"; printf("%s.\n", p); char str[] = "123"; char *p_str = "123"; char *p_str1 = "123"; if (p_str == p_str1) printf("==.\n"); if (str == p_str) printf("ok.\n");/* //终端输入1:打印出男孩,输入2:打印女孩 if (2 != argc) { printf("参数错误.\n"); return -1; } if (!strcmp(argv[1],"1") // strcmp(argv[1], "1") == 0 { printf("男孩.\n"); } else if(!strcmp(argv[1],"2")) { printf("女孩.\n"); }*//* char buf[100] = {0}; printf("终端输入:\n"); scanf("%s", buf); //main函数的参数,argc代表main函数参数个数 printf("main函数个数:%d.\n", argc); //打印出main函数的参数 int i = 0; for (i=0; i<argc; i++) { printf("argv[%d] = %s\n", i, argv[i]); } */ return 0;}
- 递归函数
* */#include <stdio.h>//计算阶乘(递归)int jiecheng(int a){ if (a <= 0) { printf("参数错误.\n"); return -1; } //回归条件 if (a == 1) { return 1; } return a * jiecheng(a-1);}//递归解决求fibo数列某一项的值: 1 1 2 3 5 8 13 21 34 55int fibo(int num){ if (num > 0) { if (1 == num) { return 1; } if (2 == num) { return 1; } return fibo(num-1) + fibo(num-2); }}int main(void){// int arr[10000000000000000000000];// int ret = jiecheng(-1);// printf("ret = %d.\n", ret); int a = 0; while (1) { printf("输入0表示推出.\n"); scanf("%d", &a); if (0 == a) { break; } printf("%d项的fibo值:%d.\n", a, fibo(a)); } return 0;}
- 迭代函数
/#include <stdio.h>//计算从1开始到某个数据内所有的和int sum(int a){ int i = 1, sum = 0; if (a > 0) { for (i=1; i<=a; i++) { //迭加 //i值每变化一次就更新sum值 sum += i; } } //最终的结果,中间环节不需要 return sum;}int main(void){ int a = 100; printf("%d内的和:%d.\n", a, sum(a)); int i = 1, sum; for (i=1; i<10; i++) {// printf("sum = %d.\n", sum+=i); printf("sum = %d", sum+=i); sleep(1); } return 0;}
- 函数的声明
#include <stdio.h>#include <unistd.h>//函数的声明float add(float a, float b);float sub(float a, float b);float mul(float a, float b);float div(float a, float b);int main(void){ //用标准输入scanf printf("从键盘输入两个数,以回车结束:\n"); float a, b, ret; //默认是行缓冲。留在了你的输入的缓冲区,留下了一个'\n' scanf("%f %f", &a, &b); char ch = 0; printf("从键盘输入你要计算的运算符:+ - * /:\n");/* scanf("%c", &ch); //ch = 10.对应‘\n’的asc码值: printf("ch = %d.\n", ch);*/ do { scanf("%c", &ch); }while (ch == '\n'); switch (ch) { case '+': ret = add(a, b); break; case '-': ret = sub(a, b); break; case '*': ret = mul(a, b); break; case '/': ret = div(a, b); break; default: printf("error.\n"); break; } printf("%.2f %c %.2f = %.2f.\n", a, ch, b, ret);/* //调用函数 float ret = add(a, b); //float类型默认精度小数点后6位 printf("ret = %.2f.\n", ret);*/ return 0;}//函数实现(定义)float add(float a, float b){ float c = a + b; return c;// return a + b;}float sub(float a, float b){ return a - b;}float mul(float a, float b){ return a * b;}float div(float a, float b){ if (b == 0) { printf("除数不能是0.\n"); //高精度向低精度隐式转换,会丢掉数据。低精度向高精度隐式转换,结果更精确。// return -1;// 结束整个程序 _exit(0); } return a / b;}
- void
/* * void表示类型的一个关键字,空类型(暂时我们不知道该给他什么类型) * void类型占1个字节,但是需要特定类型时,可以进行强制类型转换 * * */#include <stdio.h>void func1(void){ printf("hello, world.\n");}//a就是子函数的形参,相当于子函数里的局部变量,函数结束,也就销毁了。int func2(int a){ printf("a = %d.\n", a); a = 23;}//交换a、b的值void func3(int a, int b){ int temp = 0; temp = a; a = b; b = temp;}int main(void){ int x = 3, y = 4; //分析:1、在子函数里是实参x值(3)、y值(4),进入子函数,分别赋值给了a、b。 //子函数里,是发生了变化,但是main函数里的实参一点也没变 func3(x, y); printf("x = %d, y = %d.\n", x, y);/* //函数调用 func1(); int val = 2; //传值调用:1、val变量里面的值(2),进入了子函数里,并赋值给了a,所以val本身(真身)没有进去子函数 func2(val); printf("val = %d.\n", val);*//* //不允许定义此类型变量// void a = 1; //error: variable or field ‘a’ declared void// int b = (int)a;// printf("b = %d.\n", b); printf("sizeof(void) = %d.\n", sizeof(void));*/ return 0;}
- 带参宏和普通函数
* 1、能完成相类似的功能 * 2、函数会检查你的参数列表和返回值类型,而宏定义没有类型,也就谈不上检查 * 3、宏定义只是替换,没有调用开销,函数有开销。 * * 你的函数短小,但是还想利用检查参数的机制,要提高我的效率? * 内联函数,处理这些问题.调用开销 * * */#include <stdio.h>#define MAX 5#define S(x) ((x)*(x))#define MIN(a, b) (((a)<(b)) ? (a) : (b))#define STR "123456789"//函数会检查你的参数类型int func_min(int a, int b){ return (a < b ? a : b);/* if (a > b) { return b; } else { return a; }*/}//内联函数inline void func1(void){ printf("hello.\n");}int main(void){/* unsigned a = -1; float b = 0.1; printf("数据:%f.\n", a); printf("数据:%f", a + b); printf("数据:%u.\n", a + b);*//* func1(); float f1 = 3.14; float f2 = 3.15; int ret = func_min('A', f2); printf("ret = %d.\n", ret); func_min(3.14, 3.15);*//* int ret = S(3); printf("ret = %d.\n", ret); ret = S(3+1); printf("ret = %d.\n", ret); float ret1 = MIN(3.14, 3.15); ret = MIN(3, 4); char *p = STR; printf("字符串:%s.\n", STR);*/ return 0;}
- 数学库
链接的时候需要-lm * */#include <stdio.h>#include <math.h>int main(void){ double ret = sqrt(16); printf("ret = %.2f.\n", ret); char *p1; short *p2; double *p3; printf("sizeof(p1) = %d.\n", sizeof(p1)); printf("p1 = %p.\n", p1); return 0;}
阅读全文
0 0
- 文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题 文章标题 文章标题 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 软件调试笔记6
- 【2017面试题】.NET程序员(一)
- centos搭建ftp
- js基本知识点总结-----js正则表达式
- SQLServer: 解决“错误15023:当前数据库中已存在用户或角色”
- 文章标题
- CSS3 transform-origin & CSS3圆角border-radius属性详解
- C++字符串操作详解
- Android 调用铃声与振动
- 【py-faster-rcnn】各函数作用解读
- 数据结构算法-插入排序
- 一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。 找出这两个数字,编程实现。
- No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK
- js基本知识点总结-----js字符串函数