二级c语言程序设计习题及解答函数字符样本.docx
《二级c语言程序设计习题及解答函数字符样本.docx》由会员分享,可在线阅读,更多相关《二级c语言程序设计习题及解答函数字符样本.docx(17页珍藏版)》请在冰豆网上搜索。
![二级c语言程序设计习题及解答函数字符样本.docx](https://file1.bdocx.com/fileroot1/2023-6/3/159d2145-5875-4b1e-a72f-3ac2d1833d40/159d2145-5875-4b1e-a72f-3ac2d1833d401.gif)
二级c语言程序设计习题及解答函数字符样本
Ch5-6循环构造&字符数组
写出26个大写字母和她们ASCII代码规定每行输出两组数据。
#include
main()
{
charch;inti;
for(i=0;i<26;i++)
{
ch=i+65;
if(i%2==0)
printf("\n");
printf("c=%c,ASCII=%d\t",ch,ch);
}
}
在上面程序中有对于字符输入与输出,在C语言中也有此外输入输出字符语句。
输入:
变量名=getchar()
输出:
putchar(变量名)
Ch7函数
#include
doubleadd(double,double);
main()
{
doublem,n,z;
printf("请输入两个实数:
\n");
scanf("%lf%lf",&m,&n);
z=add(m,n);
printf("%lf\n",z);
}
doubleadd(doublea,doubleb)
{
doubles;
s=a+b;
returns;
}
#include
voidtry(int,int,int);
main()
{
intx=2,y=3,z=0;
printf("
(1)x=%dy=%dz=%d\n",x,y,z);
try(x,y,z);
printf("(4)x=%dy=%dz=%d\n",x,y,z);
}
voidtry(intx,inty,intz)
{
printf("
(2)x=%dy=%dz=%d\n",x,y,z);
z=x+y;
x=x*x;
y=y*y;
printf("(3)x=%dy=%dz=%d\n",x,y,z);
}
屏幕上成果是:
(1) x=2y=3z=0
(2) x=2y=3z=0
(3) x=4y=9z=5
(4) x=2y=3z=0
再来一种程序
#include
voidswap(int,int);
main()
{
intx=10,y=20;
printf("
(1)x=%dy=%d\n",x,y);
swap(x,y);
printf("(4)x=%dy=%d\n",x,y);
}
voidswap(inta,intb)
{
intt;
printf("
(2)a=%db=%d\n",a,b);
t=a;a=b;b=t;
printf("(3)a=%db=%d\n",a,b);
}
程序运营成果
7.6程序应用举例
编写一种函数isprime(int a),用来判断自变量a与否为素数。
若是素数,函数返回整数1,否则返回0.
#include
intisprime(int);
main()
{
intx;
printf("enteraintegernumber:
");
scanf("%d",&x);
if(isprime(x))
printf("%disprime\n",x);
else
printf("%disnotprime\n",x);
}
intisprime(inta)
{
inti;
for(i=2;i<=a/2;i++)
if(a%i==0)
return0;
return1;
}
编写函数myupper(ch),把ch中小写字母转换成大写字母作为函数值返回,其她字符不变。
主函数中不断输入字符,用字符@结束输入,同步不断输出成果。
#include
#include
charmyupper(charch)
{
if(ch>='a'&&ch<='z')
ch=ch-32;
returnch;
}
main()
{
charc;
while((c=getchar())!
='@')
{
c=myupper(c);
putchar(c);
}
printf("\n");
}
编写函数记录输入字符个数,用@字符结束输入,在主函数中调用此函数,输出记录成果。
#include
longcountch();
main()
{
longn;
n=countch();
printf("n=%ld\n",n);
}
longcountch()
{
longcn;
for(cn=0;getchar()!
='@';cn++)
;
returncn;
}
7-10----7-13节、课后习题
[7.1] 如下说法中对的是 C
A)C语言程序总是从第一种定义函数开始执行
B)在C语言程序中,要调用函数必要在main函数中定义
C)C语言程序总是从main函数开始执行
D)C语言程序中main函数必要放在程序开始某些
[7.2] 如下函数类型是(C)
A)与参数x类型相似
B)void类型
C)int类型
D)无法拟定
fff(float x)
{ printf("%d\n",x*x);}
【解析】要是函数没有返回值,默认是int型
[7.3] 如下函数调用语句中,具有实参个数是B
A)1 B)2 C)4 D)5
func( (exp1,exp2),(exp3,exp4,exp5));
【解析】看最外层括号中“,”个数,将其加1
[7.4] 如下程序输出成果是(C)
A)11 B)20 C)21 D)31
#include
func(inta,intb)
{
intc;
c=a+b;
returnc;
}
main()
{intx=6,y=7,z=8,r;
r=func((x--,y++,x+y),z--);
printf("%d\n",r);
printf("x=%d,y=%d,z=%d,\n",x,y,z);//测试加上,本题只规定r值
}
【解析】func()为求两数之和,本题核心func((x--,y++,x+y),z--)一方面,x—,y++得x=5,y=8;逗号表达式看最后一种式子值x+y=13,即func(13,z--),z先使用后++,所觉得13+8=21
(注)最后x=5,y=8,z=7
[7.5] 如下程序输出成果是A
A)-1 B)0 C)1 D)2
#include
intf(int,int);
main()
{
inti=2,p;
p=f(i,i+1);
printf("c=%d\n",p);
}
intf(inta,intb)
{intc;
c=a;
if(a>b)c=1;
elseif(a==b)c=0;
elsec=-1;
return(c);
}
【解析】p=f(i,i+1)相称于p=f(2,3),则a=2,b=3,不满足if(a>b)和elseif(a==b),因此执行elsec=-1;
[7.6] 如下程序输出成果是D
A)0 B)1 C)6 D)无定值
#include
fun(inta,intb,intc)
{
c=a*b;
}
main()
{
intc;
fun(2,3,c);
printf("c=%d\n",c);
}
【解析】由于fun(inta,intb,intc)未阐明返回值类型,默以为int型,而在main()中执行fun(2,3,c)之后没有将c返回,因此无法得到c值。
注意:
c初值是什么,则成果还是什么:
若intc=2;则成果为2
[7.7] 如下程序输出成果是A
A)5.500000 B)3.000000 C)4.000000 D)8.25
#include
doublef(intn)
{
inti;doubles;
s=1.0;
for(i=1;i<=n;i++)s+=1.0/i;
returns;
}
main()
{inti,m=3;floata=0.0;
for(i=0;iprintf("%lf\n",a);
}
【解析】一方面main()中i=0,a+=f(0),执行f(0)时,for()不满足,s=1.0,返回后a=a+s,a=1.0;然后i=1,a+=f
(1),执行一次for(i=1;i<=n;i++)s+=1.0/i;则s=s+1.0=2.0,返回给a,a=0.0+2.0=2.0;最后i=2,a+=f
(2);执行两次for(i=1;i<=n;i++)s+=1.0/i;s=2.0+1.0+0.5=3.5,返回给a,a+=f
(2);a=2.0+3.5=5.5,由于%lf保存六位小数,得成果
二、填空题
[7.8] 如下程序输出成果是____12____.
#include
unsignedfun6(unsignednum)
{
unsignedk=1;
do
{
k*=num%10;num/=10;
}
while(num);
returnk;
}
main()
{
unsignedn=26;
printf("%d\n",fun6(n));
}
【解析】一方面,执行fun6(26),k*=num%10;后k=1*6=6,num/=10;后num=2,while(num);num不等于0,继续循环,k=2%10*6=2*6=12,num/=10后mun=0,跳出循环,返回K=12
[7.9] 如下程序输出成果是___9.0_____.
double sub(double x,double y,double z)
{ y-=1.0;
z=z+x;
return z;
}
main()
{ double a=2.5,b=9.0;
printf("%f\n",sub(b-a,a,a));
}
【解析】执行sub(6.5,2.5,2.5),执行 z=z+x=9.000000
[7.10] 如下程序输出成果是___4_____.
#include
fun2(inta,intb);
fun1(inta,intb)
{intc;
a+=a;b+=b;
c=fun2(a,b);
returnc*c;
}
fun2(inta,intb)
{intc;
c=(a*b)%3;
returnc;
}
main()
{intx=11,y=19;
printf("%d\n",fun1(x,y));
}
【解析】调用fun1(11,19),a=a+a=22,b=b+b=38,调用fun2(22,38);则c=(a*b)%3=2,returnc*c=4
[7.11] 下面pi函数功能是,依照如下公式返回满足精度规定值.请填空.
pi/2=1+1/3+1/3*2/5+1/3*2/5*3/7+1/3*2/5*3/7*4/9+...
double pi(double eps)//以精度为参数
{ double s=0.0,t=1.0;
int n;
for(__n=1__;t>eps;n++)
{ s+=t;
t=n*t/(2*n+1);//找式子规律
}
return (2.0*__S___);
}
【解析】其实本题是求得满足精度pi值,完整程序如下:
#include
doublepi(doubleeps)//以精度为参数
{doubles=0.0,t=1.0;
intn;
for(n=1;t>eps;n++)
{s+=t;
t=n*t/(2*n+1);//找式子规律
}
return(2.0*s);
}
main()
{
printf("%lf\n",pi(0.00005));
}
[7.12] 如下函数用以求xy次方.请填空.
double fun(double x,int y)
{ int i; double z=1;
for(i=1; i___<=y__; i++)
z=___z*x__;
return z;
}
[7.13] 如下程序功能是计算S=1!
+2!
+3!
+…+k!
.请填空.
long f(int n)
{ int i; long s;
s=__1___;
for(i=1; i<=n; i++) s=__s*i___;
return s;
}
main()
{ long s; int k,n;
scanf("%d",&n);
s=__0___;
for(k=0;k<=n;k++)s=s+___f(k)__;
printf("%ld\n",s);
}
【解析】f(k)是求阶乘函数,for(k=0;k<=n;k++)s=s+___f(k)__;将从0!
+1!
+……n!
三、程序调试和编程题
[7.14] 如下fun函数用以判断n与否是素数,fun函数中有逻辑错,请调试改正.
fun(int n)
{ int k,yes;
for(k=2;k<=n/2;k++)
if(n%k==0)
returnyes=0;
yes=1;
return yes;
}
修改如下:
#include
fun(intn)
{intk;
for(k=2;k<=n/2;k++){
if(n%k==0)
return0;
}
return1;
}
main()
{
inttag,num;
printf("请输入一种整数:
\n");
scanf("%d",&num);
tag=fun(num);
if(tag==0)
printf("num不是素数!
!
!
\n");
else
printf("num是素数!
!
!
\n");
}