本题要求实现一个简单函数,找出两个数中的最大值。
函数接口定义:
void findmax( int *px, int *py, int *pmax );
其中px
和py
是用户传入的两个整数的指针。函数findmax
应找出两个指针所指向的整数中的最大值,存放在pmax
指向的位置。
裁判测试程序样例:
#include
void findmax( int *px, int *py, int *pmax );
int main()
{
int max, x, y;
scanf("%d %d", &x, &y);
findmax( &x, &y, &max );
printf("%d\n", max);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
3 5
输出样例:
5
void findmax(int *px, int *py, int *pmax) {
if (*px >= *py) *pmax = *px;
else *pmax = *py;
}
本题要求实现一个计算输入的两数的和与差的简单函数。
函数接口定义:
void sum_diff( float op1, float op2, float *psum, float *pdiff );
其中op1
和op2
是输入的两个实数,*psum
和*pdiff
是计算得出的和与差。
裁判测试程序样例:
#include
void sum_diff( float op1, float op2, float *psum, float *pdiff );
int main()
{
float a, b, sum, diff;
scanf("%f %f", &a, &b);
sum_diff(a, b, &sum, &diff);
printf("The sum is %.2f\nThe diff is %.2f\n", sum, diff);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
4 6
输出样例:
The sum is 10.00
The diff is -2.00
void sum_diff(float op1, float op2, float *psum, float *pdiff) {
*psum = op1 + op2;
*pdiff = op1 - op2;
}
本题要求实现一个拆分实数的整数与小数部分的简单函数。
函数接口定义:
void splitfloat( float x, int *intpart, float *fracpart );
其中x
是被拆分的实数(0≤x
<10000),*intpart
和*fracpart
分别是将实数x
拆分出来的整数部分与小数部分。
裁判测试程序样例:
#include
void splitfloat( float x, int *intpart, float *fracpart );
int main()
{
float x, fracpart;
int intpart;
scanf("%f", &x);
splitfloat(x, &intpart, &fracpart);
printf("The integer part is %d\n", intpart);
printf("The fractional part is %g\n", fracpart);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
2.718
输出样例:
The integer part is 2
The fractional part is 0.718
void splitfloat(float x, int *intpart, float *fracpart) {
int i = 0;
float t = x;
while (x >= 1) {
x--;
i++;
}
*intpart = i;
*fracpart = t - i;
}
本题要求实现一个用选择法对整数数组进行简单排序的函数。
函数接口定义:
void sort( int a[], int n );
其中a
是待排序的数组,n
是数组a
中元素的个数。该函数用选择法将数组a
中的元素按升序排列,结果仍然在数组a
中。
裁判测试程序样例:
#include
#define MAXN 10
void sort( int a[], int n );
int main()
{
int i, n;
int a[MAXN];
scanf("%d", &n);
for( i=0; i<n; i++ )
scanf("%d", &a[i]);
sort(a, n);
printf("After sorted the array is:");
for( i = 0; i < n; i++ )
printf(" %d", a[i]);
printf("\n");
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
4
5 1 7 6
输出样例:
After sorted the array is: 1 5 6 7
void sort(int a[], int n) {
int i, j;
int x;
for (j = 0; j < n; j++) {
for (i = 0; i < n - j - 1; i++) {
if (a[i] > a[i + 1]) {
x = a[i];
a[i] = a[i + 1];
a[i + 1] = x;
}
}
}
}
本题要求实现一个在数组中查找指定元素的简单函数。
函数接口定义:
int search( int list[], int n, int x );
其中list[]
是用户传入的数组;n(≥0)是list[]
中元素的个数;x
是待查找的元素。如果找到,则函数search
返回相应元素的最小下标(下标从0开始),否则返回−1。
裁判测试程序样例:
#include
#define MAXN 10
int search( int list[], int n, int x );
int main()
{
int i, index, n, x;
int a[MAXN];
scanf("%d", &n);
for( i = 0; i < n; i++ )
scanf("%d", &a[i]);
scanf("%d", &x);
index = search( a, n, x );
if( index != -1 )
printf("index = %d\n", index);
else
printf("Not found\n");
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例1:
5
1 2 2 5 4
2
输出样例1:
index = 1
输入样例2:
5
1 2 2 5 4
0
输出样例2:
Not found
int search(int list[], int n, int x) {
int i = 0;
for (i = 0; i < n; i++) {
if (list[i] == x) return i;
}
return -1;
}
本题要求实现一个字符串逆序的简单函数。
函数接口定义:
void f( char *p );
函数f
对p
指向的字符串进行逆序操作。要求函数f
中不能定义任何数组,不能调用任何字符串处理函数。
裁判测试程序样例:
#include
#define MAXS 20
void f( char *p );
void ReadString( char *s ); /* 由裁判实现,略去不表 */
int main()
{
char s[MAXS];
ReadString(s);
f(s);
printf("%s\n", s);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
Hello World!
输出样例:
!dlroW olleH
void f(char *p) {
int n = strlen(p) / 2;
int i, temp;
for (i = 0; i < n; i++) {
temp = p[i];
p[i] = p[strlen(p) - i - 1];
p[strlen(p) - i - 1] = temp;
}
return p;
}
报数游戏是这样的:有n个人围成一圈,按顺序从1到n编好号。从第一个人开始报数,报到m( 本题要求编写函数,给出每个人的退出顺序编号。 函数接口定义: 其中 裁判测试程序样例: 输入样例: 输出样例:void CountOff( int n, int m, int out[] );
n
是初始人数;m
是游戏规定的退出位次(保证为小于n的正整数)。函数CountOff
将每个人的退出顺序编号存在数组out[]
中。因为C语言数组下标是从0开始的,所以第i
个位置上的人是第out[i-1]
个退出的。#include
11 3
4 10 1 7 5 2 11 9 3 6 8
void CountOff(int n, int m, int out[]) {
int i = 0, j = 0, k = 0, cnt = 0, a[MAXN];
for (i = 0; i < n; i++)
a[i] = i + 1;
i = 0;
while (cnt < n) {
if (a[i] != 0)
k++;
if (k == m) {
j++;
out[i] = j;
k = 0;
cnt++;
a[i] = 0;
}
i++;
if (i == n)
i = 0;
}
}