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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

浙江大學遠程教育學院

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

姓名:王春強學號:

年級:2023春學習中心:桐廬學習中心

第1章C語言的基本構成

程序調試題

1.編輯、調試如下程序

環(huán)節(jié)1:在VisualC++環(huán)境下新建文獻可用[開始]—[程序]—[MicrosoftVisualC++6.0]—

[MicrosoftVisualC++6.0]—[文獻]―[新建]-*[文獻]-[C++SourseFile],輸入文獻名exlT.c,

程序代碼如下:

#include<stdio.h>/*文獻預處理,包括原則輸入輸出庫,程序可調用輸入、輸出函

數(shù)*/

intadd(intx,inty)

(

intz;

z=x+y;

returnz;

)

intmain()

(

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

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

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

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

printf(/,%d+%d=%d\nw,a,b,c);

/*調用系統(tǒng)輸出函數(shù)prinlf,%d為格式控制符:,依次用背面H勺變量值填充,以整數(shù)形

式輸出*/

)

請思索文獻exl-Lc由幾種函數(shù)構成?調用了那幾種系統(tǒng)函數(shù)?此程序中用到了哪幾

種保留字?哪幾種顧客自定義標識符?

答:

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

3.調用的系統(tǒng)函數(shù)有輸入函數(shù)scanf()及輸出函數(shù)printf()

4.保留字有:int,return

自定義標識符有:a,bqz,x,y

環(huán)節(jié)3:

編譯并運行程序,程序運行時輸入兩個整數(shù),2040,觀測程序運行日勺成果。

答:

成果是20+40=60

截圖如下:

■M:\v-t--t-\ueDug\exi-i.exe

2040

20+40=60

Pressanykeytocontinue

2.編輯、調試如下程序

環(huán)節(jié)1:在VisualC++環(huán)境下新建文獻可用[開始]—[程序]-[MicrosoftVisualC+槍.0]

[MicrosoftVisualC++6.0]―[文獻]一[新建][文獻]f[C++SourseFile],輸入文

獻名exl-2.c

環(huán)節(jié)2:在文本編輯器中瑜入如下C程序

#include<stdio.h>/*文獻預處理,包括原則輸入輸出庫,程序可調用輸入、輸出函

數(shù)*/

#include<exl-2-2.c>

intmain()

intcind(int,int);/*函數(shù)的闡明,告訴系統(tǒng)在主函數(shù)中要調用and函數(shù)*/

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

inta,b,c;/*變量日勺定義*/

scanf(,z%d/d”,&a,&b);

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

printf(*%d&&%d=%d\n*,a,b,c);

/*調用系統(tǒng)輸出函數(shù)print。與d為格式控制符,依次用背面的變量值填充,以整數(shù)形式

輸出*/

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

printf(,,%d||%d=%d\n”,a,b,c);

)

環(huán)節(jié)3:[文獻]~[新建)-[文獻]―[C++SourseFile],輸入文獻名exl-2-2.c,源程序代碼

為:

intand(intazintb)

(

intc;

c=a&&b;

returnc;

}

