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,而怎么才能懂,光看是不够的,建议跟着下面的这一篇,把环境搭建起来,后续可以自己阅读源码,或者跟着我这边一起阅读.由于 ...
随机推荐
- 原生 JS 实现手机验证码倒计时
可以使用 pointer-events 来阻止元素成为鼠标事件的 target.html5 新增操作元素 class 类名的方式 classList. classList 方法 add(value): ...
- js中的数据类型及判断方法
ECMAScirpt 变量有两种不同的数据类型:基本类型,引用类型. 基本类型 ● Boolean ● Null ● Undefined ● Number ● String ● Symbol (ECM ...
- Elasticsearch Java Rest Client API 整理总结 (一)——Document API
目录 引言 概述 High REST Client 起步 兼容性 Java Doc 地址 Maven 配置 依赖 初始化 文档 API Index API GET API Exists API Del ...
- Redis数据备份、安全、管理服务器笔记
Redis 数据备份与恢复 Redis SAVE 命令用于创建当前数据库的备份. 实例 redis > SAVE OK 恢复数据 如果需要恢复数据,只需将备份文件 (dump.rdb) 移动到 ...
- zabbix监控docker容器状态
前言:前段时间在部署zabbix,有个需求就是需要监控容器的状态 也就是cpu 内存 io的占用,于是就自己写了一个脚本,以及模板,在这里分享一下 嘿嘿 : ) 废话我也就不多说,直接开始 首选,za ...
- 拓扑排序(Topological Sort)
Graph 拓扑排序(Topological Sort) 假设一个应用场景:你用 C 编写了一个爬虫工具,其中有很多自定义的库:queue.c.queue.h.stack.c.stack.h.heap ...
- PAT甲题题解-1073. Scientific Notation (20)-字符串处理
题意:给出科学计数法的格式的数字A,要求输出普通数字表示法,所有有效位都被保留,包括末尾的0. 分两种情况,一种E+,一种E-.具体情况具体分析╮(╯_╰)╭ #include <iostrea ...
- 【SE】Week1 : 个人博客作业
快速看完整部教材,列出你不懂的 5 - 10 个问题,发布在你的个人博客上. 1)针对书中提到的NABCD模型中的N,如何发掘市场不明确的潜在用户需求? 2)PM是否负责团队职责的分配以及工程模块的设 ...
- Daily Scrumming* 2015.12.16(Day 8)
一.团队scrum meeting照片 二.成员工作总结 姓名 任务ID 迁入记录 江昊 任务1036 https://github.com/buaaclubs-team/temp-front/com ...
- ffmpeg格式转换
遇到有些wav文件在ubuntu下无法打开的情况,可以使用ffmpeg进行格式转换即可 ffmpeg -i 0.wav test.wav