第2讲:C语言数据类型和变量

第一部分

数据类型是用来创建变量的
为什么要编写程序?为了解决生活中的问题!
将生活中的数据使用计算机语言,结合数据类型与变量描述。

1. 数据类型介绍

数据类型

布尔类型头文件 <stdbool.h>

布尔类型变量的取值是:true或者false
C语言原来并没有为布尔值单独设置⼀个类型,而是使用整数 0 表示假,非零值表示真

#include <stdio.h>
#include <stdbool.h>
int main()
{
	_Bool flag = true;//格式?首字母大写
	if (flag)//if括号里表判断,真假
	{
		printf("0000");
	}
	return 0;
}

区分sizeof与strlen

联系:都可以计算长度
区别:
sizeof的对象为数据类型或表达式,
单位为字节,表示所占内存的大小,返回值为size_t
size_t是一种无符号的整数,这种整数值在打印的时候,使用%zd

#include <stdio.h>
int main()//sizeof中表达式不计算,回顾????
{
	short s = 2;
	int b = 10;
	printf("%d\n", sizeof(s = b + 1));
	printf("s = %d\n", s);
	return 0;
}

strlen的对象为字符串,统计的是字符串中\0之前的,单位是字符的个数

#include <stdio.h>
#include <string.h>
int main()// 将abc以两种不同的形式存入数组,并打印输出及字符串长度
{
	char arr1[] = "abc";//字符串以\0作为结束标志
	char arr2[] = { 'a','b','c' };//三个单独的字符
	printf("%s\n", arr1);//数组打印输出时,说明变量名即可,无需指出数组的大小
	printf("%s\n", arr2);
	printf("%zd\n", strlen("arr1"));//strlen求字符串长度时,括号内需使用双引号,头文件为<string.h>
    printf("%zd\n", strlen("arr2"));

	return 0;
}

2. signed 和 unsigned

3. 数据类型的取值范围

4. 变量

变量在内存中的存储位置

#include <stdio.h>//当局部变量和全局变量同名的时候,局部变量优先使⽤。
int sss = 22;
int main( )
{
	int sss = 33;
	printf("%d\n", sss);
	return 0;
}

第二部分

5. 算术操作符:+、-、*、/、%

/

除号的两端如果是整数,执行的是整数除法,得到的结果也是整数。
C语言里面的整数除法是整除,只会返回整数部分,丢弃小数部分。

#include <stdio.h>//求平均生活费
int main( )//程序设计思维:一设二列三解四答
{
	int shenghuofei = 2004;//一设:定义并初始化变量
	double pinjun = 0;
	pinjun = (shenghuofei / 20.4);//二列:结合各类操作符,列出各个变量间的关系及整体逻辑框架
	//三解:交给计算机处理
	printf("%.2lf", pinjun);//四答:将处理所得的结果,使用占位符按自己想要的数据类型输出
	//占位符与变量的数据类型必须匹配
	return 0;
}

如果希望得到浮点数的结果,两个运算数必须至少有⼀个浮点数,这时C语言就会进行浮点数除法。
float与int只是将整数分别以不同的数据类型输出罢了;输出时,占位符与变量的数据类型必须匹配。

%

运算符 % 表示求模运算,即返回两个整数相除的余值。这个运算符只能用于整数,不能用于浮点数。
负数求模的规则是,结果的正负号由第一个运算数的正负号决定。

#include <stdio.h>
int main()
{
	int t = -8 % 3;
	printf("%d\n", t);
	return 0;
}

6. 赋值操作符:= 和复合赋值

复合操作符=赋值操作符+算术操作符

7. 单目操作符:++、–、+、-

前置就是先操作(+/-),再赋值使用的意思

#include <stdio.h>
int main()
{
	int a = 77;
	int b = ++a;
	printf("%d %d", a, b);
}

后置就是先赋值使用,后操作(+/-)的意思

