来自网络,联系侵删
438 字
1 分钟
综合练习题
一、改错题
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;} 分享
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时
相关文章 智能推荐












