c语言入门

c语言入门

#include<stdio.h>  //头文件
#include<math,h>//库函数
#include<stdlib.h>   //printf("puase");暂停的意思
void main(){    //主函数,{函数体}
    int a=1//定义整型
    double b=1.2// 定义浮点
    char num='w';//定义字符
    char name[]="wangxp";//定义字符串
    printf("a=%d,b=%.1f,num=%c,name=%s\n",a,b,num,name);//输出long  ld
}

整型:short int long;

浮点型:float单精度 双精度double

字符型:char

构造类型:数组(表示字符串), 结构体struct 共用体 union 枚举类型enum

指针类型 存放地址

空类型 void

整数类型

char 1字节 signed int(int)有符号 unsignedint(无符号)2或4字节

short 2字节 long 4字节

printf(“int的字节数=%d”,sizeof(int));//显示int字节数

1Bit(字节)=8bit

浮点类型

表示小数

float 6位小数 4字节 double 15小数 8字节

小数付给float需要在后面加f

float d1=1.1f

double d6=5.12e2 (等价512)

输出%f 默认保留6位小数

字符类型

单引号引起来 允许使用转义字符‘\t’ 输出对应的ASCII码 char也可以进行计算

布尔类型

0表示假,非0表示真。

#include<stdio.h>
int main(){
	int pass=0;
	if(pass){
		printf("%d",pass);
	}
	else pass=1;
	printf("%d",pass);
}//输出的结果为1

c语言宏定义

#include<stdio.h>
#define Bool int
#define TURE 1
#define FALSE 0
int main(){	
	//定义布尔变量
	Bool isok =TURE;//等价int isok=1 	
	if(isok){
		printf("ok");
	} 
}//显示ok

基本数据类型转换

自动类型转换 :进行赋值或运算精度小的自动转换精度大的

精度从低到高

short int unsignedint long unsignedlong float double longdouble

#include<stio.h>
int main(){	
	char c1='a';
	int num1=c1;
	double d1=num1;
	printf("%C,%d,%f",c1,num1,d1); 
}  //输出 a,97,97.0000
int main(){	
	char c1=num1;
	int num1=d1;
	double d1=23.0015;
	printf("%C,%d,%f",c1,num1,d1); 
}//无法转换,报错
[Error] 'num1' was not declared in this scope
[Error] 'd1' was not declared in this scope
自动类型转换细节说明
  1. 有多种类型的数据混合运算时,系统首先自动将所有数据转换成精度最大的那种数据类型, 然后再进行计算(如int型和short型运算时,先把short转成int型后再进行运算)。

  2. 若两种类型的字节数不同,转换成字节数大的类型,若两种类型的字节数相同,且一种有符 号,一种无符号,则转换成无符号类型

  3. 在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边的类型将转换为左边的类型, 如果右边变量的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度,丢失的部 分按四舍五入向前舍入

强制类型转换

将精度高的数据类型转换为精度小的数据类型。使用时要加上强制转换符 ( ),但可能造成精度 降低或溢出,格外要注意。

#include<stdio.h>
int main(){	
	double d1=23.01254;
	int num=(int)d1;
	printf("num=%d,d1=%f",num,d1); 
}//结果是 num=23,d1=23.01254

强转符号只针对于最近的操作数有效,往往会使用小括号提升优先级

#include<stdio.h>
int main(){	

	int num=(int)(3.5*3.5);  //3.5*3.5=12.25     int(12.25)=12 
		int num1=(int)3.5*3.5;//3*3.5=10.5    int(10.5)=10
	printf("num=%d,num1=%d",num,num1); 
}

指针入门

void main(){
	int num=100;
	int *ptr=&num;
	printf("num的值=%d num的地址=%p\n",num,&num);
	printf("ptr的值=%d ptr的地址=%p\n ",ptr,ptr);
	printf("ptr的值=%d ptr的地址=%p\n ",*ptr,*ptr);
	
} //*p就是指针指向num的地址   &取地址   *P的值和num一样

在这里插入图片描述

指针基本类型

int * float * …数组的指针 结构体指针 共用体指针等等

值传递和地址传递

