C语言例题

判断数组中最大值

要求:

输入多个整数(一行),输出其中最大的整数。
输入格式:一行多个整数,用空格隔开。
输出格式:一个整数。
输入输出样例
1 2 3 4 5 6
输出
6
说明/提示:最大的数为 6,即输出 6。

1
2
3
4
5
6
7
8
9
10
11
#include<stdio.h>
int main(){
int maxnum = 0;
int num = 0;
while(scanf("%d",&num)!=EOF){//读到结尾停止读取
if(num>maxnum) //判断是否为最大值
maxnum=num;
}
printf("%d\n",maxnum);
return 0;
}

求n的阶乘

要求:

输入:5。
输出:120。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
int b(int a);
int main(){
int n;
scanf("%d",&n);
int temp=b(n);
printf("%d",b(n));
}
int b(int a){
if (a==0){
return 1;
}
return a * b(a - 1);
}

合并为新数

要求:

编写函数fun,其功能是:将a、b中的两个两位正整数合并成一个新的整数。

合并的方式是:将a中的十位和个位数依次放在临时变量c的百位和个位上,b中的十位和个位数依次放在该变量c的十位和千位上。函数fun返回变量c的值。例如,当a=45,b=12,调用该函数后返回值为2415。

效果如下:

输入:45 12
输出:2415

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
int fun(int a, int b)
{ int c; //12
int temp=a%10;
int temp2=a/10;
int temp3=b%10;
int temp4=b/10;
c=(temp2*100)+temp+(temp3*1000)+(temp4*10);
return c;
}
int main()
{
int a,b, c;
scanf("%d%d", &a, &b);
c=fun(a, b);
printf("%ld\n", c);
return 0;
}

判断一个数是否为素数

要求:

编写一个函数prime,判断一个正整数是否为素数,如果是素数,函数返回1,否则返回0。在主函数中输入一个正整数,调用prime判断它是否为素数并输出。

输入:21
输出:no

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>
// 判断一个正整数是否为素数的函数
int prime(int num) {
if (num <= 1) {
return 0; // 1 及以下的数不是素数
}
for (int i = 2; i * i <= num; i++) {
if (num % i == 0) {
return 0; // 如果能被 i 整除,则不是素数
}
}
return 1; // 是素数
}
int main() {
int number;
scanf("%d", &number);
// 调用 prime 函数判断是否为素数
if (prime(number)) {
printf("yes");
} else {
printf("no");
}
return 0;
}

指针法输入12个整数

任务描述
题目描述:用指针法输入12个整数,然后按每行4个数输出

输入

输入包含一行,有12个整数。

输出

按顺序,每行输出4个整数。
样例输入:

1 2 3 4 5 6 7 8 9 10 11 12
样例输出:

1 2 3 4
5 6 7 8
9 10 11 12

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
int main() {
int numbers[12];
int* ptr = numbers; // 定义一个指向numbers数组的指针
// 输入12个整数
printf("请输入12个整数,用空格分隔: ");
for (int i = 0; i < 12; i++) {
scanf("%d", ptr + i); // 使用指针读取输入
}
// 按每行4个数输出
for (int i = 0; i < 12; i += 4) {
for (int j = 0; j < 4; j++) {
printf("%d ", *(ptr + i + j)); // 使用指针输出
}
printf("\n");
}
return 0;
}

对输入的两个整数a,b,用指针变量作为函数参数,交换a和b的值。

输入:
两个整数a b
输出:
输出用函数交换处理后的值a b
样例输入:
1 2
样例输出:
2 1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
// 定义交换函数
void swap(int* x, int* y) {
int temp = *x;
*x = *y;
*y = temp;
}
int main() {
int a, b;
// 输入两个整数
printf("请输入两个整数: ");
scanf("%d %d", &a, &b);

// 调用交换函数
swap(&a, &b);

// 输出交换后的结果
printf("交换后的值: %d %d\n", a, b);
return 0;
}

约瑟夫环问题

xxxxxxxxxx 

html

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>
#include <stdlib.h>
// 定义一个函数来解决约瑟夫环问题
int josephus(int n, int k) {
// 如果只有一个人,那么他就是最后留下的人
if (n == 1) {
return 0;
}
else {
// 递归地解决子问题,然后找到最后留下的人在原序列中的位置
// 注意:由于我们是从0开始编号的,所以最后的结果需要加1以符合题目要求的从1开始编号
return (josephus(n - 1, k) + k) % n;
}
}
int main() {
int n;
// 输入初始人数
printf("请输入初始人数: ");
scanf("%d", &n);
// 解决约瑟夫环问题,并输出结果(注意加1以符合从1开始编号的要求)
int lastPerson = josephus(n, 3) + 1;
printf("最后一人的初始编号是: %d\n", lastPerson);
return 0;
}

字符串比较

用一个函数实现两个字符串的比较,即自己写一个strcmp函数
输入:
输入两字符串
输出:
输出最大的那个字符串
样例输入:
abc
abd
样例输出:
abd

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>
// 自定义的字符串比较函数
int my_strcmp(const char* str1, const char* str2) {
while (*str1 && (*str1 == *str2)) {
str1++;
str2++;
}
return *(unsigned char*)str1 - *(unsigned char*)str2;
}
int main() {
char str1[100], str2[100];
// 输入两个字符串
printf("请输入第一个字符串: ");
scanf("%s", str1);
printf("请输入第二个字符串: ");
scanf("%s", str2);
// 使用自定义的字符串比较函数
if (my_strcmp(str1, str2) > 0) {
printf("输出最大的字符串: %s\n", str1);
}
else {
printf("输出最大的字符串: %s\n", str2);
}
return 0;
}