头歌平台——C语言之数学运算强化练习题

第1关:逐一挑出来

任务描述

本关需要完成一个输出某个三位数各个位上的数字的小程序。

相关知识
算数运算符

%是取模运算符,获得整除后的余数。

/是通过分子除以分母,获得整除后的整数部分。

floor

floor()是返回一个浮点型的整数部分,即向下取整。

语法:

floor(double x)

说明:x是需要传入的浮点型数。

举例如下:

 
  1. float val = 1.2
  2. floor(val) = 1
编程要求

请仔细阅读右侧代码,根据方法内的提示,在Begin - End区域内进行代码补充,具体任务如下:

输入一个三位数的整数,分别输出其个位、十位、百位上的数字。

注意:

  • 输出的各数字间有一个空格。

举例说明:

测试输入:345。 预期输出:5 4 3

提示:方法不唯一,可以尽量尝试多种方式实现。

测试说明

平台会对您的代码进行运行测试,如果实际输出与预期输出相同,则算通关。

# include<stdio.h>
# include<math.h>
int main()
{ 
    /*********begin*********/
    int n;
    scanf("%d",&n);
    while(n!=0)
    {
        printf("%d ",n%10);
        n=n/10;
    }
	printf("\n");
    return 0;
	/*********end*********/
}

第2关:我不喜欢4

任务描述

本关需要统计出1000099999的整数之中,不包含数值4的整数个数的小程序。

相关知识

我不想再啰嗦各种知识点了,而我相信大家经过反复的练习,已经将该记住的都记住了,那么我们直接看代码回顾吧!

代码片段1

 
  1. // 当分数score小于60时,输出"考试不合格!"
  2. int score = 58;
  3. if (score < 60){
  4. System.out.println("考试不合格!");
  5. }

代码片段2

输出结果:

 
  1. 不及格
  2. 这个月零花钱没啦!
  3. 这个月零花钱没啦

代码片段3

 
  1. // 当分数score大于等于60时输出"考试合格!",否则输出"考试不合格!"
  2. int score = 80;
  3. if (score >= 60)
  4. System.out.println("考试合格!");
  5. else {
  6. System.out.println("考试不合格!");
  7. }

