【C语言学习笔记】基础语法及基本运算_用c语言写5+3-程序员宅基地

技术标签: 【C语言学习笔记】  

第一部分 基础语法

一、关键字

C语言默认提供的有特殊含义的符号,并且都是小写,不能再将它们用作标识符。在Xcode中颜色显示为玫红色

二、标识符

1、程序员自己定义的一些符号和名称。

2、标识符命名

(1)规则:

1> 只能由26个引文字母的大小写、10个阿拉伯数字0~9、下划线_组成。

2> 严格区分大小写,比如test和Test2是两个不同的标识符。

3> 不能以数字开头,不能使用关键字作为标识符。

(2)规范:

1> 名称要有意义,比如完整的英文或者拼音。

2> 如果标识符中有多个单词,尽量使用驼峰标识,即从第二个单词开始,首字母大写,如果是拼音用_分隔。

三、注释

1、用来解释某一段程序的或者某一段代码的含义,方便程序员之间交流,在xcode中,注释默认的颜色是豆绿色,我们可以通过颜色直观的来分辨出是否是注释。

2、注释只要不影响到程序的运行,位置是不固定的,函数内或者函数外都可以。并且只要被注释掉的内容,不参与编译,通过查看.o目标文件的字节数就可以知道。

3、单行注释//和多行注释/**/

    //单行注释:这里是注释!!
    
    /*多行注释:
     这里是注释!!
    printf("itcast\n");
    */
4、注释的作用

(1)利用注释分析代码含义

先运行整个程序,查看总体结果,然后把想了解的代码注释之后再运行程序,查看结果和总体结果的区别,那么就分析出代码的含义了。

(2)利用注释查找代码错误

把可疑代码注释掉之后运行程序,确定这行代码是否有错。

5、总结:

//正确用法
//1.单行嵌套多行形式的单行
//it/*cast*/

//2.单行嵌套单行
//it//cast

//3.多行嵌套单行
/*//itcast
 */

//错误用法
//1.单行嵌套多行
//it/*
cast*/

//2.多行嵌套多行
/*
 /*itcast*/
 */
(1)把/**/写在一行,其实应当看成单行注释

(2)单行注释可以被嵌套

(3)多行注释不可以被任何形式的注释嵌套

四、数据

数据有大小,数据越大说明包含的0和1就越多,每一个比特位bit保存一个0或者一个1,一个字节保存8位bit。单位转换:1B = 8bit、1KB = 1024B、1MB = 1024KB、1GB = 1024MB、1TB = 1024GB。

1、常量:固定不变的值

(1)整型常量,比如1、3、5、0

(2)浮点型常量

1> 单精度float,数据都是以f结尾的,小数点后有6位。比如2.5f、0.0f

2> 双精度double,小数点后有位13。比如1.3、2.5

(3)字符常量,单引号括起来的单个字符,只能括住一个字符,不能是汉字。比如'a'、'$'

(4)字符串常量,双引号括起来的字符,字符数不限制。比如"itcast"、"as"

2、变量:当一个数据的值经常改变或者不确定,就需要定义为变量

(1)变量的定义

    //数据类型 变量名
    int score;

    //连续定义3个char变量
    char d, e, f;
(2)变量的赋值

    score = 100;
    //初始化:定义变量同时第一次赋值
    char c = 'A';

(3)变量的输出

    //%d %i输出整数,格式符(占位符)
    printf("分数是%d\n", score);

    //%f输出小数,默认是6位小数
    printf("身高是%.2f\n", height);

    //%c输出字符
    printf("积分等级是%c\n", c);
(4)变量使用注意

1> 变量的作用域:从定义变量的那一行代码开始,一直到所在代码块结束

    int b;
    b = a;    //报错,a未定义
    int a = 10;
2> 代码块的作用域

    {
        int a = 10;
    }
    //报错,a是未定义的变量,因为a的作用域在代码块里面
    printf("a = %d\n", a);
代码块的作用:及时回收不再使用的变量的存储空间,为了提升性能

3> 一个变量没有经过初始化,就不要使用该变量

    int c;
    int d = c + 1;
    printf("d的值是%d\n", d);
