首页
动态
归档
Github
留言
工具箱
更多
邻居
壁纸
音乐
Search
1
欢迎访问我的日志空间
8,244 阅读
2
C语言读写程序文件-学习三十二
742 阅读
3
WEB音乐播放器源码
712 阅读
4
Typecho - Joe主题魔改版(持续更新)
660 阅读
5
Typecho-1.1/17.10.30-定制版源码
639 阅读
学习笔记
源码库
BUG
第九艺术
登录
Search
标签搜索
学习笔记
C语言
typecho
Java
扫雷
源码
PHP
插件
网站源码
音乐播放器
模板
git
github
bug
XG.孤梦
累计撰写
50
篇文章
累计收到
44
条评论
首页
栏目
学习笔记
源码库
BUG
第九艺术
页面
动态
归档
Github
留言
工具箱
邻居
壁纸
音乐
搜索到
32
篇与
的结果
2022-01-28
C语言表达式与if语句-学习七
1、关系运算符和关系表达式关系运算符运算符描述实例 (A=10, B=20)\==检查两个操作数的值是否相等,如果相等则条件为真。(A \== B) 为假。\!=检查两个操作数的值是否相等,如果不相等则条件为真。(A \!= B) 为真。\>检查左操作数的值是否大于右操作数的值,如果是则条件为真。(A \> B) 为假。\<检查左操作数的值是否小于右操作数的值,如果是则条件为真。(A \< B) 为真。\>=检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。(A \>= B) 为假。\<=检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真。(A \<= B) 为真。表达式:算术表达式关系表达式逻辑表达式赋值表达式字符表达式算术运算符、关系运算符、赋值运算符优先级比较关系表达式左结合性定义:用关系运算符将两个表达式连接起来的式子。一般形式: 表达式 关系运算符 表达式关系表达式的值是一个逻辑值,即“真”或“假”。1代表真,0代表假;一个非零的数值认作为“真”。逻辑运算符和逻辑表达式3种逻辑运算符:&& 逻辑与|| 逻辑或! 逻辑非说明:&&和||是双元/目运算符,它要求有两个运算! 是一元/单目运算符,它要求有一个运算量。例如:(a>b) || (x>y)!(a>b)优先级比较逻辑表达式一般形式: 表达式 逻辑运算符 表达式运算规则:只有在必须执行下一个表达式才能求解时,才求解该表达式(即并不是所有的表达式都被求解)。对于逻辑与运算,如果第一个操作数被判定为“假”,系统不再判定或求解第二操作数。对于逻辑或运算,如果第一个操作数被判定为“真”,系统不再判定或求解第二操作数。例子计算下列的结果#include <stdio.h> void main() { char c = 'k'; int i = 1, j = 2, k = 3; float x = 3e+5, y = 0.85; printf("%d,%d\n", !x * !y, !!!x); printf("%d,%d\n", x ||j && j - 3, i < j && x < y); printf("%d,%d\n",i==5 && c &&(j=8),x+y||i+j+k); }判断用year表示的某一年是否是闰年。#include <stdio.h> void main() { int year; scanf_s("%d", &year); printf("%d\n", year % 4 == 0 && year % 100 != 0 || year % 400 == 0); } if语句if语句的作用:用来判定所给定的条件是否满足,并根据判定的结果(真或假)决定执行给出的两种操作之一。if语句有三种基本形式。ifif elseif else if前二种形式的if语句一般都用于两个分支的情况。有多个分支选择时,可采用if-else-if语句。例子输入两个数a,b,判断并输出其中较大的数。if#include <stdio.h> void main() { int a, b, max; scanf_s("%d %d", &a, &b); max = a; if (max < b) max = b; printf("max=%d\n", max); } if else#include <stdio.h> void main() { int a, b, max; scanf_s("%d %d", &a, &b); if (a > b) max = a; else max = b; printf("max=%d\n", max); } 例5:已知百分制成绩mark,显示对应的五级制成绩。90—100优秀80—89良好70—79中等60—69及格<60不及格if else if#include <stdio.h> void main() { double score; printf("请输入分数:\n"); scanf_s("%lf", &score); if (score < 60) printf("(不及格)\n"); else if (score < 70) printf("(及格)\n"); else if (score < 80) printf("(中等)\n"); else if (score < 90) printf("(良好)\n"); else if(score<=100) printf("(优秀)\n"); else printf("(输入错误\n"); }if语句中应注意的问题该表达式通常是逻辑表达式或关系表达式, if(x>b)但也可以是其它表达式,如赋值表达式等,甚至也可以是—个变量。例如:if(a=5)if(b) 语句;只要表达式的值为非0,即为“真”。if(a=b) //把 b 的值赋给 a,如果非0则输出该值 printf ("%d",a); else printf("a=0"); 在if语句中,条件判断表达式必须用括号括起来,在语句之后必须加分号。if (a>b) max=a;在if语句的三种形式中,所有的语句应为单个语句,如果要想在满足条件时执行一组(多个)语句,则必须把这一组语句用{}括起来组成一个复合语句。但要注意的是在}之后不能再加分号。例如:if (a>b) {a++; b++;} else {a--; b--;}例子输入两个实数,按代数值由小到大的顺序输出这两个数。解题思路:只需要做一次比较,然后进行一次交换即可用if语句实现条件判断关键是怎样实现两个变量值的互换#include <stdio.h> void main() { float a, b,c; scanf_s("%f %f", &a, &b); if (a < b) { c = a; a = b; b = c; printf("%.2f %.2f\n", a, b); } else printf("%.2f %.2f\n", a, b); }输入3个数a,b,c,要求按由小到大的顺序输出。解题思路:if a>b, a和b对换 (a是a、b中的小者)if a>c,a和c对换 (a是三者中最小者)if b>c,b和c对换 (b是三者中次小者)#include <stdio.h> void main() { float a, b, c, d; scanf_s("%f %f %f", &a, &b, &c); if (a > b) { d = a; a = b; b = d; } if (a > c) { d = a; a = c; c = d; } if ( b> c) { d = b; b = c; c = d; } printf("%.2f %.2f %.2f\n", a, b, c); } if语句的嵌套在if语句中又包含一个或多个if语句,称为if语句的嵌套。else总是与它前面最近没有配对的if配对例子比较两个数的大小关系#include <stdio.h> void main() { float a, b; scanf_s("%f %f", &a, &b); if (a != b) if (a > b) printf("%.2f > %.2f\n", a, b); else printf("%.2f < %.2f\n", a, b); else printf("%.2f = %.2f\n", a, b); }条件运算符条件运算符: ? :格式: 表达式1 ? 表达式2 : 表达式3 (如果表达式1为“真”,返回表达式2,否则返回表达式3)。使用场合:若在if语句中,当被判别的表达式的值为“真”或“假”时,都执行一个赋值语句且向同一个变量赋值时,可以用一个条件运算符来处理。例如:if(a>b) max=a; else max=b; // 相当于 max = (a>b)? a : b;例子输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到结果。#include <stdio.h> void main() { char x,y; scanf_s("%c",&x); y = (x >= 'A'&& x <= 'Z') ? (x + 32) : x; printf("%c\n", y); }
2022年01月28日
289 阅读
0 评论
0 点赞
2022-01-27
C语言程序的输入与顺序程序设计-学习六
格式输入scanf函数一般形式: scanf(格式控制,地址列表)格式控制同printf函数的格式控制一致地址列表可以是变量旳地址,或字符串的首地址{card-default width="100%" label="提示"]在vs新版本编译器中直接使用scanf函数会提示警告,无法操作运行,并会推荐使用 scanf_s() ,可以在文件头部前面添加一行 #pragma warning(disable:4996) ,继续使用scanf函数。 它们的区别:scanf()不会检查输入边界,可能造成数据溢出,scanf_s()会进行边界检查。例如:name[5]scanf("%s",name),如果输入abcdefgh,则会使得fgh溢出进入其他地方,造成程序错误。scanf_s("%s",name),则会只会接收前5个输入,其后的无效,避免了程序的漏洞。{/card-default}scanf函数中的格式声明与printf函数中的格式声明相似,以%开始,以一个格式字符结束,中间可以插入附加的字符例如: scanf("a=%f,b=%d,c=%s",&a,&b,&c)“&”是一个取地址运算符,&a是一个表达式,其功能是求变量的地址。这个地址是编译系统在内存中给a变量分配的存储空间地址。变量的值和变量的地址是两个不同的概念。变量的地址是C编译系统分配的变量的地址和变量值的关系如下: 如:a=123;则a为变量名,123是变量的值,起始地址:1001。例子#include <stdio.h> void main(){ int a, b, c; scanf_s("%d%d%d", &a, &b, &c); printf("%d,%d,%d\n", a, b, c); }使用scanf函数时应注意的问题1.scanf函数中没有精度控制。错误: scanf(%7.2f",&a);正确: scanf(%f",&a);2.scanf涵数中要求给出变量地址,而不是变量名错误: scanf("%d",a);正确: scanf("%d",&a);3.若格式控制串中没有非格式字符作输入数据之间的间隔,则可用空格,TAB或回车作间隔,如果有非格式字符,则在输入时,在对应位置上要输入这些字符。4.在输入字符数据时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符。5.如果%后有一个“ * ”附加说明符,表示跳过它指定的列数。例子:输入格式符用逗号分隔,在控制台输入时就也要输入逗号进行分隔#include <stdio.h> void main(){ int a, b, c; scanf_s("%d,%d,%d", &a, &b, &c); printf("%d,%d,%d\n", a, b, c); }输入字符数据,空格会认为是有效字符,这里就不能使用scanf_s实现了,因为scanf_s检查输入边界的机制,导致程序报错,无法继续执行#include <stdio.h> #pragma warning(disable:4996) void main(){ char a, b, c; scanf("%c%c%c", &a,&b,&c); printf("%c,%c,%c\n",a,b,c); }%后有一个“ * ”附加说明符#include <stdio.h> void main(){ int a, b; scanf_s("%2d %*3d %d", &a, &b); printf("%d,%d\n", a, b); }顺序结构设计例一输入三角形的三边长,求三角形面积。设输入的三边长a、b、c能构成三角形。sqrt函数计算开方使用海伦公式计算三角形的面积 p = (a+b+c)/2 #include <stdio.h> #include <math.h> void main(){ float a, b, c, p, area; scanf_s("%f %f %f", &a, &b, &c); p = (a + b + c) / 2; area = sqrt(p *(p - a)*(p - b)*(p - c)); printf("a=%.2f b=%.2f c=%.2f p=%.2f area=%.2f\n",a,b,c,p,area); }例二从键盘输入一个大写字母,要求改用小写字母输出。字母在内存中以ASCII码存放大写字母的ASCII码比小写字母的少32#include <stdio.h> void main() { char c1, c2; c1 = getchar(); c2 = c1 + 32; printf("%c\n",c2); }例三求ax²tbx+c=0方程的根。a,b,c由键盘输入,设b²-4ac>0。求根公式:可以将求根公式分为两部分 x1 = p + q; x2 = p - q #include <stdio.h> #include <math.h> void main() { float a,b,c,x1,x2,p,q; scanf_s("%f %f %f", &a, &b, &c); p = -b / (2 * a); q = sqrt(b * b - 4 * (a*c)) / (2*a); x1 = p + q; x2 = p - q; printf("x1=%.2f,x2=%.2f\n",x1,x2); }
2022年01月27日
238 阅读
0 评论
0 点赞
2022-01-26
C语言常用语句与格式输出-学习五
C语句的分类1. 表达式语句一般形式: 表达式;例如:c = a + b; a++;2. 函数调用语句一般形式:函数名(实际参数表);例如:printf("Hello Word!");3. 复合语句形式:把多个语句用{}括起来组成一个语句。例如:{ c = a + b; printf("Hello Word!"); }4. 控制语句条件判断语句:if else、 switch循环执行语句:do while 、 while 、 for转向语句:break 、 goto 、 continue 、return5. 空语句只有分号“ ; ”组成的语句,什么也不执行,在程序中可以做空循环体。赋值语句一般形式:变量 = 表达式例如:int a; a = 1;1.在变量说明中给变量赋初值和赋值语句的区别:#include <stdio.h> void main(){ // 变量赋初值 int a=1, b=1, c=1; // 但是不能写成 // int a=b=c=1; }等价于 ↓↓#include <stdio.h> void main(){ int a, b, c; // 赋初语句 a=1,b=1, c=1; // 赋值语句可以嵌套,所以可以写成 a=b=c=1; }2.赋值表达式与赋值语句的区别:赋值表达式后加一个分号 “ ; ” 就是赋值语句。赋值表达式可以包括在其他表达式之中;但是赋值语句不能。例如:if(x=y)>0) z = x; 这是正确的,if(x=y;)>0) z = x; 这是错误的。数据的输入输出C语言本身不提供输入输出语句。输入和输出操作是由C标准函数库的函数来实现的。例如: printf(); scanf(); getchar(); putchar();字符数据的输入输出getchar函数(字符输入函数)一般形式:getchar()从键盘上输入一个字符,当输入多个字符只取第一个字符putchar函数(字符输出函数)一般形式: putchar(字符变量)在终端上输出一个字符例子从键盘输入ABC三个字符,然后把它们输出到屏幕。#include <stdio.h> void main() { char x, y, z; x = getchar(); y = getchar(); z = getchar(); putchar(x); putchar(y); putchar(z); putchar('\n'); // 方法二 // putchar(getchar()); // putchar(getchar()); // putchar(getchar()); }格式输出printf函数按照指定格式输出,向终端输出若干个任意类型的数据。一般格式: printf(格式控制, 输出列表)例如: printf("%d , %f",a,b)1.格式控制:用引号括起来的字符事,它包括两种信息:格式说明,由“%”和格式字符组成,如%d,%f普通字符,即需要原样输出的字符。一般都县说明性文字或逗号、空格等。2.输出列表:需要输出的一些数据,可以是变量,也可以是表达式例如: printf("a=%d, f=%f, %d",a,f,a+b)格式字符整数输出格式:d格式符:输出十进制整数。格式符说明\%d输出整型数据,以十进制带符号形式输出整数,按整型数据的实际长度输出。\%mdm为指定的输出字段的宽度。如果数据位数小于m,在数据左端补空格,大于m,按实际位数输出。\%ld输出长整型数据。long 是 int 得修饰,只是比 int 多了四个字节的存储空间。\%u输出无符号类型数据。以十进制无符号形式输出整数。\%o输出八进制的数据。以8进制无符号形式输出整数(不输出前导符0)。\%x输出十六进制的数据。以16进制无符号形式输出整数(不输前导符0x)。例子#include <stdio.h> void main() { int a, b; long c; a = 123; b = 123456; c = 123456789; printf("a=%d, b= %d\n" ,a, b); printf("a=%4d, b=%4d\n", a, b); printf("c=%ld\n", c); printf("c=%10ld\n", c); }字符输出格式:格式符说明\%c输出char型数据,输出一个字符。\%s输出字符串型数据,输出一个字符串,按字符串的实际长度输出。\%msm为指定的输出字段的宽度。如果数据位数小于m,在数据左端补空格,大于m,按实际长度输出。\%-ms与\%ms类似,如果数据位数小于m,在数据右端补空格。\%m.ns输出占m列,只取字符串左端n个字符,输出在右侧,左端补空格。\%-m.ns输出在左侧,右端补空格,如果n>m,则m自动取n的值,输出n个字符。例子#include <stdio.h> void main(){ printf("%3s,%-8s,%s\n","ABCDEFG", "ABCDEFG", "ABCDEFG"); printf("%7.3s,%-5.3s,%.4s\n","ABCDEFG", "ABCDEFG", "ABCDEFG"); } 实数输出格式格式符说明\%f输出float/double型数据 系统自动指定宽度,整数部分全部输出,小数部分输出6位。\%m.nf输出占m列,n为小数位。输出在右端,左端补空格。\%-m.nf输出在左侧,右端补空格,如果m小于(整数位+n)则正常输出小数部分n位。例子#include <stdio.h> void main(){ float x; x = 123.456; printf("%f,%10f,%10.2f,%-10.2f,%.2f。\n",x,x,x,x,x); }指数输出格式格式符说明\%e以指数形式输出实数,系统自动指定宽度。共13位,小数位6位,指数5位。\%m.ne输出占m列,n为小数位,输出在右侧左补空格。\%-m.ne输出在左侧,右端补空格,如果m小于(整数位+n)则正常输出小数部分n位。\%me没有指定小数位,则小数位6位。例子#include <stdio.h> void main(){ float x; x = 123.456; printf("%e,%10e,%10.2e,%-10.2e,%.2e。\n",x,x,x,x,x); }补充g格式符:用来输出实数,输出格式为f格式或e格格式(使用较少)。系统根据数据占宽度m大小,自动选择占宽度较小的某种格式输出,g格式符不输出小数点后无意义的零。例子#include <stdio.h> void main() { float x; x = 123.456; printf("%f,%g\n",x, x); }
2022年01月26日
286 阅读
0 评论
0 点赞
2022-01-25
C语言运算符与表达式-学习四
变量赋值变量赋初值类型说明符 变量1=值1, 变量2=值2, ....;int a = 1, //指定整型变量a,初值为1 float b = 1.28 //指定实型变量b,初值为1.28也可以使被定义的变量的一部分赋初值。如只对c赋初值: int a,b,c=5;如果对几个变量赋予初值,应写成:int a=1,b=2,c=3;各类数值型数据间的混合运算整数、实数、字符型数据可以混合运算,如:10 + 'a'+ 1.5 - 8765.1234 * 'b'若参与运算量的类型不同,应先转换成同一类型,然后进行运算。转换按数据长度增加的方向进行,以保证精度不降低。所有的浮点运算都是以双精度进行的。char型和short型参与运算时,必须先转换成int型。在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边量的类型将转换为左边量的类型。例子设已定义i为int型变量,f为float型变量,d为double型变量, e为long型。看下面的表达式:10 + 'a' + i * f - d / e在计算机执行时从左至右扫描,运算次序为:第一步:先 10 + 'a'的运算,先将 'a' 转换成整型97,运算结果为107;第二步:由于 “ * ” 比 “ + ” 优先,先进行 i * f 的运算。先将i与f都转成double型,运算结果为double型。第三步:整数107与 i * f 的积相加。先将整数107转换成双精度数(小数点后加若干个0,即107.000...00),结果为double型。第四步:将变量e化成double型,d/e结果为double型。第五步:求整个表达式 10 + 'a' + i * f - d / e 的结果运算符算术运算符运算符描述实例 (A=10, B=20)+把两个操作数相加A + B 将得到 30-从第一个操作数中减去第二个操作数A - B 将得到 -10*把两个操作数相乘A * B 将得到 200/分子除以分母B / A 将得到 2\%取模运算符,整除后的余数B \% A 将得到 0++自增运算符,整数值增加 1A++ 将得到 11--自减运算符,整数值减少 1A-- 将得到 9+ 、- 、* 、/ 运算的两个数中有一个数为实数,则结果是double型,因为所有实数都按double型进行计算。两个整数相除的结果为整数。如:5 / 3 的结果值为1,舍去小数部分。两个数相除有一个有小数,则结果为小数,如:5.0 / 2= 2.5。除数或被除数中有一个为负值,舍入方向不固定。例如,-5 / 3, 有的系统中得到的结果为-1,在有的系统中则得到结果为-2。Turbo C采取“向零取整”的方法,即5 / 3=1, -5 / 3= -1,取整后向零靠拢。\% 模运算符,或称求余运算符,\% 两侧均应为整型数据。如:7 \% 4 的值为3。对于求余(\%)运算,结果与第一个数的符号相同。如:-5 \% 3 = -2; 5 \% 3 = 2; -5 \% -3 = -2算数表达式算术表达式和运算符的优先级与结合性在表达式求值时,先按照运算符的优先级别高低次序执行。算术运算符的结合方向为“自左向右”。强制类型转换运算符含义:用来将一个算术表达式的值转换成所需类型。定义格式: (类型名) [表达式],如: (int) (a + b)例子取整#include <stdio.h> void main() { int a; float b = 10.65; a = (int) b; printf("%d\n",a); } 不使用强制类型转换如(a = b),在执行不同类型变量进行运算时,两边都是数值型或字符型时,系统会进行自动转换。无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量的值进行的临时性转换而不改变数据说明时对该变量定义的类型。自增自减运算符定义格式++a , --a 含义( a = a+1 , a = a-1)++a , --a (在使用a之前,先使a的值加/减1)a++ , a-- (在使用a之后,使a的值加/减1)自增1,自减1运算符均为单目运算,都具有右结合性。作为单独的语句,a++;与++a;并没什么区别,但是b= a++;和b= ++a就有区别了#include <stdio.h> void main() { int a = 1, b = 1, x, y; // 在使用a之后,使a的值加/减1 x = a++; // x = a; // a = a+1; // 在使用b之前,先使b的值加/减1 y = ++b; // b = b+1; // y= b; printf("%d,%d\n", x, y); } 自增运算符(++)和自减运算符(--)只能用于变量,不能用于常量和表达式。如: 5++、(a+b)++ 都不合法。++ 和 --的结合方向是“自右向左”。如: -i++ = -(i++) i=3; printf("%d",-i++); 结果为:-3赋值运算符使用:如:a =3类型转换条件:如果赋值运算符两侧的类型不一致, 但都是数值型或字符型时,在赋值时要进行类型转换。如: int a; a=6.3; 则 a 的值为6;将实型数据赋给整型变量时,舍弃实数的小数部分。将整型数据赋给单、双精度变量时,数值不变,但以实数形式存储到变量中。将一个double型数据赋给一个float型变量时,截取其前面的7位有效数字,存放到float变量的存储单元(32位)中。字符型数据赋给整型变量时,由于字符只占1个字节,而整型变量为2字节,因此将字符数据(8位) 放到整型变量低8位中将一个int、short、long型数据赋给一个char型变量时,只将其低8位原封不动地送到char型变量(即截断)例子字符型数据赋给整型变量#include <stdio.h> void main() { int i = 289; char c = 'a'; c = i; printf("%d\n", c); }转换过程:复合的赋值运算符在赋值符“=”之前加上其他运算符。一般形式为: 变量 双目运算符 = 表达式它等效于:变量 = 变量 运算符 表达式例如:a += 3 等价于 a = a+3x *= y+8 等价于 x = x * (y+8)x %= 3 等价于 x = x % 3赋值表达式定义:由赋值运算符将一个变量和一个表达式连接起来的式子 。一般形式: <变量> <赋值运算符> <表达式>例如:a = 1 赋值表达式值为1,a=1a = b = c =1 赋值表达式值为1,a=b=c=1a=1+(b=2) 赋值表达式值为3,a=3,b=2例子求表达式 a+ = a- = a*a的值,a的初始值为12。解:根据赋值运算符的“右结合性”第一步:先求表达式 a -= a*a;a- = a*a等价于a = a - a*a,结果为a= -132第二步:再求表达式a += -132;a += -132 等价于 a = a - 132,注意上一步a的值已经变成了-132所以就是 -132-132,结果为a = -264逗号运算符C语言提供一种特殊的运算符逗号运算符。用它将两个表达式连接起来。一般形式:表达式1,表达式2扩展:表达式1,用表达式2,表达式3,...,表达式n求解过程:根据左结合性,分别求n个表达式的值,并以表达式n的值作为整个逗号表达式的值。例如:a = 3 * 4,a * 5 表达式的值为60(a=3*4,a*5),a+6 表达式的值为18练习{card-default width="100%" label="练习"]1、设int a; float f; double d; 则表达式 10 + a + i*f 的值的数据类型是___。2、若有代数式|3a+2b|,则正确的C语言表达式为___。(求绝对值的函数 fabs() )3、设x=2,y=3,则计算表达式 y+=x++, x+y 的值为___。4、下面程序的运行结果是___。#include <stdio.h> void main() { int a = 2; a %= 3; a += a * 2; printf("%d\n", a); }5、下面程序输出的结果是___。#include <stdio.h> void main( ){ int x,y,m,n; x=2;y=2 m=x++*5; n=++y*5; printf("%d,%d,%d,%d",x,y,m,n); }{collapse} {collapse-item label="答案"]1、double 2、 fabs(3*a + 2*b) 3、8 4、6 5、3,3,10,15 [/collapse-item]{/collapse}{/card-default}
2022年01月25日
346 阅读
0 评论
0 点赞
2022-01-24
C语言常量与变量-学习三
C语言的数据类型基本数据类型最主要的特点是:其值不可在分解为其它类型。构造类型的值可以分解成为若干个“成员”或“元素”。每个成员都是一个基本数据类型或又是一个构造类型。常量与变量定义:在程序执行过程中,其值不发生改变的量称为常量,其值可改变的量称为变量。在程序中,常量是可以不经说明而直接引用的,而变量则必须先定义后使用。常量在程序执行过程中,其值不发生改变的量直接常量(字面常量):可以直接从字面值看出来。整型常量:1、5、0、-1实型常量:4.5、-1.28字符型常量:‘a’、‘b’、‘c’符号常量:用标识符代表一个常量,称之为符号常量。一般格式:#define 标识符 常量例如:#define PI 3.1415926符号常量在使用前必须先定义习惯上,约定符号常量名用大写,变量名用小写例子求圆的周长和面积。#include <stdio.h> #define PI 3.1415926 void main() { int r; float circum,area; r = 5; circum = 2 * r * PI; area = r * r * PI; printf("circum=%f,area=%f\n",circum,area); } 变量代表内存中具有特定属性的一个的存储单元,用来存放数据,也就是该变量的值。程序编译链接执行时由系统给每个变量名分配内存地址。变量必须先定义后使用int a; //定义 a=10; //使用标识符在C语言中用来对变量、符号常量、函数、数组等数据对象命名的有效符号序列统称为标识符。命名规则:只能由字母、数字、下划线三种字符组成且第一个字符必须为字母或下划线,不能为数字!不能使用关键字来命名标识符例子:area PI _da adw_1_0注意:编译系统将大写字母和小写字母认为是两个不同的字符。建议变量名的长度最好不要超过8个字符。在选择变量名和其它标识符时,应注意做到“见名知意”,即选择有含意的英文单词(或其缩写)作标识符。要求对所有用到的变量作强制定义,也就是“先定义,后使用”。根据定义的数据类型,编译系统为变量分配存储空间。整型数据整型常量二进制整数:逢二进一(0,1)。如1010(换算十进制:0*2º + 1*2¹ + 0*2² + 1*2³ = 10 )八进制整数:以“0”开头(0-7)。如:0123 (换算十进制:3*8º + 2*8¹ + 1*8² = 83 )十进制整数。如:123、60、0、-123十六进制整数:以“0x”开头(0-9,A-F可小写(a-f))。如:0x123 (换算十进制:3*16º + 2*16¹ + 1*16²= 291 )整型变量数据在内存中是以二进制形式存放的。如果定义了一个整型变量: int i; //定义为整型变量 i = 10; //给 i 赋值整数10十进制10的二进制为1010;八进制为012;十六进制为0xA在内存中,数值是以补码的形式表示的。正数的补码、反码和其原码形式相同。求负数的补码方法:将该负数的绝对值的二进制形式(原码),按位取反(反码)再加1(补码)例子-10的绝对值的原码:反码反码再加1,得到补码在存放整数的存储单元中,最左面的一位是符号位,该位为0表示该整数位正数,该位为1表示为负数。整型变量的分类类型类型说明符数的范围字节数基本型int (16位)-32768~32767 即-2^15 ~ (2^15-1)2无符号基本型unsigned[int] (16位)0~65535 即0 ~ (2^16-1)2基本型int (32位)-2147483648 ~ 2147483647 即-2^31 ~ (2^31-1)4无符号基本型unsigned[int] (32位)0~4294967295 即0 ~ (2^32-1)4短整型short[int] (16位)-32768~32767 即-2^15 ~ (2^15-1)2无符号短整型unsigned short [int] (16位)0~65535 即0 ~ (2^16-1)2长整型long [int] (32位)-2147483648~2147483647 即-2^31 ~ (2^31-1)4无符号长整型unsigned long [int] (32位)0~4294967295 即0 ~ (2^32-1)4整型变量的定义类型说明符 变量名标识符,变量名标识符,...;int a,b,c; // a、b、c为整型变量 long x,y; // x、y为长整型变量 unsigned q; // q为无符号整型变量➢注意:允许在一个类型说明符后,定义多个相同类型的变量。各变量名之间用逗号间隔。 类型说明符与变量名之间至少用一个空格间隔。最后一个变量名之后必须以“;”分号结尾。变量定义必须放在变量使用之前。 一般放在函数体的开头部分。整型变量的溢出#include <stdio.h> void main() { int a,b; a = 32767; b = a + 1; printf("%d\n",b); }a: 01111111 11111111 + 1 = 10000000 00000000 即-32768 ,正确答案应该是 32768,这就是溢出注意现在的VS编译器默认int为32位,溢出效果看下图浮点型数据实型常量实数(real number) ,又称浮点数(floating-point number) 。十进制小数形式由数字和小数点组成(必须有小数点) 如:.123、123. 、23.01 、0.0指数形式数字 + e (E) + 整数,字母e (或E)之前必须有数字,且e后面的指数必须为整数。如: 123e3=123*10³、 0.122e0内存中存放形式一个浮点型数据一 般在内存中占4个字节。在内存中按照指数形式存储。不少C语言编译系统用24位表示小数部分(包括符号),8位表示指数部分。计算机中,二进制表示小数部分,2的幂次表示指数部分。小数部分占的位数越多,数的有效数字越多,精度越高。指数部分占的位数越多,则能表示的数值范围越大。浮点型变量的分类类型类型说明符数的范围字节有效位单精度float1.2E-38 ~ 3.4E+3847位有效位双精度double2.3E-308 ~ 1.7E+308815位有效位长双精度型long double3.4E-4932 ~ 1.1E+49321619位有效位浮点型变量的定义float a,b,c; // a、b、c为单精度实数 double x,y; // x、y为双精度实数 long double q; // q为长双精度实数浮点型数据的舍入误差由于实型变量是用有限的存储空间存储的,因此能提供的有效数字总是有限的,在有效位以外的数字将被舍去,因此会产生舍入误差。例子#include <stdio.h> void main() { float a,b; a = 123456.789e5; b = a + 20; printf("a = %f\n,b = %f\n",a,b); } 理论值:a=12345678900b=12345678920实际值:原因:一个单精度实型变量只能保证的有效数字是7位,7位后面的数字是无意义的,并不准确地表示该数。7位是指整数部分 和 小数部分一共7位。注意:在C程序中,应当避免将一个很大的数和一个很小的数直接相加或相减,否则就会“丢失”小的数。字符型数据字符型常量用单引号包含的一个字符只能包含一个字符 如:‘a’、‘#’、‘6’、‘’‘a’和‘A’ 是不同的字符常量。字符常量只能用单引号括起来,不能用双引号或其它括号。字符常量只能是单个字符,不能是字符串。字符‘1’和整数1是不同的概念:字符‘1’只是代表一个形状为‘1’的符号,在需要时按原样输出,在内存中以ASCII码形式存储占1个字节。整数1是以整数存储方式(二进制补码方式)存储的,占2个字节。转义字符以“\”开头的特殊字符字符形式含义\n换行,将当前位置移到下一行开头\t水平制表(跳到下一个tab位置,8位为一个tab位置)\b退格,将当前位置移到前一列\r回车,将当前位置移到本行开头\f换页,将当前位置移到下页开头\\反斜杠字符\‘单撇号字符\“双撇号字符\ddd1到3位8进制数所代表的字符\xhh1到2位16进制数所代表的字符[alt type="warning"]除了“\r”外,其余转义字符的跳格会取代原来屏幕上该位置显示的字符[/alt]字符型变量字符型变量用来存放字符常量,但只能存放一个字符。字符变量的定义形式如下: char c1,c2;c1和c2为字符型变量,各可以放一个字符。对c1,c2赋值: c1 = 'a'; c2 = 'b';字符数据在内存中的存储形式及其使用方法将一个字符放到一个字符变量中,在内存单元中,是将该字符的相应的ASCII代码放到存储单元中。如'a'的ASCI代码为97,'b'为98,内存变量c1、 c2的值如下图效果:字符数据以ASC1I码存储,与整数的存储形式类似,这样使字符数据和整型数据之间可以通用。因此,一个字符数据既可以以字符形式输出,也可以以整数形式输出,例子向字符变量赋以整数。#include <stdio.h> void main() { char c1, c2; c1 = 'a'; c2 = 'b'; printf("c1 = %c c2 = %c\n", c1, c2); printf("c1 = %d c2 = %d\n", c1, c2); }字符串常量定义:字符串常量是一对双引号括起来的字符序列。如: “how are you?” 、 “CH I NA” 、“%#8ad72”C语言规定:在每一个字符串的结尾加一个“字符串结束标志“\0”,以便系统据此判断字符串是否结束。在内存中:字符串存储为:字符串+‘\0’;书写时:不必加‘\0’, 系统会自动加上‘\0’练习{card-default width="100%" label="练习"]1、___是合法的用户自定义标识符。(A)b-b(B)float(C)3sd(D)_isw2、以下所列的C语言常量中,错误的是___。(A)0xFF(B)1.2e0.5(C)“asd”(D)‘a’3、下面四个选项中,均是不合法的浮点数的选项是___。(A)160. 0.12 e3(B)123 2e4.2 .e5(C)-.18 123e4 0.0(D)-.e3 .234 1e34、若有说明语句: char c='\729';则变量c___。(A)包含1个字符(B)包含2个字符(C)包含3个字符(D)说明不合法{collapse} {collapse-item label="答案"]1、D 2、B 3、B 4、D[/collapse-item]{/collapse}{/card-default}
2022年01月24日
290 阅读
0 评论
0 点赞
1
...
5
6
7