C语言基础语法第一天

目录:

  • C语言预备知识

  • C语言标准函数

  • 编译过程

  • 变量

  • IEE754

  • 运算

  • 解一元二次方程练习

C语言预备知识:

C语言标准函数库

编译过程

  • 预处理(Preprocessing):用于将所有的#include头文件以及宏定义替换成真正的内容。gcc的预处理是预处理器cpp来完成的。

X文件名文件大小代码行数

预处理前

test.c

146B

9

预处理后

test.i

17691B

857

  • 编译(Compilation):将经过预处理之后的程序转换成特定汇编代码(assembly code)的过程。

  • 汇编(Assemble): 将上一步的汇编代码转换成机器码(machine code)产生目标文件

  • 链接(Linking):链接过程将多个目标文以及所需的库文件链接成最终的可执行文件(executable file)

数据类型

变量(Variable):表示内存中的一个存储区域(不同的数据类型,占用的空间大小不同)

变量的初始化(initialized)就是变量赋值

类型

英文表示

存储字节

整型

int

4

短整型

short int

2

长整型

long int

8

单精度浮点数

(6位小数)

float

4

长精度浮点数

(15位小数)

double

8

字符

char

1

C语言中没有字符串类型,使用字符数组char[]表示字符串

变量类型

生存周期

作用域

局部变量

auto:自动变量,离开定义函数立即消失

只作用于该函数内部

register:寄存器变量,离开定义函数立即消失

static:静态变量,离开定义函数仍然存在

全局变量

在程序运行期间一直存在

static:静态变量,仅限于本文件内部调用

extern:外部存储变量,用于声明本文件将要用到的其他文件的变量

进制注意事项:

    C语言规定八进制前加0,十六进制前加0x或0X,十进制前什么也不加

    在汇编中:数字后加字母B表示二进制(binary),加字母o表示八进制数(octonary),加字母D表示十进制数(decimal system),加字母H表示十六进制数(hexdecimal)。

    printf的用法:

  • %d表示十进制输出

  • %x或%X表示以十六进制输出

  • %o表示以八进制输出

浮点数的写法:

float x = 3.2 ;//传统写法
float x = 3.2e3 ;//科学计数法3200
float x = 123.45e-2;  //科学计数法 1.2345 (后者默认double)

字符:

  • 单个字符使用单引号括起来'A'

  • 字符串用双引号括起来:“A” 表示 ‘A’和‘\0’的组合

存储方式:

整数是以补码的形式转化为二进制补码的形式存储在计算机中

实数是以IEE754标准转化为二进制代码存储在计算机中的

字符实质上与整数的存储方式相同

const修饰常变量:值不能被修改,在整个作用域中都维持原值

int main()
{  
    const int a = 1;  //a的值不允许修改
}

#define定义的标识符常量

    该标识符常量在程序中是个定值,通常用于表达数组容量或涉及数学的常量。

***#define***
#define SIZE 10
 

  • sizeof运算符: 用于获取数据类型或者表达式的长度

sizeof(变量名)
sizeof(数据类型名)
sizeof 变量名

注意:

  •  sizeof(结构体) :理论上结构体各个成员在内存中是连续存放的,和数组非常类似,但是,结构体占用的总大小不一定等于全部成员变量占用内存大小之和。在编译过程中,为了提高内存寻址的效率,各个成员之间可能会存在缝隙,用sizeof可以得到结构体在内存中的总大小,sizeof(结构体名)或sizeof(结构体变量名)都可以。

  • 不要对void使用sizeof: void是无值型或空类型,不知道存储空间大小的类型,编译器也不能确定它的大小。

  • 不要在子函数中对字符指针用sizeof:如果在子函数中用sizeof(pstr),得到的不是字符串占用内存的字节数,而是字符指针占用内存的字节数(8字节)

  • 不要在子函数中对结构体指针用sizeof :同字符指针

  • signed :第一位代表正负,剩余代表大小 signed  int范围-128~127,默认情况

  • unsigned:无符号,所有位都为大小,没有符号 unsigned int 范围0~255

数据类型

