一: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语言复习---零散补充的更多相关文章

  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. python3面向对象注意事项

    一.面向对象super的作用: class parent(object): def __init__(self): self.test() def test(self): print('parent- ...

  2. 联想拯救者15-isk安装固态硬盘与系统迁移教程

    一.固态选择 首先知道拯救者15-ISK是m.2接口2280尺寸,支持PCIE协议NVMe接口标准.我加装的固态是HP EX900系列250G M.2 NVMe固态硬盘. 二.开盖安装 1.拯救者15 ...

  3. torchvision 批量可视化图片

    1.1 简介 计算机视觉中,我们需要观察我们的神经网络输出是否合理.因此就需要进行可视化的操作. orchvision是独立于pytorch的关于图像操作的一些方便工具库. torchvision的详 ...

  4. c语言数字图像处理(三):仿射变换

    仿射变换及坐标变换公式 几何变换改进图像中像素间的空间关系.这些变换通常称为橡皮模变换,因为它们可看成是在一块橡皮模上印刷一幅图像,然后根据预定的一组规则拉伸该薄膜.在数字图像处理中,几何变换由两个基 ...

  5. Flink standalone模式作业执行流程

    宏观流程如下图: client端 生成StreamGraph env.addSource(new SocketTextStreamFunction(...)) .flatMap(new FlatMap ...

  6. [咸恩静][Love effect]

    歌词来源:http://music.163.com/#/song?id=31877654 作曲 : Monster Factory/양승욱 [作曲 : Monster Factory/yang-seu ...

  7. 冲刺Two之站立会议5

    昨天对视频音频的内容查询收集了相关资料,今天就主要对此进行了加工.先是使两台PC进行通信,不断进行测试.改进:测试.改进.最后初见成效,但还是没有达到我们最初的标准.

  8. 冲刺Two之站立会议4

    在完成了对主界面的设计之后,我们对自己的聊天室界面进行了优化,添加了一些标签和图片按钮等组件让界面更加美观一些.然后还查询了一些关于改进视频和音频质量的资料,准备开展相关工作.

  9. PAT 甲级 1029 Median

    https://pintia.cn/problem-sets/994805342720868352/problems/994805466364755968 Given an increasing se ...

  10. Yii框架的原代码

    http://www.digpage.com/app_struct.html#index-php