我要成为嵌入式高手之1月26日第十一天!!

学习笔记

1.25总结

函数:

1、语法

        返回值的类型 函数名 (形参)

        {

                函数体;

                return 表达式;

        }
        返回值的类型:

        a.  一般与返回的结果类型一致

        b. 不一致时,以函数定义时,“返回值的类型”一致

        c. 不写,默认识别为int型

        d. 不需要写返回值——void

        形参:

        a. 个数相同

        b. 类型匹配

        c. 匹配顺序 // 从右向左

        函数体:

        实现功能的代码

2、练习:

        求和、找最大值、求月份的天数、打印100以内的素数

3、函数调用的本质

        栈的存在可以实现函数的层层嵌套调用

        堆、全局区(静态区)、字符串常量区、代码区

        程序 = 代码 + 数据

        除了代码区,其他都叫数据区

4、函数递归

        递归概念: 自己调用自己

        递归求和:

                1、结束条件

                2、递推关系

        递归本质上是一种循环

练习1:

求n的阶乘

#include <stdio.h>

int fact(int n)
{
    if (n == 1)//结束条件
    {
        return 1;
    }else
    {
        return fact(n-1)*n;//递推关系
    }
}

int main(void)
{
    int n = 0;
    printf("Input a num: \n");
    scanf("%d",&n);
    printf("%d\n",fact(n));

    return 0;
}

练习2:

求斐波那契数列前n项和

#include<stdio.h>

int fibo(int n)
{
    if (n == 2 || n == 1)
    {
        return 1;
    }else
    {
       return fibo(n-1)+fibo(n-2);
    }
}

int FiboSum(int n)
{
    if (n == 2)
    {
        return 2;
    }else
    {
        return FiboSum(n-1)+fibo(n);
    }

}

int main(void)
{
    int n;
    printf("Input a num :\n");
    scanf("%d",&n);

    printf("sum = %d \n",FiboSum(n));

    return 0;
}

练习3(巨难):

Hanoi( 汉诺)塔问题。

数组元素作为函数参数

        1、数组元素作为函数实参 --- 此时函数的形参时一个与实参类型相同的变量即可

        2、数组作为函数的形参,此时形式上看是数组,但是编译器最终是当做指针变量来看的

一维整型数组作为函数形参:

        a.数组形式 b.数组长度:void printf(int a[10],int len); // 形参

        调用:printf(a,len);

练习4:

        写个函数,往数组中填入斐波那契数列的前n项

#include<stdio.h>

int fibo(int n)
{
    if (n == 2 || n == 1)
    {
        return 1;
    }else
    {
       return fibo(n-1)+fibo(n-2);
    }
}

void array(int a[],int len)
{
    int i = 0;

    for (i = 0; i < len; ++i)
    {
        a[i] = fibo(i+1);
        printf("a[%d] = %d \n",i,a[i]);
    }
}

int main(void)
{
    
    printf("Input a num: \n");

    int len;
    scanf("%d",&len);
    int a[len];

    array(a,len);

    return 0;
}

练习5:

找出数组中的最大值

#include <stdio.h>

void Input(int a[],int len)
{
    int i = 0;
    for (i = 0; i < len; ++i)
    {
        scanf("%d",&a[i]);
    }
}

int FindMax(int a[],int len)
{
    int i = 0;
    int max = a[0];

    for (i = 1; i < len; ++i)
    {
        if (a[i] > max)
        {
            max = a[i];
        }
    }

    return max;
}

int main(void)
{
    int len;
    printf("Input a num: \n");
    scanf("%d",&len);

    int a[len];

    Input(a,len);

    printf("max = %d\n",FindMax(a,len));

    return 0;
}

练习6:

数组逆序 

#include <stdio.h>

void Input(int a[],int len)
{
    int i = 0;
    for (i = 0; i < len; ++i)
    {
        scanf("%d",&a[i]);
    }
}

void Reverse(int a[],int len)
{
    int i = 0;

    for (i = 0; i < len/2; ++i)
    {
        int t = a[i];
        a[i] = a[len-1-i];
        a[len-1-i] = t;
    }
}

int main()
{
    int len;
    printf("Input a num: \n");
    scanf("%d",&len);
    int a[len];
    int i = 0;

    Input(a,len);
    Reverse(a,len);

    for (i = 0; i < len; ++i)
    {
        printf("%d ",a[i]);
    }
    putchar('\n');

    return 0;
}

练习7:

实现一个对数组的排序

#include <stdio.h>

void Input(int a[],int len)
{
    int i = 0;
    for (i = 0; i < len; ++i)
    {
        scanf("%d",&a[i]);
    }
}

void ChooseSort(int a[],int len)
{
    int i = 0;
    int j = 0;
    for (i = 0; i < len-1; ++i)
    {
        for (j = i+1; j < len; ++j)
        {
            if (a[j] < a[i])
            {
                int t = a[i];
                a[i] = a[j];
                a[j] = t;
            }
        }
    }
}

void BullingSort(int a[],int len)
{
    int j;
    int i;
    for (j = 1; j < len; ++j)
    {
        for (i = 0; i < len-j; ++i)
        {
            if (a[i] > a[i+1])
            {
                int t = a[i];
                a[i] = a[i+1];
                a[i+1] = t;
            }
        }
    }
}

void InsertSort(int a[],int len)
{
    int i;
    int j;
    for (i = 0; i < len; ++i)
    {
        int t = a[i];
        j = i;
        while (j > 0 && a[j-1] > t)
        {
            a[j] = a[j-1];
            --j;
        }
        a[j] = t;
    }
}

void Output(int a[],int len)
{
    int i = 0;
    for (i = 0; i < len; ++i)
    {
        printf("%d ",a[i]);
    }
    putchar('\n');
}

