2017-2018-1 20179226 《从问题到程序》第5周学习总结

教材学习知识点总结

  • 基本数据类型的选择
    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值重置种子值。修改后结果如下图:
原文地址:https://www.cnblogs.com/9226ryf/p/7991707.html