当前位置:网站首页>C语言-入门-基础-语法-[标识符,关键字,分号,空格,注释,输入和输出](三)
C语言-入门-基础-语法-[标识符,关键字,分号,空格,注释,输入和输出](三)
2022-07-04 08:46:00 【胡安民】
何为标识符?
在C语言中,符号常量,变量,数组,函数等都需要一定的名称,我们把这种名称成为标识符
标识符划分?
关键字,预定义标识符和用户标识符!
标识符的命名规则?
只能够由字母,数字,下划线,或者美元符号($)组成,且不能以数字开头;
C语言区分大小写,通常变量名和函数名都用小写字母表示;
虽然没有规定名称的长度,但还是别写太长,最好是见名知义,比如int max一看就知道是用来存放最大值的!还有,不能和下面的32个C语言的关键字重名哦!以及C语言中系统先定义的标识符,如系统类库,系统常量名系统函数名,如: 格式输出函数:
printf();
重名!
标识符驼峰命名
- 见名知意,能够提高代码的可读性
- 驼峰命名,能够提高代码的可读性
- 驼峰命名法就是当变量名或函数名是由多个单词连接在一起,构成标识符时,第一个单词以小写字母开始;第二个单词的首字母大写.
- 例如:
myFirstName
、myLastName
这样的变量名称看上去就像驼峰一样此起彼伏
何为关键字?
C语言中具有特殊含义的英文单词,通常用于构成语句,存储数据,定义数据类型等
分号
在 C 程序中,分号是语句结束符。也就是说,每个语句必须以分号结,否则就编译出问题。它表明一个逻辑实体的结束。 例如
printf(“Hello, World!\n”)
;
空格
只包含空格的行,被称为空白行,可能带有注释,C 编译器会完全忽略它。在 C 中,空格用于描述空白符、制表符、换行符和注释。空格分隔语句的各个部分,让编译器能识别语句中的某个元素,在哪里结束,下一个元素在哪里开始。因此,在下面的语句中:
int age;
在这里,int 和 age 之间必须至少有一个空格字符(通常是一个空白符),这样编译器才能够区分它们。另一方面,在下面的语句中:
fruit = apples + oranges; // 获取水果的总数
fruit 和 =,或者 = 和 apples 之间的空格字符不是必需的,但是为了增强可读性,您可以根据需要适当增加一些空格。
注释
注释是干什么用的呢,注释是给程序员看的,不是给电脑看的。在学习上,你可以在你写的代码旁边添加注释,让自己现在或以后都能够了解自己写的这段代码是干嘛的,有什么用,有什么需要注意的;在工作上,程序不是自己一个人来负责的,是多个程序员来共同努力的,这时候就需要注释来帮助别人理解自己写的代码。不要小看注释,大公司都是非常注重代码和注释的规范的。
我在上面加了一些注释。注释有两种表达方法,
- 第一种是
//
,表示这一行//后面所有字符都是注释; - 第二种是
/* */
,这是多段注释,当你要表达很长的注释时,使用多段注释比较方便。
其他符号
大括号
{ }
:函数体,复合语句以及数组的初始化等;圆括号
()
:函数定义时用来括住参数,或者用来修改运算顺序,比如:(a + 1) 2 和 a + (1 2)方括号
[]
定义数组类型和应用元素;点号
.
:结构体中引用成员;
上内容,我们之后学习中会详细的介绍,和重复的使用,这里只作为了解即可
输入和输出
输入输出函数(printf 和 scanf)是C语言中非常重要的两个函数,也是学习C语言必学的两个函数。在C语言程序中,几乎没有一个程序不需要这两个函数,尤其是输出函数(printf),所以这两个函数必须要掌握。
如果在程序中要使用 printf 或者 scanf,那么就必须要包含头文件 stdio.h。因为这两个函数就是包含在该头文件中的。
输出函数的功能是将程序运行的结果输出到屏幕上,而输入函数的功能是通过键盘给程序中的变量赋值。可以说输入输出函数是用户和计算机交互的接口。其中 printf 的功能很强大,用法很灵活,比较难掌握;而 scanf 的用法相对比较固定,但也有很多需要注意的地方。
printf输出
printf函数是格式化输出函数, 用于向屏幕输出数据。printf函数的调用方法是: printf(格式化字符串,参数列表);
列: printf("我心匪席,不可卷也,我心匪石,不可转也。\n");
其中\n
表示换行的意思
printf 的格式有四种
printf("字符串\n");
printf("输出控制符",输出参数);
printf("输出控制符1 输出控制符2…", 输出参数1, 输出参数2, …);
printf("输出控制符 非输出控制符",输出参数);
凡是以%开头的基本上都是输出控制符,非输出控制符,就是那些会原样输出的字符了
演示:
int age=18;
char xb='x';
double weight=62.5;
char name[21]; //字符数组
memset(name,0,sizeof(name)); //申请一块内存长度为name的大小
strcpy(name, "西施"); // strcpy函数是复制字符串的
printf("我的姓名是:%s,姓别:%c,年龄:%d岁,体重%lf公斤。\n",name,xb,age,weight);
上面有些函数我们可能,都没接触,没关系,后面都会讲解,目前了解即可
常用的控制符
控制符 | 说明 |
---|---|
%d | 按十进制整型数据的实际长度输出。 |
%ld | 输出长整型数据。 |
%md | m 为指定的输出字段的宽度。如果数据的位数小于 m,则左端补以空格,若大于 m,则按实际位数输出。 |
%u | 输出无符号整型(unsigned)。输出无符号整型时也可以用 %d,这时是将无符号转换成有符号数,然后输出。但编程的时候最好不要这么写,因为这样要进行一次转换,使 CPU 多做一次无用功。 |
%c | 用来输出一个字符。 |
%f | 用来输出实数,包括单精度和双精度,以小数形式输出。不指定字段宽度,由系统自动指定,整数部分全部输出,小数部分输出 6 位,超过 6 位的四舍五入。 %lf 是用来输入的 等价于%f 如使用%f数据混乱 |
%.mf | 输出实数时小数点后保留 m 位,注意 m 前面有个点。 可以使用 %.2f来保留 2位 或者%.3f保留3位…… 注意小数点 不要少 了 |
%o | 以八进制整数形式输出,这个就用得很少了,了解一下就行了。 |
%s | 用来输出字符串。用 %s 输出字符串同前面直接输出字符串是一样的。但是此时要先定义字符数组或字符指针存储或指向字符串,这个稍后再讲。 |
%x(或 %X 或 %#x 或 %#X) | 以十六进制形式输出整数,这个很重要。 |
%p | 打印地址数据 |
%x、%X、%#x、%#X 的区别
一定要掌握 %x(或 %X 或 %#x 或 %#X),因为调试的时候经常要将内存中的二进制代码全部输出,然后用十六进制显示出来。下面写一个程序看看它们四个有什么区别:
# include <stdio.h>
int main(void)
{
int i = 47;
printf("%x\n", i); //2f
printf("%X\n", i); //2F
printf("%#x\n", i); //0x2f
printf("%#X\n", i); //0X2F
return 0;
}
从输出结果可以看出:如果是小写的x,输出的字母就是小写的;如果是大写的X,输出的字母就是大写的;如果加一个#,就以标准的十六进制形式输出。最好是加一个#,否则如果输出的十六进制数正好没有字母的话会误认为是一个十进制数呢!总之,不加#容易造成误解。但是如果输出 0x2f 或 0x2F,那么人家一看就知道是十六进制。而且%#x和%#X中,笔者觉得大写的比较好,因为大写是绝对标准的十六进制写法。
如何输出 %d、\ 和双引号
printf 中有输出控制符%d,转义字符前面有反斜杠\,还有双引号。那么大家有没有想过这样一个问题:怎样将这三个符号通过 printf 输出到屏幕上呢? 要输出%d只需在前面再加上一个%,要输出\只需在前面再加上一个\,要输出双引号也只需在前面加上一个\即可。程序如下:
# include <stdio.h>
int main(void)
{
printf("%%d\n"); //%d
printf("\\\n"); //\ printf("\"\"\n"); //""
return 0;
}
printf 是C语言中非常重要的一个函数。经过上面的学习我们发现,其实它并不难。只要多编程多练习,很快就能掌握。
其次学完本节之后要知道为什么需要“输出控制符”。因为计算机中所有的数据都是二进制 0、1 代码,所以输出的时候要用“输出控制符”告诉计算机以什么形式将二进制数据显示出来。
输出控制符中,%d、%f、%s、%c 是最常用的,它们分别是输出整数、实数、字符串和字符的控制符。有关 %x、%X、%#x、%#X 四种用法的区别,只需要了解一下即可。
scanf输入
程序是人机交互的媒介,有输出必然也有输入 在C语言中,有多个函数可以从键盘获得用户输入:
- scanf():和 printf() 类似,scanf() 可以输入多种类型的数据。
- getchar()、getche()、getch():这三个函数都用于输入单个字符。
- gets():获取一行数据,并作为字符串处理。
scanf() 是最灵活、最复杂、最常用的输入函数,但它不能完全取代其他函数,大家都要有所了解。
scanf函数是格式化输入函数,用于接受从键盘输入的数据,用户输入数据完成后,按回车键(Enter)结束输入。
scanf函数的调用方法是:scanf(格式控制字符串,地址表列);
注意,不要在scanf的格式化字符串的最后加\n。 其中,
格式控制字符串的作用与printf函数相同
,但不能显示非格式字符串,也就是不能显示提示字符串 ,地址表列中给出各变量的地址
。地址是由地址运算符“&”后跟变量名组成的。 例如:&a、&b分别表示变量a和变量b的地址。而scanf函数在本质上就是给变量赋值,但要求写变量的地址,如&a这个地址就是编译系统在内存中给a变量分配的地址。在C语言中,使用了地址这个概念,这是与其它语言不同的。
输入整数
输入整数的格式用%d表示,在参数中列出整数型变量名,用于保存输入的数据。在输入数据之前,一般要先输出一句话提示用户。下同。
int age=0;
printf("请输入您的年龄:"); // 提示文字不要换行,让用户在后面输入,下同。
scanf("%d",&age); // 在变量名前要加符号&,先不要问原因,以后再介绍。
输入字符
输入字符的格式用%c表示,在参数中列出字符型变量名,用于保存输入的数据。
char xb=0;
printf("请输入您姓别:");
scanf("%c",&xb); // 在变量名前要加符号&
输入浮点数
输入浮点数的格式用%lf表示,在参数中列出浮点型变量名,用于保存输入的数据。
double weight=62.5;
printf("请输入您体重:");
scanf("%lf",&weight); // 在变量名前要加符号&。
输入字符串
输入字符串的格式用%s表示,在参数中列出字符串变量名,用于保存输入的数据。
char name[21];
memset(name,0,sizeof(name));
printf("请输入您姓名:");
scanf("%s",name); // 注意了,字符串变量名前可以不加符号&,不要问原因,以后再介绍。
输入多个内容
调用一次scanf函数可以输入多个数据,全部的数据输入完成后按回车键结束输入。
int c = 0, d = 0;
printf("请输入2个整数用户空格隔开:\n");
scanf("%d %d", &c, &d); //输入两个整数并分别赋值给c、d
printf("c*d=%d\n", c*d); //计算c*d的值并输出
return 0;
scanf() 有两个以空格分隔的%d,后面还跟着两个变量,这要求我们一次性输入两个整数,并分别赋值给 c 和 d。注意"%d %d"之间是有空格的,所以输入数据时也要有空格。对于 scanf(),输入数据的格式要和控制字符串的格式保持一致。
scanf 和 printf 比较
其实 scanf 和 printf 非常相似,只是功能相反罢了:
scanf("%d %d", &a, &b); // 获取用户输入的两个整数,分别赋值给变量 a 和 b
printf("%d %d", a, b); // 将变量 a 和 b 的值在显示器上输出
它们都有格式控制字符串,都有变量列表。不同的是,scanf 的变量前要带一个&符号。&称为取地址符,也就是获取变量在内存中的地址。然后我们在控制台输入的值就会存入到,对应的内存地址中, 而直接使用变量就等同于将内存地址对应的值取出来了。
putchar和getchar
putchar: 向屏幕输出一个字符
getchar: 从键盘获得一个字符
边栏推荐
- How to pass custom object via intent in kotlin
- ArcGIS application (XXII) ArcMap loading lidar Las format data
- OpenFeign 服务接口调用
- manjaro安装微信
- C#,数值计算(Numerical Recipes in C#),线性代数方程的求解,Gauss-Jordan消去法,源代码
- Ehrlich sieve + Euler sieve + interval sieve
- DM8 tablespace backup and recovery
- snipaste 方便的截图软件,可以复制在屏幕上
- @Role of requestparam annotation
- Turn: excellent managers focus not on mistakes, but on advantages
猜你喜欢
DM8 tablespace backup and recovery
Azure ad domain service (II) configure azure file share disk sharing for machines in the domain service
Educational Codeforces Round 119 (Rated for Div. 2)
Educational Codeforces Round 115 (Rated for Div. 2)
埃氏筛+欧拉筛+区间筛
Comparison between sentinel and hystrix
What if the wireless network connection of the laptop is unavailable
Codeforces Round #793 (Div. 2)(A-D)
Codeforces Round #803 (Div. 2)(A-D)
How to play dapr without kubernetes?
随机推荐
How does Xiaobai buy a suitable notebook
Newh3c - network address translation (NAT)
2022 examination questions for safety managers of metal and nonmetal mines (underground mines) and examination papers for safety managers of metal and nonmetal mines (underground mines)
没有Kubernetes怎么玩Dapr?
swatch
OpenFeign 服务接口调用
Take you to master the formatter of visual studio code
Internal learning
@Role of requestparam annotation
Codeforces Round #750 (Div. 2)(A,B,C,D,F1)
string. Format without decimal places will generate unexpected rounding - C #
力扣今日题-1200. 最小绝对差
Azure ad domain service (II) configure azure file share disk sharing for machines in the domain service
Getting started with microservices: gateway gateway
Show server status on Web page (on or off) - PHP
awk从入门到入土(5)简单条件匹配
微服務入門:Gateway網關
Private collection project practice sharing [Yugong series] February 2022 U3D full stack class 007 - production and setting skybox resources
转:优秀的管理者,关注的不是错误,而是优势
FRP intranet penetration, reverse proxy