当前位置: 首页 > article >正文

计241 作业2:C程序设计初步

问题 A: C语言实验——计算A+B(顺序结构)

思路讲解:

这个直接计算a+b就好,没有什么困难的,用来熟悉环境最适合不过


代码实现:

#include<stdio.h>

int main()
{
    int a,b;
    scanf("%d %d",&a,&b);
    printf("%d\n",a+b);

    return 0;
}

问题 B: 电子欢迎器

思路讲解:

这个就是学会使用字符数组,学会字符数组的输入输出,注意scanf这里不用加&,这个单独记住就好,然后就是空格不要去数,直接复制粘贴就好,然后注意换行,不然就格式错误了。

代码实现:

#include<stdio.h>

int main()
{
    char name[20];
    char howetown[20];

    scanf("%s",name);
    scanf("%s",howetown);

    printf("******************************************\n");
    printf("             Welcome\n");
    printf("             %s(%s)\n",name,howetown);
    printf("******************************************\n");

    return 0;
}

问题 C: 输入两个整数,进行四则运算并输出结果

 这道题主要是数据比较友好,保证了a一定能够整除b,否则的话就要去考虑a/b为小数的情况 ,到时候就需要使用浮点数了,要不两个int做除法遵循向下取整的原则,
https://blog.csdn.net/weixin_47712251/article/details/130675475
给你们找了一个博客,里面介绍了除法,包括整数的和浮点数的

我再自己额外说一点吧
 

C语言中的除法操作是通过运算符 / 来实现的。根据被除数和除数的类型,C语言中的除法可以分为以下几种情况:

1. 整数除法

  • 定义:当被除数和除数都是整数时,C语言执行整数除法。
  • 特点:结果会是一个整数,任何小数部分会被截断(向下取整)。

示例

#include <stdio.h>

int main() {
    int a = 10;
    int b = 3;
    int result = a / b;  // result将是3,忽略了小数部分
    printf("整数除法: %d / %d = %d\n", a, b, result);
    return 0;
}

2. 浮点除法

  • 定义:当被除数或除数是浮点数(floatdouble类型)时,C语言执行浮点除法。
  • 特点:结果将是一个浮点数,可以包含小数部分。

示例
 

#include <stdio.h>

int main() {
    float a = 10.0;
    float b = 3.0;
    float result = a / b;  // result将是3.333333
    printf("浮点除法: %.2f / %.2f = %.2f\n", a, b, result);
    return 0;
}

3. 整数与浮点数的除法

  • 定义:如果一个整数被一个浮点数除,结果将是浮点数。

示例
 

#include <stdio.h>

int main() {
    int a = 10;
    float b = 3.0;
    float result = a / b;  // result将是3.333333
    printf("整数与浮点数的除法: %d / %.2f = %.2f\n", a, b, result);
    return 0;
}

4. 除数为零的情况

  • 注意:在进行除法运算时,必须确保除数不为零。如果除数为零,程序会导致运行时错误,通常会引发一个“除以零”错误。

示例
 

#include <stdio.h>

int main() {
    int a = 10;
    int b = 0;

    if (b != 0) {
        int result = a / b;
        printf("结果: %d / %d = %d\n", a, b, result);
    } else {
        printf("错误: 除数不能为零!\n");
    }

    return 0;
}

总结

  • C语言支持整数除法和浮点除法。
  • 在进行除法运算时,注意检查除数是否为零,以避免程序崩溃。
  • 根据不同的数据类型,结果的类型也会有所不同。

通过理解这些基本概念,可以在C语言中有效地进行除法操作。
 

C题代码: 

#include<stdio.h>
int main(){
    int a,b;
    scanf("%d %d",&a,&b);
    printf("%d\n",a+b);
    printf("%d\n",a-b);
    printf("%d\n",a*b);
    printf("%d",a/b);
    return 0;
}

 问题 D: 三个整数和、积与平均值
 

思路讲解:

这道题的计算平均数就利用到了我刚才C题中所介绍的除法的应用,其他再没有什么了,

其实关于这个转化为浮点数的方法有很多种,

在这里我介绍一下类型转化吧

1. double a = b;

  • 类型:隐式类型转换(或自动类型转换)
  • 描述:在这一行代码中,变量 b 的值被隐式转换为 double 类型,并赋值给 a。这意味着如果 b 是一个其他类型(如 int 或 float),编译器会自动将其转换为 double 类型,而无需显式地指定转换。这个过程通常是安全的,因为 double 类型的范围和精度比其他类型要大。

示例

#include <stdio.h>

int main() {
    int b = 5;        // b 是一个整数
    double a = b;    // 隐式转换为 double
    printf("%f\n", a); // 输出: 5.000000
    return 0;
}

2. (double) b

  • 类型:显式类型转换(或强制类型转换)
  • 描述:在这一行代码中,(double) b 表示将 b 强制转换为 double 类型。这里的强制类型转换是通过在变量前加上类型名称来实现的。它明确地告诉编译器将 b 转换为 double 类型,可以用于需要指定类型的上下文。

