浙江大學(xué)遠程教育2016年夏程序設(shè)計基礎(chǔ)(c)離線作業(yè)答案_第1頁
浙江大學(xué)遠程教育2016年夏程序設(shè)計基礎(chǔ)(c)離線作業(yè)答案_第2頁
浙江大學(xué)遠程教育2016年夏程序設(shè)計基礎(chǔ)(c)離線作業(yè)答案_第3頁
浙江大學(xué)遠程教育2016年夏程序設(shè)計基礎(chǔ)(c)離線作業(yè)答案_第4頁
浙江大學(xué)遠程教育2016年夏程序設(shè)計基礎(chǔ)(c)離線作業(yè)答案_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

浙江大學(xué)遠程教育學(xué)院

《程序設(shè)計基礎(chǔ)(C)》課程作業(yè)

姓名:王春強學(xué)號:

年級:2016春學(xué)習(xí)中心:桐廬學(xué)習(xí)中心

第1章C語言的基本構(gòu)成

程序調(diào)試題

1.編輯、調(diào)試以下程序

步驟1:在VisualC++環(huán)境下新建文件可用[開始]f[程序]f[MicrosoftVisualC++6.0]—

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

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

#include<stdio.h>/*文件預(yù)處理,包含標準輸入輸出庫,程序可調(diào)用輸入、輸出函

數(shù)*/

intadd(intx,inty)

(

intz;

z=x+y;

returnz;

)

intmain()

(

intadd(int,int);/*函數(shù)的說明,告訴系統(tǒng)在主函數(shù)中要調(diào)用add函數(shù)*/

inta,b,c;/*變量的定義*/

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

c=add(a,b);/*函數(shù)調(diào)用*/

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

/*調(diào)用系統(tǒng)輸出函數(shù)printf,%€1為格式控制符,依次用后面的變量值填充,以整數(shù)形

式輸出*/

}

請思考文件exl-l.c由幾個函數(shù)構(gòu)成?調(diào)用了那幾個系統(tǒng)函數(shù)?此程序中用到了哪幾個

保留字?哪幾個用戶自定義標識符?

答:

1.有2個函數(shù)構(gòu)成,主函數(shù)main。及自定義函數(shù)add。

2.調(diào)用的系統(tǒng)函數(shù)有輸入函數(shù)scanf。及輸出函數(shù)printf()

3.保留字有:int,return

4.自定義標識符有:a,b,c,z,x,y

步驟3:

編譯并運行程序,程序運行時輸入兩個整數(shù),2040,觀察程序運行的結(jié)果。

答:

結(jié)果是20+40=60

截圖如下:

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

2040

20+40=60

Pressanykeytocontinue

2.編輯、調(diào)試以下程序

步驟1:在VisualC++環(huán)境下新建文件可用[開始]f[程序]f[MicrosoftVisualC++6.0]

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

件名exl-2.c

步驟2:在文本編輯器中輸入以FC程序

#include<stdio.h>/*文件預(yù)處理,包含標準輸入輸出庫,程序可調(diào)用輸入、輸出函

數(shù)*/

#include<exl-2-2.c>

intmain()

