C语言基础(下)

C语言基础(下)

一.变量

1.什么是变量:c语言经常把变化的值叫做变量,不变的值叫做常量

2.变量创作的语法是这样的:数据类型(int,float,char…)+变量名(自己定义即可)

注意:变量名 1. 要尽量有意义 2. 只能由字母,数字,下划线组成(数字不能开头)3. 变量名不能是关键字

3.变量在创造时给一个值,这叫做初始化,例如:

int age=18

此时的18叫做初始值,age叫做变量

4.变量的分类:

  • 全局变量:定义在大括号之外
  • 局部变量:定义在大括号之内

尽量不要让全局变量与局部变量的变量名一样,如果一样则局部变量有先

就好比全局变量是共享单车,局部变量是家里的自行车,大括号就好比家,在家时肯定优先使用家里的自行车,而不是共享单车

5.例子:

int main()

{
 int num1=0;
 int num2=0;
 sum=num1+num2;
 scanf("%d%d",&num1,&num2);//sacnf:表示输入数据,&:表示取地址符号
 int sum=0;
 printf("sum=%d\n",sum);
 return 0;
}

注意:c语言定义:变量要定义在代码最前面

二. 算术操作符

1.算术操作符:+,-,*,/,% (这五个字符也叫双目操作符)

2.除法运算:

  • 除号两边如果都是整数,则执行的是整数的除法,即得到的只有商,余数会被省略掉
  • 如果要计算出有小数的效果,则除号两端至少有一端是浮点数(小数)

注意:%f 和%lf 打印的时候默认打印6位小数

例1:除号两边都是整数

printf("%lf",3/2);     

输出结果则为1.000000

例2:除号两边至少有一边有小数

printf("%lf",3.0/2);

输出结果则为1.500000

**例3:**把默认的6位小数改成1位小数:

printf("%.1lf",3.0/2);

输出结果则为1.5

3.取模(%)

%:求余数,即返回两个整数相除的余值

注意:这个运算符的两边只能是整数,不能是小数

负数求模规则:结果的正负由第一个运算符的正负号决定

例子:

printf("%d",11%-5);   

输出结果是1,因为11是第一个运算符且为正数

三. 赋值操作符(=)

1.定义:在变量创建的时候给一个初始值叫做初始化,在变量创建好后,再给一个值,这叫赋值,

​ 赋值操作符是一个随时可以给变量赋值的一个操作符

int a=0;//初始化

a=18; //赋值,这里使用的就是赋值操作符

2.连续赋值

int a=1;

Int b=2;

intc=3;

c=b=a+3;//从右向左赋值

3.复合赋值符

int main()
{
 int a=10;
 a+=4;//此处的全写为:a=a+4,因此+=就是常见的复合赋值符
 printf("%d",a);
 return 0;
}

四. 单目操作符

1.++

本质为+1,分为前置++和后置++

前置++的计算口诀为:先+1,后使用

int main()
{
 int a=5;
 int b=++5;
 printf("a=%d b=%d\n",a,b);
 return 0;
}

输出结果为a=6 b=6

分析:因为前置++的运算法则是先+1,再使用。所以a=a+1 b=a

后置++的计算口诀为:先使用,后+1

int main()
{
 int a=5;
 int b=a++;
 printf("a=%d b=%d\n",a,b);
 return 0;
}

输出结果为a=6 b=5

分析:因为后置++的运算法则是先使用,后+1(先使用是指可以假装把++去掉,只保留b=a)。所以a=6 b=5,

2.

本质是-1,分为前置–和后置–

前置–的计算口诀为:先-1,后使用

后置–的计算口诀为:先使用,后-1

计算方法同++

3.+和-

这里的+和-与双目操作符的加和减不同,这里的+和—指的是数字的正和负

int a=10;
printf("%d\n",+a);//结果为10(因为10本身就是正数,会省略前面的+号)
printf("%d\n",-a);//结果为-10

五.强制类型转换

语法形式:(类型)

例子:

int main()
{
 int a=(int) 3.14;
 printf("%d\n",a);
 return 0;
}

此时的输出结果为3

因为int是代表着整型,而3.14是一个小数,因此如果要想代码运作,则要在3.14前加上(int),这样才能使3.14强制转换为整型

六. printf和scanf介绍

(一). printf

1.定义

printf=print+f

print:打印 f:format:格式

因此连起来就是按照定义的格式打印数据

