前言:
在计算机编程的世界中,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++;
else
other_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++;
else
other++;
}
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输入使用%lf
printf("身高是%f米。\n",
((foot + inch/12)*0.3048));
return 0;
}
22、判断一个数是否是素数
#include <iostream>
#include <cmath> // Include the <cmath> header for 'sqrt' function
int main() {
int num;
bool flag = true;
std::cout << "请输入一个整数:";
std::cin >> num;
for (int i = 2; i <= std::sqrt(num); i++) { // Use std::sqrt
if (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语言的各种概念和技巧有了更深刻的理解。编程之路永无止境,但通过这些练习,你已经迈出了坚实的一步。记得,编程是一门实践的艺术,不仅要理解语法规则,更要在实际问题中找到创新的解决方案。