#define PRICE 20
#include
void main()
{
int a,b,sum;
a=10;
b=20;
sum=(a+b)*PRICE;
printf("%d\n",sum);
}
* 只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或者下划线。
* 标识符分为用户标识符和系统关键字(系统占用了,用户不能用)
用户标识符 | T/F |
---|---|
max | T |
3dmax | F |
jonh.c | F |
if | F |
IF | T |
printf | F |
以下属于合法的用户标识符的是 C
A 3d B _/n C Printf D struct
数据类型 | 含义 | eg: |
---|---|---|
int | 基本整型 | 256,655 |
float | 单精度型(6位有效数字) | 3.14,2.66 |
double float | 双精度型 | / |
char | 字符型 | ‘a’,“China” |
float a;
int b,c,d;
int a,b;
a=12;
b=25;
int a=12,b=24;
定义如下语句:int a,b,c=5;则以下说法正确的是 C
A.a,b,c的值都为5
B.a,b木有值,c的值为5
C.a,b有值,c的值为5
D.以上都不对
定义如下语句:int a=b=c=5;则以下说法正确的是 D
A.a,b,c的值都为5
B.a,b木有值,c的值为5
C.a,b有值,c的值为5
D.以上都不对
int a,b,c;
a=5;
b=5;
c=5;
int a=5,b=5,c=5;
#include
void main()
{
int a=10000000000,b;
b=a+1;
printf("%d\n",b);
}
10000000001????
#include D
void main()
{
float a=3.14,b;
b=a+1;
printf("%f\n",b);
}
A.4.14 B.4.140 C.3.14 D.4.140000
2,8,16–>10
10–>2,8,16
2<–>8<–>16 借助10进制
计算机里的数制:2,8,10,16进制
C语言中的数制:8,10,16进制--------C语言里没有2进制!!!
计算机里面的数制:
1. 2进制:0,1—Binary notation,(10101)2/B
2. 8进制:0,1,…,7---Octal notation,(125)8/O/Q
3. 10进制:0,…,9---Decimal notation, (521)10/D
4.16进制:0,…,9,A,…,F---Hexadecimal notation, (5FA)16/H
数制转换:
1. 2,8,16-->10:对应位上的数乘以2、8、16的幂次方求和
2. 10-->2,8,16
1).10进制整数-->2,8,16:除2,8,16取余,方向:由下往上
2).10进制小数-->2,8,16:乘2,8,16取整,方向:由上往下
3. 2 <--> 8 <--> 16
…………………………
210=1024 215=32768 216=65536
数据 | 含义 |
---|---|
1e3 | 1*10的3次方 |
1.8e-3 | 1.8*10的负3次方 |
-.1e3 | F |
e5 | 0.1*10的3次方 |
3e1.5 | F |
以下哪一项是C语言中正确的表示形式(C D)
A. 0128 B. 1e1.2 C. 0101(表示八进制101) D. 1F3(16进制数)
字符常量 | T/F |
---|---|
‘2’,‘h’,’*’ | T |
‘aa’ | F |
‘\n’ | T |
‘\’ | T |
‘\x56’ | T |
‘\123’ | T |
转义字符 | 含义 |
---|---|
\n | 换行 |
\ | \ |
\t | 横向跳格 |
\ddd | ddd表示1-3位的八进制数-----单个字符 特殊:0开头,表示八进制数 |
\xhh | hh表示1-2位的16进制数------单个字符 |
#include
void main()
{
int a,b,sum;
a=12;
b=24;
sum=a+b;
printf("%d\\\n",sum);
}
36\
press any key to continue
只能存放单个字符常量
char ch;
char ch1,ch2,ch3;
初始化
char a,b;
a='s';
b='T';
char a='D',b='m';
定义语句如下
char s1,s2,s3;
关于初始化正确的是 D
A s1='//' B s2='abcd' C s3='\t\\' D 都不对
注意斜杠的方向!!!
\\ \
回顾: a---97
A---65
a=A+32
程序:
#include
void main()
{
char ch1,ch2;
ch1='a';
ch2=ch1-32;
printf("%c\n",ch2);
}
思考:
#include
void main()
{
char ch1,ch2;
ch1=97;
ch2=ch1-32;
printf("%c\n",ch2);
}
能否得到大写字母 A 呢????
思考:
#include
void main()
{
char ch1,ch2;
ch1='M';
ch2=ch1+'a'-'A'; /*等价于ch2=ch1+32*/
printf("%c\n",ch2);
}
"How are you?"
"China"
'a'----字符常量----单个字符----1个字节
"a"----字符串常量----2个字节
char s1;
s1='a'; -----------OK
s1="a"; -----------不OK
"China"-----------6个字符 '\0'
"China\n"---------7个字符(转义字符)
"China\\32"-------(9)个字符
"China\0hh"-------(6)个字符
"Ch\0ABC\0DE"-----(3)个字符
注意:如果字符串出现多个'\0',则遇到第一个就结束了!!!!!
'H'-'t'+3.14*5
注意优先级别
"="在C语言中称为赋值运算符
int a=3;
"=="在C语言中才是恒等!!!!
a=12;/*表示将12赋值给变量a*/
如果出现混合运算,则要以"="左边的类型为准,强制性将右边的的类型转换为左边的类型
int a;
char ch1,cha2;
float b;
ch1='H';
ch2='d';
b=3.14;
a=ch1+ch2-b;
int a;
float b,c;
b=3.56;
c=2.13;
a=b+c;
printf("%d\n",a);/*conversion from 'float' to'int', possible loss of data*/
A.5 B.6 C.5.69 D.5.690000
如何进行强制类型转换:
(要转换的类型说明符)变量名;
(要转换的类型说明符)表达式;
表达式:有运算符连接起来的式子
float a=3.798651,b=6.856342;
int c;
c=(int)a; ------------3
c=(int)b; ------------6
c=(int)(a+b);-----------10
c=(int)a+(int)b;--------9
+ - * / % ++ --
31/2==15 1/2==0 2/7==0 9/2==4
31%2==1 5%3==2
3.14%2----不OK
(int)3.14%2----OK
注意:
1/2==0 除法运算
1.0/2==0.5 混合运算
自增、自减运算符:++ –
i++;-----OK
--j;-----OK
5++;-----不OK
(i+j)++;-------不OK
int i,j;
i=3;
j=i++;
printf("%d,%d\n",i,j);
4,3
++i(--i):先给i加1,再使用i的值
int i,j;
i=3;
j=++i;
printf("%d,%d\n",i,j);
4,4
int i,j,m;
i=3;
j=5;
m=i+++++j;
printf("%d,%d,%d\n",i,j,m);
4,6,9
int i,j,m;
i=3;
j=5;
m=i+++j;/*m=(i++)+j m=i+(++j)*/
printf("%d,%d,%d\n",i,j,m);
自增自减运算结合方向:比较奇葩—自右至左!前一个会影响下一个的值!!
int i=5;
printf("%d,%d,%d,%d\n",++i,i++,i--,--i);
5 3 4 4
A.6,6,7,5 B.5,3,4,4 C.6,6,4,5 D.5,3,6,5
在赋值运算符"="之前加上其他运算符,构成了复合的运算符
复合表达式:复合运算符连接起来的式子
复合语句:复合表达式;
a+=5; 等价于:a=a+5;
i-=8; 等价于:i=i-8;
j/=t-6; 等价于:j=j/t-6 ; ----不OK
j=j/(t-6);----OK
a=5
int a,b;
a=(b=5);
printf("%d,%d\n",a,b);
5 5
int a,b,c;
a=(b=5)=(c=5);----不OK
int a=12,则a+=a-=a*a的值是()
解析:a+=a-=a*a
第一步:a+=A
第二步:a=a+A
第三步:a=a+(a-=a*a)
第四步:a=a+(a=a-a*a)
=12+(12-12*12)
=12-132
=-120------不OK
第四步:a=a+(a=a-a*a)
=a+(a=12-12*12)-----a是变量 a=-132
=-132-132
=-264------OK
A.-120 B.-264 C.0 D.138
表达式1,表达式2,…,表达式n
结合方向:自左至右
整个逗号表达式的值是最右边那个表达式的值
3+5,6-9,3+10,6-2 -----------4
逗号表达式的优先级别—贼低!!!最低!!!
思考—逗号表达式中间有没有变量!!!
int i,j,n,m;
i=5;
j=6;
m=(3+5,i++,j++,n=++i,i+j);
8 ,5 ,6, , 7 , 14
printf("%d\n",m);
一次输出一个字符
语法:putchar(变量名或者单个字符常量);
注意:如果是字符常量,一定要用单引号引起来
一次只能输出一个字符!!!
#include
void main()
{
char ch1,ch2;
ch1='H';
ch2='m';
putchar(ch1);
putchar('\n');
putchar(ch2);
putchar('\n');
}
一次输入单个字符
语法: 变量名= getchar();
注意:getchar后面的括号里面啥东东都不要写!!!
一次只能输入一个字符!!!
#include
void main()
{
char ch1,ch2;
ch1=getchar();
ch2=getchar();
putchar(ch1);
putchar('\n');
putchar(ch2);
putchar('\n');
}
符号 | 含义 |
---|---|
%d | 以十进制整型输出整数 |
%o | 以八进制形式输出整数 |
%x | 以十六进制形式输出整数 |
%c | 以字符形式输出单个字符 |
%f | 以小数形式输出单、双精度小数,隐含输出6位小数 |
%s | 输出字符串 |
格式控制都是小写字母
格式控制与后面的输出列表变量一一对应
printf("%md",a)
printf("%m.nf",a);
m是指输出的结果占几列宽度,n是指小数点后保留几位有效数字
m是正整数的话,输出结果差几列左补几个空格;
m是负整数的话,输出结果差几列右补几个空格;
printf("%2.5f",a);
m
#include
void main()
{
int a=5,b=6;
float c=3.14;
printf("%d,%d,%f\n",a,b,c);
}
printf("%m.ns",“China”);
printf("%mc",a)
C语言中木有二进制
数制转换
int a=8,b=010;
printf("%o,%d\n",a,b);
int a=12,b=20,c=30,d=50;
printf("%d%d%d%d\n",a,b,c,d);
A.12203050 B.12 20 30 50 C.12,20,30,50 D.12_20_30_50
printf输出的内容:除了转义字符和格式控制之外的任何东东–普通字符
原样输出!!!!
#include
void main()
{
int a,b,c;
scanf("%d,%d,%d",&a,&b,&c);
printf("%d %d %d\n",a,b,c);
}
char ch1[5];
scanf("%s",ch1);
printf("%s\n",ch1);
已知矩形的两条边,编写程序求矩形的面积。s=a*b
#include
void main()
{
float a,b;
double s;
a=3.121345;
b=5.217676;
s=a*b;
printf("%f\n",s);
}
#include
void main()
{
float a,b;
double s;
scanf("%f,%f",&a,&b);
s=a*b;
printf("%f\n",s);
}
#include
void main()
{
float a,b;
double s;
printf("请输入矩形的两条边:\n");
scanf("%f,%f",&a,&b);
s=a*b;
printf("%f\n",s);
}
#include
void main()
{
float a,b;
double s;
printf("请输入矩形的两条边:\n");
scanf("%f,%f",&a,&b);
s=a*b;
printf("%5.2f\n",s);
}
//已知任意三角形的三条边,编写程序求三角形的面积。
/*
海伦公式:
a,b,c
s=1.0/2*(a+b+c)
area=根号下(s*(s-a)*(s-b)*(s-c))
area=sqrt(s*(s-a)*(s-b)*(s-c))
sqrt--- 求平方根函数
*/
#include
#include
void main()
{
float a,b,c;
double s,area;
printf("请输入三角形的三条边:\n");
scanf("%f,%f,%f",&a,&b,&c);
s=1.0/2*(a+b+c);
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("%5.2f\n",area);
}
//已知一元二次方程的三个系数,求一元二次方程根!!!
/*
a*x*x+b*x+c=0
x1=(-b+根号下(b的平方-4ac))/2a
x2=(-b-根号下(b的平方-4ac))/2a
*/
#include
#include
void main()
{
float a,b,c;
double x1,x2;
printf("请一元二次方程的三个系数:\n");
scanf("%f,%f,%f",&a,&b,&c);
x1=(-b+sqrt(b*b-4*a*c))/(2*a);
x2=(-b-sqrt(b*b-4*a*c))/(2*a);
printf("%5.2f,%5.2f\n",x1,x2);
}
/*
d=b*b-4*a*c
d>0 两个不等实根
d=0 两个相等实根
d<0 一对共轭虚根 x1=a+bi x2=a-bi
*/
逆序数教程
//已知任意一个三位正整数,求它的反相数。
//思考:四位?五位?。。。n位?
/*
345--->543 875--->578
分析:
第一步:
875=8*100+7*10+5
578=5*100+7*10+8
第二步:/ 取整 % 求余
8=875/100
7=(875-8*100)/10
5=875%10
第三步:反相数=5*100+7*10+8
*/
#include
void main()
{
int m,b,s,g,n;/*m原三位正整数,b百位数,s十位数,g个位数,n是m的反相数*/
printf("请输入任意一个三位正整数:\n");
scanf("%d",&m);
b=m/100;/*分解百位数*/
s=(m-b*100)/10;/*分解十位数*/
g=m%10;/*分解个位数*/
n=g*100+s*10+b;
printf("%d的反相数是%d\n",m,n);
}
//求解10位数以内
#include
int main()
{
int i=0,m=0,n=0,x=0;
scanf("%d",&x);
do{
m=x%10;//得到个位数
n=x/10;//去掉个位后剩下的数
x=n;
i=i*10+m;
}while(x!=0);
printf("%d",i);
return 0;
}
//输入球的半径r,计算并输出球的体积。
//v=4*PI*r*r*r/3
#include
#define PI 3.14 /*定义PI,它的值一生一世都是3.14*/
void main()
{
float r;
double v;
printf("请输入球体的半径:\n");
scanf("%f",&r);
v=4*PI*r*r*r/3;
printf("%5.2f\n",v);
}