函数C语言基础代码总结
函数一
《function》
fun1.c
函数的说明及调用
函数名称、参数、返回值
求X^n的函数 ( x是实数 ,n为正整数 )
#include <stdio.h>double x = 2; // 定义全局变量 两个函数都可以使用 那么在main中引用power函数可以不用写参数
int n = 3; // 可直接写 ret = puwer(); // 定义全局变量不好的地方在于,任何函数都可以调用,参数值容易被修改,不建议使用全局变量double power(double, int); //函数在主函数的下面,要在这引用int main()
{double x = 2, ret; // x 、n是局部变量 只能在 main 中使用int n = 3; // 引用函数时注意变量的数据类型和函数需要的参数数据类型定义应相同ret = power(x, n); //函数的调用printf("%lf %d = %lf\\n", x, n, ret);return 0;
}double power(double x, int n) // 函数的说明
{double r = 1;int i;for (i = 1; i <= n; i++)r *= x;return r; //标注了函数的数据类型,就说明函数有返回值,就要有return
}
fun2.c
全局变量
#include <stdio.h>double x = 2;
int n = 3; double power();int main()
{
// double x = 2;
// int n = 3;double ret;ret = power();printf("%lf %d = %lf\\n", x, n, ret);return 0;
}double power()
{double r = 1;int i;for (i = 1; i <= n; i++)r *= x;return r;
}
fun3.c
复制传递方式
#include <stdio.h>double power(double, int); // 1int main()
{double x = 2; // 2 int n = 3;double ret;printf("&x=%p &n=%p\\n", &x, &n); //实参和形参有各自不同的存储空间ret = power(x, n); // 3 如果改变函数参数的话,三个地方的参数都要同时改变printf("%lf %d = %lf\\n", x, n, ret);return 0;
}double power(double a, int b) //实参和形参的关系就是这样一个赋值的过程 double a = x; int b = n;
{ // 形参是新开辟的存储空间double r = 1;int i;printf("&a=%p &b=%p\\n", &a, &b);for (i = 1; i <= b; i++)r *= a;return r;
}
fun4.c
函数实现两个数据的交换
#include <stdio.h>void swap(int x, int y);int main()
{int a = 10;int b = 20;printf("before:%d %d\\n", a, b);swap(a, b);printf("after:%d %d\\n", a, b);return 0;
}
//int x = a; int y = b;
void swap(int x, int y) //形参的值改变,不会影响到实参
{int t;t = x;x = y;y = t;
}
fun5.c
函数实现两个数据的交换 指针实现 (重点)
即地址传递方式 被调用函数中对形参的操作,将直接改变实参的值(被调用函数对指针的目标操作,相当于对实参本身的操作)
#include <stdio.h>void swap(int * x, int * y);int main()
{int a = 10;int b = 20;printf("before:%d %d\\n", a, b);swap(&a, &b);printf("after:%d %d\\n", a, b);return 0;
}
//int * x = &a; int *y = &b;
void swap(int * x, int * y)
{int t;t = *x;//a*x = *y;*y = t;
}
fun6.c
统计字符串中小写字母个数
#include <stdio.h>
int str_fun(const char * p); // 加 const 表示不会修改 *p指向的数组中的值,更加严谨int main(int argc, char *argv[])
{// char *s = "hello" 指针直接指向字符串,不能改变,不能使用此种初始化方式char s[] = "welcome2017Beijing";int n;n = str_fun(s);printf("n=%d\\n", n);return 0;
}int str_fun(const char * p) //char * p = s;
{int num = 0;while (*p != '\\0') {//while (*p)if (*p <= 'z' && *p >= 'a')num++;p++;}return num;
}
fun7.c
统计字符串中小写字母个数,并把字符串中小写字母转化为大写字母
#include <stdio.h>
int str_fun(char * p);int main(int argc, char *argv[])
{char s[] = "welcome2017Beijing";int n;n = str_fun(s);printf("n=%d %s\\n", n, s);return 0;
}int str_fun(char * p) //char * p = s;
{int num = 0;while (*p != '\\0') {//while (*p)if (*p <= 'z' && *p >= 'a') {num++;*p -= ' '; //小写转大写 小写 - 空格 = 大写}p++;}return num;
}
fun8.c
函数中传递数组参数
计算一个一维整形数组中所有元素的和
#include <stdio.h>int array_sum(int data[], int n);int main(int argc, char *argv[])
{int a[] = {5, 9, 10, 3, 10};int sum = 0;sum = array_sum(a, sizeof(a)/sizeof(int));printf("sum=%d\\n", sum);return 0;
}int array_sum(int data[], int n) // int data[] = a; 不能把数组名赋给一个数组 error int * data = a; 若只有一个形参 int array_sum(int data[]) 且形参是数组名的时候,本质是一个指针变量
{//int n = sizeof(a)/sizeof(int); 如何传递数组 利用地复制传递方式,数组名int ret = 0;int i;for (i = 0; i < n;i++) {printf("%d\\n", data[i]);ret += data[i];}return ret;
}
fun9.c
函数中传递数组参数
计算一个一维整形数组中所有元素的和
#include <stdio.h>int array_sum(int * data, int n);int main(int argc, char *argv[])
{int a[] = {5, 9, 10, 3, 10};int sum = 0;sum = array_sum(a, sizeof(a)/sizeof(int));printf("sum=%d\\n", sum);return 0;
}int array_sum(int * data, int n) //int * data = a; 如何传递数组 利用地址传递方式,指针
{//int n = sizeof(a)/sizeof(int);int ret = 0;int i;for (i = 0; i < n;i++) {printf("%d\\n", data[i]);ret += data[i];}return ret;
}
fun10.c
删除字符串中的空格
用字符数组存字符串,字符数组传元素的时候,不需要传元素个数 和上面的程序形成对比
#include <stdio.h>void del_space(char * s1);int main(int argc, char *argv[])
{char s[] = " h a sdf g ";puts(s);del_space(s); //一维数组应该传数组名加元素个数 但字符数组比较特殊,内部可以通过指针遍历,传一个参数就可以 但形参使用的是指针形式需要注意puts(s);return 0;
}void del_space(char * s1) // 利用指针 可以直接改变主函数字符数组中的内容,所以不需要有返回值,函数的数据类型就是 空
{char * s2;s2 = s1;while (*s1) {if (*s1 == ' '){s1++;}else {*s2 = *s1;s1++;s2++;}}*s2 = '\\0';
}
power.c
#include <stdio.h>double power(double x, int n)
{double r = 1;int i;for (i = 1; i <= n; i++)r *= x;return r;
}int main()
{double x, ret;int n;printf("input:");scanf("%lf%d", &x, &n);ret = power(x, n);printf("%lf %d = %lf\\n", x, n, ret);return 0;
}
power2.c
//#include <stdio.h>
int scanf(const char *format, ...);
int printf(const char *format, ...);double power(double, int);int main()
{double x, ret;int n;printf("input:");scanf("%lf%d", &x, &n);ret = power(x, n);printf("%lf %d = %lf\\n", x, n, ret);return 0;
}double power(double x, int n)
{double r = 1;int i;for (i = 1; i <= n; i++)r *= x;return r;
}
函数专题2
digui1.c
#include <stdio.h>int fac(int n);int main(int argc, char *argv[])
{int n;printf("input:");scanf("%d", &n);printf("%d\\n", fac(n));return 0;
}int fac(int n)
{if (n == 0 || n == 1)return 1;return n * fac(n-1);
}
digui2.c
#include <stdio.h>int fib(int n);int main(int argc, char *argv[])
{int n = 1;while (n <= 10) {printf("%d ", fib(n));n++;}printf("\\n");return 0;
}int fib(int n)
{if (n == 1 || n == 2)return 1;return fib(n-1)+fib(n-2);
}
errorpfun.c
#include <stdio.h>
#include <string.h>char * getstring();int main(int argc, char *argv[])
{char * r;r = getstring();printf("---%s---\\n", getstring());(*r)++;puts(r);return 0;
}char * getstring()
{char str[20];strcpy(str, "hello");return str;
}
fun1.c
#include <stdio.h>double power(double, int);int main()
{double x = 2, ret;int n = 3;ret = power(x, n);printf("%lf %d = %lf\\n", x, n, ret);return 0;
}double power(double x, int n)
{double r = 1;int i;for (i = 1; i <= n; i++)r *= x;return r;
}
fun2.c
#include <stdio.h>double x = 2;
int n = 3;double power();int main()
{
// double x = 2;
// int n = 3;double ret;ret = power();printf("%lf %d = %lf\\n", x, n, ret);return 0;
}double power()
{double r = 1;int i;for (i = 1; i <= n; i++)r *= x;return r;
}
fun3.c
#include <stdio.h>double power(double, int);int main()
{double x = 2;int n = 3;double ret;printf("&x=%p &n=%p\\n", &x, &n);ret = power(x, n);printf("%lf %d = %lf\\n", x, n, ret);return 0;
}double power(double a, int b) //double a = x; int b = n;
{double r = 1;int i;printf("&a=%p &b=%p\\n", &a, &b);for (i = 1; i <= b; i++)r *= a;return r;
}
fun4.c
#include <stdio.h>void swap(int x, int y);int main()
{int a = 10;int b = 20;printf("before:%d %d\\n", a, b);swap(a, b);printf("after:%d %d\\n", a, b);return 0;
}
//int x = a; int y = b;
void swap(int x, int y)
{int t;t = x;x = y;y = t;
}
fun5.c
#include <stdio.h>void swap(int * x, int * y);int main()
{int a = 10;int b = 20;printf("before:%d %d\\n", a, b);swap(&a, &b);printf("after:%d %d\\n", a, b);return 0;
}
//int * x = &a; int *y = &b;
void swap(int * x, int * y)
{int t;t = *x;//a*x = *y;*y = t;
}
fun6.c
#include <stdio.h>
int str_fun(const char * p);int main(int argc, char *argv[])
{char s[] = "welcome2017Beijing";int n;n = str_fun(s);printf("n=%d\\n", n);return 0;
}int str_fun(const char * p) //char * p = s;
{int num = 0;while (*p != '\\0') {//while (*p)if (*p <= 'z' && *p >= 'a')num++;p++;}return num;
}
fun7.c
#include <stdio.h>
int str_fun(char * p);int main(int argc, char *argv[])
{char s[] = "welcome2017Beijing";int n;n = str_fun(s);printf("n=%d %s\\n", n, s);return 0;
}int str_fun(char * p) //char * p = s;
{int num = 0;while (*p != '\\0') {//while (*p)if (*p <= 'z' && *p >= 'a') {num++;*p -= ' ';}p++;}return num;
}
fun8.c
#include <stdio.h>int array_sum(int data[], int n);int main(int argc, char *argv[])
{int a[] = {5, 9, 10, 3, 10};int sum = 0;sum = array_sum(a, sizeof(a)/sizeof(int));printf("sum=%d\\n", sum);return 0;
}int array_sum(int data[], int n) // int data[] = a;error int * data = a;
{//int n = sizeof(a)/sizeof(int);int ret = 0;int i;for (i = 0; i < n;i++) {printf("%d\\n", data[i]);ret += data[i];}return ret;
}
fun9.c
#include <stdio.h>double array_sum(double * data, double n);double main(double argc, char *argv[])
{double a[] = {5, 9, 10, 3, 10};double sum = 0;suum = array_suum(a, sizeof(a)/sizeof(double));prdoublef("sum=%d\\n", sum);return 0;
}double __sum(double * data, double n) //double * data = a;
{//double n = sizeof(a)/sizeof(double);double ret = 0;double i;for (i = 0; i < n;i++) {dataprdoublef("%d\\n", data[i]);ret += data[i];}return ret;
}
fun10.c
#include <stdio.h>void del_space(char * s1);int main(int argc, char *argv[])
{char s[] = " h a sdf g ";puts(s);del_space(s);puts(s);return 0;
}void del_space(char * s1)
{char * s2;s2 = s1;while (*s1) {if (*s1 == ' '){s1++;}else {*s2 = *s1;s1++;s2++;}}*s2 = '\\0';
}
funp1.c
#include <stdio.h>int add(int a, int b) {return a+b;
}
int sub(int a, int b) {return a-b;
}
int mul(int a, int b) {return a*b;
}int main(int argc, char *argv[])
{int m = 10, n = 20;int (* p)(int, int);p = add;//printf("%d\\n", add(m, n));printf("%d\\n", (*p)(m, n));p = sub;printf("%d\\n", (*p)(m, n));return 0;
}
funp2.c
#include <stdio.h>int add(int a, int b) {return a+b;
}
int sub(int a, int b) {return a-b;
}
int mul(int a, int b) {return a*b;
}int main(int argc, char *argv[])
{int m = 10, n = 20;int (* p[2])(int, int);//int * p[3]p[0] = add;//printf("%d\\n", add(m, n));printf("%d\\n", (*p[0])(m, n));p[1] = sub;printf("%d\\n", (*p[1])(m, n));return 0;
}
pfun1.c
#include <stdio.h>
#include <string.h>//char str[20];
char * getstring();int main(int argc, char *argv[])
{char * r;r = getstring();printf("---%s---\\n", getstring());//(*r)++;puts(r);return 0;
}char * getstring()
{//char str[20];//error//static char str[20];char * str = "hello";// strcpy(str, "hello");return str;
}
pfun2.c
#include <stdio.h>
#include <string.h>char * del_space(char * s);int main(int argc, char *argv[])
{//char * r;char str[]= " how are you ";char s[50], s2[50];// r = del_space(str);// printf("---%s---\\n", r);//strcpy(s, del_space(str));strcpy(s2, strcpy(s, del_space(str)));//m=n=kputs(str);puts(s);puts(s2);return 0;
}char * del_space(char * s) //char * s = str;
{char * r = s;char * p = s;while (*s) {if (*s == ' ')s++;else {*p = *s;s++;p++;}}*p = '\\0';return r;
}
pfun3.c
#include <stdio.h>char * mstrcat(char * dest, const char * src);int main(int argc, char *argv[])
{//char * r;char dest[50] = "welcome";char src[] = "makeru";puts(mstrcat(dest, src));puts(dest);return 0;
}char * mstrcat(char * dest, const char * src)
{char * r = dest;while (*dest++);dest--;while (*dest++ = *src++);return r;/*char * r = dest;while (*dest++);dest--;while (*src) {*dest++ = *src++;}*dest = '\\0';return r;*//*char * r = dest;while (*dest) {dest++;}while (*src) {*dest = *src;dest++;src++;}*dest = '\\0';return r;*/
}
pfun4.c
#include <stdio.h>char * itoa(int n);int main(int argc, char *argv[])
{int n;char * s;printf("input:");scanf("%d", &n);s = itoa(n);puts(s);return 0;
}char * itoa(int n)
{int r, i = 0, j;static char p[50];while (n) {r = n % 10;n /= 10;p[i] = r + '0';i++;}p[i] = '\\0';j = i-1;i = 0;while (i < j) {r = p[i];p[i] = p[j];p[j] = r;i++;j--;}return p;
}
pfun5.c
#include <stdio.h>char * itoa(char *p, int n);int main(int argc, char *argv[])
{int n;char s[50], * r;printf("input:");scanf("%d", &n);r = itoa(s, n);puts(r);puts(s);return 0;
}char * itoa(char *p, int n)
{int r, i = 0, j;//static char p[50];while (n) {r = n % 10;n /= 10;p[i] = r + '0';i++;}p[i] = '\\0';j = i-1;i = 0;while (i < j) {r = p[i];p[i] = p[j];p[j] = r;i++;j--;}return p;
}
power.c
#include <stdio.h>double power(double x, int n)
{double r = 1;int i;for (i = 1; i <= n; i++)r *= x;return r;
}int main()
{double x, ret;int n;printf("input:");scanf("%lf%d", &x, &n);ret = power(x, n);printf("%lf %d = %lf\\n", x, n, ret);return 0;
}
power2.c
//#include <stdio.h>
int scanf(const char *format, ...);
int printf(const char *format, ...);double power(double, int);int main()
{double x, ret;int n;printf("input:");scanf("%lf%d", &x, &n);ret = power(x, n);printf("%lf %d = %lf\\n", x, n, ret);return 0;
}double power(double x, int n)
{double r = 1;int i;for (i = 1; i <= n; i++)r *= x;return r;
}
qsort.c
int compare(const void *, const void *);int main(int argc, char *argv[])
{int s[] = {89, 23, 10, 8, 7, 61}, n, i;n = sizeof(s)/sizeof(int);qsort(s, n, sizeof(int), compare);for (i = 0; i < n; i++)printf("%d ", s[i]);puts("");return 0;
}int compare(const void * p, const void * q)
{return (*(int *)p - *(int *)q);}
test.c
#include <stdio.h>
#include <math.h>#define N 1
#define _DEBUG_int main(int argc, char *argv[])
{int m = 624;m += 1;#ifdef _DEBUG_printf("%s %s, %d\\n", __FILE__, __FUNCTION__, __LINE__);
#endifm = sqrt(m);printf("m=%d\\n", m);return 0;
}