已完结:C语言经典100题目(满足所有C程序基础)
C 练习实例1 - 组无重复数字的数
题目:有 1、2、3、4 四个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
程序分析:可填在百位、十位、个位的数字都是 1、2、3、4,组成所有的排列后再去掉不满足条件的排列。
#include #define MAX 5 int main() { int i,j,k; int count = 0; for (int i = 1; iC 练习实例2 - 阶段利润提成
题目:企业发放的奖金根据利润提成。
- 利润(I)低于或等于10万元时,奖金可提10%;
- 利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;
- 20万到40万之间时,高于20万元的部分,可提成5%;
- 40万到60万之间时高于40万元的部分,可提成3%;
- 60万到100万之间时,高于60万元的部分,可提成1.5%;
- 高于100万元时,超过100万元的部分按1%提成。
从键盘输入当月利润I,求应发放奖金总数?
程序分析:定义时需把奖金定义成双精度浮点(double)型。
#include #define LAC 100000 //将10w定义为一个常用数 int main() { double i,bonus,bonus_0_10,bonus_10_20,bonus_20_40,bonus_40_60,bonus_60_100,bonus_100_; //先计算好各自区间的奖金,避免重复输入公式 bonus_0_10 = LAC * 0.1; bonus_10_20 = LAC * 0.075; bonus_20_40 = LAC * 2 * 0.05; bonus_40_60 = LAC * 2 * 0.03; bonus_60_100 = LAC * 4 * 0.015; printf("从键盘输入当月利润I,求应发放奖金总数:\n"); scanf("%lf",&i); if(iz){ swap(&x,&z); } else if(y>z){ swap(&y,&z); } printf("%d %d %d",x,y,z); }
C 练习实例6 - 输出字母C图案
题目:用*号输出字母C的图案。
程序分析:可先用'*'号在纸上写出字母C,再分行输出。
#include int main() { printf("用 * 号输出字母 C!\n"); printf(" ****\n"); printf(" *\n"); printf("*\n"); printf(" *\n"); printf(" ****\n"); }
C 练习实例7 - 特殊图案
题目:输出特殊图案,请在c环境中运行,看一看,Very Beautiful!
程序分析:字符共有256个。不同字符,图形不一样。
VC6.0下出现中文乱码(原因+解决方法):
176的16进制是B0,219的16进制是DB,0xB0DB是"佰"字的内码,所以输出的就是"佰"了。
主要原因是文件信息的代码页不同,我们所使用的操作系统中文状态下的代码页,要显示扩展的ASCII码需要在437 OEM-美国这个下面显示,这样就可以显示出你所希望的。具体修改控制台的默认代码页步骤如下:
- 1.点击运行界面左上角标题栏图标【c:\】,选择默认值一项
- 2.修改默认代码页,936(ANSI/OEM-简体中文GBK)为437 OEM-美国
- 3、关闭后重新运行一下即可
#include int main() { char a=176,b=219; printf("%c%c%c%c%c\n",b,a,a,a,b); printf("%c%c%c%c%c\n",a,b,a,b,a); printf("%c%c%c%c%c\n",a,a,b,a,a); printf("%c%c%c%c%c\n",a,b,a,b,a); printf("%c%c%c%c%c\n",b,a,a,a,b); return 0; }
C 练习实例8 - 9*9 乘法表
题目:输出 9*9 口诀。
程序分析:分行与列考虑,共 9 行 9 列,i 控制行,j 控制列。
#include #define MAX 9 int main() { int i,j,result; for (i = 1; i next = createNode(3); head->next->next->next = createNode(4); printf("Original list:\n"); printList(head); printf("Reversed list:\n"); reversePrint(head); // 释放链表节点 Node* temp; while (head != NULL) { temp = head; head = head->next; free(temp); } return 0; }
C 练习实例74 - 链接两个链表
题目:连接两个链表。
程序分析:无。
#include #include // 定义链表节点 typedef struct Node { int data; struct Node* next; } Node; // 连接两个链表 void concatenateLists(Node* list1, Node* list2) { if (list1 == NULL) { list1 = list2; return; } Node* temp = list1; while (temp->next != NULL) { temp = temp->next; } temp->next = list2; } // 辅助函数:打印链表 void printList(Node* head) { while (head != NULL) { printf("%d -> ", head->data); head = head->next; } printf("NULL\n"); } // 主函数示例 int main() { // 示例代码省略链表创建部分 // 创建和连接两个链表后,可以用以下代码进行测试: Node* list1 = /* 创建第一个链表 */; Node* list2 = /* 创建第二个链表 */; concatenateLists(list1, list2); printList(list1); // 打印连接后的链表 return 0; }
C 练习实例75 - 整数反转输出
题目:输入一个整数,并将其反转后输出。
程序分析:无。
#include int main() { int num, reversed = 0, original; // 读取整数 printf("请输入一个整数: "); scanf("%d", &num); original = num; // 保存原始值用于输出 // 处理负数情况 int is_negative = (num
C 练习实例76 - 1/2+1/4+...+1/n
题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n(利用指针函数)。
程序分析:无。
#include // 函数:计算偶数和 // 输入:n - 偶数 // 输出:result - 指向结果的指针 void sum_even(int n, double *result) { *result = 0.0; // 初始化结果为0 // 遍历2到n之间的偶数 for (int i = 2; i 0) { strcpy(temp, strings[i]); strcpy(strings[i], strings[j]); strcpy(strings[j], temp); } } } printf("排序后的字符串:\n"); for (i = 0; i
C 练习实例80 - 猴子桃子
题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个,这只 猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了 一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的, 问海滩上原来最少有多少个桃子?
程序分析:
- 从1开始循环尝试不同的桃子数量。
- 使用一个循环模拟五只猴子分桃子的过程。
- 在每轮中检查当前桃子数量是否能够满足条件(即能被5分且多一个)。
- 如果最后桃子数为0且所有条件满足,打印出结果并退出循环。
#include int main() { int peaches = 1; // 从1开始尝试 while (1) { int temp = peaches; // 临时变量保存当前桃子数 int valid = 1; // 标记是否有效 for (int i = 0; i
C 练习实例81 - 求??数
题目:809*??=800*??+9*?? 其中??代表的两位数, 809*??为四位数,8*??的结果为两位数,9*??的结果为3位数。求??代表的两位数,及809*??后的结果。
程序分析:
- 循环范围:程序循环遍历所有两位数(10到99)。
- 计算结果:分别计算 809×??809 \times ??809×??、8×??8 \times ??8×?? 和 9×??9 \times ??9×??。
- 条件检查:检查结果是否符合题目中的条件。
- 输出结果:如果条件满足,打印出 ?????? 的值以及 809×??809 \times ??809×?? 的结果。
#include int main() { for (int num = 10; num = 1000 && result1 = 10 && result2 = 100 && result3
C 练习实例82 - 八转十进制
题目:八进制转换为十进制
程序分析:
-
- 使用while循环迭代处理每一位八进制数。
- 通过取余操作获取最后一位(octal % 10)。
- 将该位乘以当前的基数(初始为1,之后每次乘以8)。
- 更新八进制数,去掉最后一位。
- 输出结果:最后输出转换后的十进制数。
假设用户输入的八进制数是 17,程序将输出其对应的十进制数 15。
#include #include int main() { long octal, decimal = 0, remainder, base = 1; printf("请输入一个八进制数: "); scanf("%lo", &octal); // 读取八进制数,使用%lo格式符 while (octal != 0) { remainder = octal % 10; // 获取八进制的最后一位 decimal = decimal + remainder * base; // 计算十进制值 octal = octal / 10; // 去掉八进制的最后一位 base = base * 8; // 八进制的基数为8 } printf("转换后的十进制数是: %ld\n", decimal); return 0; }
C 练习实例83 - 组成的奇数个数
题目:求0—7所能组成的奇数个数。
程序分析:
- 首先定义一个变量 count 来统计奇数的总数。
- 对于每种位数的情况,依次计算所有可能的组合。
- 对于每一位数的组合,最后一位必须是奇数(4种选择),而其他位数可以从可用的数字中选择(首位不能为0)。
- 最后输出结果。
#include int main() { int count = 0; // 1位数 count += 4; // 1, 3, 5, 7 // 2位数 count += 4 * 7; // (1, 3, 5, 7) * (0, 2, 4, 6) // 3位数 count += 4 * 8 * 7; // (1, 3, 5, 7) * (0-7) * (0, 2, 4, 6) // 4位数 count += 4 * 8 * 8 * 7; // (1, 3, 5, 7) * (0-7) * (0-7) * (0, 2, 4, 6) // 5位数 count += 4 * 8 * 8 * 8 * 7; // (1, 3, 5, 7) * (0-7) * (0-7) * (0-7) * (0, 2, 4, 6) // 6位数 count += 4 * 8 * 8 * 8 * 8 * 7; // (1, 3, 5, 7) * (0-7) * (0-7) * (0-7) * (0-7) * (0, 2, 4, 6) // 7位数 count += 4 * 8 * 8 * 8 * 8 * 8 * 7; // (1, 3, 5, 7) * (0-7) * (0-7) * (0-7) * (0-7) * (0-7) * (0, 2, 4, 6) // 8位数 count += 4 * 8 * 8 * 8 * 8 * 8 * 8 * 7; // (1, 3, 5, 7) * (0-7) * (0-7) * (0-7) * (0-7) * (0-7) * (0-7) * (0, 2, 4, 6) printf("0-7所能组成的奇数个数为: %d\n", count); return 0; }
C 练习实例84 - 哥德巴赫猜想
题目:一个偶数总能表示为两个素数之和。
程序分析:
- is_prime 函数:这个函数用于检查一个数字是否为素数。它从 2 开始检查,直到该数字的平方根。
- 主函数:
- 提示用户输入一个偶数,并检查输入的有效性。
- 如果输入的偶数有效,程序将遍历从 2 到该偶数一半的所有数字。
- 对于每个数字,检查其与 n - i 是否均为素数,如果是,则输出这个组合。
#include #include #define MAX 1000 // 可以根据需要调整最大范围 // 检查是否为素数 bool is_prime(int num) { if (num
-