//输出结果是
//d的值是1756581943
(5)变量小练习(用于面试)
//不利用第三方变量来实现两个变量值的交换
    int a, b;
    a = b - a;
    b = b - a;
    a = b + a;
(6)变量的存储细节

int main(void)
{
    int a = 10; 
    int b = 20;
    //输出a的地址,地址是0x7fff58b0ac08
    printf("a的地址是%p\n", &a);
    
    //b的地址是0x7fff58b0ac04
    printf("b的地址是%p\n", &b);
   
    return 0;
}

1> 不同数据类型所占据的存储空间也不同

2> 变量a和变量b怎么存储的,看下面示意图

 
* 内存寻址由大到小,优先分配内存地址大的字节给变量,变量数据类型决定了分配的字节数。

* 变量越先定义,内存地址就越大。

* 取得变量的地址:&变量名,变量的地址是字节最小的那个。

* 输出地址:%p。

五、scanf()函数

1、基本使用

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

    scanf("%d", &number);
    
    printf("用户输入的值是%d\n", number);
    
    return 0;
}
(1)scanf函数只接收变量的地址。

(2)scanf函数是一个阻塞式函数 ,会卡在scanf那行代码,等待用户输入。

(3)用户输入完毕后,会把输入的值赋值给变量number

2、其他用法及使用注意

// 1.输入字符
    char myc;
    scanf("%c", &myc);

// 2.一次性输入多个数值,并且以某些符号隔开
    int num1, num2;
    scanf("%d#%d", &num1, &num2);
    
// 3.如果scanf参数中以空格隔开,实际输入可以空格、回车、tab键作为分隔符
    int num1, num2;
    scanf("%d %d", &num1, &num2);

// 4.scanf中不能写\n
// 错误写法
    int a;
    scanf("%d\n", &a);  
    


第二部分 基本运算

一、算术运算

1.基本使用

    int a = 10 + 2 + 5 + 7;
    int b = -5;
    int c = 10 * b;
    int d = 1 / 5;
    int e = 24 % -5;    //取余

(1)运算顺序:从左向右。

(2)取余运算符%两边的值都是整数,并且取余运算结果的正负只和%左边的值相关。

2.使用注意

(1)自动类型转换

    int = 10.8;    //double转换为int
(2)强制类型转换
    int a = (int) 10.8;    //double转换为int

(3)自动类型提升

    double c = 10 + 6.6;
    double e = (double)3 / 2;
1> 参与计算的数据是什么类型,那么最终的结果就是什么类型。

2> 其中占内存字节数小的类型转换成大字节类型。

二、赋值运算符

#include <stdio.h>
int main(void)
{
    int a = 10;
    
    //复合赋值运算符
    a += 5;    //a = a + 5;
    
    a *= 5;    //a = a * 5;
    
    a += 5 + 6 + 4;    //a = a + (5 + 6 + 4);
    printf("a = %d\n", a);  
    return 0;
}
三、自增自减运算符

1、基本使用

int main(void)
{   
    int a = 10;
    a = a + 1;  //11
    a += 1; //12
    a++;    //13
    ++a;    //14
    a--;    //a -= 1;   13
    printf("%d\n", a);
}
(1)单独使用时,不管++和--是在前还是在后,最终的结果都是+1或-1。

int main(void)
{
    int b;
    int a = 10;

    b = (a++) + (++a);
    printf("a = %d, b = %d\n", a, b);    // a = 10, b = 22;
}
(2)a++或a--:先使用a的值,再+1或者-1赋值给a。

        ++a或者--a:先把a的值+1或者-1之后赋值给a,再使用

2、注意:自增自减运算符不能用于常量

四、sizeof

1、用来计算一个变量或者一个常量、一种数据类型所占据的字节数。

2、基本形式:

// 1.正确形式
    sizeof(变量\常量);
    sizeof 变量\常量;
    sizeof(数据类型);

// 2.错误形式
    sizeof 数据类型;

五、关系运算符(比较运算符)

int main(void)
{
    int result = 3 + 4 > 8 - 2;
    printf("%d\n", result);
    
    return 0;
}
1、任何数值都有真假性,任何非0值为真,0为假