注意:在写printf时,一定要有头文件:#include<stdio.h>

2.占位符

printf可以在输出文本中指定占位符

所谓占位符,就是这个位置可以用其他值带入

下面比较两个代码:

printf("there are 2 apples");

printf("there are %d apples", 2);

虽然它们输出的结果相同但明显的能看出来第二行的代码更灵活,因为它是可改的,逗号后面输入的整数数字都会在输出时体现出来

这里的%d就是占位符,表示这个位置要用其它的值替代,并且代入的值一定是整数

输出文本里可以使用多个占位符

int main()
{
 printf("%s says it is %d o'clock\n", "xiao ming",10);
 return 0;
}

上⾯⽰例中,输出⽂本 %s says it is %d o’clock 有两个占位符,第⼀个是字符串占位符 %s ,第⼆个是整数占位符 %d ,分别对应 printf() 的第⼆个参数( xiao ming )和第三个参数( 10 )。执⾏后的输出就是 xiao ming says it is 10 o’clock 。

总结:printf() 参数与占位符是⼀⼀对应关系,如果有 n 个占位符, printf() 的参数就应该有 n +1 个。如果参数个数少于对应的占位符, printf() 可能会输出内存中的任意值。

占位符列举
printf() 的占位符有许多种类,与C语⾔的数据类型相对应,下⾯按照字⺟顺序,列出常⽤的占位
符,⽅便查找,加粗的为常见的占位符

%a :⼗六进制浮点数,字⺟输出为⼩写。

%A :⼗六进制浮点数,字⺟输出为⼤写。

%c :字符。

%d :⼗进制整数。

%e :使⽤科学计数法的浮点数,指数部分的 e 为⼩写。

%E :使⽤科学计数法的浮点数,指数部分的 E 为⼤写。

%i :整数,基本等同于 %d 。

%f :⼩数(包含 float 类型和 double 类型)。

%g :6个有效数字的浮点数。整数部分⼀旦超过6位,就会⾃动转为科学计数法,指数部分的 e
为⼩写。

%G :等同于 %g ,唯⼀的区别是指数部分的 E 为⼤写。

%hd :⼗进制short int类型。

%ho :⼋进制short int类型。

%hx :⼗六进制 short int类型。

%hu :unsigned short int 类型。

**%ld :⼗进制long int 类型。

%lo :⼋进制 long int类型。

%lx :⼗六进制long int类型。

%lu:unsigned long int 类型

%lld :⼗进制 long long int 类型。

%llo :⼋进制 long long int 类型。

%llx :⼗六进制 long long int 类型。

%llu :unsigned long long int 类型。

%Le :科学计数法表⽰的 long double类型浮点数。

%Lf :long double 类型浮点数。

%n :已输出的字符串数量。该占位符本⾝不输出,只将值存储在指定变量之中。

%o :⼋进制整数。

%p :指针。

%s :字符串。

**%u :⽆符号整数(unsigned int)

**%x :⼗六进制整数。

%zd : size_t 类型。

%% :输出⼀个百分号。

3.输出格式

(1)限定宽度:

int main()
{
 paintf("%5d\n",123);
 return 0;
}

输出结果为 123(注意123前面有2个空格)

%5d表示占位符的宽度至少是5位,如果不满5位,则会在数字的前面补上相应空格,直至空格数+数字个数=最小限定宽度

int main()
{
 printf("%12f\n",21.19);
 return 0;
}

输出结果为 21.190000(注意21.190000前面还有3个空格)

这个举的是小数的例子,小数的默认显示精度是小数点后6位

int main()
{
 printf("%-5d\n",123);
 return 0;
}

输出结果为123 (注意此时的2个空格在123后面)

这个举的是把输出内容改成左对齐的例子

(2)限定小数位数

输出小数时,有时希望限定小数的位数。举例来说,希望小数点后面保留两位,占位符可以写成**%.2f**

int mian()
{
 printf("%.2f\n",0.5);
 return 0;
}

输出结果为0.50

这种写法可以与限定占位符结合使用

int main()
{
 printf("%7.2",21.5);
 return 0;
}

这样的话输出结果就为 21.50(注意21.50前面有两个空格)

最小宽度和小数位数这两个限定值,都可以用*****代替,通过printf( )的参数传入

int main()
{
 printf("%*.*f\n",7,2,21.5);
 return 0;
}

