今天学习了scanf函数、基本运算。
一、scanf函数
1、学习scanf函数,首先要理解地址运算符&,下面是关于地址运算符&获取内存的知识。
/*
1.内存寻址由大到小,优先分配内存地址比较大的字节给变量,也就是比如Oxffc4 > Oxffc1.
如下面的a、b、c地址值比较:
a的地址是:0x7fff5fbff78c
b的地址是:0x7fff5fbff788
c的地址是:0x7fff5fbff784
地址值:a > b > c
2.变量越先定义,内存地址就越大
3.取得变量的地址:&变量名
4.输出地址:%p
5.一个变量只有初始化之后才能使用
*/
#include <stdio.h>
int main(int argc, const char * argv[])
{
// 内存寻址由大到小
int a = 10;
int b = 20;
int c;
//&是一个地址运算符,取得变量的地址;
//%p用来输出地址
printf("a的地址是:%p\n",&a);
printf("b的地址是:%p\n",&b);
printf("c的地址是:%p\n",&c);
//由于变量c没有经过初始化,所以直接拿来使用是不对的
//int d = c + 1;
return 0;
}
2、scanf函数是一个阻塞式函数,使用之后需要用户手动输入内容。如下是scanf函数的简单使用。
#include <stdio.h>
int main(int argc, const char * argv[])
{
// 定义一个变量,用来保存用户输入的整数
int number;
//scanf函数只接受变量的地址
//scanf函数是一个阻塞式的函数,等待用户输入
//用户输入完毕后,就会将用户输入的值赋值给number变量
//函数调用完毕
scanf("%d",&number);
printf("用户输入的值是%d\n",number);
return 0;
}
3、下面是scanf函数的一些其他用法总结。
1)可以输入字符串。
2)一次性输入多个数值,并且一某些符号离开。
3)如果scanf参数中以空格隔开,实际输入可以以空格、tab、回车作为分隔符
4)scanf中不能写\n
#include <stdio.h>
int main(int argc, const char * argv[])
{
/*1.可以输入字符串
char myc;
scanf("%c",&myc);
printf("输入的字符是%c\n",myc);
*/
/*2.一次性输入多个数值,并且以某些符号隔开
int num1 ,num2;
scanf("%d,%d",&num1 ,&num2);
printf("num1 = %d,num2 = %d",num1 , num2);
*/
//3.如果scanf参数中以空格隔开,实际输入可以以空格、tab、回车作为分隔符
int num1 ,num2;
scanf("%d %d",&num1 ,&num2);
printf("num1=%d, num2=%d\n",num1,num2);
/*4.scanf中不能写\n
int a;
scanf("%d\n",&a);//错误写法
printf("a的值是%d\n",a);
*/
return 0;
}
4、关于scanf函数的练习。
/*
提示用户输出两个整数,计算并且输出两个整数的和
*/
#include <stdio.h>
int main(int argc, const char * argv[])
{
//1.定义用户输入第1个整数
int num1 , num2;
//2.提示用户输入第1个整数
printf("请输入第1个整数:\n");
//3.接收用户输入的第1个整数
scanf("%d",&num1);
//4.提示用户输入第2个整数
printf("请输入第2个整数:\n");
//5.接收用户输入的第2个整数
scanf("%d",&num2);
//6.计算和,并且输出
int sum = num1 + num2;
printf("%d + %d = %d\n",num1 ,num2 , sum);
return 0;
}
二、基本运算
1、加+ 、减- 、乘* 、除/ 、模运算%
1)基本用法。
#include <stdio.h>
int main(int argc, const char * argv[])
{
int a = 10 + 1 + 3 - 3;
int b = -10;
int c = 10 * b;
int d = 10 / 2;
//取余运算(模运算)
//%两边都是整数
//%取余结果的正负性只跟%左边的数值有关
//%左边的被除数决定,被除数是整数,余数就是正数,反之则反
int e = -10 % (-3);
printf("%d\n",e);
return 0;
}
2)自动类型转换和强制类型转化
#include <stdio.h>
int main(int argc, const char * argv[])
{
/*
//自动类型转换(double->int)
int a = 10.8;
//强制类型转换(int->double)
int b = (int) 10.5;
printf("%d\n",b);
*/
double c = 10.6 + 6;
double d = 1/3;
// double e = 3/2;//(这里的输出结果是1.000000,原因是首先是整数运算,结果是1,然后转换为1.000000)
// double e = 3.0/2;
double e = (double)3/2;
printf("%f\n",e);
return 0;
}
3)练习
/*
1.提示用户输入两个整数,并输出两个整数的平均值(数学构造思维思考:先两数相加,再除2,得到平均值)
2.提示用户输入一个时间的秒数比如500秒就输入500,然后输出对应的分钟和秒,比如500s就是8分钟20秒
*/
#include <stdio.h>
int main(int argc, const char * argv[])
{
/*1.提示用户输入两个整数,并输出两个整数的平均值
//首先定义两个整数
int a ,b;
//提示用户输入两个整数
printf("提示用户输入两个整数:");
scanf("%d %d",&a,&b);
//平均值是两数相加之和除以2
int privite = (a + b)/2;
printf("两整数的平均值是:%d\n",privite);
*/
/*2.提示用户输入一个时间的秒数比如500秒就输入500,然后输出对应的分钟和秒,比如500s就是8分钟20秒
//首先定义一个输入数和输出分钟和秒数
int time , f , m;
//提示用户输入时间
printf("用户输入秒数:");
scanf("%d",&time);
//将总秒数转换为分钟秒
f = time /60;
m = time % 60;
printf("对应的时间是%d分钟%d秒\n",f ,m);
*/
//老师的方法和思路
//1.提示用户输入时间
printf("请输入一个时间值(秒):");
//2.接受用户输入的时间
int time;
scanf("%d",&time);
//3.转换成对应的分钟和秒
int minute = time / 60;//分钟
int second = time % 60;//秒
printf("%d秒= %d分钟%d秒\n",time ,minute ,second);
return 0;
}
2、赋值运算
- = 赋值运算符
- += 加值运算符
- -= 减值运算符
- *= 乘值运算符
- /= 除值运算符
- %= 取余值运算符
#include <stdio.h>
int main(int argc, const char * argv[])
{
int a = 10;
// a = a + 5;
//复合赋值运算符
a += 5;// 既是a = a + 5;
a *= 5;// 既是a = a * 5;
a += 5 + 6 + 4;//既是a = a + (5 + 6 +4);
printf("a的值是%d\n",a);
return 0;
}
3、自增运算符
1)基本用法
#include <stdio.h>
//注意:自增自减运算符不能用在常数上,比如 b = 10++;
int main(int argc, const char * argv[])
{
int a = 10;
a = a + 1;//11
a += 1;//12
a++;//13
++a;//14
a--;//a -= 1; a = a - 1;
printf("a的值是%d\n",a);
return 0;
}
2)++a 与 a++的区别
/*
a++的结果:先将a的值赋给对象之后,再进行a的自增运算(先赋值,再自增)
++a的结果:进行a的自增自减运算之后,再将值赋给对象(先自增,再赋值)
*/
#include <stdio.h>
int main(int argc, const char * argv[])
{
int b;
int a = 10;
//其结果:b = 10 + 12;
// b = (a++) + (++a);
//其结果:b = 11 + 11;
b = (++a) + (a++);
printf("b =%d\n",b);
printf("a =%d\n",a);
return 0;
}
今天就学了这么多,消化好了也感觉蛮有成就感!