C语言 第一章(3)

发布于:2025-02-27 ⋅ 阅读:(15) ⋅ 点赞:(0)

目录

输出语句(printf)

占位符

占位符的种类

实例

 格式1:

 格式2:

字符形式

 数据类型间的运算规则

a. 隐式类型转换

b. 强制类型转换(大→小)

 问题:

实例

常量

字面常量

const修饰的常量

 #define定义的标识符常量:

枚举常量: 

输入函数  

a. scanf():让用户向程序中输入内容。 

 

b. 清除缓存 

常见的进制  

 原码、反码、补码 


输出语句(printf)


        5用于输出字符串(如"hello" )。

格式为printf(格式控制字符串, 输出列表)

 “格式控制字符串”是用双引号括起来的一个字符串。包括:

  • 普通字符:普通字符即需要在输出时原样输出的字符。
  • 占位符:由“%”和格式字符组成。这个位置可以用其它值代入。
  •   “输出列表”是程序需要输出的一些数据,可以是常量、变量或表达式。用于替换占位符的位置。

注意:printf() 参数与占位符是一一对应关系。


占位符


占位符的种类

  •  %c:char型数据
  •  %d:十进制整数(int) 
  • %f:浮点数(float) 
  • %ld:十进制长整数(long)
  • %lf:十进制双精度数(double)
  •  %x:十六进制整数
  •  %p:指针
  •  %s:字符串

实例

举例1:%d

int main(){

int num = 10;
printf("coount is %d\n",num)

return 0 ;
}

举例2:  %If和 %f

int main (){
float f= 3.1415926525333;
double d=3.1415926525333
//使用 %f 输出单精度浮点数
printf("Float:%f\n",f);//Float:3.141593
// 使用 %f 输出双精度浮点数
printf("Double:%fn",d);//Double:3.141593
return 0;
}

举例3:%c

int main(){
char level ='A';
printf("this score level is:%c\n",1eve1); //输出:this score leyel is:A
return 0 ;
}

 格式1:

先补限定占位符的最小宽度

printf("%5d \n",123); ⇒"   123"

 格式2:

限定小数位:

printf("%.2f\n", a ) ⇒"1.23" (若未限制,float默认6位)


字符形式

  • \n: 换行符
  • \t:水平制表符,光标移到下一个tab位置
  • \':单引号字符
  • \":双引号字符
  • \\:反斜杠字符‘\’

     数据类型间的运算规则

a. 隐式类型转换

容量小→容量大的类型 [自动转换]


 eg. short s = 327; int n = s;
 


b. 强制类型转换(大→小)

eg. int n = 128; char c = (char)n;  //强制类型转换 

 问题:

1. 会溢出 2. 精度变小

long < float < double

v=(-1)^s M*2^E
 小数,第一位符号位,即S;接下来8位为指数域,即E;剩下的23位,即M。


实例

int main(){
/*数类型阿的转換
数据炎型大小问题
窄类壁-->宽类型(容最)
char 1 short 2 int 4 long 8
float 4 double 8
1.隐式类型转换
容量小的 转容量大的类型

*/
short s = 32767;
int n= s;
long   m = n ;
double d= m
printf("%d",n)
double g = m+n;//(m+n) --- > double
/*
2.强制制类型转换 
容量大的类型 转容量小的的类型
可能会出现溢出问题
精度变小
*/
int n = 128;
char c = (char)n;//强制类型转换
printf("%d\n",c)

double d = 10.5;
long m = d;
printf("%ld\n",m)

return 0 ;
}

常量

(程序运行时,其值不能改变的量,即为常量)
 


字面常量

如 age = 20; //20为字面常量。

#include <stdio.h>
int mainO){
//字面常量
int a = 3.14;//3.14为字面常量
printf("%d”,1000);//1000为字面常量
}

const修饰的常量

const 数据类型 常量名 = 常量值;

#include <stdio.h>
int main(){
//const 修饰的常变量
const float PI = 3.14f;
//PI =5.14;//是不能修改的!
return 0;
}

 #define定义的标识符常量:

这种方式是在文件开头用 #define 来定义常量,也叫作“宏定义”。所谓宏定义,就是用一个标识符来表示一个常量值,如果在后面的代码中出现了该标识符,那么编译时就全部替换成指定的常量值。

eg.

文件之前 #define 常量名 常量值

#include <stdio.h>
#define ZER00 //#define的标识符常量
int main() {
printf("zero=%d\n",ZERO);
return 0;
}

枚举常量:
 

 格式:enum {常量名, 常量名, 常量名};
 
注意默认是从0开始,依次向下递增的(需要在main外)。

#include <stdio.h>
//使用enum定义枚举类
enum WEEK{
//括号中的SUN,MON,TUE是枚举常量
SUN .
MON
TUE
int mainO{
//枚举常量
printf("%d\n", SUN);
printf("%d\n", MON);
printf("%d\n", TUE);
//注:枚举常量默认是从0开始,依次向下递增1的
return 0:
}

输入函数
  


a. scanf():让用户向程序中输入内容。
 

格式:scanf("格式控制字符串", 参数地址列表);
 
“参数地址列表”:以逗号“,”分隔的。
 
 例如:int a; scanf("%d", &a); 其中&是寻址操作符。

实例

计算圆的面积,其半径由用户指定

#include <stdio.h>
int main(){
float r, area;
printf("请输入半径值:   \n");
scanf("%f",&r);
//输入半径
area =3.14 *rfr;
printf("area=%f\n",area);//输出圆的面积
return 0;

 


b. 清除缓存
 

setbuf(stdout, NULL);
 
若想输完整数切换字符时,也会受到缓存影响,要清除缓存。

int age ;
int heignt.
char gender;
printf( format:“请输入年龄\n");
scanf( format:"%d",&age);//鑰入两数(%d,&变最名 取地址符);
printf( format:"请输入身高\n");
scanf( format:"%d",&height);
//当输入完整数后,切换到字符时,也会收到缓存影响,请除缓存
printf( format:“请输入性别\n");
scanf( format: "%c" ,&gender).
printf( format:"我的年龄是%d,身高是%d,性别是%c",age,height,gender);
return 0;

 
 ①getchar();
 
 ②在scanf(" %c", &gender);  表示空格 。

getchar()与putchar()的区别
 
 - eg. gender = getchar() //等待输入一个字符
 
- eg. putchar(gender);



常见的进制
  

 二进制

int a2=0b11
  
占位符 %d 十进制
 
 八进制

int a3=011
 占位符 %o 八进制
 
十进制

int a1=10
 
十六进制

int a4=0x17
 占位符 %x 十六进制


 原码、反码、补码
 

  • 正数:三码合一
  • 负数→负数的补码是其反码加1
  •  反码:在原码的基础上,最高位不变,其余位取反

 二进制 ⇋ 十进制示例:
 eg. 1011 ,

计算方式为 2^0×1 + 2^1×1+2^2×0 + 2^3×1  ,

除二取余的逆过程:13%2=1,6%2=0,3%2=1,1%2=1