前言:
在计算机编程的世界中,C语言一直是一门备受推崇的语言。它的简洁性、高效性以及广泛应用使得学习C语言成为每一位程序员的必由之路。然而,掌握这门语言并不是一蹴而就的事情,它需要不断的练习和实践。为了帮助各位编程爱好者更好地理解和掌握C语言的精髓,我整理了一份“必练的100道C语言程序设计练习题(上)”。这不仅是一次对基础知识的回顾,更是一个深入学习的契机。通过挑战这些题目,你将更好地锻炼编程思维,提高问题解决能力,为未来的编程之旅打下坚实的基础。
1、输出打印Hello World。
#include<stdio.h>
int main()
{printf("Hello World");return 0;
}
运行结果如下图:
2、已知三角形边长 求面积。
#include<stdio.h>
#include<math.h>
int main()
{double a,b,c,s,area;a=2.67;b=4.43;c=5.21;s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c));printf("a=%f\tb=%f\tc=%f\n",a,b,c);printf("area=%f\n",area);
}
运行结果如下图:
3、while语句实现求1+2+……+100
#include<stdio.h>
void main()
{int i ,sum;i=1;sum=0;while(i<=100){sum=sum+i;i++;}printf("sum=%d\n",sum);
}
4、输出大写A到小写a之间的所有字母和符号。
#include<stdio.h>
void main()
{int i=65;while(i<'a'){putchar(i);putchar('\n');i++;}
}
5、自然数“1—n”之间的奇数和和偶数和。
#include<stdio.h>
void main()
{int i=1,sum1=0,sum2=0,n;printf("请输入n的值:\n");scanf("%d",&n);do{sum1=sum1+i;i=i+2;}while(i<n);i=2;do{sum2=sum2+i;i=i+2;}while(i<n);printf("奇数和=%d\n偶数和=%d\n",sum1,sum2);
}
6、求1+2+3+4……+100的和
#include<stdio.h>
void main()
{int i,sum=0;for(i=1;i<=100;i++)sum=sum+i;printf("sum=%d\n",sum);
}
7、输出九九乘法表
#include<stdio.h>
void main()
{int i,j;for(i=1;i<=9;i++){for(j=1;j<=i;j++){printf("%dX%d=%-3d",i,j,i*j);}printf("\n");}
}
8、输出圆半径在10以内自然数的圆的面积,面积大于100时停止
#include<stdio.h>
#define PI 3.14159
main()
{int r;float area;for(r=1;r<=10;r++){area=PI*r*r;if(area>100)break;printf("r=%d,area=%.2f\n",r,area);}
}
9、求输入的10个整数中正数的个数、和及平均数
#include<stdio.h>
main()
{int i,num,a=0,sum=0;float ave;for(i=1;i<=10;i++){scanf("%d",&num);if(num<=0) continue;a++;sum=sum+num;}ave=(float)sum/a;printf("a=%d,sum=%d,ave=%f\n",a,sum,ave);
}
10、自幂数是指一个n位整数,它的每个位上数字的n次幂之和等于它本身。例如,13+53+33=153,当n为4时,自幂数称为玫瑰花数,试编程输出1000~9999范围内的所有玫瑰花数。
#include<stdio.h>
void main()
{int i,n,a,b,c,d;for(i=1000;i<=9999;i++){n=i;a=n%10;b=n/10%10;c=n/100%10;d=n/1000;if(a*a*a*a+b*b*b*b+c*c*c*c+d*d*d*d==n)printf("%6d\n",n);}
}
11、输入一行字符,分别统计其中英文字符、数字字符和其他字符的个数
#include<stdio.h>
void main()
{char ch;int char_num=0,int_num=0,other_num=0;while((ch=getchar())!='\n'){if(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z')char_num++;else if(ch>='0'&&ch<='9')int_num++;elseother_num++;}printf("字母:%d个\n数字:%d个\n其它字符:%d个\n",char_num,int_num,other_num);
}
12、求n的阶乘
#include<stdio.h>
int main()
{int n,x=1,i;printf("输入n的阶乘");scanf("%d",&n);for(i=1;i<=n;i++){x=x*i;}printf("n!=%d\n",x);
}
13、编程序统计并输出200以内所有能同时被7和3整除的数及其数量。
#include<stdio.h>
int main()
{int i,n=0;for(i=1;i<=200;i++)if((i%7==0)&&(i%3==0)){printf("%d\n",i);n++;}printf("%d",n);}
14、定义一个数组a[10],并赋初值0~9,反序输出。
#include<stdio.h>
int main()
{int a[10],i;for(i=0;i<=9;i++)a[i]=i;for(i=9;i>=0;i--)printf("%2d",a[i]);return 0;
}
15、一个小组学生共10人,输入他们的成绩,计算并输出小组总成绩及平均成绩。
#include<stdio.h>
#define num 10
int main()
{int i;float a[num],sum=0,ave;for(i=0;i<=9;i++)scanf("%f",&a[i]);for(i=0;i<=9;i++)sum=sum+a[i];ave=sum/10;printf("sum=%f,ave=%f\n",sum,ave);
}
16、输出杨辉三角
#include<stdio.h>
void main()
{int i,j,a[10][10]={0};for(i=0;i<10;i++){a[i][i]=1;a[i][0]=1;}for(i=2;i<10;i++)for(j=1;j<i+1;j++)a[i][j]=a[i-1][j-1]+a[i-1][j];for(i=0;i<10;i++){for(j=0;j<i+1;j++)printf("%4d",a[i][j]);printf("\n");}
}
17、输入一行字符,分别统计其中的数字、字母和其他字符个数
#include<stdio.h>
void main()
{char ch;int count=0,zimu=0,other=0;while(ch=getchar()!='\n'){if(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z')zimu++;else if(ch>='0'&&ch<='9')count++;elseother++;}printf("数字=%d,字母=%d,其他字符=%d\n",count,zimu,other);
}
18、求10个整数中的最小值
#include<stdio.h>
int main()
{int i,a[10],min;for(i=0;i<10;i++)scanf("%d",&a[i]);min=a[0];for(i=1;i<10;i++)if(a[i]<min)min=a[i];printf("min=%d\n",min);
}
19、求3*4矩阵元素中的最大值
#include<stdio.h>
void main()
{int a[3][4]={{18,-21,15,85},{18,9,11,26},{-18,21,11,-58}};int i,j,row=0,colum=0,min;min=a[0][0];for(i=0;i<3;i++)for(j=0;j<4;j++)if(a[i][j]<min){min=a[i][j];row=i;colum=j;}printf("最小值=a[%d][%d]=%d\n",row,colum,min);
}
20、使用puts()和gets()函数输入输出
#include <stdio.h>int main() {char str[66];printf("请输入一个字符串:\n");fgets(str, sizeof(str), stdin);printf("你输入的字符串是: %s", str);return 0;
}
21、单位转换——厘米转换英寸
#include<stdio.h>int main()
{double foot;double inch;printf("请分别输入身高的英尺和英寸,""如输入\"5 7\"表示5英尺7英寸:");scanf("%lf %lf",&foot,&inch);//scanf输入使用%lfprintf("身高是%f米。\n",((foot + inch/12)*0.3048));return 0;
}
22、判断一个数是否是素数
#include <iostream>
#include <cmath> // Include the <cmath> header for 'sqrt' functionint main() {int num;bool flag = true;std::cout << "请输入一个整数:";std::cin >> num;for (int i = 2; i <= std::sqrt(num); i++) { // Use std::sqrtif (num % i == 0) {flag = false;break;}}if (num <= 1) {flag = false;}if (flag) {std::cout << num << "是一个素数!" << std::endl;} else {std::cout << num << "不是一个素数!" << std::endl;}return 0;
}
23、反向输出字符
#include <stdio.h>
#include <string.h>int main() {char inputString[200], tempChar;int i, j, length;// 获取用户输入printf("Enter a string: ");scanf("%s", inputString);// 计算字符串长度length = strlen(inputString);// 字符串翻转for (i = 0, j = length - 1; i < j; i++, j--) {tempChar = inputString[i];inputString[i] = inputString[j];inputString[j] = tempChar;}// 输出翻转后的字符串printf("Reversed string: %s\n", inputString);return 0;
}
24、用C语言输出打印一个爱心
#include <stdio.h>
int main()
{for(double y = 1.5; y > -1.5; y -= 0.1){for(double x = -1.5; x < 1.5; x += 0.05) {double a = x * x + y * y - 1;putchar(a * a * a - x * x * y * y * y <= 0.0f? '+' : ' ');}putchar('\n');}return 0;
}
补充
代码规范:
变量命名: 使用有意义、清晰的变量名,避免使用单个字母或缩写。例如,用userAge代替uAge。
缩进和格式: 保持一致的缩进风格,通常是使用空格或制表符。良好的代码格式提高了可读性。
注释: 编写清晰、简洁的注释,解释代码的目的、关键步骤和可能的注意事项。避免过多的注释,只注释必要的部分。
错误处理:
返回值检查: 在调用可能产生错误的函数后,检查其返回值以确保操作成功。
异常处理: 使用适当的异常处理机制,例如try…catch块,以处理运行时错误。
错误信息: 提供有意义的错误信息,使得在出现问题时更容易追踪和修复。
调试技巧:
调试器: 学会使用调试器(如GDB),能够设置断点、观察变量值,并逐步执行程序。
打印调试信息: 在关键位置插入打印语句,输出变量的值,以便追踪程序执行流程。
单元测试: 编写并执行单元测试,验证每个函数的行为是否符合预期。
性能优化:
算法优化: 选择和实现高效的算法,了解不同算法之间的时间复杂度和空间复杂度。
资源管理: 及时释放不再需要的资源,避免内存泄漏和资源浪费。
编译优化: 使用编译器提供的优化标志,针对特定平台进行编译以提高代码性能。
内存管理:
动态内存分配: 使用malloc和free等函数时,确保分配和释放内存的平衡。
避免内存泄漏: 定期检查代码,确保没有未释放的内存块。
悬挂指针: 注意指针的生命周期,避免使用已释放的内存。
结尾:
在完成这一系列的C语言程序设计练习之后,相信你已经对C语言的各种概念和技巧有了更深刻的理解。编程之路永无止境,但通过这些练习,你已经迈出了坚实的一步。记得,编程是一门实践的艺术,不仅要理解语法规则,更要在实际问题中找到创新的解决方案。