示例

#include <stdio.h>

#include <stdio.h>

int main() {
    int b = 5;              // b 是一个整数
    double a = (double) b; // 显式转换为 double
    printf("%f\n", a);     // 输出: 5.000000
    return 0;
}

总结

  • 隐式类型转换double a = b; 会自动将 b 转换为 double 类型。
  • 显式类型转换(double) b 明确要求将 b 转换为 double 类型,通常在需要特定类型的上下文中使用。

在大多数情况下,隐式转换会更简洁,而显式转换则提供了更高的控制和可读性,尤其是在复杂的表达式中。

这道题还有关于浮点数的一些知识点,比如,float和double的区别,float用%f,double 使用%lf,
%.2lf是保留小数点后两位,同学们可以去CSDN上进行自行搜索,不过也不着急,反正你们后续做题也就会了


代码实现:

#include<stdio.h>
int main()
{
    int a,b,c;
    scanf("%d %d %d",&a,&b,&c);

    printf("%d %d %.2lf",a+b+c,a*b*c,(a+b+c)/3.0);//因为3.0是一个浮点数,所以整数与浮点数做除法,结果一个浮点数
    return 0;
}

 或者是

#include<stdio.h>
int main()
{
    int a,b,c;
    scanf("%d %d %d",&a,&b,&c);

    printf("%d %d %.2lf",a+b+c,a*b*c,(double)(a+b+c)/3);
    return 0;
}

问题 E: C语言实验——圆柱体计算



思路讲解:

这里题干说的定义,我使用了define,你们可能还没学,不过使用double PI=3.1415926也一样没什么区别

代码实现:
 

#include<stdio.h>
#define PI 3.1415926
int main()
{
    double r,h;
    scanf("%lf %lf",&r,&h);
    double C=2*PI*r;
    double S1=PI*r*r;
    double S2=C*h;
    double V=S1*h;
    printf("%.2lf %.2lf %.2lf %.2lf",C,S1,S2,V);
    return 0;
}

问题 F: 输出两个整数中较小的数(1)


思路讲解
 

这道题题干也说了,有很多种做法,那么我就来简单介绍几种吧


1.写条件判断语句,也就是if else 语句
#include<stdio.h>
int main()
{
    int a,b;
    scanf("%d %d",&a,&b);
    if(a<b)
    {
        printf("min=%d",a);
    }
    else
    {
        printf("min=%d",b);
    }
    return 0;
}
2.使用函数

C++中自带min函数和max函数,而C语言中没有,那么我们可以自己手写,min函数和max函数,我想函数你们肯定还没学,所以有能力的同学可以先自行研究着,如果实在理解不了,等后期你们学了函数就明白了
 

#include<stdio.h>

int min(int a,int b) //min函数,作用是返回参数a和参数b当中较小的那一个 int类型的函数
{
    if(a>b)
    {
        return b;
    }
    else
    {
        return a;
    }
}

int main()
{
    int x,y;
    scanf("%d %d",&x,&y);
    printf("min=%d\n",min(x,y));

    return 0;
}

3,使用三目运算符
 

所谓的三目运算符,这里指的就是?:表达式,那么何为?:表达式

三目运算符(Ternary Operator),也称为条件运算符,是一种简洁的条件判断表达式,通常用于替代简单的 if-else 语句。它的基本形式为:
 

条件 ? 表达式1 : 表达式2

1. 基本语法

  • 条件:一个布尔表达式(返回真或假)。

  • 表达式1:当条件为真时返回的值或表达式。

  • 表达式2:当条件为假时返回的值或表达式。

2. 工作原理

三目运算符根据条件的真值来决定返回哪一个表达式的值:

  • 如果条件为真(true),则返回表达式1。

  • 如果条件为假(false),则返回表达式2。

#include<stdio.h>

int main()
{
    int x,y;
    scanf("%d %d",&x,&y);

    printf("min=%d\n",x>y?y:x);

    return 0;
}

问题 G: 输出两个整数中较小的数(2)
 
 

这道题和上一道题一样的,就略过了

问题 H: 求三角形面积 

 

思路讲解:

 

预备知识的话,就是海伦公式,然后就是判断是否能构成三角形条件,这个你们都很熟,任意两边之和大于第三边,


这里补充一下开根号的函数
sqrt,使用这个函数之前需要引入math头文件

 代码实现:
 

#include<stdio.h>
#include<math.h>
int main()
{
    double a,b,c,s,area;
    scanf("%lf %lf %lf",&a,&b,&c);
    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("area=%.2lf",area);
    }
    else
    {
        printf("error input");
    }
    return 0;
}

问题 I: 夏令营的年龄



思路讲解:



其实就是那道求最小值的题,现在只不过是三个数,除了求最小值,还要求最大值,这道题实现的方式也很多,可以if else语句,可以使用三目运算符,可以使用遍历,函数也可以

