2.C语言变量

2.C语言—变量

2.1 算找零:

(1) 有地方放输入的数字
(2) 有办法输入数字
(3)输入的数字能参与计算

#define _CRT_SECURE_NO_WARNINGS 1//防止scanf出错
#include <stdio.h>

int main()
{
   const int AMOUNT = 100;//定义的常量
   int price = 0;
   printf("请输入金额(元):");//输出
   scanf("%d", &price);//输入
   
  int change = AMOUNT - price;

  printf("找您%d元。\n", change);
   return 0;
}

2.2 如何输入:

  • 输入也在终端窗口
  • 输入是以行为单位进行的,行的结束标志(按下回车键),在此之前程序不会读取任何东西。

2.3 变量:

  • 定义 :变量是一个保存数据的地方,在我们需要在程序里保存数据时出现
    eg:当我们需要记录用户输入的价格,就需要一个变量-price来保存它,用一个变量保存数据,让它参加到后面的计算
  • 一般形式 :
    <类型名称><变量名称>
    eg: {int price = 0}
    “变量是price,类型int,初始值0”
    • ps:c语言是一种有类型的语言,所有变量在使用之前都必须定义和声明,所有变量必须有确定的类型。数据类型表示在变量中可以存放什么样的数据,变量中只能存放指定类型的数据,程序运行过程中也不能改变变量的类型。
  • 名字:变量的名字是个“标识符”,指它是用来识别这个和那个的不同的名字
  • 标识符构造原则:字母 数字 下划线
    • 注意:
      • 数字不能出现在第一个位置
      • c语言的关键字(保留字)不能做标识符

2.4 赋值:

  • 以一个例子来说明
    eg:int price = 0;
    price=0 是一个式子,“=”是赋值运算符,表示将“=”右边的的值赋给左边的变量。
    • 注意:“=”左右两边并不等价,拿a=b来说,程序中a=b是要求计算机做一个动作:将b的值赋予a,而不是指数学中那种a=b和b=a等价关系

2.5 变量初始化:

  • 定义形式:<类型名称><变量名称>=<初始值>;
    eg: int amount=0;
    • ps:组合变量定义的时候,也可以在这个定义中单独给单个变量赋予初始值。

2.6 变量输入:scanf

  • scanf指输入,要scanf读哪个整数,就在&(注意不要忘记写它)后输入哪个变量
    eg:scanf(“%d”, &price);
  • 表达意思:要求scanf这个好书读入下一个整数,读到的结果赋值给变量price

