基于指针的程序设计(1)

第1关:交换-升级版

任务要求 设计程序,利用swap函数实现使用指针变量作函数参数,完成两个整数的交换。函数原型:void swap(int *a1,int *a2)。

输入要求 输入两个整数a,b(1<=a,b<=1e6)

输出要求 输出交换后的结果,中间用空格隔开。

//根据题目要求完成程序设计
#include <stdio.h>

/*
    函数名称:swap
    函数功能:实现交换两个整数
    函数参数:两个指针变量
*/

//设计函数swap
/*=====Begin=====*/
void swap(int* p1,int *p2)
{
    *p1=*p1^*p2;
    *p2=*p1^*p2;
    *p1=*p1^*p2;
}





/*======End======*/


/*
    函数名称:solve
    函数功能:程序入口,实现相应功能
    函数返回值:void
*/

//设计函数solve
/*=====Begin=====*/
int solve()
{
    int n = 0;
    int m = 0;
    scanf("%d%d",&n,&m);
    swap(&n,&m);
    printf("%d %d",n,m);
}





/*======End======*/

第2关:最小值

任务要求 设计程序,利用findmin函数实现输出n个整数中的最小值。 函数原型:int findmin(int *p,int len)

输入要求 第一行输入一个正整数n(1<=n<=1e6),表示数组的长度。 第二行输入n个正整数(1<=array[i]<=1e3),表示每一个数组元素的值。

输出要求 输出数组元素中的最小值和第一次出现的下标(注意:数组下标从0开始)。

//根据题目要求完成程序设计
#include <stdio.h>

/*
    函数名称:findmin
    函数功能:获取最小值
    函数参数:指向数组的指针以及数组长度
*/
//设计函数
/*=====Begin=====*/
int findmin(int* arr,int m)
{
    int min = *arr;
    int min_i = 0;
    int i = 0;
    for(i = 0; i<m; i++)
    {
        if(*(arr+i)<min)
        {
            min = *(arr+i);
            min_i = i;
        }
    }
    return min_i;
}




/*======End======*/


/*
    函数名称:solve
    函数功能:程序入口,实现相应功能
    函数返回值:void
*/

//设计函数solve
/*=====Begin=====*/
void solve()
{
    int arr[1000000]={0};
    int n = 0;
    scanf("%d",&n);
    for(int i = 0; i<n; i++)
    {
        scanf("%d",arr+i);
    }
    int ret = findmin(arr,n);
    printf("%d %d",arr[ret],ret);
}
/*======End======*/

第3关:反序串

任务要求 设计程序,利用函数reverseStr实现将输入的字符串反序存放。 例如:输入字符串"abcdefg",则应输出"gfedcba"。 函数原型为:void reverseStr(char *str);

输入要求 输入字符串str(1<=len(str)<=1e6)。

输出要求 输出反序后的字符串。

//根据题目要求完成程序设计
#include <stdio.h>
#include<string.h>
/*
    函数名称:reverseStr
    函数功能:实现反序字符串
    函数参数:字符串
*/

//设计函数reverseStr
/*=====Begin=====*/
void reverseStr(char *arr)
{
    char* left = arr;
    char* right = arr+strlen(arr)-1;
    while(left<right)
    {
        *left = *right^*left;
        *right = *right^*left;
        *left = *right^*left;
        left++;
        right--;
    }
}



/*======End======*/


/*
    函数名称:solve
    函数功能:程序入口,实现相应功能
    函数返回值:void
*/

//设计函数solve
/*=====Begin=====*/
int solve()
{
    char arr[1000000]={0};
    gets(arr);
    reverseStr(arr);
    puts(arr);
}





/*======End======*/

 

第4关:过滤字符串

任务要求 设计程序,实现过滤字符串,只保留串中的字母字符,并统计新生成串中包含的字母个数。 函数原型:int countCharacter(char *ptr)

输入要求 输入一个字符串str(1<=len(str)<=1e6)

输出要求 输出按题目要求过滤后的字符串以及长度。

//根据题目要求完成程序设计
#include <stdio.h>
#include<ctype.h>
/*
    函数名称:countCharacter
    函数功能:实现统计字母数量
    函数参数:字符串
*/
#include<string.h>
//设计函数countCharacter
/*=====Begin=====*/
void countCharacter(char* arr,char* str)
{
    int i = 0;
    int j = 0;
    while(*(arr+i))
    {
        if(isupper(*(arr+i))||islower(*(arr+i)))
        {
            *(str+j) = *(arr+i);
            j++;
        }
        i++;
    }
}






/*======End======*/


/*
    函数名称:solve
    函数功能:程序入口,实现相应功能
    函数返回值:void
*/

//设计函数solve
/*=====Begin=====*/
int solve()
{
    char arr[1000000]={0};
    char str[1000000]={0};
    gets(arr);
    countCharacter(arr,str);
    printf("%s %d",str,strlen(str));
}






/*======End======*/

 

第5关:平方根之和

任务要求 设计程序,利用calAvg函数,计算并输出给定数组中每相邻两个元素之平均值的平方根之和。 函数原型:double calAvg (int *p ,int len)

输入要求 第一行输入一个正整数n(1<=n<=1e2),表示数组的长度。 第二行输入n个正整数(1<=array[i]<=1e3),表示每一个数组元素的值。

输出要求 输出数组中每相邻两个元素之平均值的平方根之和,结果保留两位小数。

//根据题目要求完成程序设计
#include <stdio.h>
#include<math.h>
/*
    函数名称:calavg
    函数功能:计算给定数组每相邻两个元素之平均值的平方根之和
    函数参数:指向数组的指针及数组长度
*/

//设计函数calavg
/*=====Begin=====*/
double calavg(int* arr,int m)
{
    double sum = 0;
    for(int i=0;i<m-1;i++)
    {
        sum+=sqrt((*(arr+i)+*(arr+i+1))*1.0/2);
    }
    return sum;
}



/*======End======*/


/*
    函数名称:solve
    函数功能:程序入口,实现相应功能
    函数返回值:void
*/

//设计函数solve
/*=====Begin=====*/
void solve()
{
    int n = 0;
    int arr[100] = {0};
    scanf("%d",&n);
    for(int i = 0; i<n; i++)
    {
        scanf("%d",&arr[i]);
    }
    printf("%.2f",calavg(arr,n));

}





/*======End======*/

 

 

  • 14
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值