程序员的每一天(Day4)

一、常量

  什么是常量:程序在运行期间数值不能变化的叫常量

  100   默认int

  100u  unsigned int

  100lu  unsigned long

  100llu  unsigned long long

  100l    long

  100ll   long long

​ 3.14 默认double

​ 3.14f float

​ 3.14l long double

​ 问题:100年有多少秒,忽略闰平年?
​ 答 :#define SEC(3600*24*365*100
u**)**

二、格式化输入输出

  %nd 显示n个字符宽度,不够则补空格,右对齐

  %-nd 显示n个字符宽度,不够则补空格,左对齐

  %0nd 显示n个字符宽度,不够则补0,右对齐

  %n.mf 显示n个字符宽度(小数点算一位),不够则补空格,m表示小数点后的位数(四舍五入)

  %g 不显示小数点后多余的0

三、运算符

  自变运算符 ++/ – 使变量的值自动的+1或-1

  前自变:++num/–num 立即有效

  后自变:num++/num-- 下一行语句生效

注意:不要在一行内多次使用自变运算符

算术运算符 + - * / %

  整数/整数 结果没有小数点

  / % 除数不能为0 出现错误:浮点数例外(核心已转储)

关系运算符 > < >= <= == !=

  比较结果必须是0或者1,比较结果还能继续参与运算

  int nun = -5 ;

  if(1 < num < 10)

  永远为真,运算规则与数学不一样

注意:建议常量放左边

逻辑运算符 &&(与) ||(或) !(非)

  会先把运算对象转换成逻辑值,0转换为假,非0转换为真

  A && B 一假即假

  A || B 一真即真

  !A 求反

  && || 具有短路特性:当左边的运算对象已经能够确定整个表达式的结果时,右边的所有运算对象则不再计算

三目运算符 运算对象有三个部分

  A ? B : C

  判断A的值是否为真,如果为真执行B,否则执行C

  该语句不能使用流程控制语句,因为它必须要有运算结果

  赋值运算符 = +=

  a + = b; a = a+b

  a - = b; a = a-b

  a * = b; a = a*b

  a / = b; a = a/b

  位运算符 & | ~ >> <<

  sizeof 也是运算符,但是sizeof括号内的表达式不会计算

四、类型转换

;自动类型转换:

  只有相同类型的数据才能运算,不同类型的数据必须转换成相同的类型
才能进行计算

  转换规则:(以不丢失数据为基础,适当地牺牲一些空间)

    1、字节少的向字节多的转(优先级最高)

    2、有符号的向无符号的转

    3、整型向浮点型转

强制类型转换:

  (新类型)数据

  有丢失数据的风险,要慎重使用

五、分支语句

		if(表达式)	//单分支

		{

				表达式为真时,执行此处代码

		}



		if(表达式)	//双分支

		{

				表达式为真时,执行此处代码

		}

		else

		{

				表达式为假时,执行此处代码

		}



		if(表达式1)	//多分支

		{

				表达式1为真时,执行此处代码

		}

		else if(表达式2)

		{

				表达式2为真时,执行此处代码

		}

		else

		{

				表达式都为假时,最后执行此处代码

		}

  注意:大括号建议上下对齐

    当分支语句只有一条时,大括号可以省略,但不建议省略。
练习1:输入三个整数,从大到小显示

练习2:输入一个年份,判断是闰年还是平年?——四闰百不闰,四百闰

练习3:输入一个年份和月份,判断该月有多少天?考虑闰平年

练习4:输入一个三位数,判断是否是水仙花数?

​ abc == a*a*a + b*b*b+c*c\c

练习5:输入一个成绩,判断等级

​ [100,90] A

​ (90,80] B

​ (80,70] C

​ (70,60] D

​ (60,0] E

​ other 输入成绩有误

六、开关语句

switch(n)	//n可以是数值、表达式,运算结果必须是整数

{

	case val:	//val  必须是整常量,如果val = n,则打开执行开关
		...
        break;	//关闭执行开关
	case val:
		...   
		break;
    default:	
    	...
        break;
    //如果所有的case都没有匹配成功,则打开该执行开关,并且放在任何位置都会最后执行
}

  注意:如果每个case后都有break,就形成了分支结构

​     switch不能与continue配合使用
  注意:
    case a … b :可以表示范围a—b的数据但是属于GNU编译器的独有语法,不建议使用

练习6:

​ 输入一个月份判断季节:

​ 1 2 3 春天

​ 4 5 6 夏天

​ 7 8 9 秋天

​ 10 11 12 冬天

​ other 输入月份有误

七、循环语句

  循环就是让一段代码反复执行, 达到想要的效果

for循环语句:

  for是一种比较灵活且较危险(与其他循环相比)的一种循环

  一般用一个变量来引导for循环的运行,这个变量叫做循环变量 i(index)

  for([1];[2];[3])

  {

  [4];

  }

  1、给循环变量赋初值,C99标准才可以在此处定义循环变量

  2、判断循环条件,一般判断循环变量是否到达边界

  4、如果2为真,则执行此处代码4,此处也叫循环体

  3、改变循环变量,防止出现死循环,一般对循环便改良自加或自减

for循环的多种写法:

		for(;;)

		{

				//死循环

		}



		int i = 0;

		for(;i<10;i++)

		{



		}



		for (int i = 0;i<10)

		{

				...

				i++

		}

while循环:

while(条件)  //当条件为真时执行循环体,为假时结束循环

{

//循环体

}

  while循环相当于for循环的精简版本 for(;条件;)

  for循环负责解决明确知道循环次数的问题

  while循环负责解决只知道结束条件,而不确定循环次数的问题

do while循环:

do{

	//循环体	

}while(条件);//分号不能少

  先执行循环体,再判断循环条件是否为真,该循环至少执行一次

  适合先干活,再检查的特殊情况,例如:输入判断密码
  问题:解释一下for循环、while循环、do while循环的区别

循环嵌套:

  循环语句中包含循环语句

  外层循环执行一次,内层循环执行n次

作业1:计算出所有的水仙花数(三位)

作业2:输入一个正整数,判断是否是素数

作业3;输入一个正整数,判断是否是回文数 12321 123321

作业4:输入一个6位密码,输入正确显示“登录成功”,输入错误提示“还剩几次机会”,可以继续输入,最多可以输错三次,否则显示“账号已锁定”,并结束

作业5:输入一个整数,分解显示

   -1234 - 1 2 3 4

#include <stdio.h>
#include <math.h>
int main(int argc,const char* argv[])
{
	int num = 0;
	int sum = 0;
	int a = 0;
	int b = 0;
	printf("请输入一个整数:");
	scanf("%d",&num);
	if(num<0)
	{   
        printf("-");
    	num = -num;
	}   

	a = num;
	while (a >0) 
	{   
		sum++;
		a /= 10; 
	}   
	for(int i = sum-1; i >= 0; i--)
	{
		b = num/ pow(10,i);
		printf("%d ",b%10);

	}
	printf("\n");
}
上一篇:C++常见面试题 | Day4


下一篇:【转载】Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day4】 —— 数据库1