c语言笔记1 输入和输出注意事项,常量 变量 static
创始人
2024-04-24 16:15:49
0

输出:printf

c的编译器不会检测格式串中转换说明的数量和数据类型是否和后面的变量一致。转换说明的数据类型与实际数据类型不一致时,产生无意义的值。

int 类型的变量length,值为9,输出时将类型写为float或double,输出值变为0.00,毫无意义。 

%f格式:用来输出实数(单精度和双精度实数),以小数形式输出。

输入:scanf

输入的变量名前加&符号,一次输入多个变量时,格式中间是空格,输入时就用空格隔开变量,输入格式中间是,时,输入两个变量中间就用,隔开。

scanf输入格式中%f是单精度浮点型,%lf是双精度浮点型。 

常量

常量分为符号常量和直接常量。

符号常量需要先定义(声明),再使用,通常采用宏或const关键字定义,相当于给常量取了一个别名。

宏常量语法格式:

#define 标识符  替换列表      //注意不用;结束

#define PI  3.1415926      

#include 
#define PI 3.1415926    //不用分号结束
int main()
{	printf("%f",PI);
}

const定义常量:

#include 
int main()
{	const double PI = 3.1415926;printf("%f",PI);
}

变量:

全局变量和局部变量

在函数外定义的变量叫全局变量。

#include 
int i = 1;      //全局变量i
int add(int a,int b)
{int result = a + b;      //局部变量resultreturn result;
}
int main()
{	int m = add(2,3);       //result在此处不可以,从新定义一个局部变量i++;printf("%d\n",m);printf("%d",i);
}

static 关键字

static可用于局部变量和全局变量,称为静态局部变量和静态全局变量。

1、静态局部变量:可以使得局部变量具有静态存储期限,即这样的局部变量在整个程序执行期间都拥有存储空间,因而变量的值一直存在。

静态局部变量仍然是局部变量,只是其存储空间不会在函数返回时被回收。

#include 
int add()
{int data1 = 0;static int data2 = 1;data1 = data1 + 2;data2 = data2 + 4;return (data1 + data2);
}
int main()
{int i = 1;printf("NO.%d:",i);	printf("%d\n",add());  //data1 = 2, data2 = 5, 2+5=7i = 2;printf("NO.%d:",i);	printf("%d\n",add());  //data1 = 2 ,data2 = 9,2+9=11;  data1被重写赋值0,//data2是静态的,内存没有回收仍然是5i = 3;printf("NO.%d:",i);	printf("%d\n",add());		
}

运行结果

 2、静态全局变量

静态全局变量作用域是从变量声明的那处开始直到本文件的末尾。

存储期限是在内存空间分配之后,一直保留到程序结束。但是静态全局变量只在声明它的文件内可见,对同一文件内的函数可见,对其他文件中的函数不可见,能避免被其它文件访问,实现信息隐藏。

字符处理

#include 
#include    //字符处理需添加的头文件
int main()
{char ch1 = 'a';char ch2 = 'B';char ch3 = toupper(ch1);char ch4 = tolower(ch2);	printf("ch3 = %c\n",ch3);	printf("ch4 = %c",ch4);		
}

字符输入和输出:

#include 
#include    //字符处理需添加的头文件
int main()
{char ch1;scanf("%c",&ch1);printf("ch1 = %c",ch1);	
}

 输出:      a
                ch1 = a

字符输入和输出用到格式:%c,如果想强制scanf函数在读入字符时自动跳过若干空白字符,可以在%c前面加上一个空格实现。

#include 
#include    //字符处理需添加的头文件
int main()
{char ch1;scanf(" %c",&ch1);printf("ch1 = %c",ch1);	
}

 scanf的格式中%C前面添加了空格,所以输入:空格空格a,输出是a。

  c语言还提供另外一对函数:getchar()和putchar()函数,实现对单独的一个字符进行读写操作。

#include 
#include    //字符处理需添加的头文件
int main()
{char ch1;
//	scanf(" %c",&ch1);
//	printf("ch1 = %c",ch1);	ch1 = getchar();        //输入一个字符,返回输入的字符putchar(ch1);           //输出一个字符  
}

 getchar函数不支持格式化输入,要想在读入字符时,跳过若干空白字符,通常借助循环结构实现。

bool类型

bool类型在C99之后才有,值是true和false,并且存储成int类型,true记录成1,false记录成0.

使用bool类型需要添加头文件。

#include 
#include     //bool类型需要添加这个头文件
int main()
{bool b = 1;bool m = 6 > 5;bool n = (6==5);printf("b = %d\n",b);       printf("m = %d\n",m);  printf("n = %d\n",n);       
}

逻辑运算

逻辑运算是至左向右的元素,如果左边的结果已经能够决定结果了,就不会做右边的运算。

a == 6 && b==1;

对于&&运算,左边的是false,右边的就不运算了。

对于||运算,左边的是true,右边的就不运算了。

#include 
int main()
{	int a = -1;if(a > 0 && a++ > 1){printf("OK\n"); }printf("a = %d\n",a);       
}

因为a>0是false,所以if语句的判断结果一定是false,a++>1无需执行,所以a = -1。

运算符优先级:

所有关系运算低于算术运算,高于赋值运算。

7 >= 3+4;   //3+4=7,7>=7结果是1

6>5>4   //6>5结果是1 ,1>4结果是0

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...