版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 45027-2024液氫閥門通用規(guī)范
- 2025年度油氣管道安全防護與應(yīng)急響應(yīng)合同
- 二零二五年度研發(fā)團隊薪酬保密合同樣本(免修改)
- 感人的結(jié)婚致辭13篇
- 愚人節(jié)的日記(集錦11篇)
- 護士臨床能力考核總結(jié)
- 智研咨詢發(fā)布:2024年中國廢舊動力電池梯次利用行業(yè)競爭格局及發(fā)展前景研究報告
- 2024年中國三網(wǎng)融合行業(yè)市場集中度、市場規(guī)模及未來前景分析報告
- 無人機在火災(zāi)防控中的應(yīng)用培訓(xùn)
- 音樂學(xué)校前臺工作總結(jié)
- 第1課 隋朝統(tǒng)一與滅亡 課件(26張)2024-2025學(xué)年部編版七年級歷史下冊
- 【歷史】唐朝建立與“貞觀之治”課件-2024-2025學(xué)年統(tǒng)編版七年級歷史下冊
- 產(chǎn)業(yè)園區(qū)招商合作協(xié)議書
- 2024年廣東省公務(wù)員錄用考試《行測》真題及答案解析
- 盾構(gòu)標準化施工手冊
- 天然氣脫硫完整版本
- 人教版八級物理下冊知識點結(jié)
- 2021年高考真題-生物(湖南卷) 含解析
- 新疆2024年新疆和田師范??茖W(xué)校招聘70人筆試歷年典型考題及考點附答案解析
- 【正版授權(quán)】 ISO 15978:2002 EN Open end blind rivets with break pull mandrel and countersunk head - AIA/St
- 2024山西文旅投資集團招聘117人公開引進高層次人才和急需緊缺人才筆試參考題庫(共500題)答案詳解版
評論
0/150
提交評論