来吧:

 

//使用if和else语句进行判断
#include <stdio.h>
int main()
{
    int age1,age2,age3;
    scanf("%d %d %d",&age1,&age2,&age3);
    int max_age=age1;
    if(age2>max_age)
    {
        max_age=age2;
    }
    if(age3>max_age)
    {
        max_age=age3;
    }
    int min_age=age1;
    if(age2<min_age)
    {
        min_age=age2;
    }
    if(age3<min_age)
    {
        min_age=age3;
    }
    
    int diff=max_age-min_age;
    
    printf("%d",diff);
    return 0;
}

#include<stdio.h>

int main()
{
    int age1,age2,age3,max_age,min_age,diff;

    scanf("%d %d %d",&age1,&age2,&age3);

    ///寻找最大年龄
    if(age1>age2 && age1>age3)
    {
        max_age=age1;
    }
    else if(age2>age1 && age2>age3)
    {
        max_age=age2;
    }
    else
    {
        max_age=age3;
    }

    ///寻找最小年龄

    if(age1<age2 && age1<age3)
    {
        min_age=age1;
    }
    else if(age2<age1 && age2<age3)
    {
        min_age=age2;
    }
    else
    {
        min_age=age3;
    }

    diff=max_age-min_age;

    printf("%d\n",diff);

    return 0;
}
//三目运算符
#include<stdio.h>

int main()
{
    int age1,age2,age3;
    scanf("%d %d %d",&age1,&age2,&age3);

    int max_age=(age1>age2?age1:age2)>age3?(age1>age2?age1:age2):age3;
    int min_age=(age1<age2?age1:age2)<age3?(age1<age2?age1:age2):age3;

    int diff=max_age-min_age;

    printf("%d\n",diff);

    return 0;
}
//使用遍历数组来实现
#include<stdio.h>

int main()
{
    int a[4];//开数组

    //数组的下标是从0开始的,一共是3个元素,因此下标是0,1,2,a[0],a[1],a[2]
    for(int i=0;i<3;i++)
    {
        scanf("%d",&a[i]);
    }

    int Max=0; //求最大的年龄,初始化为无穷小,这里年龄最小为0
    int Min=200;//求最小的年龄,初始化为无穷大,这里年龄最大初始化为200吧

    for(int i=0;i<3;i++)
    {
        if(a[i]>Max)
        {
            Max=a[i];
        }

        if(a[i]<Min)
        {
            Min=a[i];
        }
    }

    //printf("%d\n",Max);
    //printf("%d\n",Min);

    int ans=Max-Min;

    printf("%d",ans);

    return 0;
}

问题 J: 展示十年的年龄



思路讲解:

 

这个的话,其实就是练习使用for循环语句,只要你会了for循环,这道题没什么问题,还有很多同学出现了格式错误,大部分是忘记加换行符了


代码实现:

#include<stdio.h>
int main()
{
    int age;
    scanf("%d",&age);
    printf("*****************************************\n");
    for(int i=0; i<10; i++)
    {
        printf("%d ",age+i);
    }
    printf("\n");
    for(int i=0; i<10; i++)
    {
        printf("%d ",age+i*2);
    }
    printf("\n");
    printf("*****************************************");
    return 0;
}


 


http://www.kler.cn/a/324368.html

相关文章:

  • 网络基础(4)传输层
  • Qt 项目架构设计
  • K8S containerd拉取harbor镜像
  • 聊聊Flink:Flink的分区机制
  • 机器学习-35-提取时间序列信号的特征
  • 【服务器】本地安装X11 服务器-Windows
  • 19.3 打镜像部署到k8s中,prometheus配置采集并在grafana看图
  • 《程序猿之Redis缓存实战(1) · 基础知识》
  • 哈希知识点总结:哈希、哈希表、位图、布隆过滤器
  • 视频融合共享平台LntonAIServer视频智能分析抖动检测算法和过亮过暗检测算法
  • vue3 实现文本内容超过N行折叠并显示“...展开”组件
  • 基于Hive和Hadoop的图书分析系统
  • jdk1.6版本发送HTTPS请求,报错Could not generate DH keypair问题解决
  • Synchronized和 ReentrantLock有什么区别?
  • OFDM通信系统发射端需要做ifftshift的原因分析
  • C语言课程设计题目六:学生信息管理系统设计
  • Excel提取数据
  • FPGA IP 和 开源 HDL 一般去哪找?
  • Linux基础命令zip,unzip详解
  • 【ESP32】Arduino开发 | I2C控制器+I2C主从收发例程
  • 2024华为OD机试E卷-构成正方形的数量-(C++/Java/Python)
  • Redis 实现分布式锁时需要考虑的问题
  • 使用 Frida Hook Android App
  • Linux文件IO(十一)-复制文件描述符与截断文件
  • 大数据复习知识点2
  • Deep Learning for Video Anomaly Detection: A Review 深度学习视频异常检测综述阅读