1
0
mirror of https://github.com/renbaoshuo/202401-programming-assignments.git synced 2024-11-23 09:38:42 +00:00

【实践课外】10.函数1

This commit is contained in:
Baoshuo Ren 2024-11-20 11:07:17 +08:00
parent e2c8cfafdb
commit 299de7a54b
Failed to extract signature
16 changed files with 501 additions and 0 deletions

View File

@ -0,0 +1,5 @@
int sign(int x) {
if (x == 0) return 0;
if (x > 0) return 1;
return -1;
}

View File

@ -0,0 +1,38 @@
# 6-1 符号函数
本题要求实现符号函数sign(x)。
### 函数接口定义:
```c++
int sign( int x );
```
其中`x`是用户传入的整型参数。符号函数的定义为:若`x`大于0`sign(x)` = $$1$$;若`x`等于0`sign(x)` = $$0$$;否则,`sign(x)` = $$-1$$。
### 裁判测试程序样例:
```c++
#include <stdio.h>
int sign( int x );
int main()
{
int x;
scanf("%d", &x);
printf("sign(%d) = %d\n", x, sign(x));
return 0;
}
/* 你的代码将被嵌在这里 */
```
### 输入样例:
```in
10
```
### 输出样例:
```out
sign(10) = 1
```

View File

@ -0,0 +1,9 @@
double fact(int n) {
double res = 1;
for (int i = 1; i <= n; i++) {
res *= i;
}
return res;
}

View File

@ -0,0 +1,38 @@
# 6-2 求排列数
本题要求实现符号函数sign(x)。
### 函数接口定义:
```c++
int sign( int x );
```
其中`x`是用户传入的整型参数。符号函数的定义为:若`x`大于0`sign(x)` = $$1$$;若`x`等于0`sign(x)` = $$0$$;否则,`sign(x)` = $$-1$$。
### 裁判测试程序样例:
```c++
#include <stdio.h>
int sign( int x );
int main()
{
int x;
scanf("%d", &x);
printf("sign(%d) = %d\n", x, sign(x));
return 0;
}
/* 你的代码将被嵌在这里 */
```
### 输入样例:
```in
10
```
### 输出样例:
```out
sign(10) = 1
```

View File

@ -0,0 +1,26 @@
int get_digits(int x) {
int res = 0;
while (x) {
x /= 10;
res++;
}
return res;
}
int get_pow(int x, int n) {
int res = 1;
for (int i = 0; i < n; i++) {
res *= x;
}
return res;
}
int fun(int w) {
int n = get_digits(w);
return w % get_pow(10, n - 1);
}

View File

@ -0,0 +1,38 @@
# 6-3 求一个大于10的n位整数w的后n-1位的数并作为函数值返回。
编写函数fun其功能是:求一个大于10的n位整数w的后n-1位的数并作为函数值返回。例如当w=1234时返回234。
### 函数接口定义:
```c
在这里描述函数接口。例如:
int fun(int w);
```
在这里解释接口参数。例如:其中 `w` 是用户传入的参数。函数须返回 `w` 除最高位外的值。
### 裁判测试程序样例:
```c
在这里给出函数被调用进行测试的例子。例如:
#include <stdio.h>
int fun(int w);
int main()
{ int m;
scanf("%d", &m);
printf("%d\n", fun(m));
return 0;
}
/* 您的程序将被嵌入在这里 */
```
### 输入样例:
```in
1234
```
### 输出样例:
```out
234
```

View File

@ -0,0 +1,11 @@
int fun(int a[3][3]) {
int res = 0;
for (int i = 0; i < 3; i++) {
for (int j = i; j < 3; j++) {
res += a[i][j];
}
}
return res;
}

View File

@ -0,0 +1,38 @@
# 6-4 其右上三角(含主对角线)元素之和。
输入二维数组的所有元素,求二维数组右上三角(包括主对角线)元素之和。
### 函数接口定义:
```c
在这里描述函数接口。例如:
int fun(int a[3][3]);
```
### 裁判测试程序样例:
```c
在这里给出函数被调用进行测试的例子。例如:
#include <stdio.h>
int fun(int a[3][3]);
int main()
{ int i,j,s,x[3][3];;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",&x[i][j]);
s=fun(x);
printf("sum=%d\n",s);
return 0;
}
/* 您的答案将被嵌入在这里 */
```
### 输入样例:
```in
1 2 3 4 5 6 7 8 9
```
### 输出样例:
```out
在这里填写相应的输出
sum=26
```

View File

@ -0,0 +1,14 @@
int fun(char a[], char b[]) {
int len_a = strlen(a);
int len_b = strlen(b);
if (len_a > len_b) return 1;
if (len_a < len_b) return -1;
for (int i = 0; i < len_a; i++) {
if (a[i] > b[i]) return 1;
if (a[i] < b[i]) return -1;
}
return 0;
}

View File

@ -0,0 +1,39 @@
# 6-5 字符串比较
函数fun的功能是比较两个字符串,如果s1=s2则返回值0如果s1>s2则返回值1如果s1<s2则返回-1
### 函数接口定义:
```c++
int fun(char a[],char b[]);
```
其中`a`、`b`是用户传入的参数。 函数比较两个字符串,如果`a`=`b`则返回值0如果`a`>`b`则返回值1如果`a`<`b`,则返回-1。
### 裁判测试程序样例:
```c++
#include "stdio.h"
#include "string.h"
int fun(char a[],char b[]);
int main()
{int t;
char s1[40],s2[40];
gets(s1); gets(s2);
t=fun(s1,s2);
printf("%d\n",t);
return 0;
}
/* 请在这里填写答案 */
```
### 输入样例:
```in
asd
fg
```
### 输出样例:
```out
-1
```

