复习要点.docx
《复习要点.docx》由会员分享,可在线阅读,更多相关《复习要点.docx(13页珍藏版)》请在冰豆网上搜索。
![复习要点.docx](https://file1.bdocx.com/fileroot1/2022-11/15/766c1b0d-e6cd-49de-b5a8-2d21fe4fc0d0/766c1b0d-e6cd-49de-b5a8-2d21fe4fc0d01.gif)
复习要点
1、变量的生存期
变量存储类别:
auto自动的、extern外部的、static静态的、register寄存器的
静态变量和外部变量的初始化是在编译阶段完成的
自动变量的赋值是函数调用时进行的
函数中未指定存储类别的局部变量,其隐含的存储类别为:
自动(auto)
函数的形式参数隐含的存储类型说明是:
自动(auto)
在C语言中,形参的缺省存储类是:
自动(auto)
外部变量不能用extern关键字显式定义,但可以用extern声明。
2、变量与常量
变量名(标识符):
只能字符、数字和下划线,不能以数字开头。
在C程序中所用的变量必须先定义后使用
在C语言中,大小写是有区别的,例如stu和STU是两个不同的变量
C语言中,一个int型数据在内存中占2个字节、float占4个字节、double占8个字节、char占1个字节;整型数据的取值范围:
-32768~32767、无符号整型的取值范围:
0~65535
在C语言中,char型数据在内存中的存储形式是ASCII码,整型和字符型是可以通用的。
数值常量的表示:
整型(八进制0开头、十六进制0x开头)、实型(指数用e(E)表示,e(E)的前后必须有数字,且e(E)的数字必须为整数)、字符型用单引号括起来、字符串用双引号括起来
变量的赋值:
不同类型的数据可以相互赋值。
整型数据可以赋给整型变量、也可以赋给实型变量、也可以赋给字符型变量;实型数据可以赋给实型变量,也可以赋给整型变量。
指针变量:
指针变量中存放的是某个变量的地址,而不是该变量的值、指针变量的类型与它所指向的变量类型一致、指针变量的命名规则与标识符相同。
3、赋值表达式(=)
运算方向:
自右向左
常见赋值:
a=5、a=(b=4)+(c=2)、i*=i+1、a=b=c、k=2*4,k*4
x=x+y;y=x-y;x=x-y;
t=x;x=y;y=t;
指针赋值:
int*p=&x;
错误的赋值:
a:
=b+1、int18.5%3、a=b+c=1、a=a+7=c+b
intp=&x、int*p=x
int*p,x;*p=*x;
强制类型转换:
(int)i、(float)f、(int)a+b、(int)(a+b)
4、关系、逻辑表达式
逻辑运算符:
&&、||、!
比较运算符:
>、>=、==、<、<=
常见的表达:
x<=y
x≥y≥z(x>=y&&y>=z)
闰年(year%4==0&&year%100!
=0)||year%400==0(1990、1992、1996、2000)、
a=5,b=6,w=1,x=2,y=3,z=4:
(a=w>x)&&(b=y>z)
x=2,y=3,z=4;x+y&&z
x=3,y=4,z=5:
'y'&&'y'、x||y+z&&y-z、!
(xz||1)
a=1,b=2,c=3,d=4,m=2,n=2:
(m=a>b)&&(n=c>d)
大写字母(x>=’A’&&x<=’Z’)
小写字母(x>=’a’&&x<=’z’)
c=(c>='A'||c<='Z')?
c+32:
c
5、自增自减运算符
四种情况:
++i、--i、i++、i--
常见的题目:
intx=2;z=-x+++1;
intj=3;printf("%d,",++j);printf("%d",j++);
y=10;x=y++;
a=3;printf("%d,",++a);printf("%d",a++);
6、逗号运算符
运算过程:
从左向右,依次计算每个表达式,最后一个表达式的值就是逗号表达式的值。
常见表达形式:
y=((x=3*y,x+1),x-1)
(x=6,x+1,y=6,x+y)
7、数组的使用
数组的定义:
一维数组inta[5]、二维数组doublea[1][4]等。
数组的长度只能是整型常量、不能是变量。
#definesize10;
charstr1[size],str2[size+2];
数组的下标是从0开始的。
数组的初始化:
正确的:
inta[][3]={1,2,3,4,5,6};
inta[2][3]={{1,2,3},{4,5,6}};
inta[][3]={{1,2,3},{4,5,6}};
chars[8]={"Beijing"};
char*s={"Beijing"};
char*s;s="Beijing";
chars[10];strcpy(s,"abcdefg");
错误的:
inta[2][]={{1,0,1},{5,2,3}};
inta[2][4]={{1,2,3},{4,5},{6}};
inta[][3]={{1,0,1}{},{1,1}};
chars[8];s={"Beijing"};
chars[8];s="Beijing";
char*s;s={"Beijing"};
8、函数的使用
在C语言程序中,函数的定义不可以嵌套,但函数的调用可以嵌套
若使用一维数组名作函数实参,在被调用函数中,不需要考虑形参数组的大小
C语言程序中,当调用函数时,实参和虚参各占一个独立的存储单元
参数传递:
值传递(单向)、地址传递(双向)
关于return语句,可以在同一个函数中出现多次
9、其他
C语言中,if与else的配对关系是:
每个else总是与它上面的最近的if配对。
continue语句来终止本次循环
break语句来终止整个循环
在位运算中,操作数每右移一位,结果相当于操作数乘以2
无符号数的输出:
intk=-1;printf("%d,%u\n",k,k);
预处理命令行都必须以#号开始.
分析以下代码:
main()
{
intx=10,y=10,i;
for(i=0;x>8;y=++i)
printf("%d%d",x--,y);
}
1010,91
main()
{inta=100,x=10,y=20,okl=5,ok2=0;
if(xif(y!
=10)
if(!
okl)a=1;
else
if(ok2)a=10;
a=-1;
printf("%d\n",a)
}
-1
x=3;
do
{y=x--;
if(!
y){printf("x");continue;}
printf("#");
}while(1<=x&&x<=2);
#include
main()
{inti,b,k=0;
for(i=1;i<=5;i++)
{b=i%2;
while(b-->=0)k++;
}
printf("%d,%d",k,b);
}
#include
main()
{floata=2,b,x=2;
if(a<10.0)b=1.0/x;
elseif((a<0.5)&&(a!
=2.0))b=1.0/(a十2.0);
elseif(a<10.0)b=1.0/x;
elseb=10.0;
printf("%f\n",b);
}
0.500000
main()
{inta=5,b=0,c=0;
if(a=b+c)printf("***\n");
e1seprintf("$$$\n");}
$$$
x=-1;
do
{x=x*x;}
while(!
x);
1
intx=0,s=0;
while(!
x!
=0)s+=++x;
printf("%d",s);
1
for(y=1;y<10;)y=((x=3*y,x+1),x-1);
printf("x=%d,y=%d",x,y);
15,14
知道下列循环的作用
#include
voidmain()
{inti,j,a[2][3];
for(i=0;i<2;i++)for(j=0;j<3;j++)a[i][j]=i*3+j+1;
for(i=0;i<3;i++)for(j=0;j<2;j++)a[j][i]=j*3+i+1;
for(i=0;i<6;i++)a[i/3][i%3]=i+1;
for(i=1;i<=6;i++)a[i][i]=i;
for(i=0;i<2;i++){for(j=0;j<3;j++)
printf("%5d",a[i][j]);}
}
//以下几个程序主要是填空和改错
程序功能:
求一元二次方程的根。
#include
#include
main()
{
doublex1,x2,imagpart;
floata,b,c,disc,realpart;
scanf("%f%f%f",&a,&b,&c);
printf("theequation");
if(a<=1e-6)
printf("isnotquadratic\n");
else
disc=b*b-4*a*c;
if(fabs(disc)==1e-6)
printf("hastwoequalroots:
%-8.4f\n",-b/(2*a));
elseif(fabs(disc)>1e-6)
{
x1=(-b+sqrt(disc))/(2*a);
x2=(-b-sqrt(disc))/(2*a);
printf("hasdistinctrealroots:
%8.4fand%.4f\n",x1,x2);
}
else
{
realpart=-b/(2*a);
imagpart=sqrt(-disc)/(2*a);
printf("hascomplexroots:
\n");
printf("%8.4f=%.4fi\n",realpart,imagpart);
printf("%8.4f-%.4fi\n",realpart,imagpart);
}
}
判断其是否是素数,若为素数输出1,否则输出0.
main()
{inti,x,y=1;
scanf("%d",&x);
for(i=2;i<=x-1;i++)
if(x%2==0){y=0;break;}
printf("%d\n",y);
}
求1!
+3!
+5!
+……+n!
的和
#include
main()
{
longintf,s;
inti,j,n;
s=0;
scanf("%d",&n);
for(i=1;i<=n;i=i+2)
{
f=1;
for(j=1;j<=i;j++)
f=f*j;
s=s+f;
}
printf("n=%d,s=%ld\n",n,s);
}
程序:
输入数组,最大的与最后一个元素交换,最小的与第一个元素交换,输出数组。
#include
input(number)
intnumber[10];
{
inti;
for(i=0;i<9;i++)
scanf("%d,",&number[i]);
scanf("%d",&number[9]);
}
max_min