c语言学习笔记|编译过程|数据类型|scanf|运算符|选择与循环|指针的传递
Posted Time木0101
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言学习笔记|编译过程|数据类型|scanf|运算符|选择与循环|指针的传递相关的知识,希望对你有一定的参考价值。
目录
1.编译过程
一个项目编译为可执行文件:main.c>>main.obj>>main.exe
2、链接:函数符号会替换为实际的函数入口地址
3、链接错误大多函数符号写错
C语言提供了13种运算符
2.数据类型
1、关键字
2、常量:运行过程中,其值不能被改变
注:字符型单引号内只能由一个字符
2、变量:在程序运行期间,这些值在程序运行的执行过程中是可以改变的
命名规则:只能由字母、数字和下划线三种字符组成,且第一个字符必须是字母或下划线。
注:变量名不能和关键字重名
3整形数据
进制:
不同进制赋值:
i=0x127b;//十六进制
i=0173;//八进制
补码:负数用补码存储
整型变量:(括号内内容为可选)
注:避免溢出
4浮点型数据
两种形式:
浮点型变量:
浮点数的精度控制,浮点型变量分为单精度((float型)、双精度( double型)和长双精度型(long double)三类形式。如下表所示,因为浮点数使用的是指数表示法,所以我们不用担心数的范围,以及去看浮点数的内存(自己算起来麻烦),我们需要关注的是浮点数的精度问题,例如我们赋给a的值为1.23456789e10,加20后,应该得到的值为1.234567892e10,但是却是1.23456788e10,变的更小了,我们把这种现象称为精度丢失,原因就是float 能够表示的有效数字为7位,最多只保证1.234567e10的正确性,如果要达到正确,我们需要把a和b均改为double类型。
注:防止精度丢失(后可用数组解决)
判断浮点数是否相等:
王者荣耀计算小数用的是分数以提高效率
5字符型数据
用单引号包含的一个字符是字符型常量,且只能包含一个字符,下面是例子示范,以“\\”开头的特殊字符称为转义字符,转义字符用来表示回车,退格等功能键。
GBK 一个汉字2个字节
utf-8 3个字节
字符串常量:双引号括起来的字符序列
混合运算:
数值按int运算:
数值按4个字节进行运算
浮点常量默认按double类型运算
3.scanf
1、scanf
原理:
标准输入缓冲区原理
阻塞:即等待输入,这里没有等待第二次输入直接输出
//scanf %d %f忽略空格和\\n
这里会阻塞,等待输入
可加:
缓冲区是一段内存空间,分为读缓冲,写缓冲,C的缓冲三种特性。
多种类型混合输入:
getchar:等价于char c;scanf(“%c”, &c)
语法格式:
int getchar(void);
putchar©;等价于printf(“%c”, c);
语法格式:
#include <stdio.h>
int putchar( int ch);
printf()
左对齐:
例子:
4.运算符
语言提供了13种运算符
1,算术运算符
2,关系运算符
关系运算符的优先级低于算数优先级
少用括号,括号太多增加代码阅读难度
注:若if(4<i<10)
则计算机会先判断4是否小于i,若4小于i则4<i部分变为1再与10相比,反之为0后同理。
非数学上理解i是否在其之间。所以需要用逻辑运算符
3,逻辑运算符
!(逻辑非)优先级高于算术运算符,&&(逻辑与)和||(逻辑或)优先级低于关系运算符。
短路操作:代替if
4,位运算符
左移,右移,按位取反,按位或,按位异或,按位与
移位的效率高于乘除法。
(1)左移:高位丢弃,低位补0,相当于乘2.。
申请内存会用到:申请1G:malloc(1<<30)
(2)右移:
对于偶数来说是除2,对于奇数是先减1再除2.
低位丢弃,正数高位补0,负数高位补1.
无符号数当做正数。
(3)按位与,按位或,按位取反
对应位置进行与,或,取反
取反:任意正数的取反为其负数减1
若要得到一个数的最小位为1的数。可和他的相反数按位与最后得到的数就是了。
(4)异或(相同为0,相异为1)
任何数和自身异或得0
任何数和0异或得自身
满足交换律
a、两个数有两个不同空间可用异或交换互相的值:
i=i^j
j=i^j
i=i^j
b、101个数,50个出现两次,1个出现一次找出出现一次的数
举例5个数
c、102个数,50个出现两次,2个出现一次找出出现一次的数
分堆,为1的最小位
d、103个数,50个出现两次,3个出现一次找出出现一次的数
5,赋值运算符
左操作符=右操作符
6,条件运算符与逗号运算符
条件运算符是C语言唯一的三目运算符,代表有三个操作数。
max=a>b?a:b //max等于a和b较大的值
逗号运算符:(优先级最小)(逗号表达式的整体的值是逗号后面的值)
a=b,c //a等于b
a=(b,c) //a等于c
for(i=1, j=2, k=3;i<100;i++,j++)
7,自增自减运算符及字节运算符
j=++i //i先++在赋值给j
j=i++>1 //后++,等价于j=i>1-1;i++,最先的是判断i与1的大小
函数传递参数禁止使用自增自减
sizeof() 是一个判断数据类型或者表达式长度的运算符。
课外知识:百兆光纤指的是100M的bit
5.选择与循环
算术运算符优先级高于关系运算符,关系运算符优先级高于逻辑与与逻辑或,相同优先级运算符从左至右进行结合
选择:
if:
基础形式:
略
进阶:
switch:
switch中不能写浮点型的表达式
#include <stdio.h>
#include <stdlib.h>
int main()
int mon,year;
while(scanf ("%d%d", &year, &mon)!=EOF)
switch (mon)
case 2:printf("%d is %d days\\n" , mon,28+(year%4==0&&year%100!=0||year%400==0)); break;
case 4:
case 6:
case 9:
case 11 : printf ("%d is 30days \\n" , mon) ; break;
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: printf ("%d is 31days \\n" , mon) ; break ;
default:
printf ("error mon\\n") ;
break ;
测试:
循环:
break结束循坏_
continue本次循环,continue后面的语句不再执行
goto无条件跳转:
1加到100:
#include <stdio.h>
#include <stdlib.h>
int main()
int i=1, sum=0;
lable:
sum+=i;
i++;
if(i<=100)
goto lable;
printf ("sum=%d\\n", sum);
while:
/ while循环内没有使条件趋近于假的语句
1加到100
#include <stdio.h>
#include <stdlib.h>
int main()
int i, sum;
i=1, sum=0;
while(i<=100)
sum+=i;
i++;
printf ("sum=%d\\n", sum);
do while:
1加到100
#include <stdio.h>
#include <stdlib.h>
int main()
int i, sum;
i=1, sum=0;
do
sum+=i;
i++;
while(i<=100);
printf ("sum=%d\\n", sum);
for:
1加到100:
#include <stdio.h>
#include <stdlib.h>
int main()
int i, sum;
for(i=1,sum=0;i<=100;i++)
sum+=i;
printf ("sum=%d\\n", sum);
偶数和:
#include <stdio.h>
#include <stdlib.h>
int main()
int i, sum;
i=1,sum=0
for(;i<=100;i++)
if(i%2==1)
continue;
sum+=i;
printf ("sum=%d\\n", sum);
都可省略:(尽量都不要省略)
#include <stdio.h>
#include <stdlib.h>
int main()
int i, sum;
i=1,sum=0
for(;;)
if(i<100)
sum+=i;
i++;
else
break;
printf ("sum=%d\\n", sum);
6指针的传递
指针:把对应某个变量的地址存下来
指针的定义:
内存区的每一个字节有一个编号,这就是“地址”。如果在程序中定义了一个变量,在对程序进行编译时,系统就会给这个变量分配内存单元。按变量地址存取变量值的方式称为“直接访问”方式,例如 printf(“%d”,i);scanf(“%d”,&i);另一种存取变量值的方式称为“间接访问”的方式。即,将变量i的地址存放在另一个变量中。在C语言中,指针变量是一种特殊的变量,它是存放地址的。
定义一个指针变量:
取地址与取值操作符:
取地址操作符是&,也叫引用,通过该操作符我们可以获取一个变量的地址值;取值操作符为*,也叫解引用,通过该操作符我们可以拿到一个地址对应位置的数据。
注意:
5.2指针使用场景:
5.2.1指针的使用场景两个传递与偏移。
传递:
不用指针
值传递
i前后仍旧是10
用指针:
前后值改变:
变量地址的传递
更多大学课业实验实训可关注公众号:Time木
回复相关关键词
学艺不精,若有错误还望指点
以上是关于c语言学习笔记|编译过程|数据类型|scanf|运算符|选择与循环|指针的传递的主要内容,如果未能解决你的问题,请参考以下文章