C语言练习

C语言练习

前言:学习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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值