例子1,有人用温度计测出华氏温度为64F,现在转化为摄氏度;
#include<stdio.h>
int main()
{
float f,c;
f=64.0;
c=(5.0/9)*(f-32);
printf("f=%f\nc=%f\n",f,c);
return 0;
}
数据的表现及其运算
- 常量;
- 整型常量;如1000,-123;等;
- 实行常量;
- 十进制小数制;有小数和小数点组成,123.123,0.12,1.2,-45.23;
- 指数形式;12.34e3;注意:e之前必须有数字,e后面数字必须为整数不能为小数;
- 字符常量;
- 普通字符,用单撇号括起来的一个字符;‘a‘,‘A’,‘!‘;
- 转义字符;
- 字符串常量;如“asd”,“123”;
- 符号常量;如#define PI 3.1415;
二,变量
变量必须先定义,后使用;
三,数据类型
- 常见数据的储存空间和值的范围
类型 | 字节数 | 取值范围(有效数字) |
int | 4 | -2 147 483 648~2 147 483 648 |
short | 2 | -32 768~32 768 |
long | 4 | -2 147 483 648~2 147 483 648 |
unsigned int | 4 | 0~4 294 967 295 |
long long | 8 | -9 223 372 036 854 775 808~9 223 372 036 854 775 808 |
unsigned char | 1 | 0~255 |
float | 4 | 6 |
double | 8 | 15 |
long double | 8/16 | 15/19 |
#include<stdio.h>
int main()
{
int a;
short b;
long c;
long long d;
float e;
double f;
long double g;
printf("int有%d个字节\n",sizeof(a));
printf("short有%d个字节\n",sizeof(b));
printf("long有%d个字节\n",sizeof(c));
printf("long long有%d个字节\n",sizeof(d));
printf("float有%d个字节\n",sizeof(e));
printf("double有%d个字节\n",sizeof(f));
printf("long double有%d个字节\n",sizeof(g));
getchar();
getchar();
return 0;
}
四.字符型数据
1.字符和字符代码
字符和字符代码并不是任意写一个字符,程序都能识别的。圆周率Π在程序中不能识别,只能使用系统的字符中的字符。
大多数字符都有自己的ASCII字符集;各种字符集(包括ASCII字符集)的基本集包括了127个字符集。
其中包括:
- 字母:大写英文字母A~Z,小写a~z。
- 数字:0~9.
- 专门符号:29个,包括 !“ # ' ( ) + , - . / : ; < = > ? [ \ ] ^ _ ` { | } ~
- 空格符:空格,水平制表符(tab),垂直制表符,换行,换页(form feed)。
- 不能显示的字符:空字符(null)(以‘\0’表示),警告(以‘\a’表示),退格(以‘\b’表示),回车(以‘\r’表示)等。
2.字符变量
#include<stdio.h>
int main()
{
char c='!';
printf("%d\n%c\n",c,c);
getchar();
getchar();
return 0;
}
用”%d“格式输出十进制数33;用”%c“格式输出字母‘!’。
#include<stdio.h>
int main()
{
char a;
printf("char有%d字节",sizeof(a));
getchar();
getchar();
return 0;
}
五.怎么确定常量的类型
1.整型常量
不带小数点的数值是整型常量,但是应注意其范围。
2.浮点数常量
凡以小数形式或指数形式出现的实数都是浮点数常量在内存中以指数形式存储。
eg ;10是整型常量,10.0是浮点型常量。
注意:在程序中实型常量都作为双精度浮点数常量。
eg:float a=3.14159;
float 分4个字节,而3.14159是双精度;这时会出现“警告”;转换会损失精度;
可以在常量后面的末尾加专用字符,强制指定常量的类型。
float a=3.14159f //把此3.14159按单精度浮点常量处理,编译时不出现“警告”;
long double a=1.23L //把1.23作为long double 型处理;
*******类型与变量的区别*******
变量是占用空间存储的单元,是具体存在的实体;
- 而类型是变量的共性,是抽象的,不占用内存空间,不能储存数据;
int a=2; //正确,可以对整型变量赋值;
int=2; //错误,不能对变量赋值;
六.运算符和表达式
c语言提供了以下运算符
- 算数运算符 (+ - * / % ++ - -)
- 关系运算符 (> < == >= <= != )
- 逻辑运算符 (!&&||)
- 位运算符 (<< >> ~ | ^ &)
- 赋值运算符 (=及其扩展赋值运算符)
- 条件运算符 (?:)
- 逗号运算符 (,)
- 指针运算符 (*和&)
- 求字节数运算符 (sizeof)
- 强制类型转换运算符((类型))
- 成员运算符 (. ->)
- 下标运算符 ([ ])
其他 (如函数调用运算符())
七.自加(++),自减(- -)运算符
自增(++),自减(- -)运算符的作用是使变量的值加1或减1;
- - - i,++i,(在使用之前,使i的值加1(或减1));
- i++,i - -,(使用之后,加1(减1));
#include<stdio.h>
int main()
{
int i=3;
printf("%d",i++);
printf("%d",i--);
printf("%d",--i);
printf("%d",++i);
getchar();
getchar();
return 0;
}
八.最简单的运算符
运算符 | 含义 | 举例 | 结果 |
+ | 正号运算符(单目运算符) | +a | a的值 |
- | 负号运算符(单目运算符) | -a | a的算术负值 |
* | 乘法运算符 | a*b | a与b的乘积 |
/ | 除法运算符 | a/b | a除以b的商 |
% | 求余运算符 | a%b | a除以b的余数 |
+ | 加法运算符 | a+b | a与b的和 |
- | 减法运算符 | a-b | a和b的差 |
九.强制类型转换运算符
- (double)a (将a转换为double型)
- (float)(x+y)(将x+y的值转换为float型)
- (int)(5%3) (将5除以3的值转换为float型)
-
#include<stdio.h> int main() { int a=1; int b=2; double c=2.12; printf("%f\n",(float)a+b); printf("%f\n",(double)1/b); printf("%d\n",(int)a); getchar(); getchar(); return 0; }
十.C语句
- 控制语句。控制语句用于完成一定的控制功能。
-
if()...else... 条件语句 for().. 循环语句 while()... 循环语句 do..while() 循环语句 contine 结束本次循环语句 break 中止执行switch或循环语句 switch 多分支选择语句 return 从函数返回语句 goto 转向语句 - 函数调用语句
printf(" This is a C statement");
其中printf("This is a C starement");是一个函数调用,加一个分号成为一个语句。
4.表达式语句:由一个表达式加一个分号构成。
a=3 (这是语句,不是表达式)
a=3; (是语句)
5.空语句
;
只有一个分号,它也是一条语句;
6.复合语句
{
float pi=3.14159,r=2.5,area;
area=pi*r*r;
printf("area=%f",area);
}
注意:复合语句中最后一个语句末尾的分号不能省略。
十一.最基本的语句——赋值语句
1.给出三角型的三边长,求三角形面积;
的算数平方根;
#include<stdio.h>
#include<math.h>
int main()
{
double a,b,c,s,area;
a=3.67;
b=5.43;
c=6.21;
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("a=%f\tb=%f\tc=%f\t",a,b,c);
printf("area=%f\n",area);
getchar();
getchar();
return 0;
}
1.赋值运算符
赋值符号“=”就是赋值运算符,它的作用是把一个数据赋给一个变量。
如a=5;
2.复合的赋值运算符
在赋值运算符“=”前加上其他的运算符,可以构成符合运算符。
例如,可以有以下的复合赋值运算符
a+=3 等价于a=a+3
x*=y+8 等价于x=x*(y+8)
x%=3 等价于x=x%3
十二.数据的输入与输出
1.求ax^2+bx+c=0方程的根。a,b,c由键盘输入,设b^2-4ac>0.
#include<stdio.h>
#include<math.h>
int main()
{
double a,b,c,disc,x1,x2,p,q;
scanf_s("%lf%lf%lf",&a,&b,&c);
disc=b*b-4*a*c;
p=-b/(2.0*a);
q=sqrt(disc)/(2.0*a);
x1=p+q;
x2=p-q;
printf("x1=%7.2f\nx2=%7.2f\n",x1,x2);
getchar();
getchar();
return 0;
}
在讨论程序的输入输出时首先注意以下几点。
1.所谓输出输入是以计算机主机为主体而言的。
2.C语言本身不提供shu输出语句,输入输出操作是由C标准函数库的函数实现的。
3.要在程序文件的开头前用预处理指令#include把有关头文件放在本程序中。
如#include<stdio.h>
重点:
1.用%f输出实数,只能得到6位小数;
2.指定数据宽度和小数位数,用%m.nf;
eg:%7.2f输出实数,数据占7列,包括两位小数;
3.设输出的实数位数为a,a小于m,从输出的实数右端往左数,左边空a-m个空格
4.%-m.nf作用和%m,nf差不多,加负号是为了左对齐;
#include<stdio.h>
int main()
{
double a=1000/3.0;
printf("%f\n",a);
printf("%7.2f\n",a);
printf("%-7.2f\n",a);
getchar();
getchar();
return 0;
}
格式字符 | 说明 |
---|---|
d,i | 以带符号的十进制形式输出整数(正数输出不带符号) |
o | 以八进制无符号形式输出整数(不输出前导符o) |
x,X
| 以十六进制无符号形式输出整数(不输出前导符ox),用x输出十六进制时的a~f时小写,用X输出则以大写字母输出 |
u | 以无符号十进制输出整数 |
c | 以字符形式输出,只能输出一个字符 |
s | 输出字符串 |
f | 以小数形式输出单,双精度数,隐含输出6位小数 |
e,E | 以指数形式输出实数 |
g,G | 选用%f或%c格式中输出宽度较短的一种形式,不输出无意义的0.用 G时,若以指数输出时,则指数以大写输出 |
说明:
- printf函数输出时,务必注意输出对象的类型应与上述格式匹配,否则会出现错误。
- 除了X,E,G外,其他格式字符必须用小写字符,如%d不能写成%D。
- 可以在输出函数中使用转义字符。
-
scnaf函数中用到的格式字符 格式字符 说明 d,i 输入有符号的十进制数 u 输入无符号的十进制数 o 输入无符号的八进制数 x,X 输入无符号的十六进制数 c 输入一个字符 s 输入一个字符串(输入字符串时中间不能有空格) f 输入实数以小数形式或指数形式输入 e,E,g,G 与f作用相同,相互可以互换 一.使用scanf函数注意的问题
-
scanf函数中的格式控制后面应当是变量地址,而不是变量名;
-
scanf("%d%d%d",a,b,c); 错误的;
1.scanf("%d%d%d,",&a,&b,&c);正确的;
而且输入的时候应该是a b c;而不是a,b,c。
2,如果输入是:scanf("%d,%d,%d",&a,&b,&c);
就应该输入按照a,b,c。
二.字符输入输出函数
1.用putchar()函数输出一个字符
一般形式是putchar(c);putchar(c)的作用是输出字符变量c的值,显然输出一个字符;
也可用putchar输出转义字符:
- putchar('\101');(输出字符A)
- putchar('\');(输出单撇号字符)
putchar('\015');(把八进制转换成十进制,然后通过ASCII代码输出字符)
2.getchar函数输入一个字符
一般形式是getchar();getchar函数只能输入一个字符,要输入多个就要多个getchar();
课后第八题,用getchar函数输入两个字符给c1,c2.然后分别给putchar函数和printf函数输出这两个字符。思考问题;
- 变量c1,c2应定义为字符型还是整型,还是两者皆可?
- 要求输出c1,c2值的ASCII码,应如何处理,用putchar函数还是printf函数?
- 整形变量和字符变量是否在任何情况下都可以互换?如:
- char c1,c2;
int c1,c2;
是否无条件等价?
1.
#include<stdio.h>
int main()
{
char c1,c2;
printf("用getchar输入c1,c2的值\n");
c1=getchar();
c2=getchar();
printf("\n用putchar输出的值\n");
putchar(c1);
putchar(c2);
printf("\n用printf输出的值\n");
printf("%d%d",c1,c2);
getchar();
getchar();
return 0;
}
#include<stdio.h>
int main()
{
int c1,c2;
printf("用getchar输入c1,c2的值\n");
scanf("%d%d",&c1,&c2);
printf("\n用字符输出\n");
putchar(c1);
putchar(c2);
printf("\n输出ASCII码值\n");
printf("%d%d",c1,c2);
getchar();
getchar();
return 0;
}
下面回答问题:
- c1和c2可以定义为字符和整型的,二者都可以;
- 用printf函数输出,使用%d格式符,即:printf("%d%d\n",c1,c2);结果为97,98;
- 字符变量占一个字节,整数类型至少占两个字节,整数变量必须在字符的范围内(ASCII码为0~127之间的字符)是可以相互转换的,否则,不能转换。