2.7 常量:

  • 固定不变的数是常数,直接写在程序里称为直接量
    · 在程序中定义一个常量更加清晰明了
    eg:const int AMOUNT=100;
    int price = 0;
    printf(“请输入金额(元):”);//输出
    scanf(“%d”, &price);//输入

    int change = AMOUNT - price;

  • 表达意思:const 是一个修饰符,在int前用来给变量加上一个const(不变的)属性,表示这个变量的值一旦初始化,就不能修改.

  • 形式改变:

    • 用户输入变量AMOUNT的值,而不是使用固定的初始值。
      int amount = 100;
      int price = 0;
      printf(“请输入金额(元):”);
      scanf(“%d,&price);
      printf(“请输入票面”);
      scanf(”%d",&amount);
      int change = amount - price;
    • 用一个scanf输入两个变量:
      int a;
      int b;
      printf(“请输入两个整数”);
      scanf(“%d %d”,&a,&b);
      printf(“%d + %d =%d\n”,a,b,a+b); `

2.8 浮点数:

  • 带小数点的数值,浮点本意指小数点是浮动的,是计算机内部表达非整数(包括分数和无理数)的一种方式。
  • 浮点数类型:
    • 双精度浮点数 double
    • 单精度浮点数 float
  • 注意:形式对应
    • 整数: int %d…
    • 浮点数:double %lf…
  //计算身高的程序
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

int main()
{
	printf("请分别输入身高的英尺和尺寸,"
	"如输入\ "5 7\ "表示5英尺7英寸:");

int foot;
	int inch;
	scanf("%d %d", &foot, &inch);
	printf("身高是%f米。\n",
	((foot + inch / 12) * 0.3048));//改法一:(foot + inch / 12.0) * 0.3048)


return 0;
}
改法二:
double foot;
double inch;

scanf(“%lf %lf”,&foot,&inch);
  • /*注意:两个整数的运算结果只能是整数(不带小数点),10与10.0是完全不同的数,10.0是浮点数。
eg:
      ①(错误):#include <stdio.h>

int main()
{
	printf("%d\n", 10 / 3);
	return 0;
}
        ②(正确)#include <stdio.h>

int main()
{
	printf("%f\n", 10 .0/ 3);
	return 0;
}

2.9 表达式:

  • 一个表达式是一系列运算符和算子的组合,用来计算一个值。
    eg:amount=x*(1+0.033)(1+0.33)(1.0.33);
    total=57;
    count=count+1;
    value=(min/2)*LastValue

  • 运算符:指进行运算的动作,例如加法运算符"+“,减法运算符”-"。

  • 算子:指参与运算的值,可能是常数,也可能是变量,还可能是一个方法的返回值。
    eg:a=b+5
    “=”“+”为运算符;“a”“b”“5”为算子。

  • 计算时间差:

    • 输入两个时间,每个时间分别输入小时和分钟的值,然后输出两个时间之间的差,也可以以几小时几分表示。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
   int hour1, minute1;
   int hour2, minute2;
   
   scanf("%d %d", &hour1, &minute1);
   scanf("%d %d", &hour2, &minute2);

   int t1 = hour1 * 60 + minute1;//hour1*60+minute1→== 转换为分钟单位 ==
   int t2 = hour2 * 60 + minute2; 

   int t = t2 - t1;

   printf("时间差是%d小时%d分。",t / 60, t % 60);//t/60→小时部分;t%60→分钟

   return 0;
}

2.10 求平均值

(1)

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	int a, b;
	scanf ("%d %d", &a, &b);
	double c = (a + b) / 2.0;
	printf("%d和%d的平均值=%f\n", a, b, c);
	return 0;
}

(2) ------------------运算符优先级--------------------

  • 优先级 运算符 运算 结合关系 举例

    • 1 + 单目不变 自右向左 a*+b
    • 1 - 单目取负 自右向左 a*-b
    • 2 * 乘 自左向右 a*b
    • 2 / 除 自左向右 a/b
    • 2 % 取余 自左向右 a%b
    • 3 + 加 自左向右 a+b
    • 3 - 减 自左向右 a-b
    • 4 = 赋值 自右向左 a=b

    (3) 赋值运算符:
    赋值也是运算,是有结果的
    a=6的结果是a被赋予的值,也就是6
    a=b=6→→→a=(b=6)
    (4) 嵌入式赋值:(缺点:不利于阅读,容易产生错误)
    int a=6;
    int b;
    int c=1+(b=a);
    (5)结合关系:
    一般是自左向右
    单目±和赋值=自右向左

2.11 交换变量:

  • 用一个临时变量,让它作为中间临时存在的一个地方,等于某个值。
    • ps:程序表达的是顺序执行的动作,而不是关系a=b;b=a;,这样执行后a和b都是得到b原来的值。
      eg:
#include <stdio.h>

int main()
{
	int a= 5;
	int b = 6;
	int t;
	t = a;
	a = b;
	b = t;
	printf("a=%d,b=%d\n", a, b);

return 0;
}

//ps:断点:点击左侧数字,取消:变为输入状态

2.12 复合赋值:

  • 5个算数运算符“+ - * / %”,可以和赋值运算符“=”结合起来,形成复合赋值运算符:“+=”“-=”“=”“/=”“%=”。
    eg:total+=5;
    total = total +5;
    total
    =(sum+100)/2;
    total=total*(sum+12);
  • 注意两个运算符中间不要有空格

2.13 递增递减运算符: ++ - -

  • “++”“–”是单目运算符,这个算子必须是变量。这两个运算符分别叫做递增递减运算符,它们的作用是给这个变量+1或者-1.
    • count++;
      count+=1;
      count=count+1;
  • 前缀后缀:
    • “++”“–”可以放在变量前面叫做前缀形式,放在变量后面叫做后缀形式。
    • a++的值是a+1以前的值,++a是加了1以后的值,但无论哪个,a自己的值都加1了。
    • 可以单独使用,不要组合进表达式。

eg:

#include<stdio.h>

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

2.14 practice

02-0. 整数四则运算

吃本题要求编写程序,计算2个正整数的和、差、积、商并输出。题目保证输入和输出全部在整型范围内。
输入格式:
输入在一行中给出2个正整数A和B。
输出格式:
在4行中按照格式“A 运算符 B = 结果”顺序输出和、差、积、商。
输入样例:
3 2
输出样例:
3 + 2 = 5
3 - 2 = 1
3 * 2 = 6
3 / 2 = 1*/

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int a, b;
	scanf("%d %d", &a, &b);
	printf("%d + %d = %d\n", a, b, a + b);
	printf("%d - %d = %d\n", a, b, a - b);
	printf("%d * %d = %d\n", a, b, a * b);
	printf("%d / %d = %d\n", a, b, a / b);
	return 0;
}

02-1. 厘米换算英尺英寸

如果已知英制长度的英尺foot和英寸inch的值,那么对应的米是(foot+inch/12)*0.3048。现在,如果用户输入的是厘米数,
那么对应英制长度的英尺和英寸是多少呢?别忘了1英尺等于12英寸。

输入格式:
输入在一行中给出1个正整数,单位是厘米。
输出格式:
在一行中输出这个厘米数对应英制长度的英尺和英寸的整数值,中间用空格分开。
输入样例:
170
输出样例:
5 6
*/

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	int cm;

	printf("请输入厘米数:");
	scanf("%d", &cm);

	int foot = cm /30.48;
	printf("%d", foot);

	int inch = (cm / 30.48 - foot) * 12;
	printf("%d %d",foot,inch);

	return 0;
}

02 - 2. 然后是几点

有时候人们用四位数字表示一个时间,比如1106表示11点零6分。现在,你的程序要根据起始时间和流逝的时间计算出终止时间。
读入两个数字,第一个数字以这样的四位数字表示当前时间,第二个数字表示分钟数,计算当前时间经过那么多分钟后是几点,
结果也表示为四位数字。当小时为个位数时,没有前导的零,即5点30分表示为530。注意,第二个数字表示的分钟数可能超过60,
也可能是负数。
输入格式:

输入在一行中给出2个整数,分别是四位数字表示的起始时间、以及流逝的分钟数,其间以空格分隔。注意:在起始时间中,
当小时为个位数时,没有前导的零,即5点30分表示为530;流逝的分钟数可能超过60,也可能是负数。

输出格式:

输出四位数字表示的终止时间。题目保证起始时间和终止时间在同一天内。

输入样例:
1120 110
输出样例:
1310
*/

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{ 
	int first;
	int pass;

	scanf("%d", &first);
	scanf("%d", &pass);
	
	//printf("%d\n", first / 100 * 60);
	//printf("%d\n", first % 100);

	int change= first / 100 * 60+ first % 100;
	/*printf("%d\n", change);
	printf("%d\n", change + pass);*/

	int result = change + pass;
	printf("%d\n", result / 60 * 100 + result % 60);
	return 0;
}

02 - 3. 逆序的三位数

程序每次读入一个正3位数,然后输出按位逆序的数字。注意:当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7。

输入格式:

每个测试是一个3位的正整数。

输出格式:

输出按位逆序的数。

输入样例:
123
输出样例:
321*/

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int num = 712;
	int digit = 0;

	digit = num % 10;//去除最后一位11
	printf("%d", digit);
    num /=10;

	digit = num % 10;
	printf("%d", digit);
	num /= 10;

	digit = num % 10;
	printf("%d", digit);
	num /= 10;
	return 0;
}

02 - 4. BCD解密

BCD数是用一个字节来表达两位十进制的数,每四个比特表示一位。所以如果一个BCD数的十六进制是0x12,它表达的就是十进制的12。但是小明没学过BCD,把所有的BCD数都当作二进制数转换成十进制输出了。于是BCD的0x12被输出成了十进制的18了!

现在,你的程序要读入这个错误的十进制数,然后输出正确的十进制数。提示:你可以把18转换回0x12,然后再转换回12。

输入格式:

输入在一行中给出一个[0, 153]范围内的正整数,保证能转换回有效的BCD数,也就是说这个整数转换成十六进制时不会出现A - F的数字。

输出格式:

输出对应的十进制数。

输入样例:
18
输出样例:
12*/
#define _CRT_SECURE_NO_WARNINGS

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值