警院复试C程序设计学习笔记——第三章 顺序程序设计

1.常量1

知识点:

常量分类:
(1) 字面常量(直接常量):数值常量(分为整型常量和浮点型常量), 字符串常量和字符常量 
(2) 符号常量 
(3) 常变量 

代码如下:

/*
常量分类:
(1) 字面常量(直接常量):数值常量(分为整型常量和浮点型常量), 字符串常量和字符常量 
(2) 符号常量 
(3) 常变量 
*/
#include <stdio.h>
int main(void){
	//1.整型常量
	printf("%d\n", 234);
	//2.浮点型常量
	printf("%lf, %lf\n", 3.24, 3e-2);	//3e-2代表3的10的-2次方
	//3.字符串常量
	printf("%s","%dabc\n");				//字符串使用的格式说明符为%s 输出:%dabc
	printf("%%dabc\n");					//想在printf的格式字符串中输出“百分号”,需要再加一个百分号 输出:%dabc
	//4.字符型常量	字符也是以整型的方式存储在内存中的	'0'--48	'a'--97	'A'--65 ' '--32 '\n'--10 '\0'--0
	printf("%c, %d\n", 'a', 'a');			//①普通字符常量	输出a,97
										//②转义字符
	printf("%c, %c, %c, %c\n", '\\', '\'', '\?', '\"');	//可显的转义字符 输出:\, ', ?, "
	printf("\a");						//输出一个声音	其中\a会产生声音或视觉信号
	printf("1111\babc\n");					//输出:111abc		其中\b是退格符,将当前位置后退一个字符
	printf("2222\r3333\n");				//输出:3333	其中\r是回车符,将当前位置滚回到本行开头 
	printf("4444\t5555\n");				//输出:4444	5555	其中\t是水平制表符(tab),将当前位置移到下一个tab位置上 
	printf("\101 \102 \103\n");			//输出:A B C			把8进制的101,102,103转成十进制为65,66,67分别对应了'A','B','C'
	printf("\x41\n");					//输出:A				16进制的x41 = 4*16^1 + 1*16^0 = 65 
	return 0;
}

运行结果如下:

2.常量2 

代码如下:

#include <stdio.h>
//1.符号常量	只存在于预编译阶段,编译阶段就不存在了,经过预编译后,全部变为字面常量
#define PI 3.14
#define ID 101
#define CH 'A'
#define S "haha"
int main(void){
	printf("%lf, %d, %c, %s\n", PI, ID, CH, S);		//输出3.140000, 101, A, haha
//2.常变量	c99中新增内容
	const int a = 45;	//常变量必须在定义的时候初始化,初始化之后其值不可以被修改 
	//const int b;		//error 因为定义常变量未指定初值
	//a = 90;			//error 因为常变量的值不可以被修改
	return 0; 		
}

运行结果如下:

3.补码

4.整型变量的存储空间及所表示的整数范围

5.整型十进制八进制十六进制的格式声明

6.整型的隐式数据类型转换

7.强制类型转换和整数常量的数据类型及转换

代码如下:

