教材学习知识点总结
- 基本数据类型的选择
1.如果没有特殊需要,浮点数都采用double类型。
2.如果没有特殊需要,整数总采用int类型。
3.如果没有特殊需要,字符型总采用char类型。
4.尽量少用各种unsigned类型。
- continue语句
1.只能用在循环里,结束最内层循环体的本次执行,立即进入下次循环。
2.break使程序跳到循环之外,continue跳过循环体内这个语句之后的部分。
- switch语句
1.default部分可以没有,各case之后的语句序列也可以没有。
2.各case表达式的值互不相同。
- 标准库函数
1.字符分类函数:ctype.h
2.随机数生成函数:stdlib.h
- 每个C程序必须有一个以main为名的主函数,其返回值必须是int。
- 函数封装和两种观点
1.函数是封装起来并予以命名的一段代码,是程序中具有逻辑独立性的动作性实体。
2.两种观点:内部观点和外部观点
3.函数头部的重要性就在于描述了函数内部和外部之间的联系。
- 函数原型
1.函数原型形式上与函数头部类似,最后加一个分号,但参数表里的参数名可缺。
2.函数原型可以出现在任何可以写变量定义的地方,目前最合理的方式是把它们都放在最前面。
3.书写时必须给出完整的类型特征描述。
4.写无参函数原型时,参数表必须写成(void),不能简单写成()。
- 外部变量
1.以外部定义形式定义的变量称为外部变量。
2.外部变量声明需要在前面加关键词extern。
- 作用域和存在期
1.作用域:每个变量定义都有一个确定的作用范围,这个范围就是作用域,是一个静态概念。
2.存在期:一个变量在程序执行中存在的那段时期称为这个变量的存在期,是一个动态概念。
- 静态局部变量
1.性质:局部作用域、全程存在期、一次初始化。
2.static int m=0;
- 初始化表达式
1.不能包含涉及赋值的运算,如增量/减量运算等。
2.定义外部变量和局部静态变量时未写初始化部分,系统自动将其初始化为0.
- 寄存器变量
1.局部自动变量可加关键词register定义为寄存器变量。
2.特点:速度最快而数量很少,是最紧缺的存储资源。
- 预处理
1.如果源程序里某行的第一个非空格符号是#,这就是一个预处理命令行。
2.#include最重要用途时组织程序的物理结构,使我们能以多个源程序文件的方式开发较大的程序。
3.条件编译预处理命令:#if,#else,#elif,#endif。
4.#ifdef相当于#if defined,#ifndef相当于#if !defined。
- 定义常量
1.enum:只能用于定义int常量。
2.const:不能用在常量表达式。
3.宏定义:无视语法语义,尽量少用。
教材学习中的问题和解决过程
- 问题1:书上说C源程序的加工过程分为三步:预处理编译和连接,那汇编呢?是没有还是包含在了编译里面?
- 问题1解决方案:在网上查的也都是预处理、编译、汇编、连接。
- 问题2:使用rand()产生随机数为什么种子数不同最后产生的随机数也相同?如图:
rand.c代码如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
unsigned int seed;
int k;
printf("Enter a positive integer seed value:
");
scanf("%u",&seed);
printf("Random Numbers are:
");
for(k = 1; k <= 10; k++)
{
printf("%i",rand());
printf("
");
}
return 0;
}
- 问题2解决方案:原因是代码中没有设置srand函数,其功能是用seed值重置种子值。修改后结果如下图: