【手把手带你刷题】-C语言编程入门篇(三)

大家好,我是深鱼~

目录

         前言:

1.计算三角形的周长和面积

2. 计算球体的体积

3.成绩输入输出

4.变种水仙花

 5.kiki算数

6.浮点数的个位数字

7. 你能活多少秒

 8. 时间转换

 9.总成绩和平均分计算

10.KiKi和酸奶

总结:

结语:


前言:

今天是更新刷题篇的第三天,对于初学者而言,题目在不断的变难,希望大家可以坚持下去,刷完这130题,我们一定会有很大的进步,冲冲冲!!!

1.计算三角形的周长和面积

题目链接:计算三角形的周长和面积

题目:

 题解:本题只要学习两点:

<1>知道三角形的三条边怎么计算三角形的面积:海伦公式S=sqrt(p*(p-a)*(p-b)*(p-c)),其中p为三角形周长的一半,即p=(a+b+c)/2

<2>sqrt这个函数是开平方的意思,它作用于double类型的变量,用这个函数要引头文件#include<math.h>

拓展:在C语言中怎么计算次方,这里介绍一个函数:pow(double x,double y),它的返回值也是double类型,eg:pow(2.0,6.0)=64,同样这是数学中的,所以用这个函数之前要引头文件#include<math.h>

#include <stdio.h>
#include<math.h>

int main()
{
    double a=0.0;
    double b=0.0;
    double c=0.0;
    //输入
    scanf("%lf %lf %lf",&a,&b,&c);
    //计算
    double circumference=(a+b+c);//周长
    double p=circumference/2;
    double area=sqrt(p*(p-a)*(p-b)*(p-c));
    //输出
    printf("circumference=%.2lf area=%.2lf",circumference,area);
    return 0;
}

2. 计算球体的体积

题目链接: 计算球体的体积题目

题目:

 题解:本题应注意:

<1>定义pi的时候不能写成float类型,因为float类型只能到小数点后6-7位,而double类型可以到小数点后15-16位

<2>计算体积的时候不能写成4/3,这样就算的结果之间就是1,那么本题的真实结果就会相差很大,解决办法就是写为4.0/3或者4/3.0,或者把/3写在整个表达式的后面eg:4*pi*n*n*n/3

#include <stdio.h>
int main() 
{
    double r=0.0;
    double v=0.0;
    double pi=3.1415926;
    //输入
    scanf("%lf",&r);
    //计算
    v=4/3.0*pi*r*r*r;
    printf("%.3lf",v);
    return 0;
}

3.成绩输入输出

题目链接:成绩输入输出

题目:

 题解1:

#include <stdio.h>

int main()
 {
    int s1=0;
    int s2=0;
    int s3=0;

   scanf("%d %d %d",&s1,&s2,&s3);

   printf("score1=%d,score2=%d,score3=%d\n",s1,s2,s3);
   
    return 0;
}

题解2:如果输入的数据很多,采用数组输入

#include <stdio.h>

int main()
 {
    int score[3]={0};
    int i=0;

   for(i=0;i<3;i++)
   {
    scanf("%d",&score[i]);
   }

   printf("score1=%d,score2=%d,score3=%d\n",score[0],score[1],score[2]);

    return 0;
}

4.变种水仙花

题目链接: 变种水仙花

题目:

题解:

拿12345举个例子,怎么取出各个数

1*2345       -     (12345/10000 )*(12345%10000)

12*346       -      (12345/1000)  *(12345%1000)

123*45       -        (12345/100)  * (12345%100)

1234*5       -         (12345/10)  *  (12345%10)

所以就是一个数i,(i除以10的次方)和(i取10的次方的模)的乘积

                                                    (i/j)*(i%j)

#include <stdio.h>
#include<math.h>

int main()
{
    int i=0;
    for (i = 10000; i <= 99999; i++) //取出五位数
    {
        //判断i是否为Lily Number
        int j=0;
        int sum=0;
        for(j=10;j<=10000;j*=10)
        {
            sum+=(i/j)*(i%j);
        }
        if (sum == i)
            printf("%d ", i);
    }
    return 0;
}

 5.kiki算数

题目链接: kiki算数

题目:

 题解:这题主要是考查取余

#include <stdio.h>

int main() 
{
   int a=0;
   int b=0;
   //输入
   scanf("%d %d",&a,&b);
   //计算
   int sum =(a+b)%100;//这里也可以写成a%100+b%100
   //输出
   printf("%d",sum);

    return 0;
}

