第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======*/