#include <stdio.h>
int main(void){
	//1.定义整型变量—带符号整型—signed+整型关键字+int+变量名(其中signed和int可省)
	short a = 1;	//与short int a = 1; 和 signed short int a = 1; 和 signed short a = 1;等价 
	int b = 2;
	long c = 3; 
	long long d = 4;	//long long是c99中新增内容
	
	//2.定义整型变量-无符号整型-unsigned+整型关键字+int+变量名(其中int可省)
	unsigned short e = 5;	//与unsigned short int e = 5;等价 
	unsigned int f = 6;
	unsigned long g = 7; 
	
	//3.求一个数据类型或者数值所占的字节数-使用sizeof运算符,注意他不是个函数,一般我们习惯对它的操作加个圆括号(sizeof后如果是关键字必须加个圆括号否则报错 )
	printf("%d, %d, %d\n",sizeof(short), sizeof(int), sizeof 5);	//输出2,4,4
	
	//4.整形数据输出10进制数,所使用格式声明
	printf("%hd, %d, %ld\n", a, b, c);	//与printf("%hi, %i, %li\n", a, b, c);等价 
	printf("%hu, %u, %lu\n", e, f, g); 
	
	//5.整型数据输出8进制或16进制数,所使用的格式声明
	printf("%o, %x, %X, %#x, %#X\n", 123, 123, 123, 123, 123);	//输出:173,7b,7B,0x7b,0X7B
	
	//6.scanf函数中不可以使用带“#”的格式字符
	scanf("%#x", &b);	//随便输入一个16进制数,scanf函数会因为错误而终止。所以并未把任何值付给b,最终输出b的值还是2
	printf("%d\n", b); 
	
	//7.隐式数据类型转换-长 赋 短,截断
	unsigned short us = -1;		//"长的"整型数据赋给"短的"整型数据时,会只将低位的几位赋给"短的"整型数据
	printf("%hu, %hd\n", us, us);	//输出65535,-1 
	                                                                                                 
	//8.隐式数据类型转换 ——"无符短" 赋 "长",先把"短的"全部内容复制到"长的"低几位,"长的"高几位填0
	unsigned int ui = us;
	printf("%u\n",ui);		//输出65535
	
	//9.隐式数据类型转换 ——"带符短" 赋 "长",先把"短的"全部内容复制到"长的"低几位,如果"短的"是自然数,"长的"高几位填0,否则 1 
	short ss = -1;
	ui = ss;
	printf("%u\n",ui);		//输出4294967295
	
	ss = 1;
	ui = ss;
	printf("%u\n",ui); 		//输出1
	
	//10.隐式数据类型转换 ——等长,则保留原有补码
	ui = -1;
	printf("%u\n",ui);  	//输出4294967295
	
	//11.整型常量 ——显示数据类型转换 
	printf("%u,%ld,%lu\n",1U,1L,1UL);		//1U ——unsigned int类型,1L ——long类型,1UL ——unsigned long类型 	1,1,1
	
	//12.整形数据的强制数据类型转换 ——(数据类型)该处的圆括号为强制数据类型转换符,是一个单目运算符 
 	printf("%hu,%d\n",(unsigned short)-1,(int)ui);		//65535,-1
	return 0; 
}

8.字符型

代码如下:

#include<stdio.h>
int main(void){
	//1.定义字符型变量
	signed char sc;
	unsigned char uc;
	char ch;		//在vc++中,char类型的变量是signed char类型的,在其他的编译器中char类型的变量可能是unsigned char类型的
	printf("%d,%d,%d\n",sizeof(sc),sizeof(uc),sizeof(ch));		//1,1,1 
	
	//2.分析下段代码的运行结果
	uc = -1;
	ch = -1;
	printf("%d,%d\n",ch,uc);		//-1,255 
	/*
	该句相当于: 
	int w;
	printf("%d,%d\n",w=ch,w=uc);
	*/ 
	return 0; 
}

执行结果如下:

9.getchar和putchar函数

代码如下

#include <stdio.h>		//该头文件有getchar和putchar函数的函数声明 
void f1(void){			//从键盘读入一个字符并输出 
	char ch = getchar();		//返回类型为int型,返回值为用户输入的ascⅡ码,出错返回-1
	putchar(ch);		//putchar向屏幕输出一个字符 
}
void f2(void){			//从键盘读入3个字符并输出 
	putchar(getchar());
	putchar(getchar());
	putchar(getchar());
} 
int main(void){
//	f1();
	f2();
	/*
	输入boy按回车,输出boy;
	输入b按回车,输出b和换行符,再输入o按回车,输出o 
	*/ 
	return 0;
}

执行结果如下:

10.浮点型

代码如下:

