C语言基础

C语言基础

基本数据类型与输入输出

变量的定义

int a ;  // int整形

程序执行这句语句的时候,系统会在存在中开辟一个大小的为4个字节的空间,用于存放一个整数;
这个内存空间表示的值就是变量a的值,这里的a为变量名;
变量名有子母,数字、下划线组成,其中数字不能作为变量名的开头。

char c;

程序执行这句语句的时候,系统会在存储中开辟一个大小为1个字节的空间,用来存放一个字符;
这里的字符指的是英文字符,中文是无法用一个字节去存储的。

输入输出

输入处处函数的声明都包含在<stdio.h>文件中
scanf("%d", &a); //从键盘缓冲区中读取一个整数,存入变量a中,(&a表明存储的位置)
这里&符号为取地址运算符。

printf("%d", a); //打印出a的值,这里的a为整数类型
printf(“Hello World”);
scanf("%d %d", &a, &b); //从键盘缓冲区中读取两个整数,存入变量a,b中;
printf("%d %d", a, b); //打印出a, b的值。

%d整数 decimal
%f浮点数 float
%c字符
有些编译器长整形用%ld来表示;双精度浮点数用%lf来表示。

实例:
ioput.cpp

# include<stdio.h>

int main(){
	int a;
	float b;
	char c;
	printf("请输入一个整数,一个浮点数,一个字符: \n");
	scanf("%d %f %c", &a, &b, &c); //中间以空格为分割,浮点数默认输出6为小数
	printf("a=%d b=%f c=%c", &a, &b, &c);
	return 0
}

控制符和转义符

控制符

%d 十进制整数
%o 八进制整数
%x 十六进制整数(a~f小写)
%X 十六进制整数(A~F大写)
%f 浮点数
%e 科学计算表示的浮点数,e小写
%E 科学计算表示的浮点数,E大写

printf("%md"); // m表示输出宽度
printf("%m.nd"); // m表示输出宽度,n表示小数点后的位数

