浙江大学远程教育2016年夏程序设计基础(c)离线作业答案_第1页
浙江大学远程教育2016年夏程序设计基础(c)离线作业答案_第2页
浙江大学远程教育2016年夏程序设计基础(c)离线作业答案_第3页
浙江大学远程教育2016年夏程序设计基础(c)离线作业答案_第4页
浙江大学远程教育2016年夏程序设计基础(c)离线作业答案_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

浙江大学远程教育学院

《程序设计基础(C)》课程作业

姓名:王春强学号:

年级:2016春学习中心:桐庐学习中心

第1章C语言的基本构成

程序调试题

1.编辑、调试以下程序

步骤1:在VisualC++环境下新建文件可用[开始]f[程序]f[MicrosoftVisualC++6.0]—

[MicrosoftVisualC++6.0]—[文件]f[新建]—[文件]f[C++SourseFile],输入文件

名exl-Lc,程序代码如下:

#include<stdio.h>/*文件预处理,包含标准输入输出库,程序可调用输入、输出函

数*/

intadd(intx,inty)

(

intz;

z=x+y;

returnz;

)

intmain()

(

intadd(int,int);/*函数的说明,告诉系统在主函数中要调用add函数*/

inta,b,c;/*变量的定义*/

scanf("%d%d\n〃,&a,&b);

c=add(a,b);/*函数调用*/

printf(,z%d+%d=%d\n,z,a,b,c);

/*调用系统输出函数printf,%€1为格式控制符,依次用后面的变量值填充,以整数形

式输出*/

}

请思考文件exl-l.c由几个函数构成?调用了那几个系统函数?此程序中用到了哪几个

保留字?哪几个用户自定义标识符?

答:

1.有2个函数构成,主函数main。及自定义函数add。

2.调用的系统函数有输入函数scanf。及输出函数printf()

3.保留字有:int,return

4.自定义标识符有:a,b,c,z,x,y

步骤3:

编译并运行程序,程序运行时输入两个整数,2040,观察程序运行的结果。

答:

结果是20+40=60

截图如下:

■LZ\C++\ueoug\exi-i.exe

2040

20+40=60

Pressanykeytocontinue

2.编辑、调试以下程序

步骤1:在VisualC++环境下新建文件可用[开始]f[程序]f[MicrosoftVisualC++6.0]

->[MicrosoftVisualC++6.0]f[文件][新建][文件]f[C++SourseFile],输入文

件名exl-2.c

步骤2:在文本编辑器中输入以FC程序

#include<stdio.h>/*文件预处理,包含标准输入输出库,程序可调用输入、输出函

数*/

#include<exl-2-2.c>

intmain()

(

intand(int,int);/*函数的说明,告诉系统在主函数中要调用and函数*/

intor(int,int);/*函数的说明,告诉系统在主函数中要调用and函数*/

inta,b,c;/*变量的定义*/

scanf(〃%d%d〃,&a,&b);

c=and(a,b);/*函数调用*/

printf(z,%d&&%d=%d\n”,z1,b,c);

/*调用系统输出函数printf,%d为格式控制符,依次用后面的变量值填充,以整数形式

输出*/

c=or(a,b);/*函数调用*/

printf(〃%d%d=%d\n〃,zi,b,c);

)

步骤3:[文件]一[新建]一[文件]一[C++SourseFile],输入文件名exl-2-2.c,源程序代

码为:

intand(inta,intb)

{

intc;

c=a&&b;

returnc;

步骤4:[文件]-[新建]—[文件]-[C++SourseFile],输入文件名exl-2-3.c,源程序代码为:

intor(inta,intb)

intc;

c=a||b;

returnc;

步骤5:点击编译图标编译程序1-2.c

步骤4:点击执行图标!,执行程序1-2.C,当程序运行时,键盘输入2040,按回车。

2040

20&&40=1

20||40=1

您可以输入其它的整数,观察程序的执行结果。

答:(增加语句:#include<ex1-2-3.0)

输入2040;2020;3060如下:

1*D:\C++\Debug\exl-2.exe"

2040

20&&40=1

20::40=1

Pressanykeytocontinue

•"D:\C++\Debug\exl-2.exe"

2020

20&&20=1

20::20=1

Pressanykeytocontinue

"D:\C-4--i-\Debug\exl-2.exe"

3060

30&&60=1

30;:60=1

Pressanykeytocontinue

第2章输入输出程序设计

1.用printf输出一个中空的五角星。

答:

#include<stdio.h>

voidmain()

(

printf("^\n");

)

截图如下:

・"D:\C+-J-\Debug\cy.exe"

Pressanykeytocontinue

2.仿照例子2.2,定义一个字符数组,从键盘输入一字符串,然后输出的程序。

答:

#include<stdio.h>

voidmain()

(

charstr[80];

printf("请输入您的名字\n");

scanf("%s",str);

printf("学生:%s,正在就读计算机专业\n”,str);

)

截图:

■'*D:\C++\Debug\cy.exe"

请蕾您的名字

基里%佳峰,正在就读计算机专业

Pressanykeytocontinue

3.从键盘输入十六进制整数,转化为八进制数输出。

答:

#include<stdio.h>

voidmain()

(

inta;

printf("请输入十六进制整数\n”);

scanf(H%x**,&a);

printf("转换成的八进制数为:%o\n”,a);

截图如下:

■*D:\C-r4-\Debug\cy.exe*

请输入十六进制整数

土换成的八进制数为:15

Pressan9keytocontinue

4.只定义两个整型数据并赋值,实现两个整型数的互换。

答:

#include<stdio.h>

voidmain()

(

inta=13,b=25;

printf("原定义的数是:a=%d,b=%d\n”,a,b);

a=aAb;

b=bAa;

a=aAb;

printf("互换后的数是:a=%d,b=%d\n",a,b);

)

截图:

原定义的数悬:a=13,b=25

互换后的数禀:a=25,b=13

Pressanykeytocontinue

5.从键盘上输入一个整数,分别输出8、16进制数的程序。

答:

#include<stdio.h>

voidmain()

inta;

printf「请输入一个整数\n");

scanf(n%dn,&a);

printf「转换成的十六进制数是%x,转换成的八进制数是%o\n”,a,a);

截图如下:

Ik'D:\C++\Debug\test.exe

请输入一个整数

苣换成的十六进制数是b,转换成的八进制数是13

Pressanykeytocontinue

6.从键盘上输入一个整数,分别输出它的个位数,十位数,百位数。

答:

#include<stdio.h>

voidmain()

{

inta,b,c,d;

scanf(**%d,\&a);

b=a%10;

c=(a/10)%10;

d=((a/100)%10);

printf("个位数是:%d,十位数是:%d,百位数是:%d\nn,b,c,d);

)

截图如下:

578

个位数是:8,十位数是:乙百位数是:5

Pressanykeytocontinue.

7.以下程序输出结果是(9,10)。

#include<stdio.h>

voidmain()

(

inti=010,j=10;

printf(%d\n**,++i,j一一);

)

8.运行程序,屏幕提示“您是一个学生吗”,您输入y或E进行回答,屏幕输出您的选项。

答:

#include<stdio.h>

voidmain()

(

chara;

printf「您是一个学生吗?请输入了或T进行回答\n");

scanf(n%cu,&a);

if(a=='y')

printf「您是学生\iT);

elseif(a==,n,)

printf("您不是学生\n”);

else

printf,请重新输入\n");

截图:

1*D:\C++\Debug\test.exe"

您是一个学生吗?请输入,,或",进行回答

y

您是学生

Pressanykeytocontinue

9.从键盘输入一个角度x,求10*sin(x)的值。

答:

#include<stdio.h>

#include<math.h>

voidmain()

(

doublex;

scanf(n%lf'\&x);

printf("10*sin(x)的值为:%lf\n**,10*sin(x));

)

截图:

"L/.\VTT—

3

10*sin〈x〉的值为:1.411200

Pressanykeytocontinue,

第3章循环程序设计

1.以下for语句的循环次数是多少?

intirj=3;

for(;i=j;i-,j--)printf("%d”,i);

答:循环次数3次

2.下面的语句显示输出6行6列的整数数组h的主对角线上的所有元素,请补充完整:

for(inti=0;i<6;i++)

nn

printf(%dzh[i][i])

3.写出以下程序运行的结果,此程序实现了什么功能?

#include<stdio.h>

voidmain()

{inta[10]={2,4,0,-5,10,6,-8,9,6Z7};

intI,count=0;

for(i=0;i<10;i++)

if(a[i]==0)count++;

elsecontinue;

printf(n%d\n”,count);

结果是1,功能是输出数字“0”的数量

4.写出以下程序的功能。

#include<stdio.h>

voidmain()

(

inta[10]={2,4Z0,-5,10,6,-8,9,6,7},tmp,k;

for(k=0;k<10/2;k++)

{

tmp=a[k];

a[k]=a[10-k-l];

a[10-k-l]=tmp;

}

)

答:功能是倒置数组

5.写出以下程序运行后的输出结果。

#include<stdio.h>

voidmain()

(

inti,j;

for(i=0;i<6;i++)

{

for(j=0;j<i;j++)

printf(****);

for(j=0;j<2*(5-i)-l;j++)

printf(n*H);

printf(n\nH);

答:输出倒三角形五星阵

★★★★★★★★★

★★★★★★★

*****

***

6.请改正下列程序的错误,改正后的程序写在右边的空白处,并上机调试检验。

(1)

#include<stdio.h>

©蠲main()

inti,s;

i=1;s=0;

while(i<=100);

printf(44I+2+3+….+99+100=%d\n”,s);

)

答:改正后为:

#include<stdio.h>

voidmain()

(

inti,s;

i=l;s=0;

while(i<=100)

(

s=s+i;

i++;

)

printf("1+2+3+....+99+100=%d\n",s);

)

截图如下:

■"D:\VC++\Debug\testl.exe"

1+2+3+-".+99+100=5050

Pressanykeytocontinue

(2)

#include<stdio.h>

voidmain()

I

inti,s|

s=0;

while(i<=100)

s=s+i;

printf("1+2+3+....+99+100=%d\n”,s);

I

答:改正如下:

#include<stdio.h>

voidmain()

(

inti9s;

i=l;

s=0;

while(i<=100)

(

s=s+i;

i++;

printf(nl+2+3+....+99+100=%d\nu,s);

)

截图如下:

■U:\VL++\ueDug\Tesri.exe

1+2+3+".+99+100=5050

Pressanykeytocontinue

(3)

#include<stdio.h>

voidmain()

I

inti=l,s;

while(i<=100);

I____

s=s+i;

i++;

8_________________

printfC41+2+3+.…+99+100=%d\n”,s);

答:改正如下:

#include<stdio.h>

voidmain()

(

inti=l,s=0;

while(i<=100)

{

s=s+i;

i++;

}

printf("l+2+3+....+99+100=%d\n",s);

}

截图如下:

■*D:\VC++\Debug\testl.exe,"

1+2+3.+99+100=5050

Pressanykeytocontinue

7.输入一个基数,例如输入9,输出为:求1*3*……*9的值。输出为:1*3*5*7*9=945

答:

#include<stdio.h>

voidmain()

longints=l,i=l,a;

printfT请输入一个整数:\暧);

scanf(n%dn,&a);

while(i<=a)

s=s*i;

i=i+2;

)

printf(nl*3*...*%d=%d\nn,a,s);

)

截图如下:

请输入一个整数:

11

1*3*...*11=10395

Pressanykeytocontinue

8.输入一个5~10之间的整数n,求1!+入+3!+…+n!°例如输入5,输出为:1!+2!+3!+…+5!

=153

答:

#include<stdio.h>

voidmain()

(

longints=O,i=l,t=l,a;

printf「请输入一个5・10的整数:\nM);

scanf(n%du,&a);

while(i<=a)

(

t=t*i;

s=s+t;

i++;

}

printf(Hl!+2!+3!+...+%d=%d\nH,a,s);

)

截图:

请输入一个5T。的整数:

5

1?+2?+3?+-+5=153

Pressanykeytocontinue

9.在屏幕上输出以下内容

1

12

123

1234

12345

123456

1234567

12345678

123456789

答:

#include<stdio.h>

voidmain()

(

inti=l,s;

while(i<=9)

(

for(s=l;s<=i;s++)

printfs);

printf("\n");

i++;

)

截图:

1

12

123

1234

12345

123456

1234567

12345678

123456789

Pressanykeytocontinue

10.求2+4+6+......+98+100的和,用多种for表达式来完成。

答:方法1

#include<stdio.h>

voidmain()

(

inti,s=0;

for(i=2;i<=100;i+=2)

s=s+i;

printf(M2+4+...+100=%d\nn,s);

方法2

#include<stdio.h>

voidmain()

(

inti=0,s=0;

for(;i<=10();)

(

s+=i;

i+=2;

)

printf(n2+4+...+100=%d\nn,s);

)

方法3

#include<stdio.h>

voidmain()

(

inti,s;

for(i=2,s=0;i<=100;s+=i,i+=2);

printf(u2+4+...+100=%d\nn,s);

)

截图

■u:\vc++\ueoug\resTi.exe

2+4+...+100=2550

Pressanykeytocontinue

10.输入一行字符,统计它有多少个字母?

答:

#include<stdio.h>

voidmain()

(

charstring[100],c;

inttotal=99,count=0,scount=0;

while(count<total){

c=getchar();

if(c==,\n,)

break;

string[count]=c;

if((c>='a'&&c<='z,)||(c>=,A,&&cv='Z')){

scount++;

count++;

}

printf(H%s,count=%d\n*1,string,scount);

第4章分支程序设计

1.输入若干整数给X,使用if语句输出x的绝对值,当输入0时结束。

答:

#include<stdio.h>

#include<math.h>

voidmain()

(

doublex;

printfC输入若干整数(0表示结束):\n”);

scanf(,,%lf'\&x);

while(l){

if(x!=0){

printf("%lf的绝对值为%H\iT,x,fabs(x));

scanf(,,%If,,&x);

}else{

break;

截图:

输入若干整数〈。表示结束):

-4-567-110-46

-4.000000的绝对值为4.000000

-5.000000的绝对值为5.000000

6.000000的绝对值为6.000000

7.000000的绝对•僮为7.000000

-11.000000的绝对值为11..000000

Pressanykeytocontinue.

2.输入•批数,输出比相邻数大的数,当输入。时结束。

答:

#include<stdio.h>

#include<math.h>

voidmain()

inta,b9c;

printf("请输入整数:\nM);

scanf(u%dM,&a);

while(a)

(

scanf(n%dn,&b);

if(b==O)

break;

if(a<b)

a=b;

printf("最大整数为:%d\n*\a);

)

截图:

请输入整数:

4661131-2320

最大整数为:32

Pressanykeytocontinue

3.将输入字符的大写字符转换成小写字符输出,小写字符原样输出。

答:

#include<stdio.h>

voidmain()

(

chara;

scanf(H%cM,&a);

if(a>=,A'&&av='Z')

printf("转换后的字母为:%c\n*\a+32);

else

printf("转换后的字母为:%c\n*\a);

截图:

,换后的字母为:h

Pressanykeytocontinue

4.输入一批字符,按回车时结束,统计小写字符、大写字符、数字字符、或其它字符的个

数。

答:

#include<stdio.h>

voidmain()

charc;

inta=0,b=0,m=0,n=0;

while(l)

(

scanf(H%cH,&c);

,

if(c==*\n)

break;

if(c>=,A,&&cv='Z')

b++;

elseif(c>=,a*&&c<=,z*)

a++;

elseif(c>='O'&&cv='9')

m++;

else

n++;

printf("小写字符有%d个,大写字符有%d个,数字字符有%d个,其它字符有%d个

截图:

dsada£FJSHFH98SD&&^zz$zA&DS988

小写字符有6个,大写字符有[0个,数字字符有5个,其它字符有[。个

Pressanykeytocontinue.

5.编写程序,计算分段函数:

x+5x<1

y=<2x1<x<10

3x>10

,x-10

答:

#include<stdio.h>

voidmain()

(

doublex,y;

scanf(H%lfM,&x);

if(x<=l)

y=x+5;

elseif(x>10)

y=3/(x-10);

else

y=2*x;

printf(Hy=%lf\nH,y);

}

截图:

・、・J,I\JJU,JC3

20

y=0.300000

Pressanykeytocontinue

6.根据输入的百分制按五分制的成绩输出。百分制与五分制之间的关系见下表。

百分制五分制

90~1005

80〜894

70〜793

60〜692

<601

答:

#include<stdio.h>

voidmain()

(

intx,y;

print*"请输入分数:");

scanf(H%dM,&x);

if(x>100&&x<0)

printf("成绩输入错误=%小,);

else

(

if(x<=100&&x>=90)

y=5;

elseif(x<=89&&x>=80)

y=4;

elseif(x<=79&&x>=70)

y=3;

elseif(x<=69&&x>=60)

y=2;

elseif(x<=59&&x>=0)

y=i;

printf(八五分制成绩=%3\11"/);

截图:

■"U:\vc++\Uebug\testl.exe^

Pressanykeytocontinue

7、用switch完成:读入一个实数x,再输入一整数,若输入是1,则计算sin(x),若输入2,

则计算cos(x),若输入3,则计算tan(x),若输入其他值,则显示错误信息。

答:

#include<stdio.h>

#include<math.h>

voidmain()

(

doublex;

ints;

printf("请输入一个实数,一个整数\11");

scanf(H%lf\&x);

scanf(M%du,&s);

switch(s){

case1:

printf(Hsin(x)=%If\nH,siii(x));

break;

case2:

printf(Hcos(x)=%lf\n*\cos(x));

break;

case3:

printf(Mtan(x)=%lf\nM,tan(x));

break;

default:

printf("输入错误");

break;

截图:

请输入一个实数,一个整数

0.53

tan<x>=0.546302

Pressanykeytocontinue

8、用switch完成:输入星期1到星期5,输出它们对应的颜色

星期1:blue

星期2:red

星期3white

星期4:yellow

星期5:green

答:

#include<stdio.h>

voidmain()

ints;

prints输入星期1到星期5\n”);

scanf(H%dM,&s);

switch(s){

case1:

printf("今天的颜色是:blue\nn);

break;

case2:

priiUf,今天的颜色是:red\nM);

break;

case3:

printf("今天的颜色是:white\n");

break;

case4:

printf("今天的颜色是:yellow\n");

break;

case5:

printf("今天的颜色是:greennH);

break;

default:

printfC输入错误");

break;

截图:

输入星期1到星期5

4

今天的颜色是:yelien.

Pressanykeytocontinue

9、用switch完成:从键盘输入A、B、C、D四个等级中的一个,转化输出

等级输出

A优秀

B良好

C中等

D及格

E不及格

答:

#include<stdio.h>

voidmain()

{

printfT从键盘输入A、B、C、D四个等级中的一个!\nn);

switch(getchar()){

case'A':

printf(“优秀n\”);

break;

case'B':

printf「良好n\”);

break;

case*C*:

printf(“中等\n”);

break;

case*D*:

printf("及格\n");

break;

case*E*:

prints”不及格\n");

break;

default:

printf("输入错误");

break;

)

}

截图

[—tJU,八

从键盘输入A、B、C、D四个等级中的一个!

:尤秀

Pressanykeytocontinue.

第5章数组及其应用

1.从键盘输入12个数,分别为:900,2,3,58,34,76,87,72,90,20,78,30,找出最大和最小数。

答:

#include<stdio.h>

voidmain()

(

inta[12];

intmax,min;

inti,m;

printer请输入12个整数\iT);

for(i=0;i<12;i++)

{

scanf(u%dn,&a[i]);

max=a[O],min=a[O];

for(i=l;K12;i++)

(

if(max<a[i])

max=a[i];

if(min>a[i])

min=a[i];

printf("最大数为:%d,最小数为:%d\n,\max,min);

截图:

请输入12个整数

90023583476877290207830

最大数为:9。。,最小数为:2

Pressanykeytocontinue

2.采用遍历查找,在数组a[SIZE]={2,3,20,58,72,76,78,87,90,900}中,找出偶数。

答:

#include<stdio.h>

#defineSIZE10

voidmain()

(

inta[SIZE]={2,3,20,58,72,76,78,87,90,900};

inti;

printf(Ma[SIZE]={2,3,20,58,72,76,78,87,90,900}中偶数为八暧);

for(i=l;i<10;i++){

if(a[i]%2==0)

printf(M%-4dM,a[i]);

截图

a[SIZE]=<2,3,20.58.72.76.78,87,90,900)中偶数为:

205872767890900Pressanykeyto

3.采用折半查找,在数组a[SIZE]={2,3,20,58,72,76,78,87,90,900}中,找到87,然后进行删

除。

答:

#include<stdio.h>

#deHneSIZE10

voidmain()

(

inta[SIZE]={2,3,20,58,72,76,78,78,90,900};

intij=0,k,nevvSize;

newSize=SIZE;

k=newSize;

printf("原来的数组:”);

for(i=();i<newSize;i++){

if(i==newSize-l){

printf(',%d\nH,a[i]);

}else{

printf(H%d,H,a[i]);

}

)

i=G+k)/2;

while(j<=k)

(

if(a[i]>78)

k=i-l;

elseif(a[i]<78)

j=i+l;

else(

for(j=i;j<newSize-l;j++)

a[j]=a[j+l];

newSize—;

k=newSize;

j=0;

)

i=(j+k)/2;

)

printer新的数组:”);

for(i=0;i<newSize;i++){

if(i==newSize-l){

printf(H%d\nM,a[i]);

}else{

printf(n%d;\a[i]);

截图

原来时数组:2,3,20,58,72,76,78,78.90,9。。

新的数组:2,3,20,58,72,76,90,900

Pressanykeytocontinue

第6章函数及其应用

练习与实践

一、阅读程序,写出程序运行的结果。

1.写出以下程序的执行结果。

#include<stdio.h>

floataver(inta[])

(

intk,sum=0;

floatave;

for(k=0;k<10;k++)

sum+=*(a+k);

ave=(float)sum/10;

return(ave);

)

intmain()

(

floatave;

staticb[]={78,89,98,76,78,45,88,81,92,85};

ave=aver(b);

printf(nave=%f\nn,ave);

)

提示:数组b的首地址传递给形参a,*(a+k)就是数组元素b(k].

答:这是求平均数,结果为:81.00000

2.阅读程序,写出程序的执行结果。

#include<stdio.h>

voidabc(charstr[])

{inta,b;

for(a=b=0;str[a]!=T\01;a++)

if(str[a]!=1cz)

str[b++]=str[a];

str[b]=1\01;

)

intmain()

(

charstr[]=nabodef";

abc(str);

printf("str[]=%s",str);

return0;

提示:数组str的首地址传递给形参str,str[a]就是实参中的数组元素str[a],当

数组元素不为,c,时进行复制。

答:结果为:str[]=abdef

3.写出以下程序的执行结果。

#include<stdio.h>

intsort(intb[]Aintn,intx)

{

intk;

for(k=n-l;k>=0;k一一)

if(b[k]<x)

b[k+l]=b[k];

else

break;

b[k+1]=x;

return0;

)

intmain()

(

inti,j;

staticinta[5]={8,5,4,1,6};

intb[8];

b[0]=a[0];

for(i=l;i<5;i++)

(

sort(b,iza[i]);

for(j=0;j<=i;j++)

printf(n,b[i]);

printf(”\n");

}

return0;

}

提示:循环体中

if(b[k]<x)

b[k+l]=b[k];

else

如果;版成立,执行语句b[k+l]=b[k];表示数组元素b向后移,不满足时插入X,

即从大到小排序。

答:结果是:

55

444

1111

11111

4.写出以下程序的执行结果。

#include<stdio.h>

intfun(intx)

{intp;

if(x==0||x==l)

return3;

else

p=x-fun(x-2);

returnp;

)

intmain()

(

printf(n\n%d",fun(9));

return0;

)

提示:fun(9)=9-fun(7),..fun(1)=3

答:结果是:7

5.写出以下程序的执行结果,并说明其作用是什么?

#include<stdio.h>

intf(intn)

{

if(n>=10)

f(n/10);

nn

printf(%dzn%8);

return0;

}

intmain()

{

f(1234);

printf(n\nn);

return0;

}

提示:在函数f中,程序运行借助了堆栈,依次入栈的数据分别为1234、123、12,最后

n=l,n对8取余输出,然后数据依次出栈对8取余输出。

答:结果是:1432

二、程序设计

1.编写一个函数,计算x的n次的平方。

提示:for(y=l,i=0;i<n;i++)

y=y*x;

答:

#include<stdio.h>

doubless(doublex,intn)

doubley=l;

inti;

for(i=l;i<=n;i++)

return(y);

intmain()

(

doublea;

intb;

printf("请输入x和次数n:”);

scanf("%lf%d",&a,&b);

printf("%lf的%d次方为:%If\n”,a,b,ss(a,b));

return0;

)

截图:

请输入x和次数n:1・5

1.500加0的10次方为:57.665039

Pressanykeytocontinue

2.编写•个函数,计算对角线上元素之和。

提示:for(s=0,i=0;i<n;i++)

for(j=0;j<ny++)

if(i==j)

s=s+a[i][j];

答:

#include<stdio.h>

intmain()

(

ints,ij,n=3;

inta[3][3]={

{1,2,3},

{4,5,6},

{7,8,9}

);

for(s=0,i=0;i<n;i++)

fora=0;j<n;j++)

if(i==j)

s=s+a[i][j];

printf("对角线元素之和为s=%d\n",s);

截图:

对角线元素之和为3=后

Pressanykeytocontinue

3.编写一个函数intinvert(charstr[]),将一个字符串的内容颠倒过来。

提示:先求字符串str的长度n,for(i=0;i<n/2;i++){a[i]与交换}

答:

#include<stdio.h>

intinvert(charstr[])

(

intn=strlen(str);

inti;

chartemp;

for(i=0;i<n/2;i++)

(

temp=str|i);

str[i]=str[n-i-l];

str[n-i-l]=temp;

}

)

voidmain()

(

chara[12]=Habcdefgl23u;

printf("颠倒前:%s\n”,a);

invert(a);

printf("颠倒后:%s\n”闺;

}

截图

颠倒即:abcde£gl23

颠倒后:321g£edeba

Pressanykeytocontinue

4.编写函数,删除字符串中,从指定位置m开始的n个字符。删除成功,函数返回被删除

字符串;否则返回空的值。

提示:for(k=m,i=0;strfi];i++)

str[m+ij=str[m+n+ij;

str[m+i]=,\0,;

答:

#include<stdio.h>

intcutstring(intm,intn,charstr[]){

int1=strlen(str);

if(m+n-l>=l)

return0;

intk,i;

charnstr[nj;

for(k=m,i=0;str[i];i++){

str[m+i]=str[m+n+i];

)

str[m+i]=,\0*;

return0;

)

voidmain()

(

intm,n;

charstr[H]=nddksosekcin;

printf(H%s\nM,str);

printf(nPleaseinputmandn:\nn);

scanf(M%d%dn,&m,&n);

cutstring(m,n,str);

prmtf(H%s\n,\str);

)

5.编写一个程序,从键盘输入的字符串,删去非数字字符,转换成整型数输出。

提示:for(s=0,i=0,j=0;str[i];i++)

if(str[i]>=>0,&&str[i]<=,9,)

s=s*lO+str[i]-'O';

答:

#include<stdio.h>

voidmain()

(

charstr[ll];

ints,ij;

for(i=0;i<10;i++)

scanf(M%cn,&str[i]);

for(s=0,i=0,j=0;str[i];i++)

if(str[i]>=,0,&&str[i]<=,9,)

s=s*10+str[i]-,0,;

printf(M%d\nH,s);

截图:

dse3256tr?

32567

Pressanykeytocontinue

6.用递归的方法编写一个函数sum(intn),求1至n的累加和。

提示:f(n)=n+f(n-l)

答:

#include<stdio.h>

intsum(intn)

(

ints=0,i;

for(i=l;i<=n;i++)

s=s+i;

return(s);

)

voidmain()

(

inta;

printfC请输入整数n:H);

scanf(H%dM,&a);

printf(Hl+2+...+%d=%d\nn,a,sum(a));

)

截图:

请输入整数n:50

1+2+...+50=1275

Pressanykeytocontinue

第7章变量存储类型与多文件系统

1.写出以下程序的执行结果。

#include<stdio.h>

intx;

voidfun()

(

printf(**%d",x++);

)

voidmain()

(

intx=l;

(

externintx;

printf(H,++x);

fun();

提示:在函数fun中及语句块

{

externintx;

printf(n%d,++x);

)

中使用的x是外部变量,在语句块:

if(x==l)

{intx=2;

print—”%d,“,x++);

)

中使用的是刚刚定义x=2的变量。

答:结果是1,1

2.写出以下程序的执行结果。

#include<stdio.h>

intkk()

{intx=4;

staticinty;

y=5;

x*=2;

y*=2;

return(x+y);

)

voidmain()

{intj,s=0;

for(j=0;j<2;j++)

s=kk();

printf('*s=%d\nn,s);

提示:虽然两次调用函数kk(),但变量定义语句staticinty;只执行一次,而变量赋值语句

每次都要执行。

答:结果是s=28

3.写出以下程序的执行结果。

#include<stdio,h>

intt()

(

intx=0;

staticinty=4;

y+=++x;

returnx+y;

}

voidmain()

(

printf(n%d\n%(t(),t()));

)

提示:语句printf("带d\n",(t(),t()));中(t(),t())属于“,”号表达式,即两次调

用函数t(),在函数t()中,y为静态内部变量,因而语句staticinty=4;只执行一次。

答:结果是7

第8章文件

1.下述程序从终端读入文本(用$作为文本结束标志)复制到•个名为。ut.dat的新文件中,

请补全程序。

#include<stdio.h>

intmain()

{

FILE*fp;

charex;

if((fp=fopen((1)))==NULL)

return0;

while((cx=getchar())!='$,)

fputc(ex,fp);

(2);

return1;

)

提示:第1个空格是打开文件读,第2个空格是关闭文件。

答:1,"out.txt/',〃r+〃2.fclose(fp)

2.下面的程序用来统计文件中字符的个数,请补全程序。

#include<stdio.h>

intmain()

{FILE*fp;

longnum=0;

HnnT

if((fp=fopen(fname.datzr'))==NULL)

{

printf("Can'topenfile!\nn);

exit(0);

)

while((1))

{

fgetc(fp);

num++;

)

printf(”num=%d\n”,num);

fclose(fp);

return1;

|

提示:第1个空格表示文件没有结束,循环将持续。

答:!feof(fp)

3.以下程序由终端键盘输入一个文件名,然后把从终端键盘输入的字符,依次存放到该文件

中,用#作为结束输入的标志,请补全程序。

#include<stdio.h>

voidmain()

FILE*fp;

charch,fname[10];

printf("Inputthenameoffile\n'*);

gets(fname);

if((fp=)==NULL)

{

printf("Cannotopen\nH);

exit(0);

)

printf("Enterdata\nn);

while((ch=getchar())!=*#*)

fputc(,fp);

fclose(fp);

)

提示:文件名是从键盘读入的,因而文件名是用变量表示的,文件是打开写。

答:1.fopen("fname””+”)

2.ch

4.下述程序从一个二进制文件中读入结构体数据,并把读出的数据显示在屏幕上。请补全

程序。

#include<stdio.h>

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论