(

intand(int,int);/*函數(shù)的說明,告訴系統(tǒng)在主函數(shù)中要調(diào)用and函數(shù)*/

intor(int,int);/*函數(shù)的說明,告訴系統(tǒng)在主函數(shù)中要調(diào)用and函數(shù)*/

inta,b,c;/*變量的定義*/

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

c=and(a,b);/*函數(shù)調(diào)用*/

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

/*調(diào)用系統(tǒng)輸出函數(shù)printf,%d為格式控制符,依次用后面的變量值填充,以整數(shù)形式

輸出*/

c=or(a,b);/*函數(shù)調(diào)用*/

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:點擊執(zhí)行圖標!,執(zhí)行程序1-2.C,當(dāng)程序運行時,鍵盤輸入2040,按回車。

2040

20&&40=1

20||40=1

您可以輸入其它的整數(shù),觀察程序的執(zhí)行結(jié)果。

答:(增加語句:#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章輸入輸出程序設(shè)計

1.用printf輸出一個中空的五角星。

答:

#include<stdio.h>

voidmain()

(

printf("^\n");

)

截圖如下:

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

Pressanykeytocontinue

2.仿照例子2.2,定義一個字符數(shù)組,從鍵盤輸入一字符串,然后輸出的程序。

答:

#include<stdio.h>

voidmain()

(

charstr[80];

printf("請輸入您的名字\n");

scanf("%s",str);

printf("學(xué)生:%s,正在就讀計算機專業(yè)\n”,str);

)

截圖:

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

請蕾您的名字

基里%佳峰,正在就讀計算機專業(yè)

Pressanykeytocontinue

3.從鍵盤輸入十六進制整數(shù),轉(zhuǎn)化為八進制數(shù)輸出。

答:

#include<stdio.h>

voidmain()

(

inta;

printf("請輸入十六進制整數(shù)\n”);

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

printf("轉(zhuǎn)換成的八進制數(shù)為:%o\n”,a);

截圖如下:

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

請輸入十六進制整數(shù)

土換成的八進制數(shù)為:15

Pressan9keytocontinue

4.只定義兩個整型數(shù)據(jù)并賦值,實現(xiàn)兩個整型數(shù)的互換。

答:

#include<stdio.h>

voidmain()

(

inta=13,b=25;

printf("原定義的數(shù)是:a=%d,b=%d\n”,a,b);

a=aAb;

b=bAa;

a=aAb;

printf("互換后的數(shù)是:a=%d,b=%d\n",a,b);

)

截圖:

原定義的數(shù)懸:a=13,b=25

互換后的數(shù)稟:a=25,b=13

Pressanykeytocontinue

5.從鍵盤上輸入一個整數(shù),分別輸出8、16進制數(shù)的程序。

答:

#include<stdio.h>

voidmain()

inta;

printf「請輸入一個整數(shù)\n");

scanf(n%dn,&a);

printf「轉(zhuǎn)換成的十六進制數(shù)是%x,轉(zhuǎn)換成的八進制數(shù)是%o\n”,a,a);

截圖如下:

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

請輸入一個整數(shù)

苣換成的十六進制數(shù)是b,轉(zhuǎn)換成的八進制數(shù)是13

Pressanykeytocontinue

6.從鍵盤上輸入一個整數(shù),分別輸出它的個位數(shù),十位數(shù),百位數(shù)。

答:

#include<stdio.h>

voidmain()

{

inta,b,c,d;

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

b=a%10;

c=(a/10)%10;

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

printf("個位數(shù)是:%d,十位數(shù)是:%d,百位數(shù)是:%d\nn,b,c,d);

)

截圖如下:

578

個位數(shù)是:8,十位數(shù)是:乙百位數(shù)是:5

Pressanykeytocontinue.

7.以下程序輸出結(jié)果是(9,10)。

#include<stdio.h>

voidmain()

(

inti=010,j=10;

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

)

8.運行程序,屏幕提示“您是一個學(xué)生嗎”,您輸入y或E進行回答,屏幕輸出您的選項。

答:

#include<stdio.h>

voidmain()

(

chara;

printf「您是一個學(xué)生嗎?請輸入了或T進行回答\n");

scanf(n%cu,&a);

if(a=='y')

printf「您是學(xué)生\iT);

elseif(a==,n,)

printf("您不是學(xué)生\n”);

else

printf,請重新輸入\n");

截圖:

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

您是一個學(xué)生嗎?請輸入,,或",進行回答

y

您是學(xué)生

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章循環(huán)程序設(shè)計

1.以下for語句的循環(huán)次數(shù)是多少?

intirj=3;

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

答:循環(huán)次數(shù)3次

2.下面的語句顯示輸出6行6列的整數(shù)數(shù)組h的主對角線上的所有元素,請補充完整:

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

nn

printf(%dzh[i][i])

3.寫出以下程序運行的結(jié)果,此程序?qū)崿F(xiàn)了什么功能?

#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);

結(jié)果是1,功能是輸出數(shù)字“0”的數(shù)量

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;

}

)

答:功能是倒置數(shù)組

5.寫出以下程序運行后的輸出結(jié)果。

#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.請改正下列程序的錯誤,改正后的程序?qū)懺谟疫叺目瞻滋帲⑸蠙C調(diào)試檢驗。

(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.輸入一個基數(shù),例如輸入9,輸出為:求1*3*……*9的值。輸出為:1*3*5*7*9=945

答:

#include<stdio.h>

voidmain()

longints=l,i=l,a;

printfT請輸入一個整數(shù):\曖);

scanf(n%dn,&a);

while(i<=a)

s=s*i;

i=i+2;

)

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

)

截圖如下:

請輸入一個整數(shù):

11

1*3*...*11=10395

Pressanykeytocontinue

8.輸入一個5~10之間的整數(shù)n,求1!+入+3!+…+n!°例如輸入5,輸出為:1!+2!+3!+…+5!

=153

答:

#include<stdio.h>

voidmain()

(

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

printf「請輸入一個5?10的整數(shù):\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。的整數(shù):

5

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

Pressanykeytocontinue

9.在屏幕上輸出以下內(nèi)容

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.輸入一行字符,統(tǒng)計它有多少個字母?

答:

#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章分支程序設(shè)計

1.輸入若干整數(shù)給X,使用if語句輸出x的絕對值,當(dāng)輸入0時結(jié)束。

答:

#include<stdio.h>

#include<math.h>

voidmain()

(

doublex;

printfC輸入若干整數(shù)(0表示結(jié)束):\n”);

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

while(l){

if(x!=0){

printf("%lf的絕對值為%H\iT,x,fabs(x));

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

}else{

break;

截圖:

輸入若干整數(shù)〈。表示結(jié)束):

-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.輸入?批數(shù),輸出比相鄰數(shù)大的數(shù),當(dāng)輸入。時結(jié)束。

答:

#include<stdio.h>

#include<math.h>

voidmain()

inta,b9c;

printf("請輸入整數(shù):\nM);

scanf(u%dM,&a);

while(a)

(

scanf(n%dn,&b);

if(b==O)

break;

if(a<b)

a=b;

printf("最大整數(shù)為:%d\n*\a);

)

截圖:

請輸入整數(shù):

4661131-2320

最大整數(shù)為:32

Pressanykeytocontinue

3.將輸入字符的大寫字符轉(zhuǎn)換成小寫字符輸出,小寫字符原樣輸出。

答:

#include<stdio.h>

voidmain()

(

chara;

scanf(H%cM,&a);

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

printf("轉(zhuǎn)換后的字母為:%c\n*\a+32);

else

printf("轉(zhuǎn)換后的字母為:%c\n*\a);

截圖:

,換后的字母為:h

Pressanykeytocontinue

4.輸入一批字符,按回車時結(jié)束,統(tǒng)計小寫字符、大寫字符、數(shù)字字符、或其它字符的個

數(shù)。

答:

#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個,數(shù)字字符有%d個,其它字符有%d個

截圖:

dsada£FJSHFH98SD&&^zz$zA&DS988

小寫字符有6個,大寫字符有[0個,數(shù)字字符有5個,其它字符有[。個

Pressanykeytocontinue.

5.編寫程序,計算分段函數(shù):

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.根據(jù)輸入的百分制按五分制的成績輸出。百分制與五分制之間的關(guān)系見下表。

百分制五分制

90~1005

80?894

70?793

60?692

<601

答:

#include<stdio.h>

voidmain()

(

intx,y;

print*"請輸入分數(shù):");

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完成:讀入一個實數(shù)x,再輸入一整數(shù),若輸入是1,則計算sin(x),若輸入2,

則計算cos(x),若輸入3,則計算tan(x),若輸入其他值,則顯示錯誤信息。

答:

#include<stdio.h>

#include<math.h>

voidmain()

(

doublex;

ints;

printf("請輸入一個實數(shù),一個整數(shù)\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;

截圖:

請輸入一個實數(shù),一個整數(shù)

0.53

tan<x>=0.546302

Pressanykeytocontinue

8、用switch完成:輸入星期1到星期5,輸出它們對應(yīng)的顏色

星期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四個等級中的一個,轉(zhuǎn)化輸出

等級輸出

A優(yōu)秀

B良好

C中等

D及格

E不及格

答:

#include<stdio.h>

voidmain()

{

printfT從鍵盤輸入A、B、C、D四個等級中的一個!\nn);

switch(getchar()){

case'A':

printf(“優(yōu)秀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章數(shù)組及其應(yīng)用

1.從鍵盤輸入12個數(shù),分別為:900,2,3,58,34,76,87,72,90,20,78,30,找出最大和最小數(shù)。

答:

#include<stdio.h>

voidmain()

(

inta[12];

intmax,min;

inti,m;

printer請輸入12個整數(shù)\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("最大數(shù)為:%d,最小數(shù)為:%d\n,\max,min);

截圖:

請輸入12個整數(shù)

90023583476877290207830

最大數(shù)為:9。。,最小數(shù)為:2

Pressanykeytocontinue

2.采用遍歷查找,在數(shù)組a[SIZE]={2,3,20,58,72,76,78,87,90,900}中,找出偶數(shù)。

答:

#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}中偶數(shù)為八曖);

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)中偶數(shù)為:

205872767890900Pressanykeyto

3.采用折半查找,在數(shù)組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("原來的數(shù)組:”);

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新的數(shù)組:”);

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

if(i==newSize-l){

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

}else{

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

截圖

原來時數(shù)組:2,3,20,58,72,76,78,78.90,9。。

新的數(shù)組:2,3,20,58,72,76,90,900

Pressanykeytocontinue

第6章函數(shù)及其應(yīng)用

練習(xí)與實踐

一、閱讀程序,寫出程序運行的結(jié)果。

1.寫出以下程序的執(zhí)行結(jié)果。

#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);

)

提示:數(shù)組b的首地址傳遞給形參a,*(a+k)就是數(shù)組元素b(k].

答:這是求平均數(shù),結(jié)果為:81.00000

2.閱讀程序,寫出程序的執(zhí)行結(jié)果。

#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;

提示:數(shù)組str的首地址傳遞給形參str,str[a]就是實參中的數(shù)組元素str[a],當(dāng)

數(shù)組元素不為,c,時進行復(fù)制。

答:結(jié)果為:str[]=abdef

3.寫出以下程序的執(zhí)行結(jié)果。

#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;

}

提示:循環(huán)體中

if(b[k]<x)

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

else

如果;版成立,執(zhí)行語句b[k+l]=b[k];表示數(shù)組元素b向后移,不滿足時插入X,

即從大到小排序。

答:結(jié)果是:

55

444

1111

11111

4.寫出以下程序的執(zhí)行結(jié)果。

#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

答:結(jié)果是:7

5.寫出以下程序的執(zhí)行結(jié)果,并說明其作用是什么?

#include<stdio.h>

intf(intn)

{

if(n>=10)

f(n/10);

nn

printf(%dzn%8);

return0;

}

intmain()

{

f(1234);

printf(n\nn);

return0;

}

提示:在函數(shù)f中,程序運行借助了堆棧,依次入棧的數(shù)據(jù)分別為1234、123、12,最后

n=l,n對8取余輸出,然后數(shù)據(jù)依次出棧對8取余輸出。

答:結(jié)果是:1432

二、程序設(shè)計

1.編寫一個函數(shù),計算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和次數(shù)n:”);

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

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

return0;

)

截圖:

請輸入x和次數(shù)n:1?5

1.500加0的10次方為:57.665039

Pressanykeytocontinue

2.編寫?個函數(shù),計算對角線上元素之和。

提示: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.編寫一個函數(shù)intinvert(charstr[]),將一個字符串的內(nèi)容顛倒過來。

提示:先求字符串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.編寫函數(shù),刪除字符串中,從指定位置m開始的n個字符。刪除成功,函數(shù)返回被刪除

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

提示: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.編寫一個程序,從鍵盤輸入的字符串,刪去非數(shù)字字符,轉(zhuǎn)換成整型數(shù)輸出。

提示: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.用遞歸的方法編寫一個函數(shù)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請輸入整數(shù)n:H);

scanf(H%dM,&a);

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

)

截圖:

請輸入整數(shù)n:50

1+2+...+50=1275

Pressanykeytocontinue

第7章變量存儲類型與多文件系統(tǒng)

1.寫出以下程序的執(zhí)行結(jié)果。

#include<stdio.h>

intx;

voidfun()

(

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

)

voidmain()

(

intx=l;

(

externintx;

printf(H,++x);

fun();

提示:在函數(shù)fun中及語句塊

{

externintx;

printf(n%d,++x);

)

中使用的x是外部變量,在語句塊:

if(x==l)

{intx=2;

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

)

中使用的是剛剛定義x=2的變量。

答:結(jié)果是1,1

2.寫出以下程序的執(zhí)行結(jié)果。

#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);

提示:雖然兩次調(diào)用函數(shù)kk(),但變量定義語句staticinty;只執(zhí)行一次,而變量賦值語句

每次都要執(zhí)行。

答:結(jié)果是s=28

3.寫出以下程序的執(zhí)行結(jié)果。

#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())屬于“,”號表達式,即兩次調(diào)

用函數(shù)t(),在函數(shù)t()中,y為靜態(tài)內(nèi)部變量,因而語句staticinty=4;只執(zhí)行一次。

答:結(jié)果是7

第8章文件

1.下述程序從終端讀入文本(用$作為文本結(jié)束標志)復(fù)制到?個名為。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個空格是關(guān)閉文件。

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

2.下面的程序用來統(tǒng)計文件中字符的個數(shù),請補全程序。

#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個空格表示文件沒有結(jié)束,循環(huán)將持續(xù)。

答:!feof(fp)

3.以下程序由終端鍵盤輸入一個文件名,然后把從終端鍵盤輸入的字符,依次存放到該文件

中,用#作為結(jié)束輸入的標志,請補全程序。

#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.下述程序從一個二進制文件中讀入結(jié)構(gòu)體數(shù)據(jù),并把讀出的數(shù)據(jù)顯示在屏幕上。請補全

程序。

#include<stdio.h>

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論