第五次课上课程序和习题参考程序.docx
《第五次课上课程序和习题参考程序.docx》由会员分享,可在线阅读,更多相关《第五次课上课程序和习题参考程序.docx(15页珍藏版)》请在冰点文库上搜索。
![第五次课上课程序和习题参考程序.docx](https://file1.bingdoc.com/fileroot1/2023-5/7/76a63253-e120-46c6-b203-8209d2384f8c/76a63253-e120-46c6-b203-8209d2384f8c1.gif)
第五次课上课程序和习题参考程序
第五次课上课程序
请看书5.1~5.3小结,
1、弄清函数的定义、函数的调用、函数的原型声明及各自在程序中的位置,实参和形参的区别及位置,实参向形参单向值传递,函数的返回值只能由一个return返回,也只能返回一个
2、全局变量和局部变量的概念,位置,生存期和生存空间
3、auto(自动)变量、static(静态)变量存储区及使用
循环
例1:
1+2+3+……+n=?
#include
intmain(void)
{
inti,n,term,sum;
printf("Inputn:
");
scanf("%d",&n);
sum=0;
term=0;
for(i=1;i<=n;i++)/*循环控制变量i递增*/
{
term=term+1;/*项变化*/
sum=sum+term;/*累加*/
}
printf("1+2+3+...+%d=%d\n",n,sum);
return0;
}
例2、n!
=?
#include
intmain(void)
{
inti,n,term;
doublefac;
printf("Inputn:
");
scanf("%d",&n);
fac=1;
term=0;
for(i=1;i<=n;i++)
{
term=term+1;
fac=fac*term;
}
printf(“%d!
=%.0f\n",n,fac);
return0;
}
例3、1!
+2!
+3!
+……+n!
=?
#include
intmain(void)
{
intterm,n,i;
doublesum;
printf("Inputn:
");
scanf("%d",&n);
sum=0;
term=1;
for(i=1;i<=n;i++)
{
term=term*i;
sum=sum+term;
}
printf("1!
+2!
+...+%d!
=%.0f\n",n,sum);
return0;
}
例4:
输入一个正整数,判断是否是素数
#include
#include
intmain(void)
{
intnum,end,i,flag;/*设标志flag*/
printf("Inputaninteger:
");
scanf("%d",&num);
end=(int)sqrt(num);
flag=1;
for(i=2;i<=end;i++)
{
if(num%i==0)
{
flag=0;
break;/*break终止当前层的循环,注意与continue区别*/
}
}
if(flag==1)
{
printf("%disaprime.\n",num);
}
else
{
printf("%disnotaprime.\n",num);
}
return0;
}
函数
例2改写1:
求n!
——专用功能独立为一个函数
#include
doublejiecheng(intn);/*函数原型声明*/
intmain(void)
{
intn;/*n,fac为main函数的局部变量*/
doublefac;
printf("Inputn:
");
scanf("%d",&n);
fac=jiecheng(n);/*函数调用,n为实际参数*/
printf("%d!
=%.0f\n",n,fac);
return0;
}
/*阶乘部分独立成为一个函数*/
doublejiecheng(intn1)/*函数定义,n1为形参,double为返回值类型*/
{
inti;/*i,term,fac1为阶乘函数的局部变量*/
intterm;
doublefac1;
fac1=1;
term=0;
for(i=1;i<=n1;i++)
{
term=term+1;
fac1=fac1*term;
}
returnfac1;
}
不同函数可以有同名的变量,因为它们是局部变量,只在自己函数中存在并使用,离开函数这些局部变量将消亡。
#include
doublejiecheng(intn);/*函数原型声明*/
intmain(void)
{
intn;/*n,fac为main函数的局部变量*/
doublefac;
printf("Inputn:
");
scanf("%d",&n);
fac=jiecheng(n);/*函数调用,n为实际参数*/
printf("%d!
=%.0f\n",n,fac);
return0;
}
doublejiecheng(intn)/*函数定义,n为形参局部变量,double为返回值类型*/
{
inti;/*i,term,fac为jiecheng函数内部变量,局部变量*/
intterm;
doublefac;
fac=1;
term=0;
for(i=1;i<=n;i++)
{
term=term+1;
fac=fac*term;
}
returnfac;
}
例3改写1:
1!
+2!
+……+n!
=?
(连加和)
#include
doublejiecheng(intn);/*函数原型声明*/
intmain(void)
{
intn,i;
doubleterm,sum;
printf("Inputn:
");
scanf("%d",&n);
sum=0;
for(i=1;i<=n;i++)/*连加和*/
{
term=jiecheng(i);/*函数调用,i为实际参数*/
sum=sum+term;
}
printf("%d!
=%.0f\n",n,sum);
return0;
}
doublejiecheng(intn)/*函数定义,n1为形参局部变量,double为返回值类型*/
{
inti,term;
doublefac;
fac=1;
term=0;
for(i=1;i<=n;i++)
{
term=term+1;
fac=fac*term;
}
returnfac;
}
例4改写1:
输入一个正整数,判断是否是素数
#include
#include
intprime(intnum);/*函原型数声明*/
intmain(void)
{
intnum;
printf("Inputaninteger:
");
scanf("%d",&num);
if(prime(num))/*函数调用*/
{
printf("%disaprime.\n",num);
}
else
{
printf("%disnotaprime.\n",num);
}
return0;
}
intprime(intnum)/*函数定义*/
{
intend,i,flag;
end=(int)sqrt(num);
flag=1;
for(i=2;i<=end;i++)
{
if(num%i==0)
{
flag=0;
break;
}
}
returnflag;
}
全局变量
例5:
输入两个整数,按从大到小输出——全局变量
为三个数的排序作准备——重复程序段独立为函数
#include
intmain(void)
{
intaa,bb,temp;
printf("Inputaa,bb:
");
scanf("%d,%d",&aa,&bb);
if(aa{
temp=aa;
aa=bb;
bb=temp;
}
printf("%5d%5d\n",aa,bb);
return0;
}
使用全局变量,但注意:
这只是一个演示,尽量不要这样用,因全局变量降低了程序的可移植性(原因是程序依赖外部变量)。
#include
voidexchange(void);
intaa,bb;/*全局变量*/
intmain(void)
{
printf("Inputaa,bb:
");
scanf("%d,%d",&aa,&bb);
exchange();
printf("%5d%5d\n",aa,bb);
return0;
}
voidexchange(void)
{
inttemp ;
if(aa{
temp=aa;
aa=bb;
bb=temp;
}
}
由于实参→形参是单向值传递,即形参变化后的值不能传回给实参,加上一个函数只能通过一条return语句返回一个值(即使函数中有多条return语句,函数也只能从一条return语句返回),所以想通过调用函数得到多个返回值,上面使用了全局变量解决此问题,但因全局变量降低了程序的可移植性,所以要求使用以后学习的指针(指针即地址,即直接通过访问变量在内存中所占空间,修改空间里面的值),参考程序如下(此程序在指针中还会学)
#include
intmain(void)
{
intaa,bb;
printf("Inputaa,bb:
");
scanf("%d,%d",&aa,&bb);
exchange(&aa,&bb);
printf("%5d%5d\n",aa,bb);
return0;
}
voidexchange(int*aa,int*bb)
{
inttemp ;
if(aa{
temp=*aa;
*aa=*bb;
*bb=temp;
}
}
static变量
例3改写3:
求1!
+2!
+。
。
。
+n!
=?
——static
#include
doublejiecheng(intn);
intmain(void)
{
intn,i;
doublefac,sum;
printf("Inputn:
");
scanf("%d",&n);
sum=0;
for(i=1;i<=n;i++)
{
fac=jiecheng(i);
sum=sum+fac;
}
printf("%d!
=%.0f\n",n,sum);
return0;
}
doublejiecheng(intn1)
{
staticdoublefac1=1;/*静态变量,记忆功能*/
fac1=fac1*n1;
returnfac1;
}
作业参考程序
习题5-5
p2-211.c
#include
intmain(void)
{
inti,j,n;
printf("\nPleaseinputn:
");
scanf("%d",&n);
printf("\n");
for(i=1;i<=n+1;i++)
{
for(j=1;j<=n+1-i;j++)
{
printf("");
}
for(j=n+1-(i-1);j<=n+1+(i-1);j++)
{
printf("#");
}
printf("\n");
}
for(i=n;i>=1;i--)
{
for(j=1;j<=n+1-i;j++)
{
printf("");
}
for(j=n+1-(i-1);j<=n+1+(i-1);j++)
{
printf("#");
}
printf("\n");
}
return0;
}
习题5-7
p7-741.c
#include
#include
intprime(intnum);
intmain(void)
{
intmm,nn,count,i;
printf("Inputthem,n:
");
scanf("%d,%d",&mm,&nn);
printf("Theresult:
\n");
count=0;
for(i=mm;1;i++)
{
if(prime(i))
{
count++;
printf("%d",i);
}
if(count==nn)
{
break;
}
}
printf("\n");
return0;
}
intprime(intnum)
{
intend,i,flag;
end=(int)sqrt(num);
flag=1;
for(i=2;i<=end;i++)
{
if(num%i==0)
{
flag=0;
break;
}
}
returnflag;
}