代码片段4

 
  1. #include <stdio.h>
  2. int main ()
  3. {
  4. /* 局部变量定义 */
  5. int a = 10;
  6. /* while 循环执行 */
  7. while( a < 20 )
  8. {
  9. printf("a 的值: %d
  10. ", a);
  11. a++;
  12. }
  13. return 0;
  14. }

输出结果::

 
  1. a 的值: 10
  2. a 的值: 11
  3. a 的值: 12
  4. a 的值: 13
  5. a 的值: 14
  6. a 的值: 15
  7. a 的值: 16
  8. a 的值: 17
  9. a 的值: 18
  10. a 的值: 19

代码片段5

 
  1. for(var a=10; a<20 ;i++){
  2. printf("a 的值: %d
  3. ", a);
  4. }

输出结果:

 
  1. a 的值: 10
  2. a 的值: 11
  3. a 的值: 12
  4. a 的值: 13
  5. a 的值: 14
  6. a 的值: 15
  7. a 的值: 16
  8. a 的值: 17
  9. a 的值: 18
  10. a 的值: 19
编程要求

请仔细阅读右侧代码,根据方法内的提示,在Begin - End区域内进行代码补充,具体任务如下:

统计1000099999中,不包含4的数值的个数。

测试说明:

预期输入: 预期输出:10000~99999中不包含4的个数为:52488

测试说明

平台会对您的代码进行运行测试,如果实际输出与预期输出相同,则算通关。


 

 

#include<stdio.h>
int main() 
{
/*********begin*********/
int a,j,i;
int s=0;
for(i=10000;i<=99999;i++)
{
    a=i;
    j=0;
    while(a)
    {
        j=a%10;
        if(j==4)
        break;
        a/=10;
    }
    if(j!=4)
    s++;
}
printf("10000~99999中不包含4的个数为:%d",s);

/*********end*********/
}

 

第3关:一元二次方程,其实很简单

任务描述

本关需要完成求解指定一元二次方程式的根的小程序。效果如下:

测试集输入:-2.5 3.8 1.2。 测试集输出:x1=-0.27 x2=1.79

相关知识
if-else语句

if...elseif语句的操作多了一步,当条件成立时,则执行 if 部分的代码块; 条件不成立时,则进入 else 部分。

例如,如果今天不下雨,就出门逛街,否则就宅在家玩游戏。

用法如下:

 
  1. if (<条件>) {
  2. <条件成立执行的代码>
  3. }else {
  4. <条件不成立执行的代码>
  5. }

执行过程如下:

例如:

 
  1. // 当分数score大于等于60时输出"考试合格!",否则输出"考试不合格!"
  2. int score = 80;
  3. if (score >= 60)
  4. System.out.println("考试合格!");
  5. else {
  6. System.out.println("考试不合格!");
  7. }
编程要求

请仔细阅读右侧代码,根据方法内的提示,在Begin - End区域内进行代码补充,具体任务如下:

求ax2+bx+c=0方程的根。

由键盘输入任意值abc,需要在程序中进行判断:

如果a=0,输出错误提示系数a不能为零; 如果b2−4ac<0,输出方程无实根的信息; 如果b2−4ac>=0,计算并输出方程的两个实根。

测试说明:

测试输入:2 3 4。 预期输出:方程无实根

测试说明

平台会对您的代码进行运行测试,如果实际输出与预期输出相同,则算通关。

 

#include <stdio.h>
#include<math.h>
int main()
{
	/*********begin*********/
float a,b,c,x1,x2,s;
scanf("%f%f%f",&a,&b,&c);
s=b*b-4*a*c;
x1=(-b+sqrt(s))/(2*a);
x2=(-b-sqrt(s))/(2*a);
if(a==0)
printf("系数a不能为零\n");
else
{
    if(s<0)
    printf("方程无实根\n");
    if(s>=0)
    printf("x1=%.2f x2=%.2f",x1,x2);
}
return 0;
	/*********end*********/
}

 

 

第4关:复数不再是难题 

任务描述

本关需要完成复数运算的小程序。效果如下:

测试集输入:2.5 3.6 1.5 4.9//依次为a,b,c,d

测试集输出:1.00+-1.30i //无论ab是否小于等于0都按该a+bi的输出。

相关知识
运算公式
 
  1. (a+i*b)+(c+i*d) = (a+c)+i*(b+d)
  2. (a+i*b)-(c+i*d) = (a-c)+i*(b-d)
  3. (a+i*b)*(c+i*d) = (ac-bd)+i*(bc+ad)
编程要求

请仔细阅读右侧代码,根据方法内的提示,在Begin - End区域内进行代码补充,具体任务如下:

设有两个复数a+i*bc+i*d,要求:

  • 定义一个结构体类型来描述复数;

  • 复数之间的加法、减法、乘法和除法分别用不用的函数来实现;

  • 必须使用结构体指针的方法把函数的计算结果返回。

输入格式:

输入只有一行,其格式为:运算符号(+,-,*)abcd

输出格式:

输出:a+bi,输出时不管ab是小于0或等于0都按该格式输出,输出时a,b都保留两位。

注:

  • 使用scanfprintf输入输出,要输出保留两位小数点,使用%.2lf

测试举例:

测试输入:* 2.5 3.6 1.5 4.9。 预期输出:-13.89+17.65i

测试说明

平台会对您的代码进行运行测试,如果实际输出与预期输出相同,则算通关。

#include<stdio.h>  
#include<malloc.h>  
#include<stdlib.h>  
typedef struct {  
        double real;  
        double i;  
}complex;  
 complex* add(complex a, complex b){  
    /*********begin*********/
complex *c;
    c=(complex*)malloc(sizeof(complex));
    c->real=a.real+b.real;
    c->i=a.i+b.i;
    return c;

    /*********end*********/
 }  
 complex* minus(complex a, complex b){  
    /*********begin*********/

complex *c;
    c=(complex*)malloc(sizeof(complex));
    c->real=a.real-b.real;
    c->i=a.i-b.i;
    return c;

    /*********end*********/
 }  
 complex* multiply(complex a, complex b){  
    /*********begin**********/
complex *c;
    c=(complex*)malloc(sizeof(complex));
    c->real=(a.real*b.real)-(a.i*b.i);
    c->i=a.real*b.i+a.i*b.real;
    return c;

    /*********end*********/  
 }  
int main()  
{     
    /*********begin**********/
char c;
    complex a,b;
    complex d;
    scanf("%c%lf%lf%lf%lf",&c,&a.real,&a.i,&b.real,&b.i);
    switch(c){
    case '+':
        d=*add(a,b);
        break;
    case '-':
        d=*minus(a,b);
        break;
    case '*':
        d=*multiply(a,b);
        break;
    }
    if(d.i<0)
        printf("%.2lf+(%.2lf)i",d.real,d.i);
    else
        printf("%.2lf+%.2lfi",d.real,d.i);
    return 0;


    /*********end**********/
}  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值