#include <stdio.h>
int main()
{
	int a = 77;
	int b = a++;
	printf("%d %d", a, b);
}

第三部分

8. 强制类型转换

int a = (int)3.14;//意思是将3.14强制类型转换为int类型,这种强制类型转换只取整数部分

9. printf和scanf介绍

printf

占位符的第一个字符一律为百分号 % ,第二个字符表示占位符的类型,
%d 表示这里代入的值必须是⼀个整数,占位符与变量的数据类型必须匹配。

#include <stdio.h>
int main()//输出⽂本⾥⾯可以使⽤多个占位符。
{
	printf("%s 的生日是%d年%d月%d日", "liu", 2003, 8, 15);
	return 0;
}

传参:以不变应万变,万变不离其宗。

//最⼩宽度和⼩数位数这两个限定值,都可以⽤* 代替,通过 printf() 的参数传⼊。
#include <stdio.h>
int main()
{
	printf("%s 的体重是%*.*fKG ", "liu",4,2,65.235);
	return 0;
}

scanf

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

如何给变量输入值?

scanf() 函数用于读取用户的键盘输入,
程序运行到这个语句时,会停下来,等待用户从键盘输入。
用户输入数据、按下回车键后, scanf() 就会处理用户的输入,将其存入变量。

#include <stdio.h>//输入并输出成绩
int main()
{
	int score = 0;
	printf("please enter the score:");
	scanf("%d", &score);//不可加\n,否则无法执行程序。
	printf("the score is %d\n", score);
	return 0;
}

注意:变量前面必须加上 & 运算符(指针变量除外),因为 scanf() 传递的不是值,而是地址,
即将变量 i 的地址指向用户输入的值。如果这里的变量是指针变量(比如字符串变量),那就不用加 & 运算符。

scanf连续处理多个占位符

scanf() 处理数值占位符时,会自动过滤空白字符,包括空格、制表符、换行符等。

#include <stdio.h>//scanf连续处理多个占位符,⽤⼾输⼊ " -13.45e12# 0"
int main()
{
	int x = 0;
	float y = 0;
	printf("please enter the date:");
	int a = scanf("%d %f", &x, &y);
	//scanf() 的返回值是⼀个整数,表⽰成功读取的变量个数。
	printf("x = %d ,y = %f\n", x, y);
	printf("a = %d",a);//输出时,切勿忘记输入与占位符相对应的变量
	//占位符与变量的数据类型必须匹配
	return 0;
}
占位符 %s

特别说一下占位符 %s ,它其实不能简单地等同于字符串。
它的规则是,从当前第一个非空白字符开始读起,直到遇到空白字符(即空格、换行符、制表符等)为止。

#include <stdio.h>
int main()
{
	char money[8] ;
	printf("plese enter the money:");
	scanf("%7s",&money);
	//使⽤% s 占位符时,应该指定读⼊字符串的最⻓⻓度,即写成% [m]s
	printf("the is %s", money);
	return 0;
}

%s 不会包含空白字符,所以无法用来读取多个单词,除非多个 %s 一起使用。
scanf() 不适合读取可能包含空格的字符串,比如书名或歌曲名。

占位符%c

1.所有占位符之中,除了 %c 以外,都会自动忽略起首的空白字符。
%c 不忽略空白字符,总是返回当前第⼀个字符,无论该字符是否为空格。

2.如果要强制跳过字符前的空白字符,可以写成 scanf(" %c", &ch) ,
即 %c 前加上一个空格,表示跳过零个或多个空白字符。

赋值忽略符
#include <stdio.h>
int main()
{
	int year = 0;
	int month = 0;
	int day = 0;
	scanf("%d%*c%d%*c%d", &year, &month, &day);
	//只要把 * 加在任何占位符的百分号后⾯,该占位符就不会返回值,解析后将被丢弃。
	printf("%d %d %d\n", year, month, day);
	return 0;
}
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悟空阿瞒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值