printf("%10d”, 5);  //5       默认右对齐
printf("%-10d”, 5);  //5      左对齐

printf("%f”, 123.456789);    //输出 123.456789
printf("%9.2f, 123.456789); //输出 123.46
printf("%2.1f, 123.456789); //输出 123.5   系统忽视设置的输出宽度
printf("%f”, 3/2); // 输出错误
printf("%f”, 3./2); // 输出1.5

整数和整数的运算结果还是整数,浮点数和整数的运算 结果是浮点数

字符0和数值48相等,字符+和43相等,A==65, a == 97

printf("%c”, "0"); // 输出0
printf("%d”, "0"); // 输出48
printf("%c”, 48); // 输出0
printf("%d”, "a"); // 输出97

转义符

printf("\n”); // 输出换行,光标移到下一行
printf("\r”); // 输出回车,光标回到本行的第一个位置,和键盘回车键不同
printf("\t”); //制表符相当于tab键 
printf("\b”); // 退格,不删除原来的内容,但之后输出的内容会覆盖原先的内容
printf("\"”); // 输出"
printf("\\”); // 输出\
# include<stdio.h>

int main(){
	printf("%%");   //输出%
	int a = 123;
	
	printf("%d", a);
	scanf("\b"); //退格
	printf("\n");  // 输出12
	return 0
}

运算符的结合性和优先级

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

强制类型转换

float a=5.2;
printf("%d", a);        //输出结果无意义,不可行
printf("%d", int(a));   //输出5,变量a的值依旧是5.2
int b=int(a);
printf("%d", b);        //输出结果5
printf("%f", a);        //输出结果5.2

自增自减运算符 ++

++a 和a++

int a=0;
printf("%d", ++a);        //输出结果1, 相当于a=a+1

int b=0;
printf("%d", b++);        //输出结果0
printf("%d", b);        //输出结果1

在这里插入图片描述
b++

后加运算首先会在内存中存放一个变量b的副本temp,让temp的值等于b的值,然后让b的值加1,最后返回的是t副本temp的值。

逻辑非运算符

在C语言中,非0即真,并且用1来表示真,用0表示假

int a=2;
printf("%d", !a);        //输出结果0
printf("%d", !!a);        //输出结果1

按位取反运算符

int a=0;
printf("%d", ~a);  //输出结果为-1

解析:
0000 0000
1111 1111 补码
1111 1110 反码
1000 0001 原码

sizeof长度运算符

printf("%d", sizeo(int));  //输出结果为4
printf("%d", sizeo(double));  //输出结果为8

结合性

int a=1;
int b=2;
int c=3;
int d=c-a+b;
printf("%d", d);        //输出结果为4

(c-a)+b 左结合
c-(a+b)

混合运算

int a=1;
int b=2;
int c=3;
int d=c-a+b;
printf("%d", a+++b);        //输出结果为3

(a++)+b; //输出结果为3
a+(++b); //输出结果为4

++a++
(++a)++还是++(a++)
// 后加比前加优先级更高

++a+++b会发生语法错误,默认结合为  ++(a++)+b
(++a)+(++b)

自加运算比加优先级高
自加运算符是右结合的。
自加运算符:后加比前加优先级更高
在这里插入图片描述

左移

int a=1;
a=a<<1;
printf("%d", a);  //输出2

左移过程解析:
补码: 0000 0001
左移: 0000 0010 ---->2

右移:

int a=9;
a=a>>1;
printf("%d", a);  //输出4

右移过程解析:
补码: 0000 1001
右移: 0000 0100 ---->4
在这里插入图片描述
在C语言中,没有bool类型,所以用1来表示真,用0来表示假。

printf("%d", 1>2);   //输出结果为0
printf("%d", 1==1);  //输出结果为1
printf("%d",9!-9);   //输出结果为0
printf("%d", 9=9);   //发生语法错误

=是赋值,==是等于号。无法给常量进行赋值,可以给变量赋值。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
异或:相同为0,不同为1
在这里插入图片描述
在这里插入图片描述
真与真是真;真与假为假;假与假为假。
在这里插入图片描述
在这里插入图片描述
实例:

printf("%d", 2>1 ? 5:9);   //输出结果为5
printf("%d", 2>5 ? 1:3);   //输出结果为3

赋值运算符

在这里插入图片描述
实例:

int a=2;
int b=3;

printf("%d", a=b);   //输出结果为3
printf("%d", a);     //输出结果为3
//赋值运算符的运算`结果等于符号右边的值
int a=1, b=2, c=0;
printf("%d", c=a=b);   //右结合c=(a=b);输出2

+=

int a=5;
a+=3; //相当于a=a+3
printf("%d", a);        //输出结果8

a*=3  相当于a=a*3
a/=a 相当于a=a/2

在这里插入图片描述
在这里插入图片描述
实例:
从键盘上输入两个浮点数(均为正数),求出小于这两个浮点数之和中的最大整数

#include <stdio.h>
int main(){
	float a, b;
	scanf(%f %f”, &a,&b);
	float c=a+b;
	printf("%d", (int)c);   //强制类型转换,即取出c的整数部分
	return 0
}

if else分支和逻辑运算符

if…else…

在这里插入图片描述
实例
从键盘中输入两个整数,输出其中较大的

#include <stdio.h>
int main(){
	int a, b;
	scanf(%d %d”, &a,&b);
	if(a>b){
		printf("%d\n", a); 
	}else{
		printf("%d\n", b); 
	}
	printf("%d\n", a>b?a:b);
	a>b? printf("%d\n", a):printf("%d\n",b);
	return 0
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
switch case 实现多分支

在这里插入图片描述
在这里插入图片描述
while循环和do while循环
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
for循环
在这里插入图片描述
在这里插入图片描述
continue结束本次循环,break结束整个循环。

数组与函数

一维数组

  1. 数组的概念
    如何存储30个同学的成绩?
    定义30个变量:score1, score2, …score30
int score[30];
score[0], score[1], score[2], ......, score[29]
  1. 数组的定义
    int a[N];
    在这里插入图片描述
    由于这块空间是在内存中动态的开辟的,所以此时数组a中存放的数据是不定的随机值。
  2. 数组的小标和使用
  3. 数组的初始化
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

二维数组

二维数组定义

int a[2][3];

系统会在内存中开辟一个大小2*3sizeof(int)个字节的内存空间,和一维数组一样,开辟的是一个线性的空间。
a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2]
同样,由于这块空间是在内存中动态的开辟的,所以数组中的元素的值也都是不定的随机值。
a的数据类型是int[2][3]

初始化

下标

在这里插入代码片

矩阵加

矩阵乘

for(i=0; i<m; i++){
}

高维数组

字符数组

char str[10] = {“o”, “w”, “e”, “q”, “s”, “a”, “b”, “c”, “d”, “e”}
字符数组是一个特殊的一维数组,它的数据类型是字符型

字符数组初始化

char str[10] = {"h", "a", "p", "p", "y"}
char str[10] = {"happy"}
char str[10] = "happy" 

“h”, “a”, “p”, “p”, “y”, “\0”, “\0”, “\0”, “\0”
字符串以“\0”为结束符号。
我们把字符串常量副值给字符数组时,会自动在字符串后面补“\0”
char str[10] = “happy” ===》 char str[10] = {“h”, “a”, “p”, “p”, “y”, “\0”}
assic码为0的字符恰好就是这个“\0”

字符串的输出和结束标志
scanf("%s", str) str不能有空格的输入,否则输出遇到空格就终止。
gets() 允许有空格的输入
puts()

C 中有大量操作字符串的函数:
头文件 include<string.h>
strcpy(s1, s2); 复制字符串 s2 到字符串 s1,包括s2的结束符。
strcat(s1, s2); 连接字符串 s2 到字符串 s1 的末尾。
strlen(s1); 返回字符串 s1 的长度。s1=“china” len=strlen(s1); len为5
strcmp(s1, s2);按照字典顺序(ASCII码)进行比较:如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回小于 0;如果 s1>s2 则返回大于 0。
例如:strcmp(“apple”, “banana”) 输出-1,即小于0;strcmp(“apple”, “Banana”) 输出1

5 strchr(s1, ch);
返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。
6 strstr(s1, s2);
返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置。

函数的定义和调用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值