mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5mobile wallpaper 6mobile wallpaper 7
438 字
1 分钟
综合练习题
2026-07-12

一、改错题#

1.1 提取奇数位数字#

题目:将长整型数中各位上为奇数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。

例如:当s中的数为87653142时,t中的数为7531。

#include <stdio.h>
void fun(long s, long* t)
{
int d;
long sl = 1;
*t = 0;
while (s > 0)
{
d = s % 10;
if (d % 2 == 1)
{
*t = d * sl + *t;
sl *= 10;
}
s /= 10;
}
}
main()
{
long s, t;
printf("\nPlease enter s:");
scanf("%ld", &s);
fun(s, &t);
printf("The result is: %ld\n", t);
}

1.2 统计0的个数#

#include <stdio.h>
int fun(int a[], int n) {
int count = 0;
for(int i = 0; i < n; i++) {
if(a[i] == 0) {
count++;
}
}
return count;
}
int main() {
int a[10] = {1, 0, 2, 0, 3, 0, 4, 0, 5, 0};
printf("0的个数:%d\n", fun(a, 10));
return 0;
}

1.3 调整ASCII最大字符放首位#

#include <stdio.h>
void fun(char *str) {
int i, max_index = 0;
char temp;
for(i = 1; str[i] != '\0'; i++) {
if(str[i] > str[max_index]) {
max_index = i;
}
}
temp = str[0];
str[0] = str[max_index];
str[max_index] = temp;
}
int main() {
char str[100] = "abcde";
fun(str);
printf("%s\n", str);
return 0;
}

二、填空题#

2.1 统计单词个数#

题目:计算出形参s所指字符串中包含的单词个数,作为函数值返回。为便于统计,规定各单词之间用空格隔开。

#include <stdio.h>
int fun(char* s)
{
int n = 0, flag = 0;
while (*s != '\0')
{
if (*s != ' ' && flag == 0)
{
n++;
flag = 1;
}
if (*s == ' ')
flag = 0;
s++;
}
return n;
}
main()
{
char str[81];
int n;
printf("\nEnter a line text:\n");
gets(str);
n = fun(str);
printf("\nThere are %d words in this text.\n\n", n);
}

2.2 字符串中数字累加和#

#include <stdio.h>
int fun(char *str) {
int sum = 0;
while(*str != '\0') {
if(*str >= '0' && *str <= '9') {
sum += *str - '0';
}
str++;
}
return sum;
}
int main() {
char str[100] = "a1b2c3";
printf("数字之和:%d\n", fun(str));
return 0;
}

2.3 插入字符#

#include <stdio.h>
#include <string.h>
void fun(char *str, char ch) {
int i, len = strlen(str);
for(i = len; i >= 0; i--) {
str[i+1] = str[i];
}
str[0] = ch;
}
int main() {
char str[100] = "hello";
fun(str, 'A');
printf("%s\n", str);
return 0;
}

三、程序设计题#

3.1 凤凰鱼繁殖问题#

题目:每年年初,每条成年凤凰鱼都会生下一只新的小鱼。新出生的小鱼在第3年开始成为成年鱼,并开始繁殖。凤凰鱼的寿命为7年,即第7年年底时会自然死亡。请编写一个程序,计算在给定的年份后,巢湖里凤凰鱼的总数量。

#include <stdio.h>
int main()
{
int n, m;
scanf("%d", &n);
scanf("%d", &m);
long long age[7] = { 0 };
age[0] = m;
for (int year = 1; year < n; year++) {
long long new_fish = 0;
for (int i = 2; i <= 6; i++) {
new_fish += age[i];
}
for (int i = 5; i >= 0; i--) {
age[i + 1] = age[i];
}
age[0] = new_fish;
}
long long total = 0;
for (int i = 0; i <= 6; i++) {
total += age[i];
}
printf("%lld\n", total);
return 0;
}

3.2 鼠标垫上的茶杯#

题目:将n张鼠标垫依次铺好,每个鼠标垫按照顺序依次叠加起来,铺完n张鼠标垫之后,把茶杯放在了坐标(x, y)上,请问这杯茶现在在哪一张鼠标垫上?

#include <stdio.h>
int main(void) {
int a[30][4];
int n;
int m[2];
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
scanf("%d %d %d %d", &a[i][0], &a[i][1], &a[i][2], &a[i][3]);
}
scanf("%d %d", &m[0], &m[1]);
for (int i = n - 1; i >= 0; i--)
{
if (((a[i][2] + a[i][0]) >= m[0] && (a[i][0]) <= m[0]) && ((a[i][3] + a[i][1]) >= m[1] && (a[i][1]) <= m[1]))
{
printf("%d", i + 1);
return 0;
}
}
printf("-1");
return 0;
}

3.3 四则运算2025(部分背包问题)#

题目:部分背包问题:给定N个物品和容量为W的背包,每个物品有重量和价值,可以部分装入背包,求能装入背包的最大价值。

#include <stdio.h>
int main() {
int N, W;
scanf("%d %d", &N, &W);
double w[1000][3];
for (int i = 0; i < N; i++)
{
scanf("%lf %lf", &w[i][0], &w[i][1]);
w[i][2] = w[i][1] / w[i][0];
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < N - i; j++) {
if (w[j][2] < w[j + 1][2]) {
double temp[3];
for (int k = 0; k < 3; k++) {
temp[k] = w[j][k];
}
for (int k = 0; k < 3; k++) {
w[j][k] = w[j + 1][k];
}
for (int k = 0; k < 3; k++) {
w[j + 1][k] = temp[k];
}
}
}
}
double sum = 0;
for (int i = 0; i < N; i++) {
if (W >= w[i][0]) {
W -= w[i][0];
sum += w[i][1];
}
else {
sum += w[i][2] * W;
break;
}
}
printf("%.0f\n", sum);
return 0;
}
分享

如果这篇文章对你有帮助,欢迎分享给更多人!

综合练习题
https://blog.radarweb.top/posts/c/综合练习题/
作者
Sherry
发布于
2026-07-12
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

目录