编程如此简单

李保成

2025年10月19日

一、程序设计概念

【例1.1】是一段程序,表达对大家的美好祝愿,即Good Luck!

# include <bits/stdc++.h>
using namespace std;
int main() 
{
    printf("Good Luck!");
    return 0;
}

程序为什么要这样写?编程要遵循什么样的规则?这个程序编写后怎样让计算机运行呢?

编程概念

需求 对大家说 "Good Luck!" 程序 # include <bits/stdc++.h> using namespace std; int main() {    printf("Good Luck!");    return 0; } 可执行文件 01010101 00110100 10101100 00101111 01010101 00110100 (二进制机器码) 输出 Good Luck! (控制台输出) 编程 翻译 运行 程序运行流程:从需求到终端输出

提示: 在信息学奥赛中,比赛题目会清晰界定具体问题,参赛者需围绕这一问题,开展编程。

翻译

C++程序 # include <bits/stdc++.h> using namespace std; int main() {    printf("Good Luck!");    return 0; } 可执行文件 01010101 00110100 10101100 00101111 01010101 00110100 ...... ...... (二进制机器码) 翻译(编译) C++程序通过编译生成可执行文件的过程

提示: 按照计算机语言所对应的规则,对所编写的程序进行解析的过程叫翻译。翻译可分为两种方式,一种叫解释,另一种叫编译

编译型语言 vs 解释型语言

提示: 按照计算机语言所对应的规则,对所编写的程序进行解析的过程叫翻译。 翻译可分为两种方式,一种叫解释,是计算机对程序的指令翻译一句执行一句的行为,PythonJavaScriptMATLAB等属于解释型语言;另一种叫编译,是计算机对程序的全部指令一次性全部翻译后,再让计算机执行的行为,CC++GoFortranRust等属于编译型语言。

  1. 这两种翻译方式哪个运行效率高?

  2. 这两种翻译方式各有什么优点?

程序结构

# include <bits/stdc++.h>
using namespace std;
int main() 
{
    printf("Good Luck!");
    return 0;
}

提示: 头文件是程序对其他程序的引用。主函数是程序的入口,在C/C++中return 0表示程序正常结束。

提示: 关键字是被语言设计者预先保留的特殊单词,它们具有固定的语法含义,用于构建程序的基本结构和逻辑。

程序结构

# include <bits/stdc++.h>
using namespace std;
int main() 
{
    printf("Good Luck!");
    return 0;
}
  1. 使用Dev-C++,运行【例1.1】。
  2. 熟悉程序结构,尝试修改程序。

二、算数表达式

【例1.2】是一段程序,计算1 + 1的值,并把结果输出到屏幕。

# include <bits/stdc++.h>
using namespace std;
int main() 
{
    printf("%d\n", 1 + 2);
    return 0;
}
  1. 修改【例1.2】,输出3 - 4的结果

  2. 修改【例1.2】,输出3 × 4的结果

  3. 修改【例1.2】,输出8 ÷ 4的结果

  4. 修改【例1.2】,输出8 MOD 5的结果

  5. 修改【例1.2】,输出8 ÷ 5的结果

算术运算符

基本算术运算符表
运算符 含义 说明 例子
+
-
* 乘法 乘法运算
/ 除法 两个整数相除的结果是整数,去掉小数部分 8 / 5 = 1
% 模运算的结果符号取决于被除数的符号 -8 % 5 = -3 8 % -5 = 3

提示: 上述运算符的优先级与数学中相同。

计算并输出算1 + 1的值

【例1.2】是一段程序,计算1 + 1的值,并把结果输出到屏幕。

# include <bits/stdc++.h>
using namespace std;
int main() 
{
    printf("%d\n", 1 + 2);
    return 0;
}
  1. 修改【例1.2】,输出3 - 4的结果

  2. 修改【例1.2】,输出3 × 4的结果

  3. 修改【例1.2】,输出8 ÷ 4的结果

  4. 修改【例1.2】,输出8 MOD 5的结果

  5. 修改【例1.2】,输出8 ÷ 5的结果

