【2025春季】计算机程序设计(混合式教学)

赵秀岩 王美航 房媛 康丽 邵利

目录

  • 1 程序设计概述
    • 1.1 开课前期准备工作(上课前看)
      • 1.1.1 教你VC++编程入门(上课前看)
    • 1.2 计算机语言
    • 1.3 算法
    • 1.4 C程序基本结构
  • 2 数据类型
    • 2.1 数据类型概述与标识符
    • 2.2 常量
    • 2.3 变量
    • 2.4 整型数据类型
    • 2.5 实型数据类型
    • 2.6 字符型数据类型
  • 3 运算符与表达式
    • 3.1 运算符概述与算术运算符
    • 3.2 自加自减运算符
    • 3.3 关系运算符
    • 3.4 逻辑运算符
    • 3.5 赋值运算符
    • 3.6 条件运算符
    • 3.7 逗号运算符
    • 3.8 sizeof运算符
    • 3.9 类型转换运算符
    • 3.10 位运算符
  • 4 顺序结构与输入输出
    • 4.1 基本输入输出函数
    • 4.2 字符输入输出函数
    • 4.3 顺序结构程序设计
  • 5 选择结构程序设计
    • 5.1 if语句
    • 5.2 switch语句
    • 5.3 选择结构的嵌套使用
  • 6 循环结构程序设计
    • 6.1 循环结构概述
    • 6.2 实现循环结构问题的语句
    • 6.3 循环语句的嵌套
    • 6.4 break和continue
    • 6.5 循环部分-高阶应用案例
      • 6.5.1 习题1-九九乘法表
      • 6.5.2 习题2-斐波那契数列
      • 6.5.3 习题3-大赛评分计算
      • 6.5.4 习题4-黑洞数验证
  • 7 数组
    • 7.1 一维数组
    • 7.2 二维数组
    • 7.3 字符数组与字符串
    • 7.4 数组与数据存储
  • 8 函数
    • 8.1 函数的基本概念定义与声明
    • 8.2 函数的参数
    • 8.3 函数的返回值
    • 8.4 函数的嵌套调用
    • 8.5 函数的递归调用
    • 8.6 变量的作用域与生存期
  • 9 指针
    • 9.1 指针与地址
    • 9.2 指针变量与指针运算
    • 9.3 指针与数组
    • 9.4 指针与字符串
    • 9.5 指针与函数
    • 9.6 指针数组
    • 9.7 数组指针
    • 9.8 指针的指针
  • 10 其他构造数据类型
    • 10.1 结构体
    • 10.2 共用体
    • 10.3 枚举
    • 10.4 结构体与链表
  • 11 编译预处理与宏定义
    • 11.1 编译预处理
    • 11.2 宏
  • 12 文件
    • 12.1 文件的定义与文件指针
    • 12.2 文件的打开和关闭
    • 12.3 文件的常用操作
  • 13 〔学生〕优秀案例分享
    • 13.1 小老鼠喝毒水
      • 13.1.1 智能212-邓钰林〔循环实现〕
      • 13.1.2 生工215-王景邦〔函数实现〕
      • 13.1.3 智能212-邓钰林〔函数实现〕
    • 13.2 歌手大赛评分系统
      • 13.2.1 生工215-王景邦
    • 13.3 中英对译查字典
      • 13.3.1 生工215-王景邦
      • 13.3.2 智能212-阎露云
    • 13.4 歌德巴赫猜想
    • 13.5 学生〔原创设计〕案例
      • 13.5.1 〔小马上楼〕智能212-王国旭
基本输入输出函数

 

标准输入和输出函数

  所谓输入输出是以计算机为主体而言的。在C语言中,所有的数据输入/输出都是由库函数完成的, 因此都是函数语句。在使用C语言库函数时,要用预编译命令#include将有关"头文件"包括到源文件中。
  scanf函数和printf函数也是C语言标准的输入输出函数,因为在程序编写过程中,用户可以通过scanf函数和printf函数对输入的数据与输出的数据进行格式化规范(例如指定存放或者显示数据的类型、位置、长度等),因此二者又被称之为格式输入函数和格式输出函数。功能较getchar函数和putchar函数要强大很多,是编写C语言程序的时最常用的两个函数。下面将详细介绍scanf函数和printf函数的使用及常用格式说明。