int main(void)
{
    int len;
    printf("Input a num: \n");
    scanf("%d",&len);
    int a[len];

    Input(a,len);
    ChooseSort(a,len);
    printf("Choose_Sort is: ");
    Output(a,len);

    Input(a,len);
    BullingSort(a,len);
    printf("Bulling_Sort is: ");
    Output(a,len);

    Input(a,len);
    InsertSort(a,len);
    printf("Insert_Sort is: ");
    Output(a,len);

    return 0;
}

 练习8:

查找

#include <stdio.h>

void Input(int a[],int len)
{
    int i = 0;
    for (i = 0; i < len; ++i)
    {
        scanf("%d",&a[i]);
    }
}

void InsertSort(int a[],int len)
{
    int i;
    int j;
    for (i = 0; i < len; ++i)
    {
        int t = a[i];
        j = i;
        while (j > 0 && a[j-1] > t)
        {
            a[j] = a[j-1];
            --j;
        }
        a[j] = t;
    }
}

int Find(int a[],int len,int k)
{
    int begin = 0;
    int end = len-1;
    int mid;

    while (begin <= end)
    {
        mid = (begin + end)/2;
        if (a[mid] > k)
        {
            end = mid - 1;
        }else if (a[mid] < k )
        {
            begin = mid + 1;
        }else
        {
            break;
        }
    }

    if (begin <= end)
    {
        return mid;
    }else
    {
        return -1;
    }
}

int main(void)
{
    int len;
    printf("Input a num: \n");
    scanf("%d",&len);
    int a[len];

    Input(a,len);
    InsertSort(a,len);
    int k;
    printf("Input a num to find: \n");
    scanf("%d",&k);
    int ret = Find(a,len,k);
    
    if (ret < 0)
    {
        printf("Not Found!");
    }else
    {
        printf("a[%d] = %d\n",ret,k);
    }

    return 0;
}

一维字符型数组:

void  printStr(char s[1000]); // 形式上 写成字符数组的形式

函数调用:

printStr(s); // 数组名 注意:此时不需要传数组长度

练习9:

        用函数实现字符串输入

#include <stdio.h>

void ScanfStr(char s[1000])
{
    int i;
    
    for (i = 0; ; ++i)
    {
        scanf("%c",&s[i]);
        if (s[i] == '\n')
        break;
    }
    s[i] = '\0';

}

int main()
{
    char s[1000];
    ScanfStr(s);

    puts(s);
}

练习10:

统计字符串长度strlen 

#include <stdio.h>

int Strlen(char s[])
{
    int i = 0;
    while (s[i] != '\0')
    {
        ++i;
    }
    
    return i;
}

int main()
{
    char s[10000];

    gets(s);
    printf("%d \n", Strlen(s));
}

练习11:

字符串拷贝strcpy

#include <stdio.h>

void Strcpy(char dest[],char src[])
{
    int i = 0;
    
    for (i = 0; i < 1000; ++i)
    {
        if (src[i] != 0)
        {
            dest[i] = src[i];
        }else
        break;
    }
}

int main()
{
    char dest[1000];
    char src[1000];

    printf("src[]: ");
    gets(src);

    printf("dest[]: ");
    Strcpy(dest,src);
    puts(dest);

    return 0;
}

练习12:

字符串拼接strcat

#include <stdio.h>

void Strcat(char dest[],char src[])
{
    int i = 0;

	while (dest[i] != '\0')
	{
		++i;
	}

	int j = 0;
	while (src[j] != '\0')
	{
		dest[i] = src[j];
		++i;
		++j;
	}
	dest[i] = '\0';
}

int main(void)
{
    char dest[1000];
    char src[1000];
    
    printf("Input dest string: ");
    gets(dest);
    printf("Input src string: ");
    gets(src);
    Strcat(dest,src);
    printf("Strcat: ");
    puts(dest);
    putchar('\n');

    return 0;
}

 练习13:

字符串比较strcmp

#include <stdio.h>

int Strcmp(char s1[],char s2[])
{
    int i = 0;
    while (s1[i] == s2[i] && s1[i] != '\0' && s2[i] != '\0')
    {
        ++i;
    }
    return s1[i]-s2[i];
}


int main(void)
{
    char s1[1000];
    char s2[1000];

    printf("Input s1: ");
    gets(s1);
    printf("Input s2: ");
    gets(s2);
    int ret = Strcmp(s1,s2);

    if (ret > 0)
    {
        printf("max = s1,%d\n",ret);
    }else if (ret < 0)
    {
        printf("max = s2,%d\n",ret);
    }else
    {
        printf("s1 = s2");
    }
    


    return 0;
}

相关推荐

  1. 成为嵌入高手126!!

    2024-01-27 10:28:01       49 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-27 10:28:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-27 10:28:01       101 阅读
  3. 在Django里面运行非项目文件

    2024-01-27 10:28:01       82 阅读
  4. Python语言-面向对象

    2024-01-27 10:28:01       91 阅读

热门阅读

  1. 04_前后端交互技术之Ajax异步请求

    2024-01-27 10:28:01       44 阅读
  2. RuoYi微服务部署运行报错

    2024-01-27 10:28:01       66 阅读
  3. Midjourney:AI创意的新航程

    2024-01-27 10:28:01       62 阅读
  4. Redis学习指南(23)-Redis的分布式集群插槽的分配

    2024-01-27 10:28:01       49 阅读
  5. Jupyter快捷键的使用 --(编辑模式、命令模式)

    2024-01-27 10:28:01       53 阅读
  6. python实例100第41例:模仿静态变量的用法

    2024-01-27 10:28:01       48 阅读
  7. C++ 01 基础教程 03 变量和常量

    2024-01-27 10:28:01       50 阅读