默认传递值的类型:基本数据类型 (整型类型、小数类型,字符类型), 结构体, 共用体。

默认传递地址的类似:指针、数组(如果是指针,就将指针变量存储的地址,传递给 接收变量,如果是数组,就将数组的首地址传递给接收变量。)

练习题(上面知识的应用)

#include<stdio.h>
void h(){
	char a[]="张三" ;
	short age=23 ;
	float score=76.5f;
	char gender='M';
	char hobby[]="打篮球";
	printf("姓名\t年龄\t成绩\t性别\t爱好\n");
	printf("%s\t%d\t%.2f\t%c\t%s\n",a,age,score,gender,hobby);
} 

void main(){
	int a;
	int b;
	int num1,num2,num3,num4;
	printf("请输入两个数\n");
	scanf("%d %d",&a,&b);
	num1=a+b;
	num2=a-b;
	num3=a*b;
	num4=a/b;
	printf("两数之和=%d两数只差=%d两数之际=%d两数相除=%d\n",num1,num2,num3,num4);
    if(num1%2==0){
    	printf("两数之和为偶数\n");
    	
	}else{
		printf("两数之和为奇数\n");
	}
}

常量

1)常量是固定值,在程序执行期间不能改变。这些固定的值,又叫做字面量。

2) 常量可以是任何的基本数据类型,比如整数常量、浮点常量、字符常量,或字符串 字面值,也有枚举常量。

3)常量的值在定义后不能进行修改

整数常量可以是十进制、八进制或十六进制的常量。前缀指定基数:0x 或 0X 表示 十六进制,0 表示八进制,不带前缀则默认表示十进制。整数常量也可以带一个后 缀,后缀是 U 和 L 的组合,U 表示无符号整数(unsigned),L 表示长整数(long)。 后缀可以是大写,也可以是小写,U 和 L 的顺序任意

85 /* 十进制 */
0213 /* 八进制 */
0x4b /* 十六进制 */ 八进制和十六进制后面解释
30 /* 整数 */
30u /* 无符号整数 */
30l /* 长整数 */
30ul /* 无符号长整数 */
    
    浮点常量举例说明
3.14159; //double 常量
314159E-5; // 科学计数法
3.1f; //float常量
char str2[1000]="hello  \

world";  //等价hello world
常量的定义
1) 使用 #define 预处理器。
//#define 常量名 常量值
#define PI 3.14 //定义常量 PI 常量值3.14
int main() {
//PI = 3.1415 PI不可修改
double area;
double r = 1.2;//半径
area = PI * r * r;
printf("面积 : %.2f", area);
getchar();
return 0;
}
2) 使用 const 关键字
//const 数据类型 常量名 = 常量值;
const double PI = 3.14;
int main() {
//PI = 3.1415 可以吗?不可以
double area;
double r = 1.2;
area = PI * r * r;
printf("面积 : %.2f", area);
getchar();
return 0;
}

const后面要加;

  1. const定义的常量时,带类型,define不带类型

  2. const是在 编译、运行的时候起作用,而define是在编译的预处理阶段起作用

  3. define只是简单的替换,没有类型检查。简单的字符串替换会导致边界效应

#define a 1
#define b a+3
#define c a/b*3
最后输出c 应该是1/1+3*3=10
  1. const常量可以进行调试的,define是不能进行调试的,主要是预编译阶段就已经替 换掉了,调试的时候就没它了

  2. const不能重定义,不可以定义两个一样的,而define通过undef取消某个符号的定义, 再重新定义

  3. define可以配合#ifdef、 #ifndef、 #endif 来使用, 可以让代码更加灵活,比如我们 可以通过#define 来 启动或者关闭 调试信息。

运算符

运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。

  1. 算术运算符 (+, -, * , / , %)

  2. 赋值运算符 (= += -= …)

  3. 关系运算符(比较运算符)(比如 > >= < <= == 等等)

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

  5. 位运算符 (& 按位与 | 按位或 ^ 按位异或 ~ 按位取反等等)

  6. 三元运算符 ( 表达式 ? 表达1 : 表达2)

在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

力争做大牛的小王

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

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

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

打赏作者

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

抵扣说明:

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

余额充值