C语言复习---零散补充
一:double和float使用scanf获取数据
- printf输出float和double都可以用%f,double还可以用%lf。
- 2 scanf输入float用%f,double输入用%lf,不能混用。
- double a, b;
- scanf("%lf", &a); //正确
- scanf("%f", &b); //错误,导致8字节数据中有随机数据,所以数据输出错误
- %f 是浮点型(单精度),占4字节 %lf 是浮点型(双精度),占8字节
二:scanf和gets获取字符串
- gets(s)函数与 scanf("%s",&s) 相似,但不完全相同。
- 使用scanf("%s",&s) 函数输入字符串时存在一个问题,就是如果输入了空格会认为字符串结束,空格后的字符将作为下一个输入项处理。
- 但gets()函数将接收输入的整个字符串直到遇到换行为止。
1.scanf()
- 所在头文件:stdio.h
- 语法:scanf("格式控制字符串",变量地址列表);
- 接受字符串时:scanf("%s",字符数组名或指针);
2.gets()
- 所在头文件:stdio.h
- 语法:gets(字符数组名或指针);
1.不同点:
- scanf不能接受空格、制表符Tab、回车等;
- 而gets能够接受空格、制表符Tab和回车等;
2.相同点:
- 字符串接受结束后自动加'\0'。
三:不同类型间运算
- double total = ;
- int fz = ;
- int fm = ;
- int temp;
- for (int i = ; i <= ;i++)
- {
- total += (double)fz / fm;
- printf("%d/%d=%lf\n", fz, fm, (double)fz / fm);
- temp = fz;
- fz = fz + fm;
- fm = temp;
- }
正确:
- total += (double)fz / fm;
错误:
- total += (double)(fz / fm); //因为fz,fm是整型int,fz/fm也是一个取整数(整数),所以我们再使用double进行转换只是在后面加上.000000
四:数组常量表达式问题(一维数组为例)
- 类型符 数组名[常量表达式]
常量表达式:
- 常量表达式可以包括常量和符号常量
- int a[+]是合法的
- #define MAX 10
- int a[MAX]也是合法的
- c语言不允许对数组的大小做动态定义,即数组的大小不依赖于程序运行过程中的变量的值。
- int n;
- scanf("%d",&n); //企图在程序中临时输入数组的大小,这是不允许的额
- int a[n];
补充:
- 如果在被调用的函数(非主函数中)定义数组,其长度可以是变量或者非常量表达式:
- void func(int n)
- {
- int a[*n];
- ...
- }
五:数组初始化问题(一维数组为例)
- 一般当我们定义数组大小后需要尽快进行初始化,若不去初始化,数组中的值可能是随机值(原来该位置内存中的值)。
注:只有在静态区中的全局变量和static静态变量才会被系统自动初始化为0;
- int f[];
- for (int i = ; i < ;i++)
- {
- printf("%d ", f[i]);
- }
- - - - - - - - -
- - - - - - - -
- - - - - -
我们进行初始化的方法
- .在定义数组的时候对全部数组元素赋予初值
- int a[] = {,,,,,,,,,}
- .可以只给某一部分赋初值
- int a[] = {,,,,} 注意:这里其实会对后面我们没有处理的数组数据也进行赋初值,将后面的所有数据赋值为0
- .若是想全部初始为0,可以使用简介方法(只对于0有效,换成其他的会变成2中情况)
- int a[]={}
六:二级指针的创建和memset初始化
- int n;
- scanf("%d", &n);
- int **arr = (int **)malloc(n*sizeof(int*));
- for (int i = ; i < n; i++)
- {
- arr[i] = (int *)malloc(n*sizeof(int));
- memset(arr[i], 0, n*sizeof(int));
- }
- for (int i = ; i < n; i++)
- {
- for (int j = ; j < n; j++)
- printf("%2d", arr[i][j]);
- printf("\n");
- }
- memset(void *s,int ch,size_t n):将s所指向的某一块内存中的后n个 字节的内容全部设置为ch指定的ASCII值, 第一个值为指定的内存地址,块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为s。
七:二维数组和二级指针的关系:没关系,别瞎想(重点)
C语言复习---二维数组和二级指针的关系:没关系,别瞎想(重点)
八:extern的使用:用于定义外部函数和变量
(一)file1.c
- #include <stdio.h>
- int A, B, C;
- int max()
- {
- int m = A > B ? A : B;
- if (m < C)
- m = C;
- return m;
- }
(二)file2.c
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- int main()
- {
- extern A, B, C;
- int m;
- scanf("%d %d %d", &A, &B, &C);
- m=max();
- printf("max:%d", m);
- system("pause");
- return ;
- }
(三)总结
- 我们要使用其他文件中的全局变量,需要在自己文件中使用extern去声明,表示该变量来自于其他文件,编译器你去外面找找看。
- 注意:我们这里使用了外部函数max但是没有使用extern,因为在定义函数时,可以省略extern,默认该函数时外部函数。我们可以使用static将函数生命周期放在该文件中
C语言复习---零散补充的更多相关文章
- C语言复习20170728
C语言复习20170728 键盘输入和屏幕输出 字符常量:把字符放在一对单引号内,适用于多数可打印字符. 转义字符: 以反斜线()开头,也是放在一对单引号内,适用于控制字符. .\t,是水平制表符,相 ...
- C语言复习20170716
C语言复习20170716 C数据类型 图片来自:C语言基本数据类型简介 C语言程序处理的数据有常量和变量两种形式. 常量是在程序中不能改变其值的量.例如:整型常量.实型常量.字符常量.字符串常量和枚 ...
- C语言复习-字符串与指针
C语言复习-字符串与指针 例一: [字符串处理 去除C代码中的注释] C/C++代码中有两种注释,/* */和//.编译器编译预处理时会先移除注释.就是把/*和*/之间的部分去掉,把//以及之后的部分 ...
- C语言复习系列-转义字符
C语言复习系列-转义字符 准备学习stm32单片机,感觉需要复习一下C语言,翻看了菜鸟教程,竟然有不少地方看不懂,真让人汗颜······ 转义字符大部分语言里面都有,至少我学过的里面都有,在这些语言中 ...
- C语言复习(1)
test.c #include <stdio.h> int main(){ printf("hello\n"); return 0; } 1.预处理阶段 由于在test ...
- C语言复习2_运算符
今天复习一下C语言的运算符 1.赋值运算符 单等号 = 顺序是:从右往左 2.复合运算符 #include <stdio.h> #include <stdlib.h> int ...
- C语言复习:文件操作
文件操作专题 C语言文件读写概念 文件分类 按文件的逻辑结构: 记录文件:由具有一定结构的记录组成(定长和不定长) 流式文件:由一个个字符(字节)数据顺序组成 按存储介质: 普通文件:存储介质文件(磁 ...
- C语言复习:字符串和一级指针
字符串基本操作 字符数组初始化方法 int main() { //1 {}号法 初始化列表 //数组初始化有2种方法 默认元素个数.指定元素个数 char buf1[] = { ...
- 曹工说Redis源码(2)-- redis server 启动过程解析及简单c语言基础知识补充
文章导航 Redis源码系列的初衷,是帮助我们更好地理解Redis,更懂Redis,而怎么才能懂,光看是不够的,建议跟着下面的这一篇,把环境搭建起来,后续可以自己阅读源码,或者跟着我这边一起阅读.由于 ...
随机推荐
- JQ_One()函数特效
先看一个例子,当点击 p 元素时,增加该元素的文本大小,代码如下:<script type="text/javascript" src="http://keleyi ...
- CMake系列之一:概念
不同的make工具遵循不同的规范和标准,因此针对不同的标准需要不同的Makefile文件.CMake利用一种平台无关的CMakeList.txt文件定制编译流程,根据目标用户的平台生成本地化的Make ...
- 微软必应词典UWP -2017春
必应UWP调研,评测 软件平台:windows10 软件名称:微软必应词典 软件类型:UWP Bug Bug1 当在文本框中进行输入时,在谷歌拼音输入法状态下,无法使用Shift键切换到谷歌拼音的纯英 ...
- 浅谈|WEB 服务器 -- Caddy
浅谈|WEB 服务器 -- Caddy 2018年03月28日 12:38:00 yori_chen 阅读数:1490 标签: caddyserverwebhttps反向代理 更多 个人分类: ser ...
- laravel(一)
laravel文档:https://d.laravel-china.org/docs/5.5/ 一.composer安装laravel 在文档中找的create-project命令,最后加上项目名称, ...
- Laravel 从入门到精通系列教程
转载;https://laravelacademy.org/laravel-tutorial-5_7 适用于 Laravel 5.5.5.6.5.7 版本,本系列教程将围绕一个 LTS 版本,然后采取 ...
- Python Kivy 中文教程:安装(Windows)
Kivy 是一套用于跨平台快速应用开发的开源框架,只需编写一套代码,便可运行于各大桌面及移动平台上(包括 Linux, Windows, OS X, Android, iOS, 以及 Raspberr ...
- Mybatis返回HashMap时,某个字段值为null时,不会保存key
转载: http://blog.csdn.net/little2z/article/details/38525327 mybatis 的 callSettersOnNulls 问题项目用到mybati ...
- 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 ...
- MT【187】余弦的线性组合
已知$\alpha+\beta+\gamma=\pi,(\alpha,\beta,\gamma\ge0)$ 求:$3\cos\alpha+4\cos\beta+5\cos\gamma$的最大值____ ...