提示: 在C语言中,8 / 5的含义是8除以5所得商值的整数部分。

计算并输出算8 / 5的值,保留小数点后1位

# include <bits/stdc++.h>
using namespace std;
int main() 
{
    printf("%.1f\n", 8.0 / 5.0);
    return 0;
}
  1. %.1f中的数字1修改成2,结果如何?你能猜出1的意思吗?

  2. .1删除,只剩下%f,结果如何?%f的含义是什么?

  3. %.1f不变,把8.0 / 5.0改成8/ 5,结果如何?

  4. 8.0 / 5.0不变,%.1f改成%d,结果如何

提示: 整数值用%d输出,实数用%.f输出。

三、变量及其输入

现在计算的数据是事先定好的,可不可以让程序读取键盘输入,并根据输入内容计算结果呢?

a + b 问题

【例1.3】从键盘输入两个整数,计算两个整数的和,并把结果输出到屏幕。

# include <bits/stdc++.h>
using namespace std;
int main() 
{
    int a, b;
    scanf("%d%d", &a, &b);
    printf("%d\n", a + b);
    return 0;
}

提示: scanf()中的占位符和变量的数据类型应该一一对应,并每个变量前应加&符号。

求圆的面积

【例1.4】输入半径r,求圆的面积,保留3位小数。

输入:1
输出:3.142
# include <bits/stdc++.h>
using namespace std;
int main() 
{
    //const double pi = acos(-1);
    const double pi = 3.1415;
    double r, s;
    scanf("%lf", &r);
    s = pi * r * r;
    printf("%.3lf", s);
    return 0;
}

提示: 尽量用const关键字声明常数字。

提示: s = pi * r * r;的含义是先把等号右边的值计算出来,然后赋给左边的变量。变量是喜新厌旧的。

四、顺序结构程序设计

一、分析问题 (分析已知、未知) 二、数据定义 (已知未知的取名和类型) 三、数据输入 (输入已知) 四、数据计算 (①数学建模②设计算法) 五、数据输出 (输出未知)

三位数反转

【例1.5】输入一个三位数,反转后输出。

输入:123
输出:321
  1. 分析问题。

  2. 确定已知和未知的取名和类型。

  3. 输入已知。

  4. 设计算法解决问题。

  5. 输出答案(未知)。

三位数反转

【例1.5】输入一个三位数,反转后输出。

# include <bits/stdc++.h>
using namespace std;
int main() 
{
    int n;
    scanf("%d", &n);
    printf("%d%d%d", n % 10, n / 10 % 10, n / 100);
    return 0;
}
  1. 输入1234,输出值是多少?为什么?
  2. 如何在输出的三个数字中间添加空格?
  3. 题目增加条件:如果输入520时,要求输出25,怎么办?

提示: printf的格式字符串中可以包含其他可打印符号,打印时原样输出。

三位数反转

【例1.5】输入一个三位数,反转后输出。

# include <bits/stdc++.h>
using namespace std;
int main() 
{
    int n, ans = 0;
    scanf("%d", &n);
    ans = n % 10 * 100 + n / 10 % 10 * 10 + n / 100;
    // ans = n + 99 * (n % 10) - 99 * (n / 100);
    printf("%d", ans);
    return 0;
}

提示: 注释的本质是 “代码的说明书”,它不影响程序运行。单行注释以//开头,从//到本行末尾的所有内容均为注释。

交换变量

【例1.6】输入两个整数ab,交换两者的值,然后输出。

输入:123 456
输出:456 123
点击展开答案
# include <bits/stdc++.h>
using namespace std;
int main() 
{
    int a, b, t;
    scanf("%d%d", &a, &b);
    t = a;
    a = b;
    b = t;
    printf("%d %d\n", a, b);
    return 0;
}