字节数

取值范围

char

1

-128~127

unsigned char2

1

0~255

short

2

-32768~32767

unsigned short

2

0~65535

int

4

-2147483648~2147483647

unsigned int

4

0~4294967295

long

4

-2147483648~2147483647

unsigned long

4

0~4294967295

long long

8

-9223372036854775808~9223372036854775807

unsigned long long

8

0~18446744073709551615

数据类型

字节数

取值范围(绝对值)

float

4

1.17549*10^-38~3.40282*10^38

double

8

2.22507*10^-308~1.79769*10^308

long double

12

2.22507*10^-308~1.79769*10^308
 

代码规范化: 《高质量c语言编程》 林锐

  1. redefinition :重复定义
  2. multiple:多种的,多重
  3. initialization :初始化

ASCII编码:

scanf补充:

int main()
{ 
    char ch;  
    scanf("m%c", &ch);  //输入ma       //m为非输入控制符 
    printf("%d\n", ch); 
    return 0;
}
//输出97

多个scanf读取数据:读取中间非法输入(脏数据)

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>
int main()
{ 
    int a , b;
    char ch;//存放脏数据 
    scanf("%d", &a); 
    printf("%d\n", a); //避免第一次输入的脏数据影响第二次读入 //如果第一次后面存在脏数据将其读入 
    while ((ch = getchar()) != '\n') 
    { 
        continue; 
    } 
    scanf("%d", &b); 
    printf("%d\n", b); 
    return 0;
}

赋值运算符

说明

示例

=

普通赋值运算符

val = 2

+=

加并赋值操作

val += 2 等价于 val = val + 2

-=

减并赋值操作

val -= 2 等价于 val = val - 2

*=

乘并赋值操作

val *= 2 等价于 val = val * 2

/=

除并赋值操作

val /= 2 等价于 val = val / 2

%=

取余并赋值操作

val %= 2 等价于 val = val % 2

<<=

左移并赋值操作

val <<= 1 等价于 val = val << 1

>>=

右移并赋值操作

val >>= 1 等价于 val = val >> 1

&=

按位与并赋值操作

val &= 1 等价于 val = val & 1

^=

按位异或并赋值操作

val ^= 1 等价于 val = val ^ 1

|=

按位或并赋值操作

val |= 1 等价于 val = val | 1

注意:

  •     取余%的运算对象必须是整数,结果是整除后的余数,其余数的符号与被除数相同。

  • C语言没有“之间”,“中间”,“之内”的关系运算符,只能使用与或操作进行替换

优先级:

    算术 > 关系 > 逻辑 > 赋值

注意:C语言对真假的处理

    非零是真

    零是假

    真用1表示,假用0表示

变量名++;// 表示在本次使用变量后再自增;
++变量名; // 表示在本次使用变量前自增;
变量名–-;// 表示在本次使用变量后再自增;
–-变量名; // 表示在本次使用变量前自减;

逗号也是运算符:

#include <stdio.h>
int main()
{     //3, 4, 5;//这是一条语句 //把上面这条语句的值赋值给变量a 
    int a = (3, 4, 5); 
    printf("a=%d\n", a);
}
//输出结果:a=5// 因为a的值是整条语句的值,而整条语句的值是最后那个逗号后面的值

#include <stdio.h>
int main()
{ 
    int a=3, b=4, c=5; 
    int x=0;  
    int y=(x=a+b),(b+c);     // 使用逗号隔开,使得y=x=a+b 
    printf("第一个y=%d\n", y);  
    y=((x=a+b),(b+c));         // 如果用逗号二开,返回值就会变成最后那个表达式额值  printf("第二个y=%d\n", y);
}
// 输出结果:// 第一个y=7 //     第一个y=9

三目运算符:

表达式1?表达式2:表达式3;

先执行表达式1,如果表达式1的结果为真,那么执行表达式2,整体的运算式的结果是表达式2的结果。如果表达式1的结果为假,则执行表达式3,结果也为表达式3的结果。

练习:解一元二次方程(C语言)

