C语言编程挑战:100道题目解析

需积分: 10 2 下载量 25 浏览量 更新于2024-09-20 收藏 56KB TXT 举报
"C语言编程题100道" 在C语言编程中,解决实际问题的能力是衡量编程技能的重要标准。以下是从题目中提取的三个不同的编程挑战及其详细解析: 1. **找出所有不重复的数字三元组** 这个问题要求找到一个二维数组(1到1234之间)中所有不重复的数字三元组。程序通过嵌套循环实现,外层循环变量`i`从1到4,内层两个循环变量`j`和`k`同样从1到4。在内部,使用条件判断`if(i!=k&&i!=j&&j!=k)`确保输出的三元组元素互不相同。这个挑战旨在训练你的逻辑思维和控制流程理解。 ```c for(i=1; i<5; i++) { /* 外层循环 */ for(j=1; j<5; j++) { /* 第二层循环 */ for(k=1; k<5; k++) { /* 内层循环 */ if(i!=k && i!=j && j!=k) { /* 验证三元组是否唯一 */ printf("%d,%d,%d\n", i, j, k); /* 输出满足条件的三元组 */ } } } } ``` 2. **根据销售额计算奖金** 这个问题涉及根据输入的销售额计算对应的奖金。奖金制度如下: - 销售额在10万到20万之间时,奖金为销售额的10%加10万的75% - 销售额在20万到40万之间时,奖金为上一阶段奖金加20万的50% - 销售额在40万到60万之间时,奖金为上一阶段奖金加20万的30% - 销售额在60万到100万之间时,奖金为上一阶段奖金加40万的15% - 销售额超过100万时,奖金为上一阶段奖金加超出部分的1% 代码通过一系列条件语句`if...elseif...`来确定正确的奖金计算方式,并使用`printf`输出结果。 ```c main() { long int i; int bonus1, bonus2, bonus4, bonus6, bonus10, bonus; scanf("%ld", &i); bonus1 = 100000 * 0.1; // 基础奖金 bonus2 = bonus1 + 100000 * 0.75; // 10万到20万之间的奖金 bonus4 = bonus2 + 200000 * 0.5; // 20万到40万之间的奖金 bonus6 = bonus4 + 200000 * 0.3; // 40万到60万之间的奖金 bonus10 = bonus6 + 400000 * 0.15; // 60万到100万之间的奖金 if(i <= 100000) bonus = i * 0.1; elseif(i <= 200000) bonus = bonus1 + (i - 100000) * 0.075; elseif(i <= 400000) bonus = bonus2 + (i - 200000) * 0.05; elseif(i <= 600000) bonus = bonus4 + (i - 400000) * 0.03; elseif(i <= 1000000) bonus = bonus6 + (i - 600000) * 0.015; else bonus = bonus10 + (i - 1000000) * 0.01; printf("bonus=%d", bonus); } ``` 3. **找到最接近168的两个整数之和** 此题要求找到1到10000之间的两个整数,使得它们的和最接近168。可以先计算出所有数与168的差值,然后找出绝对值最小的两个数相加。这里可以使用排序算法,例如快速排序或插入排序,来找到最接近的两个数。然而,考虑到数据范围较小,可以直接遍历数组,找到第一个绝对差值小于等于第二个绝对差值的数。 ```c #include <stdio.h> #include <math.h> int main() { int numbers[10000], diff[10000], i, j, min_diff, min_index1, min_index2; for(i = 0; i < 10000; i++) { numbers[i] = i + 1; // 初始化数组为1到10000 diff[i] = abs(numbers[i] - 168); // 计算每个数与168的差值 } min_diff = diff[0]; min_index1 = 0; for(i = 1; i < 10000; i++) { if(diff[i] < min_diff) { min_diff = diff[i]; min_index1 = i; } } min_diff = INT_MAX; // 设置一个较大的初始值 min_index2 = -1; for(i = 0; i < 10000; i++) { if(i != min_index1 && diff[i] < min_diff) { min_diff = diff[i]; min_index2 = i; } } printf("Two numbers closest to 168 are %d and %d, sum is %d\n", numbers[min_index1], numbers[min_index2], numbers[min_index1] + numbers[min_index2]); return 0; } ``` 这些编程题覆盖了C语言的基础知识,如循环、条件判断、数组操作以及简单的数学运算,同时也涉及了逻辑思维和算法设计。通过解决这些问题,程序员可以提高自己的编程能力和问题解决能力。