1:格式说明符

  格式控制说明符:由%与普通字符组成,例如%d,%c等。





例如:int a; char  b; float c; scanf(“%d,%c,%f”,&a,&b,&c);
要求在整型变量a中存放“123”,字符型变量b中存放字符“a”,单精度浮点型变量c中存放“1.23”。则正确的输入方法为:123,a,1.23↙(注意:三个数据中间的逗号不能省略。)
     说明:

  1. 用scanf函数读入数据,地址列表有三个,中间用逗号相隔开,变量的前面必须用“&”符号表示取变量的地址。

  2. 格式控制%d与&a相对应进行输出格式控制,%c与&b对应进行输出格式控制,%f与&c对应进行输出格式控制。格式控制部分除了格式控制,中间由两个逗号相隔开,因此输入数据的时候数据之间必须输入逗号。

  3. 当程序运行到scanf函数的时候,屏幕呈黑屏状态(同getchar函数,详见图3.1),光标闪烁等待用户输入相关数据。

  4. 格式说明符之间没有普通字符相互分隔——输入数据的时候,中间需要用空格、tab或者回车将数据分隔。

 

2 下面介绍printf函数的几种常见使用:

  1. printf函数有输出表项的情况

如:int  a=1;char b=’x’;float c=1.234;printf(“a=%d,b=%c,c=%f\n”,a,b,c);
结果:a=1,b=x,c=1.234000↙
说明:


  1. 本例初始化了三个不同类型的变量,通过printf函数将三个变量的内容输出。

  2. printf函数中的格式控制部分,由普通字符与格式说明符及转义字符组成,普通字符“a=”、“,b=”、“,c=”均原样输出;转义字符‘\n’表示输出完内容要回车换行;格式控制%d与a相对进行输出格式控制,%c与b相对应进行输出格式控制,%f与c相对应进行输出格式控制,按照从左向右的顺序,依次将三个变量中存放的值输出到标准输出设备上。

  3. %f是按照单精度浮点数输出,C语言规定,%f格式化的数据,在标准输出设备上无论其原来有几位小数,默认按照6位小数输出。(实际上浮点型数据输出的小数宽度是可以指定位数的)

  4. printf函数没有输出表项的情况

例如:printf(“ What’s your name?\n”);
结果:What’s your name?↙
说明:
  • printf函数可以没有输出表项,同时要求格式控制部分不能出现格式说明符,只能由普通字符和转义字符组成。

  • 普通字符原样输出,转义字符按照其功能输出。

3 scanf函数和printf函数的特殊格式控制

前面介绍了scanf函数与printf函数的基本应用,然而在实际操作中,对于数据的输入与输出用户经常会提出更高的要求,例如制定输出数据的宽度、对齐方式、小数位数等等。这些操作需要将表3.2中的参数与表3.3中的参数结合起来使用。本节将着重介绍scanf函数和printf函数的特殊格式控制。

  1. 数据输入及输出的宽度——既可以应用于scanf函数又可以应用于printf函数

  2. 对scanf函数按格式宽度输入数据:格式控制可以对整型格式的数据进行宽度控制,格式为%md。m表示接收输入数据的宽度(见3-3表)。

