电商专业学习嵌入式软件开发第二十三天

  • 预科第十二天

今天讲的内容有点多,老师先给我们讲了函数,然后讲了函数指针和函数的应用,中间还给我们穿插讲了部分宏基础。这部分内容够我消化几天了,再加上前几天还没消化完的,真担心后面会跟不上。

1>函数:就是存放代码的包
2>函数需要的基本元素:函数名称,信息参数(形参),函数执行完成的结果
3>怎么定义函数?
数据类型 函数名(数据类型 变量名)
{

}
数据类型:void,int,char,float,double,int *,float *,....自定义的结构体,
void:空类型,可以没有return ,也可以有return;有return不能在后面返回变量;
int,float..:必须要有return,而且return后面必须要有值,而且值的数据类型要和函数的数据类型保持一致
4>函数的调用
函数名(实参);
5>
形参:形式参数,没有实际意义,形参只存在于函数定义,
实参:实际上的参数,有实际意义的,实参只存在于函数的调用
6>函数的注意点
(1)函数运行会从上往下找,不会逆行
(2)形式参数列表,不能省略数据类型,即使变量的数据类型一致,中间用,隔开
7>函数的声明
数据类型 函数名(数据类型 变量名);
变量名可以省略,数据类型不可以省略
8>return的作用
(1)结束当前函数的运行
(2)将return后面的值返回给函数调用者
9>函数的递归:函数自己调用自己
10>函数特点
(1)模块性比较强

//求5的阶乘
#include<stdio.h>
#include<string.h>
int jc(int a);
int main()
{
  int res = jc(5);
    printf("res = %d\n",res);
  return 0;
}
int jc(int a)
{
    if(a == 1)
    {
        return a;
    }
    else
    {
        a = a * jc(a - 1);
        return a;
    }
}
//求a和b的和
#include<stdio.h>
#include<string.h>
int sum(int a,int b);
int main()
{
    int a = sum(2,3);
    printf("a = %d\n",a);
  return 0;
}
int sum(int a,int b)
{
    int c = a + b;
    return c;   
}

函数的应用

//自己编写myStrlen函数求字符串长度
#include<stdio.h>
#include<string.h>
int myStrlen(const char *str)//const代表不能通过str修改str所指向的存储单元里面的内容
{
    int count=0;
    while (*str!='\0')
    {
        count++;
        str++;
    }
    return count;
}
int main()
{
    char string[10] = "hello";
    int size = MyStrlen(string);
    printf("size = %d\n",size);
  return 0;     
}
//自己编写MyStrcat函数拼接字符串
#include <stdio.h>
#include<string.h>
char MyStrcat(char *s1,const char *s2) //Strcat拼接字符串
{
    s1 = s1 + MyStrlen(s1);
    while(*s2 != 0)
    {
        *s1 = *s2;
        s1++;
        s2++;
    }
    *s1 = '\0';
}
int main()
{
    char dst[20] = "hello ";
    char source[10] = "world";
    MyStrcat(dst,source);
    printf("dst = %s\n",dst);
  return 0;     
}

1> 宏常量
#define N 7
2> 宏函数
(1)不带参数的宏
#define OUTPUT printf("======\n");
(2)带参数的宏
#define MAX(a,b) a>b?a:b;
3>高级用法
(1)#与#define连用,代表将宏体转换成字符串
#define string(x) #x
(2)\与#define连用

 printf("====\n");```
 (3)##与#define连用,代表拼接

include <stdio.h>

define N 7

define OUTPUT printf("======\n");

define MAX(a,b) a>b?a:b

define test(a,b) ((a)+(b))

define string(x) #x

define OUT printf("====\n");\


printf("====\n");

define getMax(type,functionName) \

type get##functionName(type a,type b)
{
return a>b?a:b;
}
getMax(int, IntMax)
getMax(float, FloatMax)
int main()
{
int max=getIntMax(1,3);
float max1=getFloatMax(1.5, 3.5);
printf("max=%d\nmax1=%f\n",max,max1);

return 0;

}

void test1()
{

OUT
int res=test(1,2)*test(2,3);//1+2*2+3
printf("%d\n",res);
    
char string1[10]=string(123); //char string1[10]="123"
printf("string1=%s\n",string1);

}

函数指针:先算‘*’,代表这个变量是一个指针变量,再算(),代表将来这个指针指向的是一个函数;
函数名就是函数的入口地址

include<stdio.h>

include<string.h>

void test2(int a,int b)
{
printf("====\n");
}
int main()
{
void (p)(int,int);
p=test2;
//通过函数指针调用函数
p(3,4);
(
p)(4,6);
return 0;
}

写一个函数实现变量值的交换int a=4,b=8;

include<stdio.h>

include<string.h>

void swap(int *pa,int pb)
{
int temp=
pa;
pa=pb;
*pb=temp;
}
int main()
{
int a=4,b=8;
//调用交换函数
swap(&a,&b);
printf("a=%d\nb=%d\n",a,b);
return 0;
}

定义一个大小为5一维整型数组,使用函数遍历所有元素进行打印

include<stdio.h>

include<string.h>

//int arr[5]===>int arr[]===>int *arr;
void printArr(int p,int size)
{
int i;
for (i=0; i<size; i++)
{
printf("arr[%d]=%d\n",i,
(p+i));
}
}
int main()
{
int arr[]={1,2,3,4,5,6,7,8,9};
int size=sizeof(arr)/sizeof(int);
printArr(arr,size);
return 0;
}

求所有元素的个数

int arr[] = {1,2,3,4,5,6,7,8,9};
int size = sizeof(arr)/sizeof(int);
printf("size = %d\n",size);

//arr[2]的结果是多少

include<stdio.h>

include<string.h>

void changeValue(int p[])
{
p[2]=8;
}
int main()
{
int arr[5]={1,2,3,4,5};
changeValue(arr);
printf("arr[2]=%d\n",arr[2]);
return 0;
}

自定义一个大小为6的整型数组,写一个函数,对其从小到大排序,写一个函数对其遍历打印

include<stdio.h>

include<string.h>

void blueSort(int *p,int size)
{
int i,j;
for (i=0; i<size-1; i++)
{
for (j=0; j<size-i-1; j++)
{
if(p[j]>p[j+1])
{
int temp=p[j];
p[j]=p[j+1];
p[j+1]=temp;
}
}
}
}
int main()
{
int arr[6]={9,1,5,10,34,2};
blueSort(arr, 6);
printArr(arr, 6);
return 0;
}

>今天老师留了2道作业,对我来说还是很有难度的:
1.实现mystrcpy:
2.截取信息,遇到';'截取 xx1;xx2;xxx
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容