在计算机编程的世界中,C语言一直是一门备受推崇的语言。它的简洁性、高效性以及广泛应用使得学习C语言成为每一位程序员的必由之路。然而,掌握这门语言并不是一蹴而就的事情,它需要不断的练习和实践。为了帮助各位编程爱好者更好地理解和掌握C语言的精髓,我整理了一份“必练的100道C语言程序设计练习题(上)”。这不仅是一次对基础知识的回顾,更是一个深入学习的契机。通过挑战这些题目,你将更好地锻炼编程思维,提高问题解决能力,为未来的编程之旅打下坚实的基础。
#include <stdio.h>
int main() {
int age;
printf("请输入你的年龄:");
scanf("%d", &age);
if (age < 0) {
printf("你是穿越者!\n");
} else if (age < 18) {
printf("你还未成年,好好学习!\n");
} else {
printf("你已经成年听话了吗?\n");
}
return 0;
}
#include<stdio.h>
int main() {
double a, b, c, temp;
printf("Please input three numbers: \n");
scanf("%lf %lf %lf", &a, &b, &c);
if (a > b) {
temp = a;
a = b;
b = temp;
}
if (a > c) {
temp = a;
a = c;
c = temp;
}
if (b > c) {
temp = b;
b = c;
c = temp;
}
printf("The numbers in ascending order are: %lf %lf %lf\n", a, b, c);
}
#include<stdio.h>
int main()
{
int n,i;
printf("Please input a number: \n");
scanf("%d",&n);
for(i=2;i<=n/2;i++)
{
if(n%i==0)
{
printf("%d is not a prime number.\n",n);
return 0;
}
}
printf("%d is a prime number.\n",n);
}
#include <stdio.h>
int main()
{
int a, b, c, d, e, sum, avg;
printf("请输入5个整数:\n");
scanf("%d%d%d%d%d", &a, &b, &c, &d, &e);
sum = a + b + c + d + e;
avg = sum / 5;
printf("这5个数的和为%d,平均数为%d\n", sum, avg);
return 0;
}
#include <stdio.h>
int main()
{
int a, b, c, n;
printf("请输入一个三位数:\n");
scanf("%d", &n);
a = n / 100;
b = (n / 10) % 10;
c = n % 10;
printf("这个数的百位数为%d,十位数为%d,个位数为%d\n", a, b, c);
return 0;
}
#include <stdio.h>
int main()
{
char ch;
printf("请输入一个字符:\n");
scanf("%c", &ch);
if (ch >= 'A' && ch <= 'Z') {
printf("你输入的是大写字母。\n");
} else if (ch >= 'a' && ch <= 'z') {
printf("你输入的是小写字母。\n");
} else if (ch >= '0' && ch <= '9') {
printf("你输入的是数字。\n");
} else {
printf("你输入的是其他字符。\n");
}
return 0;
}
#include <stdio.h>
int main()
{
int n, i, sum=0;
printf("请输入一个正整数:\n");
scanf("%d", &n);
for (i=1; i<=n; i++) {
if (i%2 == 0) {
sum += i;
}
}
printf("1到%d之间所有偶数的和为%d\n", n, sum);
return 0;
}
#include <stdio.h>
int main()
{
int a, b, temp;
printf("请输入两个整数:\n");
scanf("%d%d", &a, &b);
printf("交换前a=%d,b=%d\n", a, b);
temp = a;
a = b;
b = temp;
printf("交换后a=%d,b=%d\n", a, b);
return 0;
}
#include <stdio.h>
int main()
{
int n, i, result=1;
printf("请输入一个整数:\n");
scanf("%d", &n);
for (i=1; i<=n; i++) {
result *= i;
}
printf("%d的阶乘为%d\n", n, result);
return 0;
}
#include <stdio.h>
#include <ctype.h>
int main()
{
char str[100];
int i;
printf("请输入一个字符串:\n");
scanf("%s", str);
for (i=0; str[i]!='\0'; i++) {
if (islower(str[i])) {
str[i] = toupper(str[i]);
}
}
printf("转换后的字符串为:%s\n", str);
return 0;
}
#include <stdio.h>
#include <math.h>
int main()
{
int n, a, b, c;
printf("请输入一个三位数:\n");
scanf("%d", &n);
a = n / 100;
b = (n / 10) % 10;
c = n % 10;
if (n == pow(a, 3) + pow(b, 3) + pow(c, 3)) {
printf("%d是水仙花数\n", n);
} else {
printf("%d不是水仙花数\n", n);
}
return 0;
}
#include <stdio.h>
int main()
{
int n, sum=0, i;
printf("请输入一个正整数:\n");
scanf("%d", &n);
for (i=1; i<=n; i++) {
sum += i;
}
printf("前%d个自然数的和为%d\n", n, sum);
return 0;
}
#include <stdio.h>
int main()
{
int n, i;
printf("请输入一个正整数:\n");
scanf("%d", &n);
printf("%d的因数有:", n);
for (i=1; i<=n; i++) {
if (n%i == 0) {
printf("%d ", i);
}
}
printf("\n");
return 0;
}
#include <stdio.h>
#include <string.h>
int main()
{
char str[100];
int i, flag=0;
printf("请输入一个字符串:\n");
scanf("%s", str);
for (i=0; i<strlen(str)/2; i++) {
if (str[i] != str[strlen(str)-i-1]) {
flag = 1;
break;
}
}
if (flag == 1) {
printf("%s不是回文字符串\n", str);
} else {
printf("%s是回文字符串\n", str);
}
return 0;
}
#include <stdio.h>
#include <string.h>
int main()
{
char str[100];
int count=0, flag=0, i;
printf("请输入一个字符串:\n");
scanf("%[^\n]", str);
for (i=0; i<strlen(str); i++) {
if (str[i] != ' ' && flag == 0) {
count++;
flag = 1;
} else if (str[i] == ' ') {
flag = 0;
}
}
printf("该字符串中共有%d个单词\n", count);
return 0;
}
#include <stdio.h>
#include <math.h>
int main()
{
int n, i, j, flag=0;
printf("请输入一个正整数:\n");
scanf("%d", &n);
printf("1到%d之间的所有素数为:", n);
for (i=2; i<=n; i++) {
flag = 0;
for (j=2; j<=sqrt(i); j++) {
if (i % j == 0) {
flag = 1;
break;
}
}
if (flag == 0) {
printf("%d ", i);
}
}
printf("\n");
return 0;
}
#include <stdio.h>
#include <ctype.h>
int main()
{
char str[100];
int i;
printf("请输入一个字符串:\n");
scanf("%s", str);
for (i=0; str[i]!='\0'; i++) {
if (isupper(str[i])) {
str[i] = tolower(str[i]);
}
}
printf("转换后的字符串为:%s\n", str);
return 0;
}
#include <stdio.h>
int main()
{
int n, sum=0, i;
printf("请输入一个正整数:\n");
scanf("%d", &n);
for (i=1; i<=n; i++) {
sum += 2*i-1;
}
printf("前%d个奇数的和为%d\n", n, sum);
return 0;
}
#include <stdio.h>
int main()
{
int a, b, i, gcd, lcm;
printf("请输入两个整数:\n");
scanf("%d%d", &a, &b);
for (i=a<b?a:b; i>=1; i--) {
if (a%i == 0 && b%i == 0) {
gcd = i;
break;
}
}
lcm = a*b/gcd;
printf("%d和%d的最大公约数为%d,最小公倍数为%d\n", a, b, gcd, lcm);
return 0;
}
#include <stdio.h>
#include <string.h>
int main()
{
char str[100];
int i, j=0;
printf("请输入一个字符串:\n");
scanf("%[^\n]", str);
for (i=0; i<strlen(str); i++) {
if (str[i] != ' ' && str[i] != '.') {
str[j] = str[i];
j++;
}
}
str[j] = '\0';
printf("处理后的字符串为:%s\n", str);
return 0;
}
#include <stdio.h>
int main()
{
int n, sum=0, i;
printf("请输入一个正整数:\n");
scanf("%d", &n);
for (i=1; i<=n/2; i++) {
if (n % i == 0) {
sum += i;
}
}
if (n == sum) {
printf("%d是完数\n", n);
} else {
printf("%d不是完数\n", n);
}
return 0;
}
代码规范:
变量命名: 使用有意义、清晰的变量名,避免使用单个字母或缩写。例如,用userAge代替uAge。
缩进和格式: 保持一致的缩进风格,通常是使用空格或制表符。良好的代码格式提高了可读性。
注释: 编写清晰、简洁的注释,解释代码的目的、关键步骤和可能的注意事项。避免过多的注释,只注释必要的部分。
错误处理:
返回值检查: 在调用可能产生错误的函数后,检查其返回值以确保操作成功。
异常处理: 使用适当的异常处理机制,例如try…catch块,以处理运行时错误。
错误信息: 提供有意义的错误信息,使得在出现问题时更容易追踪和修复。
调试技巧:
调试器: 学会使用调试器(如GDB),能够设置断点、观察变量值,并逐步执行程序。
打印调试信息: 在关键位置插入打印语句,输出变量的值,以便追踪程序执行流程。
单元测试: 编写并执行单元测试,验证每个函数的行为是否符合预期。
性能优化:
算法优化: 选择和实现高效的算法,了解不同算法之间的时间复杂度和空间复杂度。
资源管理: 及时释放不再需要的资源,避免内存泄漏和资源浪费。
编译优化: 使用编译器提供的优化标志,针对特定平台进行编译以提高代码性能。
内存管理:
动态内存分配: 使用malloc和free等函数时,确保分配和释放内存的平衡。
避免内存泄漏: 定期检查代码,确保没有未释放的内存块。
悬挂指针: 注意指针的生命周期,避免使用已释放的内存。
在完成这一系列的C语言程序设计练习之后,相信你已经对C语言的各种概念和技巧有了更深刻的理解。编程之路永无止境,但通过这些练习,你已经迈出了坚实的一步。记得,编程是一门实践的艺术,不仅要理解语法规则,更要在实际问题中找到创新的解决方案。