当前位置: 首页 > news >正文

【嵌入式学习2】指针数组结构体练习题

1、定义一个函数指针变量ptr,指向无参数、无返回值的函数。然后定义一个函数say_hi,它打印出"Hello, World!",使用函数指针调用该函数。

#include <stdio.h>

// 定义函数指针变量ptr,指向无参数、无返回值的函数
void (*ptr)();

void say_hi()
{
    printf("Hello,World!\n");
}

int main()
{
    // 将函数指针ptr指向函数say_hi
    ptr = say_hi; 

    // 使用函数指针调用函数say_hi
    ptr();

    return 0;
}

2、编写一个函数get_res,它接受两个整型参数和一个函数指针opt作为回调函数。get_res函数将调用回调函数对给定的两个整数进行操作,并返回结果。编写两个回调函数max和min,分别返回2个整数的最大值和最小值。在主函数中调用get_res函数来演示这两个回调函数。

#include <stdio.h>

int get_res(int a,int b,int (*opt)(int,int))
{
    int res = opt(a,b);
    return res;
}

int max(int x,int y)
{
    if(x > y)
    {
        return x;
    }
    else if (x < y)
    {
        return y;
    }
    else
    {
        printf("equal\n");
        return x;// 如果相等,返回任意一个值
    } 
}

int min(int x,int y)
{
    if(x > y)
    {
        return y;
    }
    else if (x < y)
    {
        return x;
    }
    else
    {
        printf("equal\n");
        return x;// 如果相等,返回任意一个值
    } 
}

int main()
{
    int x,y;
    printf("请输入x:");
    scanf("%d",&x);
    printf("请输入y:");
    scanf("%d",&y);

    int res1 = get_res(x,y,max);
    int res2 = get_res(x,y,min);

    printf("max=%d,min=%d",res1,res2);
    return 0;
}

3、编写一个程序,要求用户输入5个整数,将它们存储在一个数组中,然后计算并输出这5个整数的平均值。

#include <stdio.h>

double avg(int arr[],int len)
{
    int sum =0;
    for(int i;i<len;i++)
    {
        sum += arr[i];
    }
    return (double)sum/len;
}

int main()
{
    printf("请输入五个整数:");
    int arr[5];
    for(int i=0;i<5;i++)
    {
        scanf("%d",&arr[i]);
    }
    int len = sizeof(arr)/sizeof(arr[0]);
    double a = avg(arr,len);
    printf("arg=%.2f",a); 
    return 0;
}

如何将上述题目中指定的数组大小修改为用户自定义大小?

#include <stdio.h>
#include <stdlib.h>

double avg(int *arr,int len)
{
    int sum =0;
    for(int i;i<len;i++)
    {
        sum += arr[i];
    }
    return (double)sum/len;
}

int main()
{
    int n;
    printf("请输入数组大小:");
    scanf("%d",&n);

    //动态分配数组
    int *arr = (int *)malloc(n * sizeof(int));
    if(arr == NULL)
    {
        printf("内存分配失败\n");
        return -1;
    }

    printf("请输入%d个整数:",n);
    for(int i=0;i<n;i++)
    {
        scanf("%d",&arr[i]);
    }

    double a = avg(arr,n);
    printf("arg=%.2f",a); 

    free(arr);
    return 0;
}

4、编写一个函数find_index,接受一个整型数组、数组的长度和一个整数作为参数,查找并返回该整数在数组中的索引位置。如果该整数不存在于数组中,则返回-1。在主函数中定义一个包含10个元素的数组,并调用find_index函数查找某个整数的索引位置并输出。

#include <stdio.h>

int find_index(int *arr,int len,int a)
{
    for(int i=0;i<len;i++)
    {
        if(arr[i] == a)
        {
            return i;
        }
    }
    return -1;
}

int main()
{
    int a;
    int arr[10] = {1,5,9,7,5,3,8,4,2,6};
    printf("请输入查找数字:");
    scanf("%d",&a);
    
    int index = find_index(arr,10,a);
    if(index != -1)
    {
        printf("%d index = %d",a,index);
    }
    else
    {
        printf("Not Found\n");
    }

    return 0;
}

5、编写一个程序,接受用户输入的一个字符串,然后统计字符串中数字字符的个数并做正序和倒序输出。

#include <stdio.h>
#include <string.h>
#include <ctype.h>// 用于isdigit函数

