分类: 实践课

  • 实验 5:让计算机做复杂的事情——循环结构

    一、实验目标

    1. 能够运用计算思维分析解决简单的实际问题。
    2. 能够熟练应用 whiledo...whilefor 语句的基本语法和执行流程。
    3. 能够在 VS2010 开发环境中综合运用循环结构编写较强功能的程序。

    二、知识回顾

    1. 循环的四要素

    • 循环体:重复执行的核心操作。
    • 循环初始条件:初始化循环控制变量。
    • 循环控制条件:构建循环控制表达式。
    • 循环控制变量的修改:构建循环退出机制,避免死循环。

    2. 三种循环语句

    (1)while 循环

    • 语法

      while (表达式) {
          循环体;
      }
      
    • 特点:先判断后执行,循环体执行次数为 0 到多次。

    (2)do...while 循环

    • 语法

      do {
          循环体;
      } while (表达式);
      
    • 特点:先执行后判断,循环体至少执行一次。

    (3)for 循环

    • 语法

      for (表达式1; 表达式2; 表达式3) {
          循环体;
      }
      
      • 表达式1:初始化循环变量。
      • 表达式2:循环控制条件。
      • 表达式3:更新循环变量。
    • 特点:结构紧凑,适合已知循环次数的情况。

    3. 循环注意事项

    • 循环控制变量必须在循环开始前初始化。
    • 循环体内必须有修改控制变量的语句,确保循环能正常终止。
    • 避免死循环:确保循环条件最终能变为假。
    • 若进入循环前条件为假,则循环体一次也不执行(whilefor)。

    三、实验内容与实现

    1. 实验1:统计字符串中各类字符个数

    • 要求:输入一行字符,统计英文字母、空格、数字和其他字符的个数。
    • 实现方法
      • 使用 while((c = getchar()) != '\n') 逐字符读取。
      • 使用 if-else 结构判断字符类型并计数。
    • 扩展:可分别统计大写字母、小写字母、数字、空格等。

    2. 实验2:输出所有“水仙花数”

    • 定义:一个3位数,其各位数字的立方和等于该数本身,如 (153 = 1^3 + 5^3 + 3^3)。
    • 实现方法
      • 方法一:遍历100到999的所有数,分解出各位数字,判断是否满足条件。
      • 方法二:使用三重循环遍历百位、十位、个位,组合成三位数进行判断。
    • 输出:153、370、371、407。

    3. 实验3:猴子吃桃问题

    • 问题描述:猴子每天吃前一天剩下的一半又一个,第10天只剩1个,求第一天摘了多少桃子。
    • 解决方法:逆向推导,从第10天开始往前推:
      • 第10天:1个
      • 第9天:(1 + 1) × 2 = 4个
      • 通用公式:(前一天 = (当天 + 1) × 2)
    • 扩展:若每天吃前一天剩下的一半又两个,结果会不同。

    4. 实验4:牛顿迭代法求方程的根

    • 方法:利用切线逼近方程的根。
      • 迭代公式:(x_{n+1} = x_n – \frac{f(x_n)}{f’(x_n)})
      • 终止条件:(|x_{n+1} – x_n| < \varepsilon)
    • 示例方程:(2x^3 – 4x^2 + 3x – 6 = 0)
    • 实现:使用 do...while 循环进行迭代,直到满足精度要求。
    • 扩展:可修改初始值、输出迭代次数和每次迭代结果,分析不同初始值对迭代收敛的影响。

    四、重点与难点

    重点

    • 循环结构的构建。
    • 三种循环语句的语法与使用。
    • 循环与选择结构的结合运用。

    难点

    • 实际问题中循环要素的判定与设计。
    • 循环嵌套的逻辑理解与实现。
    • 迭代算法的设计与实现(如牛顿迭代法)。

    五、思考题

    1. 如何灵活中断循环的执行?举例说明(如使用 breakcontinue)。
    2. 多重循环语句的执行过程是怎样的?内外层循环如何协同工作?
  • 实验 4:让计算机做复杂的事情——选择结构

    一、实验目标

    1. 能够正确使用 if 语句实现两分支、多分支选择结构。
    2. 能够正确使用 switch 语句实现多分支选择结构。
    3. 初步形成编写C程序解决复杂问题的能力。

    二、知识回顾

    1. if 语句实现两分支选择结构

    • 语法形式:

      if (表达式) 
          语句1;
      else 
          语句2;
      
    • 表达式可以是任意合法的C表达式。

    • 语句1和语句2可以是单条语句或复合语句(用 {} 括起来的多条语句)。

    • 执行逻辑:若表达式为“真”(非0),执行语句1;否则执行语句2。

    2. if 语句嵌套实现多分支选择结构

    • 语法形式:

      if (表达式1) 
          语句1;
      else if (表达式2) 
          语句2;
      else 
          语句3;
      
    • 注意事项

      • else 总是与它上面最近的未配对的 if 配对。
      • 可使用 {} 明确配对关系,增强代码可读性。
      • 建议缩进对齐,便于理解嵌套结构。

    3. switch 语句实现多分支选择结构

    • 语法形式:

      switch (表达式) {
          case 常量1:
              语句1;
              break;
          case 常量2:
              语句2;
              break;
          // ...
          default:
              语句n;
      }
      
    • 注意事项

      • 表达式必须是整型或字符型。
      • case 后面的常量值必须互不相同,且与表达式类型一致。
      • 若无 break,程序会继续执行下一个 case,直到遇到 breakswitch 结束。
      • default 分支可选,用于处理未匹配的情况。

    三、实验内容与要点

    1. 实验1:比较三个数大小(输出最小值)

    • 使用两两比较法,先假设第一个数为最小,再依次与后两个数比较。

    • 代码示例(整型):

      if (min > b) min = b;
      if (min > c) min = c;
      

    2. 实验2:计算小于等于1000的正数的平方根

    • 使用 sqrt() 函数(需包含 <math.h>)。

    • 注意输入数据合法性判断:

      if (x <= 1000) {
          // 计算平方根
      } else {
          // 提示输入过大
      }
      

    3. 实验3:分段函数计算

    • 使用多分支 if-else if-else 结构。

    • 注意条件范围的划分,如:

      if (x < 1) y = x;
      else if (x < 10) y = 2*x - 1;
      else y = 3*x - 11;
      

    4. 实验4:百分制成绩转等级

    • 方法一:使用 if-else if-else 结构。

    • 方法二:使用 switch 结构,结合 score/10 进行等级匹配。

    • 增强程序健壮性:添加输入合法性检查(0~100之间):

      if (score > 100 || score < 0) {
          printf("成绩输入错误\n");
      }
      

    5. 实验5(思考题):三个数从小到大排序

    • 方法一:最值法(找出最大值、最小值、中间值)。

    • 方法二:排序法(两两比较并交换):

      if (a > b) { temp = a; a = b; b = temp; }
      if (a > c) { temp = a; a = c; c = temp; }
      if (b > c) { temp = b; b = c; c = temp; }
      

    四、重难点总结

    重点

    • 选择结构的构建方法。
    • if 语句及其嵌套的使用。
    • switch 语句的使用。

    难点

    • if 嵌套的配对逻辑。
    • switch 语句中 break 的作用与使用时机。
    • 如何确保程序能覆盖所有可能的输入情况,增强程序的完备性和健壮性。

    五、思考

    1. 如何优化三个数的排序算法?
    2. 是否能用更简洁的代码实现?
  • 实验 3:我们与计算机的交流方式

    一、实验目标

    1. 熟练运用标准输入输出函数(scanfprintf)处理不同类型数据的输入与输出。
    2. 掌握简单文本文件的读写操作,能编写完整的文件操作程序。

    二、核心知识回顾

    (一)标准输入函数:scanf

    • 语法格式:scanf(格式控制字符串, 变量地址列表)
    • 核心要求:第2至n个参数必须是变量地址(加&)或指向变量地址的指针。
    • 常用格式控制符
      • 整型:%d(有符号十进制)、%u(无符号十进制)、%o(八进制)、%x/X(十六进制)。
      • 实型:%f(小数/指数形式)、%e/E(指数形式)、%g/G(自动选最短格式)。
      • 字符/字符串:%c(单个字符)、%s(字符串)。
    • 附加格式符:l(长整型/双精度)、h(短整型)、域宽(指定输入宽度)、*(读入不赋值)。
    • 关键注意事项
      • 输入数据需与格式控制字符串完全匹配,否则停止读取。
      • 读取整型数据时,遇空格、回车、非小数点符号或字母即结束。
      • %c会读取空格、回车等空白字符,需注意输入顺序。

    (二)标准输出函数:printf

    • 语法格式:printf(格式控制字符串, 输出数据列表)
    • 常用格式控制符:与scanf基本一致,%f默认输出6位小数。
    • 附加格式符:l(长整型)、m(最小输出宽度)、.n(指定小数位数/字符串截取长度)、-(左对齐)。
    • 功能:可输出变量、常量或表达式的值,支持多类型数据同时输出。

    (三)文本文件操作

    • 核心流程:包含头文件(#include <stdio.h>)→ 定义文件指针(FILE *fp)→ 打开文件(fopen)→ 读写操作(fscanf/fprintf)→ 关闭文件(fclose)。
    • 关键函数
      • 打开文件:fp = fopen("文件名", "打开方式"),常用方式有"w"(只写,创建新文件)、"r"(只读,需文件已存在)。
      • 写文件:fprintf(文件指针, 格式字符串, 输出表列),用法与printf类似,多文件指针参数。
      • 读文件:fscanf(文件指针, 格式字符串, 地址表列),用法与scanf类似,需指定文件指针。
      • 关闭文件:fclose(文件指针),避免数据丢失和资源占用。

    三、实验内容与示例代码

    (一)实验1:字符型数据的双重显示

    • 实验要求:定义两个字符型变量,分别用字符方式和整数方式显示,验证字符与ASCII码的对应关系。
    • 示例代码
    #include <stdio.h>
    int main() {
        char c1, c2;
        c1 = 'a';  // 可替换为97、197等数值
        c2 = 'b';  // 可替换为98、198等数值
        printf("%c %c\n", c1, c2);  // 字符方式显示
        printf("%d %d\n", c1, c2);  // 整数方式显示(ASCII码)
        return 0;
    }
    
    • 预期结果:字符初始化时输出对应字符及ASCII码(如a b97 98),超出ASCII范围的数值输出特殊字符及对应整数。

    (二)实验2:多类型数据的输入与输出

    • 实验要求:通过scanf输入指定数据(a=3b=7x=8.5y=71.82c1=Ac2=a),并用printf显示。
    • 示例代码(两种格式控制方式)
    1. 基础格式
    #include <stdio.h>
    int main() {
        int a, b;
        float x, y;
        char c1, c2;
        scanf("%d%d", &a, &b);
        scanf("%f%f", &x, &y);
        scanf("%c%c", &c1, &c2);
        printf("a=%d, b=%d\n", a, b);
        printf("x=%f, y=%f\n", x, y);
        printf("c1=%c, c2=%c\n", c1, c2);
        return 0;
    }
    
    1. 带提示字符格式
    #include <stdio.h>
    int main() {
        int a, b;
        float x, y;
        char c1, c2;
        scanf("a=%d, b=%d,", &a, &b);
        scanf("x=%f, y=%f,", &x, &y);
        scanf("%c,%c", &c1, &c2);
        printf("a=%d, b=%d\n", a, b);
        printf("x=%f, y=%f\n", x, y);
        printf("c1=%c, c2=%c\n", c1, c2);
        return 0;
    }
    

    (三)实验3:文本文件写入

    • 实验要求:创建文本文件,写入整型、实型、字符型数据。
    • 示例代码
    #include <stdio.h>
    int main() {
        int a;
        float b;
        char c;
        FILE *fp;
        scanf("%d,%f,%c", &a, &b, &c);  // 输入格式:123,4.5,n
        fp = fopen("test1.txt", "w");    // 以只写方式创建文件
        fprintf(fp, "%d %f %c\n", a, b, c);  // 写入文件
        fclose(fp);  // 关闭文件
        return 0;
    }
    

    (四)实验4:文本文件读取与显示

    • 实验要求:读取已创建的文本文件数据,显示到屏幕上。
    • 示例代码
    #include <stdio.h>
    int main() {
        int a1;
        float b1;
        char c1;
        FILE *fp;
        fp = fopen("test1.txt", "r");  // 以只读方式打开文件
        fscanf(fp, "%d,%f,%c", &a1, &b1, &c1);  // 按写入格式读取
        printf("a1=%d, b1=%f, c1=%c\n", a1, b1, c1);  // 显示数据
        fclose(fp);  // 关闭文件
        return 0;
    }
    

    四、重难点总结

    (一)重点

    1. scanfprintf的格式控制符匹配与参数使用。
    2. 文本文件“打开-读写-关闭”的完整流程。
    3. 不同类型数据的输入输出格式规范。

    (二)难点

    1. scanf输入时的格式匹配问题,尤其是空白字符的处理。
    2. 文件操作函数的正确调用,包括文件路径、打开方式的选择。

    五、思考题

    1. 为何scanf需要使用变量地址,而printf不需要?
    2. 文件操作结束后,为何必须用fclose关闭文件?
  • 实验 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. 能否让程序从文件中读取数据,或把运行结果保存到文件中?(提示:需使用文件操作函数)
  • 实验 1:程序编写与调试

    一、C程序的编写过程

    (一)开发环境

    需借助编译环境将C语言(高级语言)翻译为机器语言,常用工具包括:

    • Visual C++
    • Vs2010
    • Code::Blocks

    (二)核心步骤(编辑→编译→连接→执行)

    步骤 核心操作 输出文件 文件后缀 关键说明
    编辑程序 用编辑器编写代码,保存为源文件 源程序 .c 源文件是存放汇编或高级语言代码的文件,需遵循C语言基础语法框架
    编译程序 编译器检查语法错误,将源程序翻译为机器指令 目标程序 .obj 若语法错误(如缺少分号、关键字错误),编译会失败并提示错误位置
    连接程序 将目标文件与标准库函数(如printf所在库)打包组装 可执行程序 .exe 连接成功后生成计算机可直接运行的文件,连接失败可能因库函数引用错误
    执行程序 运行可执行文件 运行结果 查看程序是否实现预期功能,若结果异常需排查逻辑或运行时错误

    (三)示例任务

    编写程序在屏幕输出两行内容:

    1. “我是中国人,我爱中国!”
    2. “I am Chinese. I love China!”

    二、Hello World类程序编写(基础输出程序)

    (一)核心代码框架

    #include <stdio.h>  // 引用标准输入输出库,用于printf函数
    int main(void)      // 主函数,程序入口
    {
        // 输出指定内容,\n表示换行
        printf("我是中国人,我爱中国!\n");
        printf("I am Chinese. I love China!\n");
        return 0;       // 主函数返回0,标识程序正常结束
    }
    

    (二)提交要求

    • 主观题形式,需将编写的程序拍照上传,确保代码清晰、无语法错误

    三、C程序的错误类型

    (一)语法错误(编译阶段报错)

    • 定义:违反C语言语法规则,如缺少分号、括号不匹配、变量未声明等。
    • 示例代码
      #include <stdio.h>
      int main(void)
      {
          int a,b,sum; 
          a=123; 
          b=456 sum=a+b;  // 错误:b=456后缺少分号
          printf(sum);    // 错误:printf格式错误,缺少引号和格式符
          return 0;
      }
      
    • 特征:编译时会提示具体错误位置(如“error C2146: 语法错误: 缺少‘;’”),程序无法生成目标文件。

    (二)逻辑错误(编译通过,结果异常)

    • 定义:语法无错,程序能正常执行,但结果不符合预期,多因算法或逻辑设计错误。
    • 示例代码
      #include <stdio.h>
      int main(void)
      {
          int a,b,c;
          scanf("%d%d",a,&b);  // 错误:scanf第一个参数应为&a(取地址)
          c=a/b;
          printf("sum is %d\n",c);  // 错误:变量c是除法结果,却标注为sum
          return 0;
      }
      
    • 特征:无报错信息,需通过对比预期结果与实际结果排查(如输入6和3,正确结果应为2,若因逻辑错误输出其他值)。

    (三)运行时错误(编译通过,运行崩溃/异常)

    • 定义:语法和逻辑无明显错误,但运行时因资源问题或非法操作(如未初始化变量、数组越界)无法正常执行。
    • 示例代码
      #include <stdio.h>
      int main(void)
      {
          int a,b,c;
          a=3;
          c=b;  // 错误:变量b未初始化,值为随机数
          return 0;
      }
      
    • 特征:运行时弹出错误提示(如“Run-Time Check Failure #3: 变量b未初始化”),程序可能中止或闪退。

    四、C语言调试工具

    (一)基于断点的调试(传统调试方式)

    1. 核心流程

    1. 设置断点:在代码关键位置(如分支、循环处)标记,使程序运行到此处中断,方便观察状态。
      • 示例:在if(x==y+z)行设置断点,查看x与y+z的比较逻辑。
    2. 运行程序:启动调试模式,程序执行到断点处暂停。
    3. 观察变量:通过调试工具查看变量实时值(如局部变量x、y、z的当前数值),判断是否符合预期。
    4. 修改代码:若发现错误(如将x=y+z(赋值)误写为x==y+z(判断)),暂停调试并修正代码,重新运行验证。

    2. 常用操作

    • 单步执行:逐行运行代码,观察每一步变量变化,定位错误位置。
    • 查看内存:复杂程序可查看内存地址中的数据,排查指针或数组相关错误。

    (二)基于大模型的调试(辅助调试方式)

    1. 工具示例

    • 讯飞星火大模型(https://xinghuo.xfyun.cn/botweb/2081730)
    • 功能定位:智能识别代码错误(如语法错误、逻辑漏洞),提供修正建议和解释。

    2. 调试示例

    • 原错误代码(缺少分号):
      #include <stdio.h>
      int main(void)
      {
          int a,b,sum;
          a=123;
          b=456 sum=a+b;  // 缺少分号
          printf("sum is ");
          return 0;
      }
      
    • 大模型修正后代码:
      #include <stdio.h>
      int main(void)
      {
          int a,b,sum;
          a=123;
          b=456;  // 补充分号
          sum=a+b;
          printf("sum is %d\n",sum);  // 补充格式符%d,输出sum值
          return 0;
      }
      

    五、思考题

    1. 程序中的标识符有什么用?(提示:标识变量、函数、数组等的名称,需遵循命名规则,如首字符为字母或下划线)
    2. 整型与浮点型运算后的结果是什么数据类型?由什么决定?(提示:结果为浮点型,由C语言的“隐式类型转换”规则决定,低精度类型向高精度类型转换)