在 C 语言学习过程中,通过实战编程题巩固知识点是非常有效的方式。本文整理了一系列经典 C 语言编程题,涵盖基础计算、逻辑判断、图形打印等多个维度,并附上完整代码与解析,适合初学者参考学习
上机题
1.
计算n以内所有正奇数的和 ? n值通过键盘输入
代码:
/*************************************************************************
> File Name: demo04.c
> Author: 千夕
> Description:
> Created Time: 2025年07月16日 星期三 15时19分09秒
************************************************************************/
#include <stdio.h>
int main(int argc,char *argv[])
{
int num = 0;
int i = 1;
int n;
printf("请输入数字:");
scanf("%d",&n);
while(i < n)
{
if(i % 2 != 0 )
num += i;
i++;
}
printf(" %d 以内所有正奇数和为: %d\n",n,num);
return 0;
}
运行结果:
2.
计算 1 + 1/(2 * 3) + 1/(3 * 4) + …+ 1/(n * (n + 1)) = ?直到最后一相值小于0.00001为 止
代码:
/*************************************************************************
> File Name: demo05.c
> Author: qianxi
> Description:
> Created Time: 2025年07月16日 星期三 18时15分43秒
************************************************************************/
#include <stdio.h>
int main(int argc,char *argv[])
{
float i = 2;
float sum=0;
float n=0;
for(;1 / (i * (i + 1)) > 0.00001; i++)
{
n = 1 / (i * (i + 1));
sum += n;
}
printf("这个式子的答案是:%f\n",sum+1);
return 0;
}
运行结果:
3.
计算1+1/2 - 1/3 + 1/4 - 1/5 …+1/n= ? n通过键盘输入(int k = -1)
代码:
/*************************************************************************
> File Name: demo06.c
> Author: 千夕
> Description:
> Created Time: 2025年07月16日 星期三 19时02分32秒
************************************************************************/
#include <stdio.h>
int main(int argc,char *argv[])
{
int i = 1;
float sum1,sum2;
int x;
float sum = 0;
printf("请输入正整数:");
/*if(scanf("%d",&x) != 1 || x <= 0)
{
printf("请输入一个正整数。\n");
return 1;
}
*/
scanf("%d",&x);
while(i <= x)
{
if(i % 2 == 0)
{
sum1 +=1.0 / i;
}
else
{
sum2 += 1.0 / i;
}
i++;
}
sum = sum1-sum2+2;
printf("这个式子的值为:%.6f\n",sum);
return 0;
}
运行结果:
4.
计算n的阶乘 ? n! = 123…*n n值通过键盘输入
代码:
/*************************************************************************
> File Name: demo07.c
> Author: 千夕
> Description:
> Created Time: 2025年07月16日 星期三 21时40分18秒
************************************************************************/
#include <stdio.h>
#include <math.h>
int main(int argc,char *argv[])
{
unsigned long n;
size_t r = 1;
printf("请输入一个整数:");
scanf("%lu",&n);
for(int i = 1; i <= fabs(n); i++) r *=i;
printf("1~%lu的阶乘为%lu\n",(size_t)fabs(n),r);
return 0;
}
运行结果:
5.
输出半径为1~10的圆面积,面积大于100时停止
代码:
/*************************************************************************
> File Name: demo10.c
> Author: 千夕
> Description:
> Created Time: 2025年07月16日 星期三 23时53分40秒
************************************************************************/
#include <stdio.h>
#define PI 3.1415926
int main(int argc,char *argv[])
{
double area;
for (int r = 1; r <= 10;r++)
{
area = PI * r * r;
if (area > 100)
{
break;
}
printf("半径为%d的圆的面积为:%lf\n",r,area);
}
return 0;
}
运行结果:
6
求输入的十个整数中正数的个数及其平均值
代码:
/*************************************************************************
> File Name: demo08.c
> Author: 千夕
> Description:
> Created Time: 2025年07月16日 星期三 22时34分46秒
************************************************************************/
#include <stdio.h>
int main(int argc,char *argv[])
{
int a;
int b = 0;
double sum = 0;
printf("请输入十个数字:");
for(int i = 1; i <= 10;i++)
{
scanf("%d",&a);
if(a > 0)
{
b++;
sum +=a;
}
}
printf("10个数中的正整数个数为%d个,平均值为%.2lf\n",b,sum/b);
return 0;
}
运行结果:
7
打印出100以内能整除7之外的的自然数
代码:
/*************************************************************************
> File Name: demo09.c
> Author: 千夕
> Description:
> Created Time: 2025年07月16日 星期三 23时19分29秒
************************************************************************/
#include <stdio.h>
int main(int argc,char *argv[])
{
printf("100以内不能整除7的数为:");
for(int i = 1; i <= 100; i++)
{
if(i % 7 != 0)
{
printf("%d ",i);
}
}
printf("\n");
return 0;
}
运行结果:
8
打印乘法表
代码:
/*************************************************************************
> File Name: demo11.c
> Author: 千夕
> Description:
> Created Time: 2025年07月16日 星期三 23时59分57秒
************************************************************************/
#include <stdio.h>
int main(int argc,char *argv[])
{
printf("=======九九乘法表=======\n");
for(int i = 1;i <=9 ;i++)
{
for( int j = 1; j <= i;j++)
{
printf("%d×%d=%d\t",j,i,j*i);
}
printf("\n");
}
printf("\n");
return 0;
}
运行结果:
9
我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值 钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?
代码:
/*************************************************************************
> File Name: test5.c
> Author: 千夕
> Description:
> Created Time: 2025年07月17日 星期四 19时46分44秒
************************************************************************/
#include <stdio.h>
int main(int argc,char *argv[])
{
printf("百钱买百鸡问题\n");
printf("-----------------\n");
for(int x = 0;x <= 100; x++)
{
for(int y = 0; y <= 100 - x;y++)
{
for(int z = 0;z <= 100 - x - y;z++)
{
if(x + y + z == 100 && 5 * x + 3 * y + z / 3 == 100)
printf("%d\t%d\t%d\n",x,y,z);
}
}
}
return 0;
}
运行结果:
10
从键盘上输入多个无符号整型数据,直到 0 结束 ,输出所输入数据中的最大值。
代码:
/*************************************************************************
> File Name: test2.c
> Author: 千夕
> Description:
> Created Time: 2025年07月17日 星期四 09时59分09秒
************************************************************************/
#include <stdio.h>
int main(int argc,char *argv[])
{
unsigned num,max = 0;
while(1)
{
scanf("%u",&num);
if(num == 0)
{
break;
}
else if(num > max)
{
max = num;
}
}
printf("最大值是:%u\n",max);
return 0;
}
运行结果:
思考题
1
判断一个数是不是回文数。(回文数是指正序(从左向右)和倒序(从右向左)读都是 一样的整数。如:12321
代码:
/*************************************************************************
> File Name: test6.c
> Author: 千夕
> Description:
> Created Time: 2025年07月17日 星期四 20时02分53秒
************************************************************************/
#include <stdio.h>
int main(int argc,char *argv[])
{
int num,originalNum,n = 0,x;
printf("请输入数字:");
scanf("%d",&num);
originalNum = num;
for (;num != 0;)
{
x = num % 10;
n = n * 10 + x;
num /= 10;
}
num = originalNum;
if(originalNum == n)
printf("这串数字是回文数\n");
else printf("这串数字不是回文数\n");
return 0;
}
运行结果:
2
通过键盘录入一个整数,判断这个整数是否是水仙花数。
代码:
/*************************************************************************
> File Name: test4.c
> Author: 千夕
> Description:
> Created Time: 2025年07月17日 星期四 19时22分30秒
************************************************************************/
#include <stdio.h>
#include <math.h>
int main(int argc,char *argv[])
{
int num, originalNum,n=0,sum=0;
printf("请输入整数:");
scanf("%d",&num);
originalNum = num;
while(num != 0)
{
num /= 10;
n++;
}
num = originalNum;
while(num != 0)
{
int digit = num % 10;
sum += pow(digit,n);
num /= 10;
}
if (sum == originalNum)
printf("%d是水仙花数\n",originalNum);
else
printf("%d不是水仙花数\n",originalNum);
return 0;
}
运行结果:
扩展题
使用 * 在控制台分别打印上直角三角形、下直角三角形,上等腰三角形、下等腰三角 形、菱形、平行四边形。
①上直角三角形代码:
/*************************************************************************
> File Name: demo7.c
> Author: 千夕
> Description:
> Created Time: 2025年07月17日 星期四 20时55分11秒
************************************************************************/
#include <stdio.h>
int main(int argc,char *argv[])
{
int i,j;
for(i = 0;i <=5;i++)
{
for(j = 0;j <= i;j++)
{
printf("*");
}
printf("\n");
}
return 0;
}
运行结果:
②下直角三角形代码:
/*************************************************************************
> File Name: demo8.c
> Author: 千夕
> Description:
> Created Time: 2025年07月17日 星期四 21时17分35秒
************************************************************************/
#include <stdio.h>
int main(int argc,char *argv[])
{
int x,y;
for (x=5;x >= 0;x--)
{
for (y = 0; y <= x ;y++)
printf("*");
printf("\n");
}
return 0;
}
运行结果:
③上等腰三角形代码:
/*************************************************************************
> File Name: demo09.c
> Author: 千夕
> Description:
> Created Time: 2025年07月17日 星期四 22时06分10秒
************************************************************************/
#include <stdio.h>
int main(int argc,char *argv[])
{
int i,j,space;
for(i = 1;i<=5;i++)
{
for(space = 1;space <= 5 - i; space++)
{
printf(" ");
}
for(j = 1;j<=2*i -1;j++)
{
printf("*");
}
printf("\n");
}
return 0;
}
运行结果:
④下等腰三角形代码:
/*************************************************************************
> File Name: demo10.c
> Author: 千夕
> Description:
> Created Time: 2025年07月17日 星期四 22时31分07秒
************************************************************************/
#include <stdio.h>
int main(int argc,char *argv[])
{
int i,j,space;
for(i = 5;i >=1 ; i--)
{
for(space = 1;space <= 5-i;space++)
{
printf(" ");
}
for(j = 1;j <= 2*i-1;j++)
{
printf("*");
}
printf("\n");
}
return 0;
}
运行结果:
⑤菱形代码:
/*************************************************************************
> File Name: demo11.c
> Author: 千夕
> Description:
> Created Time: 2025年07月17日 星期四 22时52分29秒
************************************************************************/
#include <stdio.h>
int main(int argc,char *argv[])
{
int i,j,space;
for(i = 1;i<= 5;i++)
{
for(space = 1;space<=5-i;space++)
{
printf(" ");
}
for(j = 1;j<=2*i-1;j++)
{
printf("*");
}
printf("\n");
}
for(i = 4 ;i>=1;i--)
{
for(space = 1;space<=5-i;space++)
{
printf(" ");
}
for(j = 1;j<=2*i-1;j++)
{
printf("*");
}
printf("\n");
}
return 0;
}
运行结果:
⑥平行四边形代码:
/*************************************************************************
> File Name: demo12.c
> Author: 千夕
> Description:
> Created Time: 2025年07月17日 星期四 23时05分45秒
************************************************************************/
#include <stdio.h>
int main(int argc,char *argv[])
{
int i,j,space;
for(i=1;i<=5;i++)
{
for(space = 1;space<=5-i;space++)
printf(" ");
for(j=1; j<=5;j++)
{
printf("*");
}
printf("\n");
}
return 0;
}
运行结果:
总结
本文涵盖的编程题涉及 C 语言基础语法(循环、条件判断、数组等)和算法逻辑,通过这些实例可以加深对 C 语言的理解与应用。实际编程中,需注意变量初始化、边界条件处理及数据类型选择,避免出现逻辑错误或溢出问题。初学者可在此基础上尝试优化代码,如增加输入校验、扩展功能等,提升编程能力。