6.浮点数的个位数字

题目链接: 浮点数的个位数字

题目:

 题解1:本题主要学会(int)(double)强制转化类型,要转换啥类型直接在变量或常量前面写上(想转的类型)

#include <stdio.h>

int main() 
{
    double a=0;
    scanf("%lf",&a);
    int  n=(int)a;
    printf("%d\n",n%10);
    
    return 0;
}

题解2:直接输入时13.141,但是程序录入只取整数部分

#include <stdio.h>

int main() 
{
    int a=0;
    scanf("%d",&a);
    printf("%d\n",a%10);
    
    return 0;
}

7. 你能活多少秒

题目链接: 你能活多少秒

题目:

题解:本题要学会10的7次方怎么写?

<1>3.156*pow(10,7)

<2>3.156e7(e表示的是底数为10的科学计数法的表示形式)

还要注意631200000太大了,不能用int类型,得用long long类型来存储,打印的时候是%lld

#include <stdio.h>
#include<math.h>
int main() 
{
   int age=0;
   //输入
   scanf("%d",&age);
   //计算
   long long time=3.156*pow(10,7)*age;
   //或者这样写long long time=3.156e7*age;
   //输出
   printf("%lld",time);
    return 0;
}

 8. 时间转换

题目链接: 时间转换

题目:

题解:本题就是净值换算的一个题  3600s等于1h,seconds%3600就是除了3600以后的余数,用这个余数再除以60就是分钟,取余就是秒

#include <stdio.h>

int main()
{
	//输入
	int seconds=0;
	int h=0;
	int m=0;
	int s=0;
	scanf("%d",&seconds);
	//计算
	h=seconds/3600;
	m=seconds%3600/60;
	s=seconds%3600%60;
	//输出
	printf("%d %d %d\n",h,m,s);

	return 0;
}

 9.总成绩和平均分计算

题目链接: 总成绩和平均分计算

题目:

题解1:

#include <stdio.h>

int main()
{
	double arr[3] = {0};//三科成绩
	//输入
	scanf("%lf %lf %lf", &arr[0], &arr[1], &arr[2]);
    //计算
    double sum=arr[0] + arr[1] + arr[2];
	double avg=sum/3.0;
	//输出
	printf("%.2lf %.2lf",sum , avg);
	return 0;
}

 题解2:边输入边计算

#include <stdio.h>

int main()
{
	double score=0.0;
	double sum=0.0;
	//输入并计算
	int i=0;
	for(i=0;i<3;i++)
	{
       scanf("%lf",&score);
	   sum+=score;
	}
	//输出
	printf("%.2lf %.2lf",sum ,sum/3);
	return 0;
}

10.KiKi和酸奶

题目链接:KiKi和酸奶

题目:

题解1:当总时间正好被喝一瓶所用时间整除,直接减就可以,如果没有被整除,就需要再减一瓶

#include <stdio.h>
int main()
{
    int m = 0;//给的酸奶瓶数
    int n = 0;//喝一瓶所用的时间
    int h = 0;//总共时间

    while ((scanf("%d %d %d", &n, &h, &m) != EOF))
    {
        if (m % h)
            printf("%d", n - m / h - 1);
        else
            printf("%d", n - m / h);
    }
    return 0;
}​​​​

 题解2:简化(int)强制类型转换

#include <stdio.h>

int main()
{
	float m, n, h = 0;
	scanf("%f %f %f", &n, &h, &m);
	printf("%d", (int)(n - m / h) );
	return 0;
}

总结:

(1)这些编程初学者训练的思路一般都是:输入,计算,输出

(2)sqrt和pow的作用和返回值都是double类型,都要引头文件#include<math.h>

  (3)float类型只能到小数点后6-7位,分数计算的时候记得带上小数点,不然会直接取整eg:4/3.0

  (4)水仙花变种:(i/j)*(i%j)   j为pow(10,n)

  (5)次方运算有两种方法:<1>pow(x,y)    <2>en(以10为底数的科学计数法)

  (6)学会灵活运用强制转换(类型)

  (7)学会灵活运用取余(取模)

结语:   彼方尚有荣光在,少年不惧岁月长

感觉笔者写的还可以,或者自己有些许收获的时候,麻烦铁汁们动动小手,给俺来个一键三连,万分感谢

猜你喜欢

转载自blog.csdn.net/qq_73017178/article/details/131703066