习题8-3 数组循环右移(20 分)

习题8-3 数组循环右移(20 分)

本题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有$n(\gt 0)$个整数,将每个整数循环向右移$m(\geq 0)$个位置,即将a中的数据由$\left(a_{0} a_{1} \cdots a_{n-1}\right)$变换为$\left(a_{n-m} \cdots a_{n-1} a_{0} a_{1} \cdots a_{n-m-1}\right)$(最后m个数循环移至最前面的m个位置)。

函数接口定义:

1
int ArrayShift( int a[], int n, int m );

其中a[]是用户传入的数组;n是数组的大小;m是右移的位数。函数ArrayShift须将循环右移后的数组仍然存在a[]中。

裁判测试程序样例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>
#define MAXN 10

int ArrayShift( int a[], int n, int m );

int main()
{
int a[MAXN], n, m;
int i;

scanf("%d %d", &n, &m);
for ( i = 0; i < n; i++ ) scanf("%d", &a[i]);

ArrayShift(a, n, m);

for ( i = 0; i < n; i++ ) {
if (i != 0) printf(" ");
printf("%d", a[i]);
}
printf("\n");

return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

1
2
6 2
1 2 3 4 5 6

输出样例:

1
5 6 1 2 3 4

习题8-2 在数组中查找指定元素(15 分)

习题8-2 在数组中查找指定元素(15 分)

本题要求实现一个在数组中查找指定元素的简单函数。

函数接口定义:

1
int search( int list[], int n, int x );

其中list[]是用户传入的数组;n(≥0)是list[]中元素的个数;x是待查找的元素。如果找到

则函数search返回相应元素的最小下标(下标从0开始),否则返回−1。

裁判测试程序样例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
#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:

1
2
3
5
1 2 2 5 4
2

输出样例1:

1
index = 1

输入样例2:

1
2
3
5
1 2 2 5 4
0

输出样例2:

1
Not found

习题8-1 拆分实数的整数与小数部分(15 分)

习题8-1 拆分实数的整数与小数部分(15 分)

本题要求实现一个拆分实数的整数与小数部分的简单函数。

函数接口定义:

1
void splitfloat( float x, int *intpart, float *fracpart );

其中x是被拆分的实数(0≤x<10000),*intpart*fracpart分别是将实数x拆分出来的整数部分与小数部分。

裁判测试程序样例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>

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;
}

/* 你的代码将被嵌在这里 */

输入样例:

1
2.718

输出样例:

1
2
The integer part is 2
The fractional part is 0.718

练习8-8 移动字母(10 分)

练习8-8 移动字母(10 分)

本题要求编写函数,将输入字符串的前3个字符移到最后。

函数接口定义:

void Shift( char s[] );
其中char s[]是用户传入的字符串,题目保证其长度不小于3;函数Shift须将按照要求变换后的字符串仍然存在s[]里。

裁判测试程序样例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <string.h>

#define MAXS 10

void Shift( char s[] );

void GetString( char s[] ); /* 实现细节在此不表 */

int main()
{
char s[MAXS];

GetString(s);
Shift(s);
printf("%s\n", s);

return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

abcdef

输出样例:

defabc

练习8-2 计算两数的和与差(10 分)

练习8-2 计算两数的和与差(10 分)

本题要求实现一个计算输入的两数的和与差的简单函数。

函数接口定义:

void sum_diff( float op1, float op2, float psum, float pdiff );
其中op1和op2是输入的两个实数,psum和pdiff是计算得出的和与差。

裁判测试程序样例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>

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

习题7-8 字符串转换成十进制整数(15 分)

习题7-8 字符串转换成十进制整数(15 分)

输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果在第一个十六进制字符之前存在字符“-”,则代表该数是负数。

输入格式:

输入在一行中给出一个以#结束的非空字符串。

输出格式:

在一行中输出转换后的十进制数。题目保证输出在长整型范围内。

输入样例:

1
+-P-xf4+-1!#

输出样例:

1
-3905

习题7-7 字符串替换(15 分)

习题7-7 字符串替换(15 分)

本题要求编写程序,将给定字符串中的大写英文字母按以下对应规则替换:

原字母 对应字母
A Z
B Y
C X
D W
X C
Y B
Z A

输入格式:

输入在一行中给出一个不超过80个字符、并以回车结束的字符串。

输出格式:

输出在一行中给出替换完成后的字符串。

输入样例:

1
Only the 11 CAPItaL LeTtERS are replaced.

输出样例:

1
Lnly the 11 XZKRtaO OeGtVIH are replaced.

习题7-6 统计大写辅音字母(15 分)

习题7-6 统计大写辅音字母(15 分)

英文辅音字母是除AEIOU以外的字母。本题要求编写程序,统计给定字符串中大写辅音字母的个数。

输入格式:

输入在一行中给出一个不超过80个字符、并以回车结束的字符串。

输出格式:

输出在一行中给出字符串中大写辅音字母的个数。

输入样例:

1
HELLO World!

输出样例:

1
4

习题7-5 找鞍点(20 分)

习题7-5 找鞍点(20 分)

一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。

本题要求编写程序,求一个给定的n阶方阵的鞍点。

输入格式:

输入第一行给出一个正整数$n(1\leq n\leq 6)$。随后n行,每行给出n个整数,其间以空格分隔。

输出格式:

输出在一行中按照“行下标 列下标”(下标从0开始)的格式输出鞍点的位置。如果鞍点不存在,则输出“NONE”。题目保证给出的矩阵至多存在一个鞍点。

输入样例1:

1
2
3
4
5
4
1 7 4 1
4 8 3 6
1 6 1 2
0 7 8 9

输出样例1:

1
2 1

输入样例2:

1
2
3
2
1 7
4 1

输出样例2:

1
NONE

习题7-4 求矩阵各行元素之和(15 分)

习题7-4 求矩阵各行元素之和(15 分)

本题要求编写程序,求一个给定的m×n矩阵各行元素之和。

输入格式:

输入第一行给出两个正整数m和$n(1\leq m,n\leq 6)$。随后m行,每行给出n个整数,其间

以空格分隔。

输出格式:

每行输出对应矩阵行元素之和。

输入样例:

1
2
3
4
3 2
6 3
1 -8
3 12

输出样例:

1
2
3
9
-7
15
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×