一:double和float使用scanf获取数据

  1. printf输出floatdouble都可以用%fdouble还可以用%lf
  2. 2 scanf输入float用%fdouble输入用%lf,不能混用。
  1. double a, b;
  2. scanf("%lf", &a);  //正确
  3. scanf("%f", &b);   //错误,导致8字节数据中有随机数据,所以数据输出错误
  1. %f 是浮点型(单精度),占4字节 %lf 是浮点型(双精度),占8字节

二:scanf和gets获取字符串

  1. gets(s)函数与 scanf("%s",&s) 相似,但不完全相同。
  2. 使用scanf("%s",&s) 函数输入字符串时存在一个问题,就是如果输入了空格会认为字符串结束,空格后的字符将作为下一个输入项处理。
  3. gets()函数将接收输入的整个字符串直到遇到换行为止。

1.scanf()

  1. 所在头文件:stdio.h
  2. 语法:scanf("格式控制字符串",变量地址列表);
  3. 接受字符串时:scanf("%s",字符数组名或指针);

2.gets()

  1. 所在头文件:stdio.h
  2. 语法:gets(字符数组名或指针);

1.不同点:

  1. scanf不能接受空格、制表符Tab、回车等;
  2. gets能够接受空格、制表符Tab和回车等;

2.相同点:

  1. 字符串接受结束后自动加'\0'

三:不同类型间运算

  1. double total = ;
  2. int fz = ;
  3. int fm = ;
  4. int temp;
  5. for (int i = ; i <= ;i++)
  6. {
  7. total += (double)fz / fm;
  8. printf("%d/%d=%lf\n", fz, fm, (double)fz / fm);
  9. temp = fz;
  10. fz = fz + fm;
  11. fm = temp;
  12. }

正确:

  1. total += (double)fz / fm;

错误:

  1. total += (double)(fz / fm);  //因为fz,fm是整型int,fz/fm也是一个取整数(整数),所以我们再使用double进行转换只是在后面加上.000000

四:数组常量表达式问题(一维数组为例)

  1. 类型符 数组名[常量表达式]

常量表达式:

  1. 常量表达式可以包括常量和符号常量
  2. int a[+]是合法的
  3. #define MAX 10
  4. int a[MAX]也是合法的
  1. c语言不允许对数组的大小做动态定义,即数组的大小不依赖于程序运行过程中的变量的值。
  2. int n;
  3. scanf("%d",&n);  //企图在程序中临时输入数组的大小,这是不允许的额
  4. int a[n];

补充:

  1. 如果在被调用的函数(非主函数中)定义数组,其长度可以是变量或者非常量表达式:
  2. void func(int n)
  3. {
  4. int a[*n];
  5. ...
  6. }

五:数组初始化问题(一维数组为例)

  1. 一般当我们定义数组大小后需要尽快进行初始化,若不去初始化,数组中的值可能是随机值(原来该位置内存中的值)。
    注:只有在静态区中的全局变量和static静态变量才会被系统自动初始化为0
  1. int f[];
  2. for (int i = ; i < ;i++)
  3. {
  4. printf("%d ", f[i]);
  5. }
  1. - - - - - - - -
  2. - - - - - - -
  3. - - - - -

我们进行初始化的方法

  1. .在定义数组的时候对全部数组元素赋予初值
  2. int a[] = {,,,,,,,,,}
  3. .可以只给某一部分赋初值
  4. int a[] = {,,,,}  注意:这里其实会对后面我们没有处理的数组数据也进行赋初值,将后面的所有数据赋值为0
  5. .若是想全部初始为0,可以使用简介方法(只对于0有效,换成其他的会变成2中情况)
  6. int a[]={}

六:二级指针的创建和memset初始化

  1. int n;
  2. scanf("%d", &n);
  3. int **arr = (int **)malloc(n*sizeof(int*));
  4. for (int i = ; i < n; i++)
  5. {
  6. arr[i] = (int *)malloc(n*sizeof(int));
  7. memset(arr[i], 0, n*sizeof(int));
  8. }
  9.  
  10. for (int i = ; i < n; i++)
  11. {
  12. for (int j = ; j < n; j++)
  13. printf("%2d", arr[i][j]);
  14. printf("\n");
  15. }
  1. memset(void *s,int ch,size_t n):将s所指向的某一块内存中的后n 字节的内容全部设置为ch指定的ASCII值, 第一个值为指定的内存地址,块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为s

七:二维数组和二级指针的关系:没关系,别瞎想(重点)

C语言复习---二维数组和二级指针的关系:没关系,别瞎想(重点)

八:extern的使用:用于定义外部函数和变量

(一)file1.c

  1. #include <stdio.h>
  2.  
  3. int A, B, C;
  4.  
  5. int max()
  6. {
  7. int m = A > B ? A : B;
  8. if (m < C)
  9. m = C;
  10. return m;
  11. }

(二)file2.c

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3.  
  4. int main()
  5. {
  6. extern A, B, C;
  7. int m;
  8. scanf("%d %d %d", &A, &B, &C);
  9. m=max();
  10. printf("max:%d", m);
  11. system("pause");
  12. return ;
  13. }