環(huán)節(jié)4:[文獻)-*(新建L[文獻]-*[C++SourseFile],輸入文獻名exl-2-3.c,源程序代碼

為:

intor(inta,intbj

(

intc;

c=aIlb;

returnc;

環(huán)節(jié)5:點擊編譯圖標,編譯程序1-2.c

環(huán)節(jié)4:點擊執(zhí)行圖標口執(zhí)行程序1-2.c,當程序運行的,鍵盤輸入2040,按回車。

2040

20&&40=1

20||40=1

您可以輸入其他的整數(shù),觀測程序H勺執(zhí)行成果。

答:(增長語句:#inchidevexl-2-3.c>)

輸入2040;2020;3060如下:

D:\C++\Debug\exl-2,exe

2020

20&&20=1

20!:20=1

Pressanykeytocontinue

D:\C--r\Debug\exl-2.exe

3060

30&&60=1

30::60=1

Pressanykeytocontinue

第2章輸入輸出程序設計

1.用printf輸出一種中空日勺五角星。

答:

#include<stdio.h>

voidmain()

|

printf(M5ir\nH);

)

截圖如下:

I*D:\C++\Debug\cy.exe,1

A

Pressanykeytocontinue

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

答:

#include<stdio.h>

voidmain()

charstr[80];

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

scanf(,,%s,,,str);

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

截圖:

I"D:\C++\Debug\cy.exe"

噩,…業(yè)

Pressanykeytocontinue

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

答:

#include<stdio.h>

voidmain()

{

inta;

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

scanf("%x”,&a);

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

)

截圖如下:

■''D:\C++\Debug\cy.exew*i

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

%換成的八進制數(shù)為

Pressanykeytocontinue

只定義兩個整型數(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("互換后的I數(shù)是:a=%d,b=%d\n”,a,b);

}

截圖:

,b=25

,b=13

anyyt

continue

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

答:

#include<stdio.h>

voidmain()

(

inta;

printf(“請輸入一種整數(shù)\n");

scanf(M%dM,&a);

printf("轉換成的J十六進制數(shù)是%x,轉換成的八進制數(shù)是%0\膻聲聲);

}

截圖如下:

,'D:\C++\Debug\testexe"

請輸入一個整數(shù)

11

轉換成的十六進制數(shù)是回轉換成的八進制數(shù)是13

Pressanykeytocontinue

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

答:

#include<stdio.h>

voidmain()

{

inta,b,c,d;

scanf(M%dM,&a);

b=a%10;

c=(a/10)%10;

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

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

)

截圖如下:

578

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

Pressanykeytocontinue.

2.如下程序輸出成果是(9,10)o

#include<stdio.h>

voidmain()

|

inti=010,j=10;

printf("%d,%d\nn,++i,j-);

}

運行程序,屏幕提醒“您是一種學生嗎",您輸入‘y'或'n'進行回答,屏幕輸出您日勺選

項。

答:

#include<stdio.h>

voidmain()

{

chara;

printf,您是一種學生嗎?請輸入丫或"進行回答\n”);

scanf("%c”,&a);

,

if(a==y')

printf「您是學生\n”);

elseif(a==*n,)

priirtf(“您不是學生日“);

else

printfC請重新輸入\n”);

截圖:

?"D:\C--\Debug\test.exe"

圈是一個學生嗎?請輸大,或“進行回答

整是學生

Pressanykeytocontinue

從鍵盤輸入一種角度x,求10*sin(x)"勺值。

答:

#include<stdio.h>

#include<math.h>

voidmain()

doublex;

scanf(”%ir',&x);

printf("10*sin(x)時值為:%lAnH,10*sin(x));

截圖:

3

10*sin<x)的值為:1.411200

Pi?essanykeytocontinue)

第3章循環(huán)程序設計

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

inti,j=3;

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

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

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

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

printf(n%d",)

3.寫出如下程序運行的成果,此程序實現(xiàn)了什么功能?

#include<stdio.h>

voidmain()

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

inti,count=0;

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

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

elsecontinue:

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

)

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

4.寫出如下程序的功能,

#include<stdio.h>

voidmain()

(

inta[10]={2/4,0r-5,10,6z-8,9/6,7}/tmpzk;

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

{

tmp=a[k];

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

a[10-k-l]=tmp;

}

)

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

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("*");

printf("Xn'*);

)

)

答:輸出倒三角形五星陣

***★***

★★★

6.請改正下列程序的錯誤,改正后的程序寫在右邊的空白處,并上機調試檢查。

(1)

#includc<stdio.h>

voidmain()

(

inti,s;

i=1;s=0;

while(i<=100);

i++;

printfC1+2+3+....4-99+100=%d\n*\s);

)

答:改正后為:

#include<stdio.h>

voidmain()

(

inti,s;

i=l;s=0;

while(i<=IOO)

(

s=s+i;

i++;

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

截圖如下:

B*D:\VC++\Debug\testl.exe"

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

Pressanykeytocontinue

#include<stdio.h>

voidmain()

(

inti,s;

i=l;

s=0;

while(i<=100)

primf("1+2+3+….+99+1OD=%d\n,,,s);

答:改正如下:

#include<stdio.h>

voidmain()

inti,s;

i=l;

s=0;

while(i<=100)

(

s=s+i;

i++;

)

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

)

截圖如下:

■u:\vv-t--b\ueDug\iesLL.exe

*99*100-5050

Pressanykeytocontinue

(3)

#include<s(dio.h>

voidmain()

inti=l,s;

while(i<=100);

s=s+i;

i++;

)

printfCl+2+34-....+99+100=%d\n,\s);

}

答:改正如下:

#include<stdio.h>

voidmain()

(

inti=l^=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

7.愉入一種基數(shù),例如愉入9,輸出為:求1*3*.......*9時值v愉出為:1*3*5*7*9=945

答:

#include<stdio.h>

voidmain()

{

longints=l,i=l,a;

printf(”請輸入一種整數(shù):\nH);

scanf(M%dM,&a);

while(i<=a)

(

s=s*i;

i=i+2;

}

)

截圖如下:

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

11

1*3*...*11=10395

Pressanykeytocontinue

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

=153

答:

#include<stdio.h>

voidmain()

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

printfT請輸入一種5-10的整數(shù):\n”);

scanf(M%d'\&a);

while(i<=a)

(

t=t*i;

s=s+t;

i++;

}

printf(,,l!+2!+3!+...+%d=%d\n'\a,s);

)

截圖:

請輸入一個5T。的整數(shù):

5

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

Pressanykeytocontinue

9.在屏幕上輸出如下內容

1

12

123

1234

12345

123456

1234567

12345678

答:

#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+100H勺和,用多種for體現(xiàn)式來完畢。

答:措施1

#include<stdio.h>

voidmain()

(

inti,s=0;

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

(

s=s+i;

)

pnntf(',2+4+...+100=%d\n,?;

)

措施2

#include<stdio.h>

voidmain()

inti=0,s=0;

for(;i<=100;)

(

s+=i;

i+=2;

)

printf(,,2+4+...+100=%d\n'*^);

}

措施3

#include<stdio.h>

voidniain()

(

inti,s;

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

printf(,'2+4+...+100=%d\n'^);

}

截圖

M:\VC++\ueDug\resn.exe

2+4+...+100=2550

Pressanykeytocontinue

輸入一行字符,記錄它有多少個字母?

答:

#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,&&cv='z')||(c>='A'&&c<='Z')){

scount++;

}

count++;

printfC,%s,count=%d\n**,string,scount);

第4章分支程序設計

I.輸入若干整數(shù)給X,使用if語句輸出X口勺絕對值,當輸入。時結束。

答:

#incliide<stdio.h>

#include<inath.h>

voidmain()

(

doublex;

printf("輸入若干整數(shù)(0表達結束):\nM);

scanf(M%lf",&x);

while(l){

if(x!=0){

printf(n%lf的絕對值為%】AiT,x,fabs(x));

scanf("%l『,&x);

}else{

break;

)

截圖:

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

-4-567-110-46

-4.000000的絕時值為4.000000

-5.000000的維什勺-5--.0-0-0-0-0--0

6.000000

.000000的絕對值為7.000000

Fil.000000的絕對值為11.000000

ressanykeytocontinue

2.輸入?批數(shù),輸出比相鄰數(shù)大的數(shù),當輸入0時結束。

答:

#include<stdio.h>

#indude<math.h>

voidmain()

(

inta,b,c;

printf("請輸入整數(shù):'JI*');

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

while(a)

{

scanfC'%(lM,&b);

if(b==O)

break;

if(a<b)

a=b;

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

截圖:

請輸入整數(shù):

4661131-2320

最大整數(shù)為:32

Pressanykeytocontinue

3.將輸入字符的I大寫字符轉換成小寫字符輸出,小寫字符原樣輸出。

答:

#includc<stdio.h>

voidmain()

chara;

scanf(n%c*',&a);

if(a>='A'&&a<=*Z*)

priuUT轉換后的字母為:%c\n",a+32);

else

printf,轉換后的字母為:%c\n'\a);

截圖:

轉換后的字母為:h

Pressanykeytocontinue

4.輸入一批字符,按回車時結束,記錄小寫字符、大寫字符、數(shù)字字符、或其他字符的個數(shù)。

答:

#include<stdio.h>

voidmain()

{

charc;

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

while(l)

(

scanf(*'%c,,,&c);

if(c=='\n')

break;

if(c>='A'&&c<='Z')

b++;

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

a++;

elseif(c>='0'&&c<='9,)

111++;

else

n++;

}

prints”小寫字符有%d個,大寫字符有%d個,數(shù)字字符有%d個,其他字符有%d個

\n*',a,b,m,n);

)

截圖:

dsada£FJSHFH98SD&&^zz$X^&DS988

小寫字符有6個,大寫字箕有10個,數(shù)字字符有5個,其它字符有10個

Pressanykeytocontinue.

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

x+5x<1

y=<2x1cx<10

3x>10

x-10

答:

#include<stdio.h>

voidmain()

(

doublex,y;

scanf(”%lf”,&x);

if(x<=l)

y=x+5;

elseif(x>10)

y=3/(x-10);

else

printfC'y=%lAn0,y);

截圖:

20

y=0.300000

Pressanykeytocontinue

6.根據(jù)輸入的百分五分制

制按五分制的成績

輸出。百分制與五

分制之間日勺關系見

下表。

百分制

90~1005

80?894

70-793

60~692

<601

答:

#include<stdio.h>

voidmain()

intx,y;

printf("請輸入分數(shù)

scanf(”%d”,&x);

if(x>100&&x<0)

printfV成績輸入錯誤=%d”);

else

(

if(x<=10()&&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(“五分制成績二%小11”4);

)

)

截圖:

u:\vc++\ueoug\testi.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ù)\n");

scanf(n%ir*,&x);

scanf(u%d,,,&s);

switch(s){

case1:

printf(,,sin(x)=%W\n,'^in(x));

break;

case2:

printf(,,cos(x)=%lAn,,,cos(x));

break;

case3:

printf("tan(x)=%lf\nt',tan(x));

break;

default:

printf("輸入錯誤");

break;

}

)

截圖:

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

0.53

tan<x>=0.546302

Pressanykeytocontinue

8、用swiich完畢:輸入星期I到星期5,輸出它們對應肚I顏色

星期1:blue

星期2:red

星期3:white

星期4:yellow

星期5:green

答:

#include<stdio.h>

voidmain()

{

ints;

printf("輸入星期1到星期5\n");

scanf(”%d”,&s);

switch(s){

case1:

printf("今天的顏色是:blue\nM);

break;

case2:

printf("今天的顏色是:red\nn);

break;

case3:

prints”今天的顏色是:white'n”);

break;

case4:

printfT今天的顏色是:yellowXn");

break;

case5:

printf("今天的顏色是:greenn'*);

break;

default:

prints”輸入錯誤”);

break;

)

截圖:

輸入星期1到星期5

4

今天的顏色是:yellow

Pressanykeytocontinue

9、用switch輸出

完畢:從鍵盤

輸入A.B.C.D

四個等級中

向一種,轉化

輸出

等級

A優(yōu)秀

B良好

C中等

D及格

E不及格

答:

#include<stdio.h>

voidmain()

printf("從鍵盤輸入A.B.C.D四個等級中的一種!\n'*);

switch(getchar()){

case'A':

printfC優(yōu)秀\n”);

break;

case*B':

printfC'良好\n”);

break;

case*C':

printf("中等\n”);

break;

case'D':

printf("及格\n“);

break;

case'E*:

printf("不及格\iT);

break;

default:

printf("輸入錯誤”);

break;

}

)

截圖

從鍵盤輸入A、B、C、D四個等級中的一個!

A

優(yōu)秀

Pressanykeytocontinue.

第5章數(shù)組及其應用

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

答:

#include<stdio.h>

voidinain()

{

inta[12j;

intmax,min;

inti,m;

printf(”請輸入12個整數(shù)\n");

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

scanf(n%d,',&a[i]);

max=a[01,min=a[0];

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

(

if(max<a[i])

max=a[i];

if(min>a[i])

min=afi];

)

printf("最大數(shù)為:%d,最小數(shù)為:%d\nM,max,min);

}

截圖:

請輸入12個整數(shù)

90023583476877290207830

最大數(shù)為:900,最小數(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(,'a[SIZE]={2,3,20,58,72,76,78,87,90,900}中偶數(shù)為八n");

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

if(afil%2==0)

printf(n%-4du,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>

#defineSIZE10

voidmain()

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

intiJ=(),k,newSize;

newSize=SIZE;

k=newSize;

printf("本來的數(shù)組:*,);

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

if(i==newSize-l){

}else{

)

}

i=(j+k)/2;

while(j<=k)

{

if(a[il>78)

k=i-l;

elseif(a[i]<78)

j=i+l;

else{

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

aUl=aU+U;

newSize—;

k=newSize;

j=0;

)

i=(j+k)/2;

)

printf("新的I數(shù)組:");

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

if(i==newSize-l){

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

}else(

}

}

)

截圖

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

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

Pressanykeytocontinue

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

練習與實踐

一、閱讀程序,寫出程序運行的成果。

1.寫出如下程序的執(zhí)行成果。

#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,89z98,76,78,45,88,81,92,85);

ave=aver(b);

n

printf("ave=%f\nzave);

)

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

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

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

#include<stdio.h>

voidabc(charstr[])

{inta,b;

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

if(str[a]!=*cz)

3tr[b?I]=str[a);

Str[b]='\0,;

}

intmain()

(

charstr(]="abcdefu;

abc(str);

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

return0;

)

提醒:數(shù)組strU勺首北址傳遞給形參str,str[a]就是實參中的數(shù)組元素str[a],

當數(shù)組元素不為'c’時志行復制。

答:成果為:str[]=abdef

3.寫出如下程序"勺執(zhí)行成果。

#include<stdio.h>

intsort(intb[],intn,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,i,a[i]);

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

printf(**%d,b[i]);

printf(n\nn;;

}

return0;

}

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

if(b(k]<x)

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

else

break;

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

即從大到小排序。

答:成果是:

55

444

1111

11111

4.寫出如下程序的執(zhí)行成果。

#include<stdio.h>

intfun(intx)

{intp;

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

return3;

else

p=x-fun(x-2);

returnp;

}

intmain()

(

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

return0;

}

提醒:fun(9)=9-fun(7)z..fun(1)=3

答:成果是:7

5.寫出如下程序H勺執(zhí)行成果,并闡明其作用是什么?

#include<stdio.h>

intf(intn)

(

if(n>=10)

f(n/10);

printf;

return0;

)

intmain()

(

f(1234);

printf(n\nu);

return0;

}

提醒:在函數(shù)f中,程序運行借助了堆棧,依次入棧的數(shù)據(jù)分別為1234.123.12,

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

答:成果是:1432

二、程序設計

1.編寫一種函數(shù),計算x的n次H勺平方。

提醒:for(y=l,i=0;ivn;i++)

答:

#includc<stdio.h>

doubless(doublex,intn)

doubley=l;

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

y=y*x;

return(y);

}

intmain()

doublea;

intb;

printf("請輸入x和次數(shù)n:u);

scanf(u%lf%d*\&a,&b);

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

return0;

}

截圖:

請輸入x和次數(shù)n:1.510

1.500000的10次方為:57.665039

Pressanykeytocontinue

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

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

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

if(i==j)

s=s+a[il[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++)

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

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

printf("對角線元素之和為s=%d\n"⑼;

截圖:

對角線元素之和為s=15

Pressanykeytocontinue

3.編寫一種函數(shù)intinvert(charstr[]),將一種字符串【I勺內容顛倒過來。

提醒:先求字符串strIJ勺長度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[121='*abcdefgl23M;

printf「顛倒前:%s\n”,a);

invert(a);

printf("顛倒后:%s\n”,a);

}

截圖

顛即:abcdefgl23

前隹!后:321gfedcba

pi、essanykeytocontinue

4.編寫函數(shù),刪除字符串中,從指定位置m開始H勺n個字符。刪除成功,函數(shù)返回被刪除字

符串;否則返回空時值。

提醒:for(k=m,i=0;str[i];i++)

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

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

答:

#include<stdio.h>

intcutstring(intmjntnycharstr[l){

intI=strlcn(str);

if(m+n-l>=l)

return0;

intkJ;

charnstr[n];

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

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

)

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

return0;

)

voidmain()

{

intm,n;

charstr[ll]=,'ddksosekciM;

printf(',%s\n,,,str);

printf(nPleaseinputmandn:\nM);

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

cutstring(m,n,str);

printf(',%s\n,',str);

}

5.編寫一種程序.從健盤輸入的J字符串.刪去非數(shù)字字符.轉換成整型數(shù)輸出.

提醒:for(s=0,i=0J=0;str[i];i++)

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

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

答:

#include<stdio.h>

voidniainO

(

charstr[ll];

ints,iJ;

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

scanf(”%c”,&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(n%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()

int

printf("請輸入整數(shù)n:M);

scanfT%d”,&a);

printf(',l+2+...+%d=%d\n,*,a^um(a));

截圖:

請輸入整數(shù)n:5。

1+2+...+50=1275

Pressanykeytocontinue

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

1.寫出如下程序的執(zhí)行成果。

#include<stdio.h>

intx;

voidfun()

{

printf("%dM,x++);

)

voidmain()

intx=l;

(

externintx;

,,

printf(%d/",+4-x);

fun();

)

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

externintx;

printf("%dz"z+^-x);

}

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

if(x==l)

{intx=2;

printf(,,%d,",x4-+);

}

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

答:成果是1,1

2.寫出如卜程序的執(zhí)行成果。

#include<stdio.h>

intkk()

{intx=4;

staticinty;

y=5;

x*=2;

y*=2;

return(x+y);

)

voidmain()

{intjzs=0;

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

s=kk();

printf("s=%d\nH,s);

)

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

每次都要執(zhí)行。

答:成果是s=28

3.寫出如下程序的執(zhí)行成果。

#include<stdio.h>

intt()

{

intx=0;

staticinty=4;

y+=++x;

returnx+y;

}

voidmain()

(

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

}

提醒:語句printf(”Q\n,\(t()zt()));中(t:(),t())屬于“,”號體現(xiàn)式,即兩次調

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

答:成果是7

第8章文獻

1.下述程序從終端讀入文本(用$作為文本結束標志)復制到一種名為。ut.datn勺新文獻中,請補全

程序。

?include<stdio.h>

intmain()

FILE*fp;

charex;

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

return0;

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

tputc(ex,tp);

(2);

return1;

)

提醒:第1個空格是打開文獻讀,第2個空格是關閉文獻。

答:1."out.txt"r+"2.fclose(fp)

2.下面的程序用來記錄文獻中字符的個數(shù),請補全程序。

#include<stdio.h>

intmain()

{FILE*fp;

longnum=0;

if((fp=fopen("fname.dat","r"))==NULL)

(

printf("Can'topenfile!\nH);

exit(0);

)

while((1))

(

fgetc(fp);

num++;

I

printf(,,nuir.=%d\n",num);

fclose(fp);

return1;

)

提醒:第1個空格表達文獻沒有結束,循環(huán)將持續(xù)。

答:!£eof(fp)

3.如下.程序由終端鍵盤輸入一種文獻名,然后把從終端鍵盤輸入的字符,依次寄存到該文獻中,用#

作為結束輸入的標志,請補全程序。

#include<stdio.h>

voidmain()

(

FILE*fp;

charchzfname[10];

printf('*Inputthenameoffile\nH);

gets(fname);

if((fp=)==NULL)

{

printf("Cannotopen\n");

exit(0);

)

printf(nEnterdata\n");

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

fputc(,fp);

fclose(fp);

)

提醒:文獻名是從鍵盤讀入的,因而文獻名是用變量表達H勺,文獻是打開寫。

答:Lfopen("fname"r+")

2.ch

4.下述程序從一種二進制文獻中讀入構造體數(shù)據(jù),并把讀出的數(shù)據(jù)顯示在屏幕上。請補全程序。

^include<stdio.h>

structrec

{inta;

floatb;};

voidrecout(FILE*fp)

{structrecr;

do

{fread((1),sizeof(structrec),(21,fp);

it((3))

printf("%d,%f",r.a,r.b);

}while(1);

)

voidmain()

{FILE*fp;

fp=fopen"rb");

recout(fp);

fclose(fp);

)

提醒:在fread語句中,(1)中為寄存所讀出構造數(shù)據(jù)的內存地址,當然此數(shù)據(jù)是賦給變量r,(2)中是

讀出構造體變量數(shù)據(jù)1內個數(shù),(3)是與循環(huán)中斷有美的判斷,(4)為中斷循環(huán)。

答:1.&r

2.1

3.feof(fp)

4.break

5.從鍵盤輸入一種字符串,并逐一將字符串的每個字符傳送到磁盤文獻”lUxt"中,字符串

的結束標識為“#,

答:

#include<stdio.h>

#include<stdlib.h>

intniain()

{

FILE*fp;

charch;

if((fp=fopen("ll.txt,,,,w',))==NULL)

{

printf("不能打開這個文獻!\n");

exit(O);

)

while((ch=getchar())!=,#1)

fputc(ch,fp);

fclose(fp);

return0;

)

截圖:

N)11.txt-汜事本

文件(F)EE)32)查看(V)籍期用

dsadfsdfsdfjkjf39182398

■"D:\vc++\Debug\testl.exew

dsadfsdfsdfjkjf39182398ttdkjskdjskd

Pres3anykeytocontinuc

6.有一文本文獻ll.txt,請編寫一種程序將文獻中的英文字母及數(shù)字字符顯示在屏幕上。

提醒:

#include<stdio.h>

#include<stdlib.h>

intmain()

FILE*fp;

charch;

if((fp=fopen(**ll.txtu,,,r+H))==NULL)

{

printfT不能打開這個文獻\n");

exit(O);

ch=fgetc(fp);

if((ch>=,0,&&ch<=,9')||(ch>=,A,&&ch<=,Z,)||(ch>=a,&&ch<=,z,))

putchar

溫馨提示

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

最新文檔

評論

0/150

提交評論