一. 类型转换
1.1 简介
在语言中,只有相同类型的数据才可以进行计算的。
1.2 隐式类型转换
隐式类型转换原则:小类型向大类型转换:相同类型--》有符号向无符号类型的转换。
double
float : 科学计数法
unsigned long
long
unsigned int
int
-- -- -- -- -- -- -- -- -- - 类型 由下向上进行转换。
char + short : 统一做整型提升,提升成为int 类型然后进行计算。
1.3 隐式类型转换发生场景
1.3.1 赋值发生隐式类型转换
char ch = 100 ;
eg:如果直接写浮点数据,默认就是double 类型,3.14f -- > 表示是一个float 类型。
float f = 3.14 '
1.3.2 在运算时发生隐式类型转换
# include
int main ( )
{
int x = 9 ;
float y = 2 ;
float ret = x / y;
printf ( "%f\n" , ret) ;
}
demo. c
# include
int main ( )
{
int number = - 1 ;
printf ( "%u\n" , number)
int x = - 20 ;
unsigned int y = 10 ;
if ( x + y > 0 )
{
printf ( "true\n" ) ;
}
else
{
printf ( "false\n" ) ;
}
}
1.3.3 printf函数会发生隐式类型转换
float 类型数据的存储
float 类型的数据存储是通过科学计数法。3.14e10
float 类型的数据中:最高位是符号位 31 位。
指数位:30 ~ 23 位 8 位(256 )
小数位:22 ~ 0 位 23 位
# include <stdio.h>
int main ( )
{
char x= 9 ;
printf ( "x = %d\n" , x) ; \\char 类型 ,printf需要的是int 类型,所以这个时候会将x隐式转换为int 输出
return 0 ;
}
1.4 强制类型转换(显示类型转换)
概念:强行将数据转换为其他类型
格式:
(需要转换的类型)变量名。
demo:
# include <stdio.h>
int main ( int argc, const char * argv[ ] )
{
int a = 9 ;
int b = 2 ;
float x = ( float ) a/ b;
printf ( "a = %d \n" , a) ;
printf ( "x = %f\n" , x) ;
return 0 ;
}
二 . 输入输出
输入输出一共有三组:printf & scanf,putchar & getchar,gets & puts
输入输出必须要带头文件#include <stdio.h>
2.1 putcahr & getchar
putchar函数
函数功能:
向终端输出一个字符
函数原型:
int putchar ( int c) ;
函数参数:
@c : 需要输出的字符。
int main ( int argc, const char * argv[ ] )
{
int a = 9 ;
int b = 2 ;
float x = ( float ) a/ b;
printf ( "a = %d \n" , a) ;
printf ( "x = %f\n" , x) ;
return 0 ;
}
2.2 gets & puts
int main ( int argc, const char * argv[ ] )
{
int a = 9 ;
int b = 2 ;
float x = ( float ) a/ b;
printf ( "a = %d \n" , a) ;
printf ( "x = %f\n" , x) ;
return 0 ;
}
2.3 printf & scanf
printf函数
函数功能:
向终端中格式化输出内容.
函数原型:
int printf ( const char * format, . . . ) ;
函数参数:
@format: 格式控制串.
% c : 字符
% d : 有符号的十进制
% u : 无符号的十进制
% o : 八进制数字
% #o : 带前缀的八进制数字
% x : 十六进制数字
% #x : 带前缀的十六进制数字
% s : 字符串.
% f : 浮点类型的数据
% . nf : n是一个数字, 保留几位小数, n就是几
% e : 指数的形式输出.
demo:
# include <stdio.h>
int main ( int argc, const char * argv[ ] )
{
int number = 97 ;
printf ( "字符输出: %c\n" , number) ;
printf ( "有符号的十进制输出: %d\n" , number) ;
printf ( "无符号的十进制输出: %u\n" , number) ;
printf ( "不带前缀的八进制: %o\n" , number) ;
printf ( "带前缀的八进制: %#o\n" , number) ;
printf ( "不带前缀的十六进制: %x\n" , number) ;
printf ( "带前缀的十六进制: %#x\n" , number) ;
float number1 = 3.1415 ;
printf ( "float类型数据输出 %f\n" , number1) ;
printf ( "float类型数据输出 %.2f\n" , number1) ;
float number2 = 100000000 ;
printf ( "科学计数法输出: %e\n" , number2) ;
return 0 ;
}
scanf函数:
函数功能:
从终端中获取指定格式的数据.
函数原型:
int scanf ( const char * format, . . . ) ;
函数参数:
format: 输入的格式控制;
% c : 字符
% d : 有符号的十进制
% u : 无符号的十进制
% o : 八进制数字
% #o : 带前缀的八进制数字
% x : 十六进制数字
% #x : 带前缀的十六进制数字
% s : 字符串.
% f : 浮点类型的数据
% . nf : n是一个数字, 保留几位小数, n就是几
% e : 指数的形式输出.
% [ ^ \n] s: 带有空格的字符串.
使用方式:
scanf ( "%d" , & 变量) ;
课堂练习:
# include <stdio.h>
int main ( int argc, const char * argv[ ] )
{
printf ( "please input your password: >>" ) ;
int number = 0 ;
scanf ( "%d" , & number) ;
printf ( "您输入的数字number = %d\n" , number) ;
int number1, number2, number3;
printf ( "please input 3 number >> " ) ;
scanf ( "%d%d%d" , & number1, & number2, & number3) ;
printf ( "number1 = %d, number2 = %d, number3 = %d\n" , number1, number2, number3) ;
getchar ( ) ;
char name[ 20 ] ;
char age[ 20 ] ;
printf ( "请输入字符串>>" ) ;
scanf ( "%[^\n]s" , name) ;
printf ( "name : %s\n" , name) ;
return 0 ;
}
三. 语言结构
C语言中的语句有三种结构:顺序结构 分支结构 循环语句
判断语句
概念: 判断条件是否成立. 来决定走哪一个分支的代码.
语句结构:
单分支结构: if
if ( condition)
{
code;
}
含义: 判断condition是否成立, 如果成立, 则执行 code的语句代码.
demo:
# include <stdio.h>
int main ( int argc, const char * argv[ ] )
{
printf ( "please input your age : >> " ) ;
int age = 0 ;
scanf ( "%d" , & age) ;
if ( age > 18 )
{
printf ( "哥, 网吧您随便进, 兄弟这就给你煮方便面\n" ) ;
}
return 0 ;
}
双分支结构: if / else 语句
格式:
if ( condition)
{
code1;
}
else
{
code2;
}
执行方式:
判断condition 条件是否成立, 成立, 执行code1, 不成立, 执行code2.
# include <stdio.h>
int main ( int argc, const char * argv[ ] )
{
printf ( "please input your age : >> " ) ;
int age = 0 ;
scanf ( "%d" , & age) ;
if ( age > 18 )
{
printf ( "哥, 网吧您随便进, 兄弟这就给你煮方便面\n" ) ;
}
else
{
printf ( "小朋友,你再不走,我给给你一份暑假作业\n" ) ;
}
return 0 ;
}
多分支结构: if / else if / else 结构
语法结构:
if ( condition1)
{
code1;
}
else if ( conditIon2)
{
code2;
}
. . . . . . .
else if ( conditionN)
{
codeN;
}
else
{
code;
}
执行语句:
判断条件condition1成立则执行code1. 如果condition1不成立, 则判断condition2.
条件condition2成立则执行code2. . . . . 如果condition都不成立, 则执行code里面的代码
案例: 从键盘中输入一个成绩 score. 要求:
85 <= score <= 100 A
75 <= score < 85 B
60 <= score < 75 C
60 > score D
# include <stdio.h>
int main ( int argc, const char * argv[ ] )
{
printf ( "please input your score >>>" ) ;
int score;
scanf ( "%d" , & score) ;
if ( score < 0 || score > 100 )
{
printf ( "您输入的成绩有误\n" ) ;
return - 1 ;
}
if ( score >= 85 && score <= 100 )
{
putchar ( 'A' ) ;
}
else if ( score >= 75 && score < 85 )
{
putchar ( 'B' ) ;
}
else if ( score >= 60 && score < 75 )
{
putchar ( 'C' ) ;
}
else
{
putchar ( 'D' ) ;
}
return 0 ;
}