(三)总结

  1. 我们要使用其他文件中的全局变量,需要在自己文件中使用extern去声明,表示该变量来自于其他文件,编译器你去外面找找看。
  2. 注意:我们这里使用了外部函数max但是没有使用extern,因为在定义函数时,可以省略extern,默认该函数时外部函数。我们可以使用static将函数生命周期放在该文件中

C语言复习---零散补充的更多相关文章

  1. C语言复习20170728

    C语言复习20170728 键盘输入和屏幕输出 字符常量:把字符放在一对单引号内,适用于多数可打印字符. 转义字符: 以反斜线()开头,也是放在一对单引号内,适用于控制字符. .\t,是水平制表符,相 ...

  2. C语言复习20170716

    C语言复习20170716 C数据类型 图片来自:C语言基本数据类型简介 C语言程序处理的数据有常量和变量两种形式. 常量是在程序中不能改变其值的量.例如:整型常量.实型常量.字符常量.字符串常量和枚 ...

  3. C语言复习-字符串与指针

    C语言复习-字符串与指针 例一: [字符串处理 去除C代码中的注释] C/C++代码中有两种注释,/* */和//.编译器编译预处理时会先移除注释.就是把/*和*/之间的部分去掉,把//以及之后的部分 ...

  4. C语言复习系列-转义字符

    C语言复习系列-转义字符 准备学习stm32单片机,感觉需要复习一下C语言,翻看了菜鸟教程,竟然有不少地方看不懂,真让人汗颜······ 转义字符大部分语言里面都有,至少我学过的里面都有,在这些语言中 ...

  5. C语言复习(1)

    test.c #include <stdio.h> int main(){ printf("hello\n"); return 0; } 1.预处理阶段 由于在test ...

  6. C语言复习2_运算符

    今天复习一下C语言的运算符 1.赋值运算符 单等号 = 顺序是:从右往左 2.复合运算符 #include <stdio.h> #include <stdlib.h> int ...

  7. C语言复习:文件操作

    文件操作专题 C语言文件读写概念 文件分类 按文件的逻辑结构: 记录文件:由具有一定结构的记录组成(定长和不定长) 流式文件:由一个个字符(字节)数据顺序组成 按存储介质: 普通文件:存储介质文件(磁 ...

  8. C语言复习:字符串和一级指针

    字符串基本操作 字符数组初始化方法 int main() {     //1 {}号法 初始化列表     //数组初始化有2种方法 默认元素个数.指定元素个数     char buf1[] = { ...

  9. 曹工说Redis源码(2)-- redis server 启动过程解析及简单c语言基础知识补充

    文章导航 Redis源码系列的初衷,是帮助我们更好地理解Redis,更懂Redis,而怎么才能懂,光看是不够的,建议跟着下面的这一篇,把环境搭建起来,后续可以自己阅读源码,或者跟着我这边一起阅读.由于 ...

随机推荐

  1. JQ_One()函数特效

    先看一个例子,当点击 p 元素时,增加该元素的文本大小,代码如下:<script type="text/javascript" src="http://keleyi ...

  2. CMake系列之一:概念

    不同的make工具遵循不同的规范和标准,因此针对不同的标准需要不同的Makefile文件.CMake利用一种平台无关的CMakeList.txt文件定制编译流程,根据目标用户的平台生成本地化的Make ...

  3. 微软必应词典UWP -2017春

    必应UWP调研,评测 软件平台:windows10 软件名称:微软必应词典 软件类型:UWP Bug Bug1 当在文本框中进行输入时,在谷歌拼音输入法状态下,无法使用Shift键切换到谷歌拼音的纯英 ...

  4. 浅谈|WEB 服务器 -- Caddy

    浅谈|WEB 服务器 -- Caddy 2018年03月28日 12:38:00 yori_chen 阅读数:1490 标签: caddyserverwebhttps反向代理 更多 个人分类: ser ...

  5. laravel(一)

    laravel文档:https://d.laravel-china.org/docs/5.5/ 一.composer安装laravel 在文档中找的create-project命令,最后加上项目名称, ...

  6. Laravel 从入门到精通系列教程

    转载;https://laravelacademy.org/laravel-tutorial-5_7 适用于 Laravel 5.5.5.6.5.7 版本,本系列教程将围绕一个 LTS 版本,然后采取 ...

  7. Python Kivy 中文教程:安装(Windows)

    Kivy 是一套用于跨平台快速应用开发的开源框架,只需编写一套代码,便可运行于各大桌面及移动平台上(包括 Linux, Windows, OS X, Android, iOS, 以及 Raspberr ...

  8. Mybatis返回HashMap时,某个字段值为null时,不会保存key

    转载: http://blog.csdn.net/little2z/article/details/38525327 mybatis 的 callSettersOnNulls 问题项目用到mybati ...

  9. mininet invalid literal for int() with base 10: 'cpu.cfs_period_us:'

    问题产生原因:内核编译时没有加入 CONFIG_CFS_BANDWIDTH 选项 http://www.haifux.org/lectures/299/netLec7.pdf https://mail ...

  10. MT【187】余弦的线性组合

    已知$\alpha+\beta+\gamma=\pi,(\alpha,\beta,\gamma\ge0)$ 求:$3\cos\alpha+4\cos\beta+5\cos\gamma$的最大值____ ...