语法篇 -- C语言 & 指针

# 获取字符串长度

问题:键盘输入一个字符串,编写代码获取字符串的长度并输出,要求使用字符指针实现。

输入描述:键盘输入一个字符串

输出描述:输出字符串长度

示例:输入:hellowoeld        输出:10

#include <stdio.h>

int my_strlen(char *str)
{
    int num = 0;
    char *p = NULL;
    p = str;
    while (*p != '\0')
    {
        p++;
        num++;
    }
    return num;
}

int main(void)
{
    char str[100] = {0};
    scanf("%s", str);
    printf("%d\n", my_strlen(str));
    return 0;
}

# 复制部分字符串

问题:键盘输入一个长度为len(1 <= len < 30)的字符串,再输入一个正整数m(1 <= m < 30),将此字符串从第m个字符开始的剩余全部字符复制成为另一个字符串,并将这个新字符串输出。要求使指针处理字符串。

输入描述:键盘输入一个长度为len(1 <= len < 30)的字符串,再输入一个正整数m(1 <= m < 30)

输出描述:输出复制的新字符串

示例:输入:helloworld 6       输出:world

#include <stdio.h>

int main()
{  
    char str[30] = {0};
    int num = 0;
    scanf("%s%d",str, &num);

    char *p = str + (num - 1);
    printf("%s\n", p);
    return 0;
}

# 编写函数实现两数交换(指针方式)

问题:编写一个函数,实现两个整数的交换,要求采用指针的方式实现。

输入描述:键盘输入2个整数 m 和 n

输出描述:输出交换后 m 和 n 的值,中间使用空格隔开

示例:输入:2 3      输出:3 2

#include <stdio.h>

void swap(int *x, int *y)
{
    int p = 0;
    p = *x;
    *x = *y;
    *y = p;
}

int main()
{  
    int a, b;
    scanf("%d%d",&a, &b);
    swap(&a, &b);
    printf("%d %d\n", a, b);
    return 0;
}

#利用指针遍历数组

问题:键盘随机输入6个整数,将这些数据保存到数组中,利用指针遍历数组中的元素并打印。

输入描述:键盘随机输入6个整数

输出描述:输出数组中所有元素,每个元素中间使用空格隔开

示例:输入:10 20 30 40 50 60      输出:10 20 30 40 50 60

#include <stdio.h>

int main()
{
    int str[6] = {0};
    for (int i = 0; i < 6; i++)
    {
        scanf("%d", (str + i));
    }

    for (int i = 0; i < 6; i++)
    {
        printf("%d ", *(str + i));
    }
    return 0;
}

#新数组求和

问题:想实现一个 int cal (int *array, int n) 的函数求出长度为n的数组的和。

输入描述:第一行输入一个正整数n,表示数组的长度;第二行输入n个正整数,表示数组中每个数字的值

输出描述:实现 int cal (int *array, int n) 求出数组 array 的和

示例:输入:5   2 8 1 9 5      输出:25

#include <stdio.h>
#include <malloc.h>

int cal(int *array, int n)
{
    int i, sum = 0;
    for (i = 0; i < n; i++)
    {
        sum += *(array + i);
    }
    return sum;
}

int main()
{
    int i, num = 0;
    scanf("%d", &num);
    int *str = (int *)malloc(num * sizeof(int));
    for (i = 0; i < num; i++)
    {
        scanf("%d", str + i);
    }

    printf("%d ", cal(str, num));
    free(str);
    return 0;
}

#排序

问题:给一个长度为 n 整数数组排序,即实现一个void sort (int *array, int n) 。

输入描述:第一行输入一个正整数n,表示数组的长度;第二行输入n个正整数,表示数组中每个数字的值

输出描述:输出排序后的数组

示例:输入:5   2 9 8 1 3     输出:1 2 3 8 9

#include <stdio.h>
#include <malloc.h>

void sort(int *array, int n)
{
    int i, j;
    int temp = 0;
    for (i = 0; i < (n - 1); i++)
    {
        for (j = 0; j < (n - i - 1); j++)
        {
            if (*(array + j) > *(array + j + 1))
            {
                temp = *(array + j);
                *(array + j) = *(array + j + 1);
                *(array + j + 1) = temp;
            }
        }
    }
}

int main()
{
    int i, num = 0;
    scanf("%d", &num);
    int *str = (int *)malloc(num * sizeof(int));
    for (i = 0; i < num; i++)
    {
        scanf("%d", str + i);
    }
    sort(str, num);
    for (i = 0; i < num; i++)
    {
        printf("%d ", *(str + i));
    }
    free(str);
    return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值