错题:
- 静态变量分为静态局部变量和静态全局变量。静态全局变量在整个程序中起作用(即作用域为当前整个程序);静态局部变量在程序的某个函数中起作用,只有在调用该函数时,静态局部变量才起作用,但它们的生存周期都贯穿于整个程序。
- 在C语言中,函数的定义是平等的,它们之间只能相互调用。在每个函数中定义的变量,其作用域只能在相应的函数内部,因此不同的函数使用相同的变量名字,在内存中占用不同的存储单元;函数定义的形参也是局部变量;在复合语句内定义的变量只能在对应的复合语句中有效。
- 形参是虚拟的,不占用存储单元。形参只有在被调用时才会分配内存,调用之前不分配内存,当然不占用存储单元。
- 函数的形参只能是变量,而实参可以是常量、变量或表达式。
- C语言规定,函数返回值的类型是由在定义函数时所指定的函数类型决定的。若调用的是一个非void函数,且此函数中没有return语句,则该函数返回一个不确定的值。
- 只有在使用时才为该类型变量分配内存的存储类型说明是auto、register。auto和register只能定义为局部变量,而局部变量(静态局部变量除外)都是在运行中使用时才分配内存空间。
- continue语句可以用在Switch和循环语句中,其作用是结束本次循环(continue后面的语句不执行),开始下次循环。而break语句可以用在Switch和循环语句中,其功能是跳出本层的Switch结构或结束本层循环体。
- C语言变量的存储类型有static、auto、extern、register。
- 变量被赋初值可以分为编译前和运行时两个阶段。
- 嵌套循环:输出为2,0
当b=0(即i为偶数)时,k才自加1,1~5范围内只有2,4两个偶数,因此k=2,最后一次循环i=5,则b=1,b–后b的值为0。
int i,b,k=0;
for(i=1;i<=5;i++){
b=i%2;
while(b--==0) k++;
}
printf("%d,%d",k,b);
- do…while,switch嵌套:输出为1。
int i=5;
do{
switch(i%2){
case 0:i--;break;
case 1:i--;continue;
}
i--;i--;
printf("%d",i);
}while(i>0);
- continue语句:输出为3,1,-1,3,1,-1
j+i为奇数时,执行if结构的语句序列,否则执行if语句的后续语句。i=0,j=4,i+j是4,为偶数,执行–i,j–后i=-1,j=2,执行内循环,j+i是1,执行j–后j=1,输出j。执行continue语句,结束本次循环。
for(i=0;i<3;i++,i++){
for(j=4;j>=0;j–){
if((j+i)%2){
j–;
printf("%d, “,j);
continue;
}
–i;
j–;
printf(”%d, ",j);
}
} - 小心自减自加运算:输出为1,-2
int y=2,a=1;
while(y--!=-1)
do{
a*=y;
a++;
}while(y--);
printf("%d,%d\n",a,y);
- 静态变量static:在函数fun中,c为静态局部变量,赋初值是在编译阶段完成的,只能赋值一次,每次调用该函数都会继承上一次的值。
fun(0)=a+b+c=5+1+4=10; fun(1)=a+b+c=5+1+5=11; fun(2)=a+b+c=5+1+6=12;
#include<stdio.h>
int fun(int);
int main(){
int i,a=5;
for(i=0;i<3;i++)
printf("%d %d\n",i,fun(a));
printf("\n");
return 0;
}
int fun(int a){
int b=0;
static int c=3;
b++;
c++;
return (a+b+c);
}
- 公式类精度满足:
for(n=1;t>=eps;n++)
- 防止空格连续输出:
#include<stdio.h>
int main(){
char cx,front='\0';
while(cx=getchar()!='\n'){
if(cx!=' ')putchar(cx);
if(cx==' ')
if(front!=cx)
putchar(cx)
front=cx;
}
return 0;
}
- 阶乘递归:
long fun(int n){
if(n>1) return (n*fun(n-1));
return 1;
}