例如:int a,b,c; scanf(“%4d%2d%3d”,&a,&b,&c);
不同输入方式:

  1. 输入数据正好是格式说明需要的长度:123456789↙,则系统自动将1234赋给a,56赋给b,789赋给c。

  2. 输入数据超出格式说明需要的长度:1234567890↙,则系统自动将1234赋给a,56赋给b,789赋给c,剩下0没有接收。

  3. 输入数据少于格式说明需要的长度:

  4. 12345678↙,则系统自动将1234赋给a,56赋给b,78赋给c。

  5. 12345↙,当敲完回车之后,光标在第二行第一列闪烁,等待继续输入数据。出现此现象的原因是,根据格式说明要求的长度,系统自动1234赋给a,5赋给b,而没有数据赋值给c变量,因此会出现如下情况。

 说明:

  1. 本例的含义是定义了三个整型变量,输入三个数据分别存放在三个变量中。

  2. scanf函数的三个格式说明符“%4d%2d%3d”,中间没有任何分隔,并且对于输入数据的宽度有了一定限制,因此输入的数据中间可以没有任何分隔,系统会根据说明符的宽度自动截取相应的数据。

  3. 输入的数据不同时会有不同的结果。同学们可以思考一下,如果在输入的时候误输入一个浮点数或者一个字符类型的数据,会有什么样的结果?

  4. 对printf函数按格式宽度输出数据:格式控制可以对不同类型的数据进行宽度的限定。如%m(d、f、lf、c、s),其中m代表输出数据规定的宽度(见3.3表)。如果规定的宽度大于数据原有的宽度,则用空格填充其他列;如果规定的宽度小于数据原有的宽度,数据按原样输出。

例如:int a=123,b=1234567; float c=1.234;
 printf("a=%5d,b=%5d,c=%10f\n",a,b,c);

结果:

 说明:

  1. a输出的格式是%5d,表示输出的数据要占5列,a存放的数据是123,只有三列,所以系统在数据左侧自动填充2个空格。

  2. b输出的格式是%5d,表示输出的数据要占5列,b存放的数据是1234567,超出了格式规定的宽度,此时系统自动将数据原样输出,而不是从中间截断。

  3. c输出的格式是%10f,表示输出的数据要占10列,c存放的数据加上小数点共占5列,当浮点数在屏幕上显示的时候,小数位数默认要显示6列,所以需要在小数位补3个零,因此一共为8列,因此系统在数据左侧自动填充了2个空格。

  4. 数据输出对齐方式——只可以用于printf函数,不可以用于scanf函数

要求:数据输出默认是左对齐,当格式控制中出现负号的时候,表示数据按照右对齐显示。
 例如:int? a,b; a=b=123;printf("a=%5d,b=%-5d  \n",a,b);
结果:

 说明:

  1. a输出的格式是%5d,表示输出的数据要占5列,没有负号表示输出的数据按右对齐,所以123右对齐输出后,在其前面(左侧)补充2个空格。

  2. b输出的格式是%-5d,表示输出的数据要占5列,负号表示输出的数据按左对齐,所以123左对齐输出后,在其后面(右侧)补充2个空格。

  3. 指定小数位数——只可以用于printf函数,不可以用于scanf函数

要求:可以对浮点型数据指定小数位数,如%.n(f、lf、e)。其中n代表需要保留小数的位数,注意要进行四舍五入。指定小数位数可以与限定数据宽度、数据对齐方式同时使用(此方法同样应用于字符串格式化操作,既%m.ns,由于篇幅有限不做详细介绍)。
 例如:float a=123.4567890; printf("a=%f,a=%9.3f,a=%3.5f,a=%.2f\n",a,a,a,a);
结果:

 说明:本例中a共按照四种形式进行输出

  1. %f原样输出,由于系统默认单精度(float)或者双精度(double)的数据,原样显示在屏幕上的时候,小数要有6位,因此输出的结果整数位不变,小数位6位。但是float类型数据只能提供7位有效数据,因此结果中123.4567都是有效数据,后面的87均为无效数字。

  2. %9.3f格式输出,9.3表示输出的数据宽度为9,小数点后保留3位,并且进行四舍五入,列数不够用空格填充。

  3. %3.5f格式输出,3.5表示输出的数据宽度为3,小数点后保留5位,并且进行四舍五入,由于需要显示的数据宽度超过规定的3,因此小数点保留5位后数据原样输出。

  4. %.2f格式输出,.2表示没有限定数据的宽度,只限定了小数点后保留2位,并且进行四舍五入,整数部分正常输出。

  5. 其他常用特殊格式——如果想输出一个%字符,则应该在格式控制部分连续用两个%表示。

例如:printf(”%%”);
输出结果:%