View File

@ -0,0 +1,19 @@
int prime(int p) {
if (p <= 1) return 0;
for (int i = 2; i * i <= p; i++) {
if (p % i == 0) return 0;
}
return 1;
}
int PrimeSum(int m, int n) {
int sum = 0;
for (int i = m; i <= n; i++) {
if (prime(i)) sum += i;
}
return sum;
}

View File

@ -0,0 +1,48 @@
# 6-6 使用函数求素数和
本题要求实现一个判断素数的简单函数、以及利用该函数计算给定区间内素数和的函数。
素数就是只能被1和自身整除的正整数。注意1不是素数2是素数。
### 函数接口定义:
```c++
int prime( int p );
int PrimeSum( int m, int n );
```
其中函数`prime`当用户传入参数`p`为素数时返回1否则返回0函数`PrimeSum`返回区间[`m`, `n`]内所有素数的和。题目保证用户传入的参数`m`$$\le$$`n`。
### 裁判测试程序样例:
```c++
#include <stdio.h>
#include <math.h>
int prime( int p );
int PrimeSum( int m, int n );
int main()
{
int m, n, p;
scanf("%d %d", &m, &n);
printf("Sum of ( ");
for( p=m; p<=n; p++ ) {
if( prime(p) != 0 )
printf("%d ", p);
}
printf(") = %d\n", PrimeSum(m, n));
return 0;
}
/* 你的代码将被嵌在这里 */
```
### 输入样例:
```in
-1 10
```
### 输出样例:
```out
Sum of ( 2 3 5 7 ) = 17
```

View File

@ -0,0 +1,41 @@
int get_digits(int x) {
int res = 0;
while (x) {
x /= 10;
res++;
}
return res;
}
int get_pow(int x, int n) {
int res = 1;
for (int i = 0; i < n; i++) {
res *= x;
}
return res;
}
int narcissistic(int number) {
int sum = 0;
int tmp = number;
int digits = get_digits(number);
while (tmp) {
sum += get_pow(tmp % 10, digits);
tmp /= 10;
}
return sum == number;
}
void PrintN(int m, int n) {
for (int i = m + 1; i <= n - 1; i++) {
if (narcissistic(i)) {
printf("%d\n", i);
}
}
}

View File

@ -0,0 +1,48 @@
# 6-7 使用函数输出水仙花数
水仙花数是指一个$$N$$位正整数($$N\ge 3$$),它的每个位上的数字的$$N$$次幂之和等于它本身。例如:$$153 = 1^3 + 5^3+ 3^3$$。 本题要求编写两个函数,一个判断给定整数是否水仙花数,另一个按从小到大的顺序打印出给定区间$$(m,n)$$内所有的水仙花数。
### 函数接口定义:
```c++
int narcissistic( int number );
void PrintN( int m, int n );
```
函数`narcissistic`判断`number`是否为水仙花数是则返回1否则返回0。
函数`PrintN`则打印开区间(`m`, `n`)内所有的水仙花数每个数字占一行。题目保证100$$\le$$`m`$$\le$$`n`$$\le$$10000。
### 裁判测试程序样例:
```c++
#include <stdio.h>
int narcissistic( int number );
void PrintN( int m, int n );
int main()
{
int m, n;
scanf("%d %d", &m, &n);
if ( narcissistic(m) ) printf("%d is a narcissistic number\n", m);
PrintN(m, n);
if ( narcissistic(n) ) printf("%d is a narcissistic number\n", n);
return 0;
}
/* 你的代码将被嵌在这里 */
```
### 输入样例:
```in
153 400
```
### 输出样例:
```out
153 is a narcissistic number
370
371
```

View File

@ -0,0 +1,54 @@
#include <stdio.h>
int get_digits(int x) {
int res = 0;
while (x) {
x /= 10;
res++;
}
return res;
}
int get_pow(int x, int n) {
int res = 1;
for (int i = 1; i <= n; i++) {
res *= x;
}
return res;
}
int check(int x) {
int pow = x * x;
int digits = get_digits(pow);
for (int i = 0; i <= digits; i++) {
if (x == pow % get_pow(10, i)) {
return 1;
}
}
return 0;
}
int main() {
int a, b, cnt = 0;
scanf("%d%d", &a, &b);
for (int i = a; i <= b; i++) {
if (check(i)) {
printf("%d\n", i);
cnt++;
}
}
if (cnt == 0) {
printf("None\n");
}
return 0;
}

View File

@ -0,0 +1,35 @@
# 7-1 寻找自守数
所谓自守数(也称守形数),是指其平方数的低位部分恰为该数本身的自然数。例如:$$25^2 = 625$$因此25是自守数。0 和 1 也算自守数。)
请编写程序输出指定范围内的所有自守数。若指定范围内不存在自守数则输出None。
#### 输入格式
正整数 $$a$$ 和 $$b$$, 且 $$a \leq b \leq 10000$$
#### 输出格式
若 $$[a, b]$$ 内存在自守数则按由小到大的顺序输出每行输出一个自守数若不存在自守数则输出None。
#### 输入样例1
```in
10 80
```
#### 输出样例1
```out
25
76
```
#### 输入样例2
```in
400 600
```
#### 输出样例2
```out
None
```