2、如果条件成立则为真,返回1;如果条件不成立为假,返回0。

3、6种关系比较符,其中>、>=、 <=、 <高于==、!=,结合方向是从左到右。

六、逻辑运算符

1、逻辑与:条件A && 条件B 

两个条件都成立时,结果才是1,为真

    int a = 10 && 0;
    printf("a = %d\n", a);    // a = 0
    //左边成立,才判断右边,如果左边不成立,右边不做判断
    int a =10;
    int b = 10;
    int c = (a<5) && (++b>=11)
    
    printf("a=%d, b=%d, c=%d\n", a, b, c);    // a = 10, b = 10, c = 0

2、逻辑或:条件A || 条件B 

两个条件有一个成立时,结果是1,为真,两个条件都不成立时,返回0。

    int c = (1>8) || 0;
    printf("c = %d\n", c);    // c = 0
    //左边成立,不判断右边,如果左边不成立,再判断右边
    int a = 10;
    int b = 10;
    int c = (a>5) || (b++ - 10);
    printf("a=%d, b=%d, c=%d\n", a, b, c);    //a = 10, b = 10, c = 1

3、逻辑非:!条件A  

条件A为成立,返回0;如果条件成立,就返回1

    int a = !(10<8);
    printf("a=%d\n", a);    // a=1
七、三目运算符

1、格式:条件 ? 数值1 : 数值2;

2、利用三目运算符计算两个值中的最大值

//提示用户输入两个整数,输出最大值
#include <stdio.h>
int main(void)
{    
    // 1.保存输入的两个整数
    int num1, num2;
    
    // 2.提示用户输入
    printf("请输入两个整数,以空格隔开:\n");
    
    // 3.接收输入
    scanf("%d %d", &num1, &num2);
    
    // 4.比较俩数,输出最大值
    int max = (num1 > num2) ? num1 : num2;
    printf("%d和%d的最大值是%d\n", num1, num2, max);
    

    return 0;
}
运行结果:



版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/dite_water/article/details/44304927

智能推荐

【最新】IDEA 2021.3 使用_janf_config.txt-程序员宅基地

文章浏览阅读8.1k次。IDEA 2021.3之前的版本都可以采用重试脚本的方式来使用IDEA,最近IDEA官方发布了新款2021.3的版本,原作者不在维护升级重置脚本,遂提供了新型使用方法,如下下载JAR包地址:https://github.com/pengzhile/ja-netfilter/releases编写配置文件指定你自己的目录创建此文件:janf_config.txt,最佳实践为把刚刚的Jar包和这个文件放置在同一目录下,就不用二次指定这个文件了# jb 的 janf_config.txt 配置文件[D_janf_config.txt

在Windows10\11的WSL2中使用图形化应用Chrome和搜狗拼音输入法_win11 wsl2 图形化-程序员宅基地

文章浏览阅读1.4k次,点赞24次,收藏18次。在Windows的WSL2中使用图形化应用Chrome,并配置中文界面和输入法。_win11 wsl2 图形化

python绘制Loss和Acc曲线+读取txt和log文件_python 提取txt中包含loss的行的数据-程序员宅基地

文章浏览阅读5.5k次,点赞4次,收藏40次。log文件如下所示:代码def read_log(filename): fp=open(filename) for line in fp.readlines(): train_loss=line[-27:-18] train_acc=line[-8:] with open('test.txt','a') as fp2: fp2.write(train_loss+train_acc) fp.close()_python 提取txt中包含loss的行的数据

WAMPServer集成环境的安装和配置_wampsever集成开发环境的安装与配置-程序员宅基地

文章浏览阅读1.4k次。一:WAMPServer的安装 WAMPServer是一个集成开发工具,已经将各个模块配置集成好了,不需要自己去手动配置各种环境。相对自己去分别下载Apache,MySql,PHP软件再去安装配置,要简单快速多了,适合新手使用。W指的是window系统开发环境,A是值Apache,M是指MySql数据库,P是值PHP。 下载成功之后,按照提示_wampsever集成开发环境的安装与配置

校外访问不了cgbt.cn(403 forbidden)解决办法-程序员宅基地

