# include stdio.h
创新互联自2013年创立以来,公司自成立以来始终致力于为企业提供官网建设、移动互联网业务开发(微信小程序开发、手机网站建设、重庆APP开发公司等),并且包含互联网基础服务(域名、主机服务、企业邮箱、网络营销等)应用服务;以先进完善的建站体系及不断开拓创新的精神理念,帮助企业客户实现互联网业务,严格把控项目进度与质量监控加上过硬的技术实力获得客户的一致赞誉。
# include math.h
int main(void)
{
//把三个系数保存到计算机中
int a = 1; //=不表示相等,表示赋值
int b = 5;
int c = 6;
double delta; //delt存放的是 b*b - 4*a*c
double x1; //存放一元二次方程的其中一个解
double x2; //存放一元二次方程的其中一个解
delta = b*b - 4*a*c;
if (delta 0)
{
x1 = (-b + sqrt(delta)) / (2*a);
x2 = (-b - sqrt(delta)) / (2*a);
printf("该一元二次方程有两个解, x1 = %f, x2 = %f\n", x1, x2);
}
else if (delta == 0)
{
x1 = (-b) / (2*a);
x2 = x1; //右边赋给左边
printf("该一元二次方程有一个唯一解, x1 = x2 = %f\n", x1);
}
else
{
printf("无解\n");
}
return 0;
}
在使用一个函数之前必须先对他进行声明: //void B();声明B函数的存在。void A(){B();//非法,程序执行到此时并不知道B函数的存在。
修改后的C语言程序:
#include stdio.h
void triangle(int g)
{
int n=1, m; /* 修改处1 */
for(n;n=g; n++)
{
for(m=1;m=2*n-1;m++) /* 修改处2 */
putchar('*');
putchar('\n');
}
}
void rectangle(int g)
{
int n=1, m; /* 修改处3 */
for(n;n=g;n++)
{
for(m=1;m=3;m++) /* 修改处4 */
putchar('*');
putchar('\n');
}
}
int main()
{
int i,k;
printf("请输入行数(大于3):");
scanf("%d",i);
printf("请选择图形:1---三角形 \t2---矩形\t3---小旗 :");
scanf("%d",k);
if(k==1)
{
triangle(i);
}
if(k==2)
{
rectangle(i);
}
if(k==3)
{
triangle(i);
rectangle(i);
}
return 0;
}
从main函数开始,逐句分析:
main函数的第一句定义了三个int(整型)变量a, i, k,a的值被初始化为4;
第二句是一个循环,该循环将i的值定义为0,当i的值小于2时,循环条件通过,每循环一次,i的值就会加1,由此可知,该循环会执行两次。
在循环体中,包含了语句k=f(a++);,由后置递增符的性质可知,后置递增符会先使用变量的值,使用完后,对变量进行递增。由此可知,传入函数的值即为a的值。
进入函数,f(int a)中的a的值即为传入的值,为4。逐句分析f()函数:
第一句,定义整型变量b的值为0,该变量的生存期和作用域为这个函数。
第二句,定义静态整型变量c的值为9,该变量的作用域为这个函数,但是生存期为整个文件。
第三句,由于使用的是后置递增符,先使用值,后递增,所以c的值被赋给a后才会增加,后接b++。本语句结束后,c和b的值都增加了1,c的值变成了10,b的值变成了1。
第四句,return以变量a的值作为返回值。
回到main函数的第二句,k的值被修改成为了f()函数的返回值,即在f()函数中a的值。要注意的是,以传值方式传入函数的值并不会改变值本身,而是相当于在函数中复制了一个副本使用。
该语句执行完毕后,main函数中的变量a的值增加了1。
此时是for循环的第一次循环结束,进入第二次循环,同样的传入a的值,由于之前递增过一次,所以现在它的值是5。重新进入f()函数。
在f()函数中,由于其他的变量的生存期是函数,在上一次f()函数结束时,变量b被销毁了,所以重新进入变量后,变量b的值又变回了0。但由于c的生存期没有结束,c的值不变,所以重新进入函数后,c的值仍然是10。c的值赋给a,所以在执行语句return a;时变量a的值是10,即函数的返回值是10。返回后该值赋给k,使得k的值变成了10。循环结束,跳出循环。
第三句,执行printf()函数,屏幕上输出的值是10。
第四句,return 0; 程序结束。
本题主要的难点在于对变量生存期的判定,即对static关键字的理解与掌握,忽视了函数中拥有文件生存期的变量在使用时值得变化原理。同时,后置递增运算符同样也是引起疑惑的原因之一。