C语言练习
- 一、单文件
- 1、 需求:在屏幕上输出信息:Hello world!
- 2、需求:两个数求和。
- 3、需求:求两个整数中的较大者。
- 4、需求:编写一个C程序,输入a,b,c三个值,输出其中最大者。
- 5、需求:求n的阶乘。(n!)
- 6、需求:求多项式1-1/2+1/3-1/4+...1/99-1/100的值
- 7、需求:输出100~200之间的素数
- 8、需求:求两个数的最大公约数
- 9、需求:温度转换。有人用温度计测量出用华氏法表示的温度(如64℉),今要求把它转换为以摄氏法表示的温度(如17.8℃)。
- 10、需求:计算存款利息。有1000元,想存一年。有3种方法可选:(1)活期,年利率为rl;(2)一年期定期,年利率为r2;(3)存两次半年定期,年利率为r3.请分别计算出一年后按3中方法所得到的本息和。
- 11、需求:给出三角形的三边长,求三角形的面积
- 12、需求:求一元二次方程(ax²+bx+c=0)的根。
- 13、需求:将大写字母转换为小写字母。
- 14、需求:计算两个时间差。
- 15、需求:程序每次读入一个正三位数,然后输出逆序的数字。
- 16、需求:UTC是世界协调时,BJT是北京时间,UTC时间相当于BJT减去8。现在,你的程序要读入一个整数,表示BJT的时和分。整数的个位和十位表示分,百位和千位表示小时。如果小时小于10,则没有千位部分;如果小时是0,则没有百位部分;如果小时不是0而分小于10分,需要保留十位上的0;如果小时是0而分小于10分的,则不需要保留十位上的0。如1124表示11点24分,而905表示9点5分,36表示0点36分,7表示0点7分。
- 17、需求:班级第一次列队,通常老师会让同学按身高排成一列,然后1、2报数,喊到1的同学向前一 步,就这样,队伍就变成两列了。假设现在一个班级有n个同学,并且他们已经按身高排成 了一列,同学按身高从1到n编号,你能告诉我最后哪些编号的同学站在了第一列么?
- 18、需求:输出范围内的素数
- 19、需求:你的程序要读入一个整数,范围是[-100000,100000]。然后,用汉语拼音将这个整数的每一位输出出来。
- 20、需求:给定一个整数,判断该数是奇数还是偶数。如果是奇数,输出odd;是偶数,输出even
前言:学习C语言时一部分练习题。
tip:①使用CTRL+F可以在页面中查询。
②在线工具
一、单文件
1、 需求:在屏幕上输出信息:Hello world!
#include<stdio.h>
int main()
{
printf("Hello world! \n");
return 0;
}
2、需求:两个数求和。
#include <stdio.h>
int main(){
int a,b,sum;
printf("请输入您要相加的两个数,以空格分隔\n");
scanf("%d %d",&a,&b);
sum=a+b;
printf("您输入的数字和为:%d\n",sum);
return 0;
}
3、需求:求两个整数中的较大者。
#include <stdio.h> //预处理命令
//主函数
int main(){ //定义主函数
int max(int x,int y); //对被调用函数max的声明
int a,b,c; //定义变量a,b,c
printf("请输入您需要比较的两个数字,以空格分隔:");
scanf("%d%d",&a,&b);
c=max(a,b); //调用max函数
printf("max=%d\n",c);
return 0;
}
//求两个整数中的较大者的max函数
int max(int x,int y){ //定义max函数
int z;
if(x>y){
z=x;
}else{
z=y;
}
return (z);
}
4、需求:编写一个C程序,输入a,b,c三个值,输出其中最大者。
#include <stdio.h>
int main()
{
int i,j,k;
scanf("%d %d %d",&i,&j,&k);
if (i>j)
{
if(i>k)
{
printf("最大值:%d\n",i);
}else{
printf("最大值:%d\n",k);
}
}else{
if(j>k)
{
printf("最大值:%d\n",j);
}else{
printf("最大值:%d\n",k);
}
}
return 0;
}
5、需求:求n的阶乘。(n!)
#include <stdio.h>
int main(){
int i,t,n;
printf("请输入n!中的n:");
scanf("%d",&n);
t=1;
i=2;
if(n>=0)
{
while(i<=n){
t=t*i;
i=i+1;
}
printf("%d\n",t);
}else
{
printf("请输入一个正整数。");
}
return 0;
}
6、需求:求多项式1-1/2+1/3-1/4+…1/99-1/100的值
#include <stdio.h>
int main()
{
int sign=1;
double deno = 2.0, sum = 1.0,term; //定义deno,sum,term为双精度型变量
while(deno<=100){
sign=-sign;
term=sign/deno;
sum=sum+term;
deno=deno+1;
}
printf("%f\n",sum);
return 0;
}
7、需求:输出100~200之间的素数
#include <stdio.h> //预处理命令
int main()
{
int i,j,k;
for (i=100; i<=200; i++) //扫描100~200内的整数,用i接收
{
for(j=i-1;j>=1;j--){ //用i除以1~i-1所有数
k=i%j; //k接收其余数
if(k==0){ //k=0时,j==1则此数为素数并输出;否则跳出本次循环
if (j==1){
printf("%d ",i);
}else{
break;
}
}
}
}
}
8、需求:求两个数的最大公约数
#include<stdio.h>
int gcd(int a, int b) { //定义函数gcd,用于求取最大公约数
int t;
while(b!=0) {
t=a%b; //对a,b取余
a=b; //将上述除数赋予a
b=t; //将余数赋予b
}
return a;
}
int main() {
int a,b;
scanf("%d%d",&a,&b);
printf("gcd=%d\n",gcd(a,b));
return 0;
}
9、需求:温度转换。有人用温度计测量出用华氏法表示的温度(如64℉),今要求把它转换为以摄氏法表示的温度(如17.8℃)。
#include<stdio.h>
int main(){
float f,c; //定义f和c为单精度浮点型变量
f=64.0; //指定f的值
c=(5.0/9)*(f-32); //利用公式计算c的值
printf("f=%f\nc=%f\n",f,c); //输出c的值
return 0;
}
10、需求:计算存款利息。有1000元,想存一年。有3种方法可选:(1)活期,年利率为rl;(2)一年期定期,年利率为r2;(3)存两次半年定期,年利率为r3.请分别计算出一年后按3中方法所得到的本息和。
#include<stdio.h>
int main(){
float p0=1000,r1=0.0036,r2=0.0225,r3=0.0198,p1,p2,p3; //定义变量
p1 = p0*(1+r1); //计算活期本息和
p2 = p0*(1+r2); //计算一年定期本息和
p3 = p0*(1+r3/2)*(1+r3/2); //计算存两次半年定期的本息和
printf("p1=%f\np2=%f\np3=%f\n",p1,p2,p3); //输出结果
return 0;
}
11、需求:给出三角形的三边长,求三角形的面积
#include<stdio.h>
#include<math.h>
int main(){
double a,b,c,s,area;
printf("请输入三角形的三条边长,以空格分隔:\n");
scanf("%lf%lf%lf",&a,&b,&c); //scanf接收键盘输入,%lf表示为双精度
if (a>0 && b>0 && c>0){ //判断输入的边长是否正确,若正确,计算s及面积
if(a+b>c || a+c>b || b+c>a){
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("您输入三角形的边长为:%f\t%f\t%f\t\n",a,b,c);
printf("s=%f\n",s);
printf("三角形的面积为:%f",area);
}else{
printf("请检查您输入的边长是否有误;\n");
}
}else{
printf("请检查您输入的边长是否有误;\n");
}
return 0;
}
12、需求:求一元二次方程(ax²+bx+c=0)的根。
#include<stdio.h>
#include<math.h>
int main()
{
double a,b,c,disc,x1,x2,p,q; //disc用来存放判别式b²-4ac的值
printf("请参考方程的标准形式,依次输入a,b,c的值,以空格分隔:\n");
scanf("%lf%lf%lf",&a,&b,&c); //%lf声明输入格式为双精度
disc=b*b-4*a*c;
if (disc>=0)
{
p=-b/(2.0*a); //将x1的计算公式拆为两部分,用p,b接收
q=sqrt(disc)/(2.0*a);
x1=p+q;x2=p-q;
printf("您所求的方程的根为:x1=%7.2f,x2=%7.2f",x1,x2); //指定x的值数据占7列,小数占2列
}else{
printf("您所求的方程无实根");
}
return 0;
}
13、需求:将大写字母转换为小写字母。
#include<stdio.h>
int main()
{
char c1,c2;
printf("请输入您要转换的字母,以空格分隔\n");
scanf("%d %d",c1);
c2 = c1 + 32; //大写字母与小写字母的ASCII相差32个字符
prinft("%c\n",c2); //输出转换后的字符
prinft("%d\n",c2); //输出转换后字符的ASCII码
return 0;
}
14、需求:计算两个时间差。
#include<stdio.h>
int main()
{
int hour1,minute1;
int hour2,minute2;
int t,t1,t2; //定义t1,t2存储转换后的时间,t存储时间差
printf("请输入第一个时间(格式参考9:10输入9 10):\n");
scanf("%d %d",&hour1,&minute1);
printf("请输入第二个时间:\n");
scanf("%d %d",&hour2,&minute2);
t1 = hour1 * 60 + minute1;
t2 = hour2 * 60 + minute2;
t = t2 - t1;
printf("您输入的时间相差:%d小时%d分钟",t/60,t%60);
return 0;
}
15、需求:程序每次读入一个正三位数,然后输出逆序的数字。
注意,当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7。
#include<stdio.h>
int main()
{
int getNum,Num1,Num10,Num100;
scanf("%d",&getNum);
Num1 = getNum % 10;
Num10 = (getNum / 10) % 10;
Num100 = getNum / 100;
printf("%d",Num1*100+Num10*10+Num100);
return 0;
}
16、需求:UTC是世界协调时,BJT是北京时间,UTC时间相当于BJT减去8。现在,你的程序要读入一个整数,表示BJT的时和分。整数的个位和十位表示分,百位和千位表示小时。如果小时小于10,则没有千位部分;如果小时是0,则没有百位部分;如果小时不是0而分小于10分,需要保留十位上的0;如果小时是0而分小于10分的,则不需要保留十位上的0。如1124表示11点24分,而905表示9点5分,36表示0点36分,7表示0点7分。
有效的输入范围是0到2359,即你的程序不可能从测试服务器读到0到2359以外的输入数据。
你的程序要输出这个时间对应的UTC时间,输出的格式和输入的相同,即输出一个整数,表示UTC的时和分。整数的个位和十位表示分,百位和千位表示小时。如果小时小于10,则没有千位部分;如果小时是0,则没有百位部分;如果小时不是0而分小于10分,需要保留十位上的0;如果小时是0而分小于10分的,则不需要保留十位上的0。
提醒:要小心跨日的换算。
#include<stdio.h>
int main()
{
//输入BTJ时间
int BTtime=0;
scanf("%d",&BTtime);
//换算
if (BTtime>=0 && BTtime<2400)
{
if(BTtime>=800)
{
printf("%d",BTtime-800);
}else{
printf("%d",BTtime-800+2400);
}
}
}
17、需求:班级第一次列队,通常老师会让同学按身高排成一列,然后1、2报数,喊到1的同学向前一 步,就这样,队伍就变成两列了。假设现在一个班级有n个同学,并且他们已经按身高排成 了一列,同学按身高从1到n编号,你能告诉我最后哪些编号的同学站在了第一列么?
#include<stdio.h>
int main()
{
int num=0;
int i=1;
scanf("%d",&num);
printf("%d",i);
while(i<=num)
{
i = i + 2;
printf(" %d",i);
}
}
18、需求:输出范围内的素数
我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推。
现在,给定两个整数n和m,0<n<=m<=200,你的程序要计算第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数。
#include<stdio.h>
int main()
{
int n=0;
int m=0;
int sum=0;
int if_priNum(int x);
//输入数值
scanf("%d %d",&n,&m);
//
if(n>0 && m>0 && n<=200 && m<=200)
{
for(sum;n<=m;m--)
{
if (if_priNum(m) == 1)
{
sum = sum + m; //将素数m加到sum中
}
}
}
printf("%d",sum);
return 0;
}
//判断一个数是不是素数,1为素数,0为非素数
int if_priNum(int x)
{
int i=x;
int j,k;
for (j=i-1;j>=1;j--) //用x除以x-1到1;若仅有1余数为0,则为素数
{
k=i%j;
if(k==0)
{
if(j==1)
{
printf("判断%d是素数\n",i);
return 1;
}
else
{
printf("判断%d不是素数\n",i);
return 0;
break;
}
}
}
}
19、需求:你的程序要读入一个整数,范围是[-100000,100000]。然后,用汉语拼音将这个整数的每一位输出出来。
如输入1234,则输出:
yi er san si
注意,每个字的拼音之间有一个空格,但是最后的字后面没有空格。当遇到负数时,在输出的开头加上“fu”,如-2341输出为:
fu er san si yi
#include<stdio.h>
int main()
{
int Num=0; //要转换的数
int i=0; //数的第几位
int Num1;
int a[5]={0,0,0,0,0};
void NumChange(int NumC);
scanf("%d",&Num);
//将负数转换为正数,为0时直接打印
if(Num<0)
{
printf("fu");
Num=-Num;
}
else if (Num == 0)
{
printf("ling");
}
Num1 = Num; //打印拼音的空格判断条件
//将正整数拆分存储于数组a中
for(i,Num;Num != 0; i++, Num = Num/10)
{
a[i] = Num%10;
}
//输出当前数组中的内容
for(int x;x<=4;x++)
{
printf("%d",a[x]);
}
printf("\n");
//输出转换后的拼音,最后一位不输空格
for(i=i-1;i>-1;i--,Num1 = Num1/10)
{
NumChange(a[i]);
if(Num1!=0) printf("%c",' ');
}
}
//将数字0-9转换为拼音
void NumChange(int x)
{
switch(x)
{
case 0: printf("ling");break;
case 1: printf("yi");break;
case 2: printf("er");break;
case 3: printf("san");break;
case 4: printf("si");break;
case 5: printf("wu");break;
case 6: printf("liu");break;
case 7: printf("qi");break;
case 8: printf("ba");break;
case 9: printf("jiu");break;
}
}
20、需求:给定一个整数,判断该数是奇数还是偶数。如果是奇数,输出odd;是偶数,输出even
#include<stdio.h>
int main() {
int a;
scanf("%d",&a);
if(a%2==0)
{printf("even");}
else
{printf("odd");}
return 0;
}