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,而怎么才能懂,光看是不够的,建议跟着下面的这一篇,把环境搭建起来,后续可以自己阅读源码,或者跟着我这边一起阅读.由于 ...
随机推荐
- python 算法面试题
1.题目是:有一组“+”和“-”符号,要求将“+”排到左边,“-”排到右边,写出具体的实现方法. def StringSort(data): startIndex=0 endIndex=0 count ...
- python中eval函数作用
eval函数就是实现list.dict.tuple与str之间的转化str函数把list,dict,tuple转为为字符串 一.字符串转换成列表 a = "[[1,2], [3,4], [5 ...
- C#调用python文件执行
我的电脑环境是使用.net framework4.5.1,如果在调试过程中调不通请注意 我用的是Visual studion 2017,python组件下载地址:http://ironpython.c ...
- 一个Boss直聘机器人, 自动回复发简历
goBoss 基佬github地址 这是基于go语言编写的一款boss直聘机器人软件(牛人版).附上Python版本, 无需配置Go环境, 我会提供windows和macos的可执行程序.不喜勿喷O( ...
- LintCode——第K大元素
第K大元素:在数组num中找到第k大的元素(可以交换数组中的元素的位置) 样例: 数组 [9,3,2,4,8],第三大的元素是 4 数组 [1,2,3,4,5],第一大的元素是 5,第二大的元素是 4 ...
- kaggle 欺诈信用卡预测——Smote+LR
from:https://zhuanlan.zhihu.com/p/30461746 本项目需解决的问题 本项目通过利用信用卡的历史交易数据,进行机器学习,构建信用卡反欺诈预测模型,提前发现客户信用卡 ...
- 使用tomcat,不能连接localhost/8080的解决办法
首先,java的一些环境变量要解决. 其次,tomcat也应该各种环境变量设置好. 最后,把下图的那个地址重新选择一遍. 记住以上每一步弄好了之后都重启一下机器. 我也不知道为什么,但是有些就是从起之 ...
- 11.5 Daily Scrum
请把现在当成11月5日······ Today's tasks Tomorrow's tasks 丁辛 餐厅列表数据结构设计 餐厅列表UI设计 李承晗 ...
- Python爬虫:学爬虫前得了解的事儿
这是关于Python的第14篇文章,主要介绍下爬虫的原理. 提到爬虫,我们就不得不说起网页,因为我们编写的爬虫实际上是针对网页进行设计的.解析网页和抓取这些数据是爬虫所做的事情. 对于大部分网页来讲, ...
- 如何判断可见字符 Unicode
一个Unicode字符串,如何判断其中都是可见字符? //根据国标 GB2312 的中文汉字及符号 区位码的范围判断 Function CheckIsGB2312(Char : WideChar) : ...