int main()
{   
    char input[100];
    int count = 0;// 用于统计数字字符的个数
    char digits[100];// 用于存储字符串中的数字字符

    printf("请输入字符串:");
    fgets(input,sizeof(input),stdin);// 读取用户输入的字符串,包括空格

    //fgets 函数读取用户输入的字符串,包括空格。fgets 会读取最多 sizeof(input) - 1 个字符,并自动添加字符串结束符 \0
    for (int i = 0; i < strlen(input); i++) {
        if (isdigit(input[i])) { // 检查是否是数字字符
            digits[count++] = input[i];
        }
    }

    // 输出统计结果
    printf("数字字符的个数: %d\n", count);

    // 正序输出数字字符
    printf("正序输出数字字符: ");
    for (int i = 0; i < count; i++) {
        printf("%c", digits[i]);
    }
    printf("\n");

    // 倒序输出数字字符
    printf("倒序输出数字字符: ");
    for (int i = count - 1; i >= 0; i--) {
        printf("%c", digits[i]);
    }
    printf("\n");

    return 0;
}

如果输出计算的为字符类型?

#include <stdio.h>
#include <string.h>

int main() {
    char input[100]; // 假设用户输入的字符串长度不超过99个字符
    int count = 0;   // 用于统计字符的个数

    printf("请输入一个字符串: ");
    fgets(input, sizeof(input), stdin); // 读取用户输入的字符串,包括空格

    // 移除换行符(如果存在)
    input[strcspn(input, "\n")] = '\0';

    // 统计字符个数
    count = strlen(input);

    // 输出统计结果
    printf("字符的个数: %d\n", count);

    // 正序输出字符
    printf("正序输出字符: ");
    for (int i = 0; i < count; i++) {
        printf("%c", input[i]);
    }
    printf("\n");

    // 倒序输出字符
    printf("倒序输出字符: ");
    for (int i = count - 1; i >= 0; i--) {
        printf("%c", input[i]);
    }
    printf("\n");

    return 0;
}

6、定义一个结构体Person,包含人的姓名和年龄两个成员变量。编写程序,创建一个Person类型的结构体数组,包含3个人的信息,并输出每个人的姓名和年龄。

#include <stdio.h>

struct Person
{
    char name[20];
    int age;
};

int main()
{
    struct Person arr[3] = {{"alex",20},{"bob",18},{"cindy",25}};
    for(int i=0;i<sizeof(arr)/sizeof(arr[0]);i++)
    {
        printf("第 %d 个人的信息:", i + 1);
        printf("姓名-%s 年龄-%d\n", arr[i].name, arr[i].age);
    }

    return 0;
}

相关文章:

  • 对匿名认证的理解
  • Spring Cloud本地调试禁用Nacos自动注册方案解析
  • Compose 实践与探索十七 —— 多指手势与自定义触摸反馈
  • 个人学习编程(3-29) leetcode刷题
  • 四、Shamir Secret Sharing (Shamir 秘密共享)
  • node-red修改标题
  • Ubuntu下载docker、xshell
  • docker 部署 postgresql 切换用户
  • 【计算机操作系统】第八章、磁盘存储器管理:从外存组织到可靠性技术
  • 从零到一:打造顶尖生成式AI应用的全流程实战
  • Nginx RTMP DASH 模块分析 (ngx_rtmp_dash_module.c)
  • 亚马逊玩具品类技术驱动型选品策略:从趋势洞察到合规基建
  • 2025年高压电工考试真题分享
  • EF Core 乐观并发控制(并发令牌)
  • AWS云安全全面详解:从基础防护到高级威胁应对
  • 新书发布,.NET安全学习与实战指南,从入门到精通
  • HCIP笔记总结
  • uniapp开发实战自定义组件形式实现自定义海报功能
  • DeepSeek(13):Function call 给⼤模型插上翅膀
  • 数据结构——Map和Set
  • 上海这个咖啡文化节首次“走出去”,率本土品牌亮相英国伦敦
  • 人民网三评“网络烂梗”:莫让低级趣味围猎青少年
  • 体坛联播|博洛尼亚时隔51年再夺意杯,皇马逆转马洛卡
  • 微软将在全球裁员6000人,目标之一为减少管理层
  • 西北大学副校长范代娣成陕西首富?系家庭财富,本人已从上市公司退出
  • 美国三大指数全线高开:纳指涨逾4%,大型科技股、中概股大涨