高级预言程序设计

2022/01/01

章节思维导图下载

第一章-概述

计算机发展

  • 1946年诞生,美国军方用来计算弹道曲线
  • 冯·诺依曼提出存储程序的概念
    1. 指令和数据使用二进制表示
    2. 指令和数据存储在存储器中
    3. 计算机由输入设备、输出设备、存储器、运算部件、控制部件五大部分组成
  • 有四个时代
    • 20世纪50年代 - 真空电子管制造计算机,使用机器语言编写程序,计算机专家手中的工具
    • 20世纪50年代末 - 晶体管制造计算机,随着高级预言和系统软件的出现,非计算机专家独用
    • 1964年 - IBM推出IBM360系列,使用集成电路技术,在一片硅晶片集成集体管
    • 第四代 - 微处理器出现,进入微电子时代

计算机语言

  • 机器语言 - 机器可直接执行,占用空间小,执行效率高,不同计算机指令系统不同,机器语言可移植性差
  • 汇编语言 - 使用助记符代替机器语言,一定程序上克服机器难以编写和阅读缺点
  • 高级预言- 描述算法方便,不依赖于机型,可移植性高,但是效率低下

算法及其描述方法

  • 算法 - 解决问题的步骤序列
  • 描述方法
    1. 自然语言
    2. 传统流程图
    3. N-S流程图
    4. 伪代码
    5. 计算机预言

程序和程序设计方法

  1. 程序 - 数据结构+算法 【图灵奖获得者- 沃思教授】
  2. 源程序转换成目标程序需要四个步骤 学习地址
    1. 预处理
    2. 编译
    3. 汇编
    4. 链接
  3. 程序设计方法
    • 结构化的设计方法 - 三种基本结构
      1. 顺序结构
      2. 循环结构
      3. 选择结构
    • 面向对象的设计方法 - 将程序或软件看成一个对象组成的集合

第二章-C语言基础

重点

  • C语言的字符集、关键字和标识符
  • C语言的基本组成

本章知识点

  1. C语言的发展和特点
  2. C语言的字符集、关键字和标识符;
  3. C程序的基本语句分类
  4. C程序的基本组成
  5. C程序的开发环境。

掌握C语言的基本组成,了解C语言的运行步骤的调试方法

C语言特点

C语言允许直接对计算机硬件进行曹祖据哦,既具有高级语言的功能,又具有低级语言的功能,所以也被称为“中级语言”,可用来编写系统软件

  1. 结构化语言
    • C语言具有良好的结构化(顺序、选择、循环)语句。
    • C语言的函数是程序的基本模块,便于实现程序的模块化
  2. 运算能力强大:C语言提供三十多种运算符,表达式的种类多样。
  3. 数据类型丰富:包括整型、实型、字符型、数组型、结构体类型、指针、空类型等。
  4. 具有预处理能力
  5. 可移植性好
  6. 程序执行效率高:由C源程序生成目标代码的效率一般仅比汇编语言低10%~20%
  7. 程序设计自由度大:C语言的语法限制不严格,允许程序员具有自由度

字符集