文章浏览阅读193次。众所周知,DNS的作用就是将域名转换为IP地址。公网很多DNS服务器不支持IPv6,或者没有完全收录IPv6地址,所以在交大校外访问cgbt.cn有时不能正确的解析为IPv6地址。我们有一个办法来解决,修改HOST表。开始——运行:%systemroot%\system32\drivers\etc打开以上文件夹,看到里边有一个hosts的无扩展名文件用记事本..._2001:da8:205

执行os.system阻塞问题_python执行卡在os.system-程序员宅基地

文章浏览阅读1.8w次,点赞18次,收藏14次。实际开发中遇到个os.system的问题,在偶尔看一本python书中找到解决方法,挺简单的,当时困扰我很长时间,还是经验少啊。在在执行os.system函数的时候通常会阻塞它的调用者,直到所启动的命令行程序退出。在Linux平台上 只需要在命令末尾加上shell后台运算符&即可:os.system('python test.py &')在Windows下,用DO..._python执行卡在os.system

随便推点

cmake:LINK : error LNK2001: 无法解析的外部符号 WinMainCRTStartup_cmake rtk编译报错无法解析的外部符号-程序员宅基地

文章浏览阅读5.8k次。正在设计的一个C/C++混合语言项目是用cmake来管理编译的,用cmake生成的一个Visual Studio工程(c++)在编译时报了个错: LINK : error LNK2001: 无法解析的外部符号 WinMainCRTStartup好是莫名其妙的问题,之前是没有这个问题的,反复查看了GIT提交记录,发现问题出在cmake脚本中 原本项目的定义是这样的,语言指定C,CXX..._cmake rtk编译报错无法解析的外部符号

Win10 Cortana 搜索框字体颜色_win10搜索框字体变成绿色-程序员宅基地

文章浏览阅读3k次。不知什么原因,cortana搜索框的字体颜色突然变成白色,搜索框背景也是白色,这就直接导致看不到自己输入的内容。怎么解决呢?找了一圈也没找到啥好的办法。google了一下才找到办法。据说这个是微软服务器那边的bug。解决办法如下:进入开始 --》 设置 --》时间和语言区域和语言–》国家和地区–》也门注销登入,恢复正常修改区域回中国继续happy吧。..._win10搜索框字体变成绿色

repo下载国内链接android源码_repo下载安卓源码-程序员宅基地

文章浏览阅读1w次,点赞5次,收藏3次。刚好碰到要下载一个指定版本的android源码,在网上没有找到,所以只能自己去下载,看了谷歌官方下载帮助但是苦于墙抽风,下载速度也奇慢,所以找了几个国内的源头下载,那么跟着我动起来,在这之前你需要一台装有linux的电脑或者是虚拟机上装有linux也是可以的. (一).科普一下git与repo的区别 1. Git:Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项_repo下载安卓源码

Sentinel控制台 1.8.0实时监控空白_sentinel1.8请求后实时控制空-程序员宅基地

文章浏览阅读6.7k次,点赞11次,收藏9次。application.ymlserver: port: 8401spring: application: name: alibaba-sentinel-service cloud: nacos: discovery: server-addr: 192.168.247.111:8848 sentinel: transport: dashboard: localhost:8080 #[配置sentinel d_sentinel1.8请求后实时控制空

如何在超大分辨率的图片中检测目标?-程序员宅基地

文章浏览阅读6.1k次,点赞6次,收藏55次。点击上方“3D视觉工坊”,选择“星标”干货第一时间送达文章导读本文通过一篇YOLT的文章引出超大分辨率的图片遇到目标检测任务该如何处理?此类问题一般出现在遥感领域和医疗影像中居多,我们先来..._16000*16000像素

asp.net中word打开(1)_asp.net网页能打开word文档vb代码-程序员宅基地

文章浏览阅读2k次。在ASP.NET中使用Microsoft Word文档[日期:2004-10-04] 来源: CSDN http://dev.csdn.net/develop/article/20/20901.shtm> 作者: [字体: 大 中 小 ] [来源]http://www.codeproject.com/useritems/wordapplication.asp[作者]Mich_asp.net网页能打开word文档vb代码

推荐文章

热门文章

相关标签