30天学会C语言: Day 21-数值转换

数学运算的结果只有在运算元有浮点数的时候才会是浮点数,如果运算元全都是整数,不管做甚麽运算都只会得到整数数值

#include<stdio.h>
#include<stdlib.h>

int main(){
	float x=5/3;
	printf("%f", x);
	
	return 0;
}

因为 53 都是整数,所以 5/3 的结果不包含小数

如果要让结果要有小数,可以把其中一边(或两边)改成浮点数

#include<stdio.h>
#include<stdlib.h>

int main(){
	printf("%f\n", 5.0/3);
	printf("%f\n", 5/3.0);
	printf("%f\n", 5.0/3.0);
	
	return 0;
}

型别转换

如果运算元是变数,可以另外建立一个不同型别的变数,达到型别转换的效果

#include<stdio.h>
#include<stdlib.h>

int main(){
	int x=5, y=3;
	float a=x, b=y;
	
	printf("%f\n", a/b);
	
	return 0;
}

或是强制将变数的型别转换,语法是:

(<型别>)数值

下面的 (float)a 代表一个值和 a 一样的浮点数(所以 a 还是 int)

#include<stdio.h>
#include<stdlib.h>

int main(){
	int x=5, y=3;
	printf("%f\n", (float)a/b);
	
	return 0;
}

字串转数字

利用字元的性质和回圈,可以完成字串转整数的功能
如果 's[i]' 等於 '0's[i]-'0' 就等於0(整数),'s[i]' 等於 '1's[i]-'0' 就等於1(整数)...以此类推,所以 s[i]-'0' 等於一个位数的值
因为回圈会从最左的一个位数,看到最右的一个位数,所以每次 n 都要先乘上10,再加上下个位数的值

#include<stdio.h>
#include<stdlib.h>

int main(){
	int n=0;
	char s[100];
	scanf("%s", s);
	for(int i=0; s[i]!='\0'; i++){
		n*=10;
		n+=s[i]-'0';
	}
	printf("%d\n", n);
	return 0;
}

假设输入字串是 "123",一开始 n 设为0:

  1. i 等於0,s[i] 是字串的第一个字元 '1',所以开始回圈,n 乘上10为0,n 加上 s[i]-'0'(1)是1
  2. i 等於1,s[i] 是字串的第二个字元 '2',所以开始回圈,n 乘上10为10,n 加上 s[i]-'0'(2)是12
  3. i 等於2,s[i] 是字串的第三个字元 '3',所以开始回圈,n 乘上10为120,n 加上 s[i]-'0'(3)是123
  4. i 等於3,s[i] 是字串的第四个字元 '\0',所以回圈结束

最後得到 n 是整数123


<<:  Day 23 用户资料数据下载定义规划实作

>>:  30天学会 Python-Day21: 万物皆数

【Day 2】Git与Github入门

何谓Git? *说明 : 一套分散式的版本控制系统。 *作用 : 版本控制能够记录档案的内容变化,并...

D26 如何用 Apps Script 自动化地创造与客制 Google Sheet?(三)依照范本大量复制试算表

今天的目标: 要怎麽样依照范本复制并改动 Google Sheet,并一次性地的将结果搜集到同一份 ...

SQL Server 压缩资料库 (Shrink Database) - 心得分享

DBABootcamp 该不该压缩资料库是 DBA 常见的问题。以记录档 (LDF, log fil...

Day03 - 我要写 Laravel !

前言 在混过了完全不知道要写什麽的两天之後,我就在思考我到底能在铁人赛中记录下甚麽或学习到甚麽,甚至...

Keras的权重产生以及其介绍

参考网站:Keras官方指南   如果想要看各个神经元最初设定的权重,输入以下程序: layer =...