C语言的字符集是ASCII。主要包含下列四类:

  1. 大小写英文字母A\~Z、a\~z (52个)
  2. 数字0、1、2、…、9 (10个)
  3. 非字母、非数字的可现实字符(33个),既键盘可输入的字符,如:+ - “ ~ ( > 等。
  4. 转义字符

关键字

注意:所有的保留字均有小写字母组成,一旦有一个字母大写,其不再是保留字原来的含义、

数据类型:chardoubleenumfloatintlongshnortsignedstructunionunsignedvoid

控制语句:breakcasecontinuedefaultdoelseforgotoifreturnswitchwhile

存储类型:autoexternregisterstatic

其他关键字:constsizeoftypedefvolatile

词汇分类

  • 常量:C语言运行中其值不发生改变的量。例如-10、12.5等
  • 标识符:C程序中使用的变量名、函数名和标号等统称标识符
  • 关键字:由C语言规定的具有特定意义的字符串
  • 运算符:C语言用于计算的符号,如+ - * \
  • 多行注释:/*注释*/ 单行注释://注释
  • 分隔符:C语言的分隔符包括括号和空格两种

基础语句分类

  • 数据定义语句:用来定义程序中使用的各种能存放数据对象的名称和特性 - int a,b,c;

  • 赋值语句:形如变量 = 表达式 的语句,功能市计算表达式的值并赋予变量 - a = 2 ; b =3;

  • 函数调用语句:形如函数名(实际参数表)的语句,功能市调用指定函数 -a = avg*(x,y,z);

  • 表达式语句:仅由任何表达式组成的语句 - c = a+b;

  • 流程控制语句:用来控制程序执行过程的语句

    • 选择控制语句:if() ~ else ~ switch
    • 循环控制语句:for() ~ while() ~ do ~ while()
    • 中止语句: break
    • 继续循环语句:continue
    • 返回语句: return
    • 无条件转移语句: goto
  • 复合语句:用花括号括住的一组任一语句 (埋:复合语句的作用?)(填:判断后需要执行需要多条语句一起执行时,可以使用复合语句)

    • main(){
          .....
          {......} // 复合语句。 注意:右括号后不需要加;
          ....
      }
          
          
      
  • 空语句:无任何操作的语句,既只由分号组成的语句,一般在程序中用作空循环体。

    • while(getchar() != '\n')
          ;
      /*
      这里的循环体为空语句,表示循环体什么都不做
      注意:while(getchar() != '\n');和上面程序段功能一样
      */
      
  • 其他语句:包含编译预处理命令、用户自定义类型语句等 - #include "stdio.h"

普通的C语言例题

  • 从键盘输入两个整数,计算其乘积 (主函数实现)
 #include <stdio.h> /*编译预处理命令*/
int main(void){   /*主函数*/
	int n1, n2, result; /*定义保存两个整数及其乘积的变量*/
	printf("please input the two numbers:\n"); //屏幕显示提示信息
	scanf("%d,%d", &n1, &n2); //从键盘输入两个整数并分别保存在变量n1和n2
	result = n1*n2;
	printf("the result is:%d\n", result); //输出变量result中的两个整数的乘积
	return 0; //返回
		
}
/*
please input the two numbers:
2,3
the result is:6
*/
  • 从键盘输入两个整数,计算其乘积(多函数实现)
#include <stdio.h>
int mul(n1, n2){
    return n1 * n2;
}

void main(void){   /*主函数*/
	int n1, n2, result; /*定义保存两个整数及其乘积的变量*/
	printf("please input the two numbers:\n"); //屏幕显示提示信息
	scanf("%d,%d", &n1, &n2); //从键盘输入两个整数并分别保存在变量n1和n2
	result = mul(n1, n2);
	printf("the result is:%d\n", result); //输出变量result中的两个整数的乘积
}


/*
please input the two numbers:
3,5
the result is:15
*/

C程序的基本组成特点

  • 函数是C程序的基本单位。每个C程序是由一个或多个函数构成。每个C程序有且仅有一个主函数,该主函数的函数名规定为main。

  • 每个函数(包含主函数)的定义分为两个部分:函数首部和函数体。

    • 函数首部: 返回值的类型 函数名(类型 形式参数名, ...)
      函数体:   {
      	数据定义部分
          实现函数功能的语句串
      } 
      注意:当函数没有返回值时写void
      
  • C程序中每个语句以“分号”作为语句的结束,“分号”是C语言的组成部分,不可以省略。但预处理命令和函数首部之后不能加分号。

    • #include <stdio.h>  //编译预处理命令
      int main(void)   //函数首部不是一条完整的语句
      
  • C语言本身没有输入/输出语句,而是通过调用库函数scanf()printf()getchar()putchar()实现的

  • C语言的任任意位置都可以加注释,注释不编译。单行注释\\注释 多行注释\*注释*\

  • 程序的书写格式灵活,一行客书写多条语句,一条语句可以写在多行上,可以任意插入空格和回车。但为了程序清单层次分明、便于阅读,通常都采用缩进并对其的书写方法。一条说明一条语句占一行。使用空格或TAB缩进{}对齐。有足够的注释。有合适的空行

  • C语言中主函数和其他函数的位置是任意的,但程序执行总时从主函数开始,并在主函数结束。其他函数总是通过函数调用语句被执行

  • 主函数可以调用其他函数;任何其他函数都可以相互调用,但不能调用主函数。

  • C程序中可以有预处理命令(例如include命令),通常预处理命令应放在程序的最前面。

  • C语言编译系统区分字母大小写。

C语言的运行步骤

image-20210823225300195

C程序的调试

程序的错误分:语法错误和逻辑错误。

语法错误能够在编译过程中被发现并修改;

逻辑错误的程序往往可以顺利编译甚至执行,但执行的结果不同于预期。由于较难准确定位逻辑错误,所以程序开发环境一般都会提供程序调试工具来观察程序中各变量、寄存器等值的变化,以便发现程序中的逻辑错误。

调试手段:设置断点、重启调试、停止调试、逐语句调试、逐过程调试

第三章 数据类型、运算符和表达式

字符型 - 字符串只能是常量,C语言没有字符串变量,只有字符数组的存放字符串变量。

理解:变量是可以通过地址,变更数据值的量。字符串是个数组,并非固定字节,每个字符串都是创建一个新空间进行存储,无法通过地址变更值

char类型 - 存放的是字符的ASCII码值(无符号整数),占用内存1字节

有名常量

  • 定义有名常量后,在后面定义同名变量的话,编译会报错
  • 符号常量和有名常量的区别:符号常量的作用是在预编译阶段替换成常量;有名常量是一个名称定义值,这个名称的值程序不能改变;

进制转换

八进制转十进制 -学习地址1 - 学习地址2

把八进制数按权展开、相加即可得十进制数,也就是让八进制各位上的系数乘以对应的权,然后求其和,如下:

十六进制化为十进制

用个位数+十位数16+百位数256+千位数*4096+…相乘的时候,前面的一位数乘以的数是十后面一位数乘以数的16倍.

具体案例如下:

(AB)=A×16+B=(171)

(ABC)=A×256+B×16+C=(2748)

第四章 结构化程序设计

第一节 结构化程序设计方法

  • 自顶向下:计划好全局在行动
  • 自底向上:先行动在计划

第二节 结构程序的三种基本结构

  • 顺序结构: 顺序执行每个步骤,不存在未执行到的步骤
  • 选择结构
    • 单分支:仅包含一个条件,由【条件是否成立】来决定执行某个操作
    • 双分支:包含一个条件,由【条件时是否成立】从两个操作中选区一个操作执行
    • 多分支:包含n个条件,根据【某个条件是否成立】来决定执行某个操作
  • 循环结构
    • 当型:先判断条件,后执行循环体,直到条件不成立跳出循环
    • 直到型:先执行循环体,后判断条件,直到条件不成立跳出循环
    • 数量型:指定一个次数n,循环执行n次循环体后停止循环

第三节 顺序结构程序设计

赋值语句:

  • 【格式】:变量 = 表达式; - - 计算表达式的值,然后赋予变量。
  • 【格式】:变量 复合赋值表达式 表达式; - - 将变量和表达式进行指定运算,将结果赋予变量

函数调用语句:

  • 【格式】:函数名(参数1, 参数2,...,参数n); - - 调用指定函数和传入指定参数,处理逻辑

表达式语句

  • 【格式】:表达式; - - 计算表达式的值

复合语句

  • 【格式】:下方代码块 - - 复合语句可以包含多条语句,但整体上是作为一条语句看待的。作用是函数体、循环体等场景
{
    语句1;
    语句2;
    ...
    语句n;
}

字符处输入/输出函数

C语言的输入和输出操做,均是利用C语言编译胸痛提供的库函数实现的,C语语言本身并没有提供这两类语句。

字符输出函数putchar()

  • 【调用格式】:putchar(ch)
  • 【参数】:ch 可以是一个整型变量、字符型变量、整型常量或字符型常量,也可以是一个转义字符或整型表达式,
  • 【说明】:参数不能是一个字符串, 是字符串的情况下,单个字符则输出,超过两个字符的字符串,不输出也不报错
  • 【功能】:把一个字符输出到标准输出设备(显示器)。此外,就功能而print()函数可以完全代替putchar()函数的功能
  • 【返回值】:输出ch对应的单个字符。
  • 【实例】
#include <stdio.h>
void main(void){  
	int  i=99;
	char ch1='a';
	putchar(i);
	putchar(ch1);
	putchar(101);
	putchar('b');
	putchar('\n');
	putchar(2+100);
}
/*
caeb
f
--------------------------------
*/

字符输入函数getchar()

  • 【调用格式】:getchar()
  • 【参数】:无参数。
  • 【功能】:从标准输入设备(键盘)输入一个字符。另外,就功能而scanf()函数可以完全代替getchar()函数的功能。
  • 【说明】
    1. getchar()函数只能用于单个字符的输入,一次输入一个字符。输入的数字也是按字符处理。当输入多余一个字符时,只接收第一个字符。
    2. getchar()函数输入的字符可以赋给一个字符变量或整型变量,也不可以不赋给任何变量,而作为表达式的一部分
    3. 输入字符过程中,回车表示字符输入完成,如果存在多个getchar()函数,回车也会被当字符输入
  • 【返回值】:输入的单个字符。
  • 【实例】

getchar()函数只能用于单个字符的输入,一次输入一个字符。输入的数字也是按字符处理。当输入多余一个字符时,只接收第一个字符。

#include <stdio.h>
void main(void){  
	int  i;
	char ch1;
	i = getchar();
	printf("input one value: %d", i);
	
}
/*
a
input one value: 97
*/


/*
bc
input one value: 98
*/

getchar()函数输入的字符可以赋给一个字符变量或整型变量,也不可以不赋给任何变量,而作为表达式的一部分

#include <stdio.h>
void main(void){  
	int  i;
	char ch1;
	i = getchar() + 1;
	printf("input one value: %d", i);
	
}
/*
a
input one value: 98
*/

输入字符过程中,回车表示字符输入完成,如果存在多个getchar()函数,回车也会被当字符输入

#include <stdio.h>
void main(void){  
	int  i;
	char ch1;
	i = getchar() + 1;
	printf("input one value: %d", i);
	printf("input one value: %c", getchar());
	printf("input one value: %c", getchar());
}
/*
a
input one value: 98input one value:
o
input one value: o
*/

格式输入/输出函数 print()

  • 【调用格式】print(格式控制字符, 输出项表)
  • 【参数】
    • “格式控制字符串” 是由控制输出格式的字符组成的字符串。
    • “输出项表”是用逗号分隔的若干表达式。
  • 【功能】按照用户指定格式把指定的数据输出到标准输出设备(显示器)。
  • 【返回值】 返回值为整型,等于正常输出的数据个数
  • 【说明】:格式控制字符由格式说明符、附加格式说明字符、转义字符、普通字符组成

格式说明符

#include <stdio.h>
void main(void){  
	int num1=123;
	long num2=123456;
	float f=123.456;
	double d1,d2;
	d1 = 1111111111.111111111;
	d2 = 2222222222.222222222;
	printf("5d: %5d\n", num1); // 5表示输出数据所占的域宽,正数则代表输出的值右对齐,左边补空格
	printf("-5d: %-5d\n", num1);  // -5表示输出数据所占的域宽,负数则代表输出的值左对齐,右边补空格
	printf("2d: %2d\n", num1);  // 当输出数据宽度大于指定域宽时,按实际宽度输出
	printf("ld: %ld\n", num2); // 输出长整型整数
	printf("12f: %12f\n", f); // 12表示输出数据所占的域宽,正数则代表输出的值右对齐,左边补空格。
	printf("12.2f: %12.2f\n", f); // 正数则代表输出的值右对齐,左边补空格;只输出两位小数,小数位大于两位,四舍五入
	printf("-12.2f: %-12.2f\n", f); // 负数则代表输出的值左对齐,右边补空格;只输出两位小数,小数位大于两位,四舍五入
	printf(".2f: %.2f\n", f); // 只输出两位小数,小数位大于两位,四舍五入
	printf("5c: %5c\n", 'a'); // 正数则代表输出的值右对齐,左边补空格
	printf("5s: %5s\n", "abc"); // 正数则代表输出的值右对齐,左边补空格
	printf("-10s: %-10s\n", "abc"); // 负数则代表输出的值左对齐,右边补空格
}
/*
5d:   123
-5d: 123
2d: 123
ld: 123456
12f:   123.456001
12.2f:       123.46
-12.2f: 123.46
.2f: 123.46
5c:     a
5s:   abc
-10s: abc
*/

附加格式说明字符

#include <stdio.h>
void main(void){  
	int num1=123;
	long num2=123456;
	float f=123.456;
	double d1,d2;
	d1 = 1111111111.111111111;
	d2 = 2222222222.222222222;
	printf("5d: %5d\n", num1); // 5表示输出数据所占的域宽,正数则代表输出的值右对齐,左边补空格
	printf("-5d: %-5d\n", num1);  // -5表示输出数据所占的域宽,负数则代表输出的值左对齐,右边补空格
	printf("2d: %2d\n", num1);  // 当输出数据宽度大于指定域宽时,按实际宽度输出
	printf("ld: %ld\n", num2); // 输出长整型整数
	printf("12f: %12f\n", f); // 12表示输出数据所占的域宽,正数则代表输出的值右对齐,左边补空格。
	printf("12.2f: %12.2f\n", f); // 正数则代表输出的值右对齐,左边补空格;只输出两位小数,小数位大于两位,四舍五入
	printf("-12.2f: %-12.2f\n", f); // 负数则代表输出的值左对齐,右边补空格;只输出两位小数,小数位大于两位,四舍五入
	printf(".2f: %.2f\n", f); // 只输出两位小数,小数位大于两位,四舍五入
	printf("5c: %5c\n", 'a'); // 正数则代表输出的值右对齐,左边补空格
	printf("5s: %5s\n", "abc"); // 正数则代表输出的值右对齐,左边补空格
	printf("-10s: %-10s\n", "abc"); // 负数则代表输出的值左对齐,右边补空格
}
/*
5d:   123
-5d: 123
2d: 123
ld: 123456
12f:   123.456001
12.2f:       123.46
-12.2f: 123.46
.2f: 123.46
5c:     a
5s:   abc
-10s: abc
*/

格式输入/输出函数 scanf()

  • 【调用格式】scanf(格式控制字符,输出项首地址表)
  • 【参数】
    • “格式控制字符串” 是由控制输出格式的字符组成的字符串。
    • “输入项首地址表”由若干个输入项首地址组成,相邻两个输入项首地址之间用逗号分隔
  • 【功能】从键盘按照"格式控制字符串"中规定的格式读取若干个数据,然后按照输入项首地址表的顺序,依次讲数据存入相应的变量对应的地址中
  • 【返回值】 输入的数据个数
  • 【说明】:格式控制字符由格式说明符、附加格式说明字符、转义字符、普通字符组成

公主历经千辛万苦,【蜡笔小新/情人节】

目 录