(3)输出部分字符串

%s占位符用来输出字符串,默认的是全部输出。如果只想输出一部分可以用 %.数字s 的形式写,.数字表示要输出的长度

int main()
{
 printf("%.5s\n",hello world);
 return 0;
}

输出结果为hello

(二). scanf

1.基本用法

当我们有了变量,我们需要给变量输入值就可以使用scanf函数,如果想要将变量的值输出在屏幕上的时候可以使用printf函数。

scanf函数用于读取用户的键盘输入

当程序运行到这个语句时会自动停下,等待用户输入信息。

用户输完信息按回车后,scanf就会处理用户的输入,将其存入变量。

形式:

scanf("%d", &abc); //&的意思是取地址

所以这句话的意思就是:把一个整数放在abc这个地址内

例子:

int main()
{
 int score=0;
 printf("请输入你的成绩:");
 scanf("%d\n",&score);
 printf("成绩是:%d\n",score);
 return 0;
}
 

这个例子可以更深的感受到scanf的作用,首先计算机会打印出"请输入你的成绩:",这是就是scanf的作用(它可以让计算机停止在这一刻,等待用户的输入,等用户输入完按下回车,程序会运行大最后一行,打印出“成绩是:xxx”

当然用户可以一次性的在键盘上输入多个变量。例子:

int main()
{
 int a=0;
 int b=0;
 float c=0.0f;
 float d=0.0f;
 
 scanf("%d%d%f%f",a,b,c,d);
 
 printf("a=%d\n",a);
 printf("b=%d\n",b);
 printf("c=%d\n",c);
 printf("d=%d\n",d);
 
 return 0;
}

解读用户输入时,会从上一次解读遗留的第一个字符开始,直到读完缓存,或者遇到第一个不符合条件的字符为止。例子:

int main()
{
 int a=0;
 float b=0.0f;
 sacnf("%d\n",a);
 printf("%d\n",a);
 scanf("%f\n",b);
 printf("%f\n",b);
 return 0;
}

这是输入-88.45e12¥5763 注意:0.45e12的意思是0.45乘10的12次方

结果为-88 449999994880.000000

解析:在计算机第一次解读时,解读到小数点前为第一次,因此打印结果为-88,由上面的介绍得知,第二次解读会从上一次解读遗留的第一个字符开始,直到读完缓存,或者遇到第一个不符合条件的字符为止,因此第二次读取的就是0.45乘10的12次方,后面对¥5763都是多余的

这时候想必大家都有一个疑问,为什么0.45乘10的12次方会生成449999994880.000000,这是因为小数在计算机中可能无法精确保存

2.scanf的返回值

规则:scanf( )的返回值是一个整数,表示成功读取的变量个数。如果没有读取任何项,或者匹配失败,则返回0。如果在成功读取任何数据之前,发生了读取错误或者是读到文件结尾,则返回常量EOF(end of file)-1。

例子:

int main()
{
 int a=0;
 int b=0;
 float c=0.0f;
 int d= scanf("%d %d %f",a,b,c);
 printf("a=%d b=%d c=%f\n",a,b,c);
 return 0;
}

下面的图片显示着不同的输入和输出结果,它们可以更好的验证scanf返回值的规则
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
补充一下,^z其实是快捷键ctrl+z打印出来的,表示不输入任何值,自动跳过,在vs2022中一般要写上三个ctrl+z电脑才能识别

3.占位符

scanf() 常⽤的占位符如下,与 printf() 的占位符基本⼀致。
%c :字符
%d :整数。
%f : float 类型浮点数。
%lf : double 类型浮点数。
%Lf : long double 类型浮点数。
%s :字符串。
%[ ] :在⽅括号中指定⼀组匹配的字符(⽐如 %[0-9] ),遇到不在集合之中的字符,匹配将会
停⽌。

上面的占位符之中,除了%c以外,都会自动忽略起手的空白字符。%c不忽略起手的空白字符

如果想要强制跳过字符前的空白字符,可以写成scanf(" %c",&abc),其实就是在%c之前加一个空格

下面要特别注意一下%s,他的规则于%c正好相反,它是可以忽略起手的空白字符,但是当它遇到字符串中的的空格时,它将停止。例子:

printf main()
{
 char arr[10]={0};
 scanf("%s", arr);
 printf("%s\n", arr);
 return 0;
}

在这里插入图片描述

  • 25
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值