#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
#include <math.h>
//一元二次方程
int main()
{
  int a;  //二次项系数
  int b;  //一次项系数
  int c;  //常数项
  printf("请分别输入二次项系数,一次项系数,常数(中间空格隔开)\n");
  scanf("%d %d %d", &a, &b, &c);
  float judge;  //根据b的平方-4ac来判断是否有解及解的个数
  judge = b * b - 4 * a * c;
  printf("%f\n", judge);
  float x1, x2; //  方程的解
  if (judge < 0)
  {
    printf("此方程无解\n");
  }
  else if (judge > 0) 
  {
    printf("此方程有两个不同的解\n解为:\n");
    x1 = (-b + sqrt(judge)) / 2 * a;
    x2 = (-b - sqrt(judge)) / 2 * a;
    printf(" X1:%f\n X2: %f\n", x1, x2);
  }
  else  if(judge == 0) 
  {
    printf("此方程有两个相同的解\n");
    x1 = (-b - sqrt(judge)) / 2 * a;
    x2 = (-b + sqrt(judge)) / 2 * a;
    printf(" X1=X2: %f", x1);
  }
  return 0;
}

参考资料:郝斌老师C语言

                《算法设计与分析》第二版

                C语言技能树

于喝水
关注 关注
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言基础:multi-line comment
liaojunwu的博客
11-28 1637
今天在调试代码时为了偷懒, 直接在有反斜杠的代码前加了行注释//, 结果导致编译不过 查下了下资料, 原因如下: 在C/C++语言, 在对源文件做预处理的时候,有两条基本原则: 1、凡是以//开头的为单行注释 2、凡是以\结尾的代表此行尚未结束 于是预处理器在处理的时候会先按第二条规则,看每行的末尾的那个字符是不是”\”,是的 话,就下一行接到本行。 然后把所有以//开头的注释和/* */...
C语言基础--自学第一天
dream_orgenize的博客
07-06 419
C语言基础概要
实现multi()函数,参数个数不限,返回所有参数的乘积
热门推荐
灯闵的博客
04-18 8万+
def multi(): try: a=input("输入要计算的参数,用空格隔开") c=1 for item in a.split(): #通过for循环可根据特定符号简洁分割字符串,split()无参默认根据空格切割 c=c*int(item)#切割出来的是字符串,需强转成int型,便于运算 ...
c语言的注释,multi-line comment
lyd0813的博客
10-12 8854
在C/C++语言, 在对源文件做预处理的时候,有两条基本原则: 1、凡是以//开头的为单行注释 2、凡是以\结尾的代表此行尚未结束 于是预处理器在处理的时候会先按第二条规则,看每行的末尾的那个字符是不是”\”,是的 话,就下一行接到本行。 然后把所有以//开头的注释和/* */的块注释去掉。 但是存在一个问题, 对于big5的汉字而言,其第一个字节的编码范围是0xA1 - 0xFE,第二个...
C语言编写函数multiple求倍数、用C语言编写函数isEven判断奇数和偶数
qq_46754313的博客
10-15 2330
请编写函数multiple来判断一对整数第二个整数是否是第一个整数的倍数。该函数将接收两个整数作为实参。若第二个整数是第一个整数的倍数,则函数返回1(真),否则返回0(假)。请将此函数应用于一个将输入一系列整数对的程序。请编写一个程序来接受用户输入的一系列整数,然后将其逐个传递给函数isEven,该函数使用求余运算符来判断整数是否为偶数。该偶数接收一个整形实参。当该整数时偶数时,函数返回1,否则返回0.
C语言-基础例题55道
行秋的博客
02-02 5万+
1. 简单程序设计 编程写程序,在屏幕上输出信息:Happy New Year! /* 输出图形*/ #include<stdio.h> void main() { printf("Happy New Year!\n"); } 2. 简单计算 由键盘任意输入2个数,分别计算它们的和、差、积、商。 /*简单计算*/ #include<stdio.h> void main() { float a,b; float h,c,j,s; scanf("
嵌入式第一天-C语言基础语法
shape_one的博客
04-10 618
原因在于,使用补码,可以将符号位和数值域统一处理;此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。原码表示法简单易懂,与带符号数本身转换方便,只要符号还原即可,但当两个正数相减或不同符号数相加时,必须比较两个数哪个绝对值大,才能决定谁减谁,才能确定结果是正还是负,所以原码不便于加减运算。原码:一个数的原码就是它的二进制表示,其最高位是符号位(0表示正,1表示负)。对于正数,反码与原码相同,对于负数,符号位不变,其它部分取反(1变0,0变1)。对于正数,原码、反码、补码相同。
0基础c语言 -第一天
weixin_43167065的博客
04-14 503
0基础c语言第一天
ios逆向第一天(基础环境搭建和C语言基础语法
jdj992101的博客
12-10 347
ios逆向第一天(基础环境搭建和C语言基础语法
C语言视频教程第一天
01-03
本"第一天"的C语言视频教程旨在引导新手快速入门,理解C语言的基本概念和语法结构。 首先,从"01_C语言概述01.mp4"开始,教程将介绍C语言的历史、特点和应用领域。C语言以其简洁、高效和可移植性著称,广泛应用于...
C语言开发学习第一天(定义基础)
weixin_43906701的博客
12-07 1160
JAVA刚学一阵,又接了一个C语言的项目,开始学习C语言开发c语言u8,u16,u32和int区别为:符号不同、数据范围不同、内存占用空间不同。 一、符号不同 1、u8:u8表示无符号char字符类型。 2、u16:u16表示无符号short短整数类型。 3、u32:u32表示无符号int基本整数类型。 4、int:int表示带符号int基本整数类型。 二、数据范围不同 1、u8:u8的数据范围为0~+127[0~2^8-1]。 2、u16:u16的数据范围为0~+65535[0~2^16-1]。 3
C语言基础语法(2遍)
破釜沉舟撞南墙的博客
07-30 1121
c#title: C语言基础 6.创建并运行第一个C程序 集成开发环境(IDE) 编译器/C语言的指令-机器指令 VC6版本 安装虚拟机+VC6建议学习 同学帮助安装 编写C程序 1.创建项目,选择win32控制台项目(Win32 console Application) 文件-新建-Win32 console Application(项目名字为时间的顺序2020_06_16) 2.添加文件 文件-新建-C++ Source File-Main.cpp 3.生成项目(编译):*.exe #inclu.
C语言union的用法
最新发布
zyqash的博客
09-21 286
C语言,union(联合体)是一种特殊的复合数据类型,它允许多个不同的数据成员共享同一块内存空间。与struct(结构体)不同的是,union的所有成员共用同一个内存地址,因此同时只能存储一个成员的值。
C++ STLsort函数
weixin_43349440的博客
09-15 442
刷题经常遇到,用于各种元素排序,可以自定义排序方式,vector、deque适用。详细讲解:https://zhuanlan.zhihu.com/p/36274119。,为避免QuickSort快排的递归调用带来过大的额外负荷,就改用。一旦分段后的数据量小于某个门槛。STL的sort算法,
标准C++(二)
m0_63127040的博客
09-18 845
C语言定义的全局变量、函数、结构、联合、枚举、枚举值、宏都在全局作用域下,所以当项目比较庞大时,非常容易造成命名冲突(以模块名作前缀、后缀),所以C++选择把全局作用域进行拆分成子作用域进行管理,这些子作用域就是作名字空间。把抽象结果(利用面向对象的思维模式,思考、观察出的结果),使用用C++的语法封装出一种类似结构的自定义数据类型(复合数据类型)。使用设计好的类(结构)这种数据类型,定义出的类变量在面向对象编程语言被称为对象(结构变量),创建类对象的行为也被称为实例化对象。int id;
C++_map_set详解
2302_77644537的博客
09-16 1063
set是按照一定次序存储元素的容器在set,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一的。set的元素不能在容器修改(元素总是const),但是可以从容器插入或删除它们。在内部,set的元素总是按照其内部比较对象(类型比较)所指示的特定严格的排序准则(默认是小于)进行排序。set在底层是用二叉搜索树(红黑树)实现的。map是关联容器,它按照特定的次序(按照key来比较)存储由键值key和值value组合而成的元素。
TMS Scripter Crack TMS Scripter is a Delphi C++ Builder
q2315702359的博客
09-19 1038
  The integrated development environment or the IDE allows the users in process of creating script jobs during the runtime with the help of multiple cross-language scripts such as de Pascal and the Basics.  It has support for the cross-utilization of the s
在typescript浏览器端调用C++编写的函数,WebAssembly传递指针类型的参数,以及处理指针类型的返回值。
Xeon_CC的博客
09-17 459
最后是返回一个C++结构体指针,在TypeScript通过DataView来获取内存的地址偏移量来取得结构体的数据,因为em++编译器是以32位来编译.cpp文件的,所以指针占4个字节。DataResult结构体第一个属性dArr是一个指针,那么就是地址偏移量0,然后以32位无符号整型取得dArr指针,通过这个指针去读取wasmmemoryBuffer的数据,就可以得到dArr属性对应的值了。同理,通过地址偏移量+4来得到propCount属性,以32位整数读取数据即可。
C语言基础:标识符与程序设计
课程首先回顾了第一章关于程序设计和C语言的基础知识,包括预备知识,如计算机的基本构成和数的表示,以及编写、编译、连接、调试和运行C程序的基本流程。 第二章主要讨论数据对象和计算,提出了两个问题:一是计算...
写文章

热门文章

  • C++多线程数据库连接池MySQL 2015
  • 微信小程序在调用php API时中文乱码问题解决 1209
  • 用C语言实现员工工资管理系统 1188
  • C++实现简单银行管理系统代码详解 789
  • 获取ME固件版本 763

分类专栏

  • QTimer 1篇
  • 固件 1篇
  • 研发管理 11篇
  • C++ 12篇
  • 开源库 1篇
  • 前端 1篇
  • 汇编 2篇
  • GitHub 1篇

最新评论

  • 用C语言实现员工工资管理系统

    顾无言195: 有没有大神有这道题的源代码啊?给我发一下吧,求求了,有偿

  • 用C语言实现员工工资管理系统

    2301_79704350: 为什么运行不了啊?

  • 获取ME固件版本

    CSDN-Ada助手: Vue入门 技能树或许可以帮到你:https://edu.csdn.net/skill/vue?utm_source=AI_act_vue

大家在看

  • 海外云购源码/一元购源码/夺宝源码/英文版云购源码
  • 第二章 网页制作的排版方法 550
  • 许少辉加工中心《乡村振兴战略下传统村落文化旅游设计》南门方向辉少许
  • 京东返利APP的高并发与高可用架构设计 2372

最新文章

  • QObject::~QObject: Timers cannot be stopped from another thread 定时器报错
  • 获取ME固件版本
  • 用C语言实现员工工资管理系统
2024年2篇
2023年22篇
2020年10篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

玻璃钢生产厂家黔南州商场美陈装饰玻璃钢花盆陶瓷花盆盘龙区设计玻璃钢雕塑玻璃钢拳头雕塑句容商场亮化美陈博乐玻璃钢雕塑贵安新区玻璃钢雕塑制作哪家好张掖城市玻璃钢雕塑公司贵州户外玻璃钢雕塑四川玻璃钢雕塑供应商银川人物玻璃钢雕塑制作玻璃钢金柚雕塑重庆玻璃钢雕塑哪家便宜广西玻璃钢小羊动物雕塑定制广西玻璃钢雕塑采购珠海园林玻璃钢雕塑价格商场广场美陈道厂家选哪家长春公园玻璃钢雕塑定做售卖玻璃钢人物雕塑晋城玻璃钢雕塑厂家商场秋装美陈抚州公园玻璃钢雕塑订做价格最新玻璃钢雕塑玻璃钢雕塑厂简介出售玻璃钢花盆花器珠海透光玻璃钢雕塑生产厂家玻璃钢花盆效果怎么样太湖玻璃钢雕塑大型主题商场美陈批发知名玻璃钢仿铜雕塑加工香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化