实验 2:让计算机学会运算

一、实验目标

  1. 掌握变量的正确定义与赋值方法。
  2. 熟练运用运算符构建合法的C表达式。
  3. 能够使用顺序结构编写简单C程序。
  4. 熟悉VS2010开发环境,完成程序的创建、编写、运行与调试。

二、核心知识回顾

(一)变量基础

  1. 变量使用原则:遵循“先定义,后使用”,未定义的变量无法在程序中调用。
  2. 变量定义格式数据类型 变量名1, 变量名2, ..., 变量名n;
    • 数据类型:决定变量占用的字节数、存储形式及取值范围(如int占4字节,char占1字节)。
    • 变量名:需为合法标识符,由字母、数字、下划线组成,且不能以数字开头(错误示例:int 0_cj;,正确示例:int a, b; float x;)。
  3. 变量初始化:定义时为变量赋初始值(推荐编程习惯,避免内存中随机值干扰),格式为数据类型 变量名 = 初始值;
    • 示例1:int x = 1, y, z;(仅x初始化,y、z未初始化)
    • 示例2:int x = y = z = 1;(x、y、z均初始化为1)

(二)不同类型数据混合运算规则

整型(int)、字符型(char)、浮点型(float/double)可混合运算,转换遵循“低精度→高精度”“少字节→多字节”原则,具体优先级(从低到高):char/shortintfloatdouble

运算示例解析

已知 int i = 3; float f = 2.5; double d = 7.5;,计算表达式 10 + 'a' + i * f - d / 3

  1. 10 + 'a''a'的ASCII值为97(int型),结果为107int型)。
  2. i * fiint)与ffloat)均转换为double,计算得3*2.5=7.5double型)。
  3. 步骤1结果 + 步骤2结果:107int)转换为double,得114.5double型)。
  4. d / 33int)转换为double,计算得7.5/3=2.5double型)。
  5. 最终运算:114.5 - 2.5 = 112.0double型)。

(三)简单程序编写步骤

  1. 编写main函数:C程序入口,格式为int main() { ... return 0; }
  2. 定义与初始化变量:根据需求选择合适的数据类型,必要时初始化。
  3. 输入数据:使用scanf函数为变量赋值(如scanf("%f", &r);)。
  4. 实现算法语句:通过表达式、公式等完成核心计算(如圆面积公式、速度位移公式)。
  5. 输出数据:使用printf函数展示结果(如printf("圆面积S=%.6f", s);)。

三、实验内容与实现

(一)实验1:观察整型与字符型变量的地址、值与占用空间

  1. 实验需求:存储1个整数和1个字符,观察其存储地址、占用字节数及具体值,支持断点调试与结果打印(选做)。
  2. 参考代码
#include<stdio.h>
int main(void)
{
    int a = 2;    // 初始化整型变量a
    char c = '2'; // 初始化字符型变量c
    // 打印字符变量信息
    printf("字符c的值是%c\n", c);
    printf("字符c的存储地址是0x%x\n", &c);
    printf("字符c占用内存%d个字节\n", sizeof(c));
    // 打印整型变量信息
    printf("整数a的值是%d\n", a);
    printf("整数a的存储地址是0x%x\n", &a);
    printf("整数a占用内存%d个字节\n", sizeof(a));
    return 0;
}
  1. 关键说明
    • sizeof(变量名):获取变量占用的字节数(char占1字节,int占4字节)。
    • &变量名:获取变量的内存地址,打印格式用%x(十六进制)。

(二)实验2:计算圆的面积与周长

  1. 实验需求:输入圆的半径r,根据圆周率3.14计算面积S(公式:S=3.14*r*r)与周长C(公式:C=2*3.14*r)。
  2. 参考代码
#include<stdio.h>
int main()
{
    float r, s, c; // 定义半径r、面积s、周长c(浮点型)
    printf("请输入圆半径r:");
    scanf("%f", &r); // 输入半径
    s = 3.14 * r * r; // 计算面积
    c = 2 * 3.14 * r; // 计算周长
    printf("圆面积S=%.6f\n", s); // 保留6位小数输出面积
    printf("圆周长C=%.6f\n", c); // 保留6位小数输出周长
    return 0;
}
  1. 运行示例:输入3.5,输出“圆面积S=38.465000,圆周长C=21.980000”。

(三)实验3:计算物体的速度与位移

  1. 实验需求:输入初速度v0(浮点型)、加速度a(浮点型)、时间t(整型),根据物理公式计算t时刻的速度与位移。
  2. 核心公式
    • 速度:v = v0 + a * t
    • 位移:s = v0 * t + 0.5 * a * t * t(用0.5避免整数除法精度问题)
  3. 参考代码
#include <stdio.h>
int main(void)
{
    float v0, a; // 初速度v0、加速度a(浮点型)
    int t;       // 时间t(整型)
    float v, s;  // t时刻速度v、位移s(浮点型)
    
    printf("请输入初始速度、加速度和经过的时间:\n");
    scanf("%f%f%d", &v0, &a, &t); // 输入三个参数
    
    v = v0 + a * t;                  // 计算速度
    s = v0 * t + 0.5 * a * t * t;    // 计算位移
    
    printf("当初始速度为%f时\n", v0);
    printf("%.1fs时的速度为%f\n", t, v); // 时间t保留1位小数
    printf("%.1fs时的位移为%f\n", t, s);
    return 0;
}
  1. 运行示例:输入0 0.19 30,输出“当初始速度为0.000000时,30.0s时的速度为5.700000,30.0s时的位移为85.500000”。

(四)实验4(选做):计算平面两点间距离

  1. 实验需求:输入两点坐标(x1,y1)(x2,y2),计算两点间距离(保留2位小数)。
  2. 核心公式distance = sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1))(需调用math.h头文件的sqrt函数)。
  3. 参考代码
#include<stdio.h>
#include<math.h> // 包含sqrt函数的头文件
int main() 
{
    float x1, y1, x2, y2; // 两点坐标
    float distance;        // 两点间距离
    
    scanf("%f%f%f%f", &x1, &y1, &x2, &y2); // 输入坐标
    // 计算距离的平方
    distance = (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1);
    distance = sqrt(distance); // 开平方得距离
    
    printf("%.2f", distance); // 保留2位小数输出
    return 0;
}
  1. 运行示例:输入3 5 6 7,输出“3.61”。

四、程序调试(VS2010环境)

(一)调试核心步骤

  1. 设置断点:在需观察的代码行左侧单击,出现红色圆点(如变量初始化行)。
  2. 启动调试:点击“调试”→“启动调试”(或按F5),程序运行至断点处暂停。
  3. 观察变量
    • 打开“局部变量”窗口,查看变量的实时值。
    • 若需查看地址或自定义变量,使用“快速监视”(按Shift+F9),输入&变量名查看地址。

(二)常用调试快捷键

功能 快捷键
启动调试 F5
停止调试 Shift+F5
逐语句执行(进入函数) F11
逐过程执行(跳过函数) F10
跳出当前函数 Shift+F11
切换断点 F9
快速监视 Shift+F9

五、思考题

  1. 如何在程序运行时测试多组数据以验证正确性?(提示:可结合循环结构实现)
  2. 能否让程序从文件中读取数据,或把运行结果保存到文件中?(提示:需使用文件操作函数)