/* 
注:
(一)所有常量末尾加的数据类型转换符可以大小写不分
(二)在目前学习过的所有格式声明中只有x、e、g可以不分大小写
*/
#include<stdio.h>
int main(void){
	//1.定义实型变量-当把一个"长的"浮点型教据赋给一个较"短的"浮点型变量时,可能造成精度的损失。而且在有的编译器中会出现警告
	float a = 1.1F;		//1.1F表示1.1是个float型数据 
	double b = 1.1;		//默认情况下,凡是小数都是double型 
	long double c = 1e-8L;		//1e-8L是个long double的数据 
	printf("%d,%d,%d\n",sizeof(1.1F),sizeof(1.1),sizeof(1e-8L)); 	//4,8,8 
	
	//2.实型数据在格式化输入输出时所使用的格式声明 ——默认情况下使用带F和带e的格式声明只输出小数点后6位(第7位四舍五入)
	//小数形式
	printf("%f,%lf,%Lf\n",a,b,c);		//输出1.100000,1.100000,-0.000000 
	//指数形式 
	printf("%e,%le,%LE\n",a,b,c);		//输出1.100000e+000,1.100000e+000,-1.041128E-097
	//小数或者指数形式(哪一种形式简短就用哪一种形式) 
	printf("%g,%lg,%LG\n",a,b,c);		//输出1.1,1.1,-1.04113E-097 
	return 0;
} 

执行结果如下:

11.printf用到的格式附加字符

代码如下:

//格式声明 - % 格式附加字符 格式字符	%lf 
#include <stdio.h>
int main(void){
	printf("%5d\n",-12);		//5表示让数据输出占5个字符,而且是正的,表示右对齐 
	printf("%5c\n",'a');
	printf("%5s\n\n","abcd");
	
	printf("%-5dA\n\n",-12);	//-5表示左对齐 
	printf("%7.2lf\n",12.345); 
	printf("%7.lf\n",12.345); 	//%7.lf和%7.0lf等价 
	printf("%.5lf\n",12.345);
	printf("%11lf\n",12.345);
	printf("%-11lf\n",12.345);
	
	return 0;
}

执行结果如下:

12.scanf函数的注意事项2

知识点总结:

scanf函数中不可以使用#,-,m.n的格式附加字符(m, n属于自然数),可以使用域宽的格式附加字符

代码如下:

//scanf函数中不可以使用#,-,m.n的格式附加字符(m, n属于自然数),可以使用域宽的格式附加字符
#include<stdio.h>
int main(void){
	int a;
	/*	去掉注释,输入12345678,会输出:
	12345
	678
	说明scanf函数可以使用带域宽的格式附加字符 
	scanf("%5d",&a);
	printf("%d\n",a);
	*/
	
	/*	去掉注释,输入12345678,会输出:
	垃圾值
	12345678
	说明12345678全被下面的while循环接收了,scanf函数不可以使用-的格式附加字符 
	scanf("%-5d",&a);
	printf("%d\n",a);
	*/
	
	
	double b;
	scanf("%7.2d",&b);
	printf("%lf\n",b);
	char ch;
	while((ch = getchar())!='\n')
		putchar(ch);
	putchar('\n');
	return 0;
} 

执行结果如下:

13.运算符2

代码如下:

#include <stdio.h>
int main(void){
	int i = 1, j = 4;
	//前自减运算符它表达式的值是该变量-1之后的值;后自减运算符是该变量没有-1之前的值
	printf("%d, %d\n", --i, j--);	//输出结果:0,4 
	printf("%d, %d\n", i, j);		//输出结果:0,3
	//printf("%d\n", --(i+j));		//error 自增自减运算符不能用于一个数值,只能用于一个变量 
	i = 1, j = 4;
	printf("%d\n", i+++j);			//出现了!未定义行为!这在不同编译器中可能出现不同结果
	
	int a;
	printf("%d\n",sizeof((double) a));		//8	(double) a是把a这个数值表达式转化成double型数据,而不是把a变量转化成double型变量
	printf("%d\n",sizeof(a)); 		//4  
	
	return 0;
}

执行结果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值