C語(yǔ)言程序設(shè)計(jì)第2版教學(xué)課件作者李敏《C語(yǔ)言程序設(shè)計(jì)》第2版-課后習(xí)題答案_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì)第2版教學(xué)課件作者李敏《C語(yǔ)言程序設(shè)計(jì)》第2版-課后習(xí)題答案_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì)第2版教學(xué)課件作者李敏《C語(yǔ)言程序設(shè)計(jì)》第2版-課后習(xí)題答案_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì)第2版教學(xué)課件作者李敏《C語(yǔ)言程序設(shè)計(jì)》第2版-課后習(xí)題答案_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì)第2版教學(xué)課件作者李敏《C語(yǔ)言程序設(shè)計(jì)》第2版-課后習(xí)題答案_第5頁(yè)
已閱讀5頁(yè),還剩55頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

《C語(yǔ)言程序設(shè)計(jì)》第2版

第I章程序設(shè)計(jì)與c語(yǔ)言概述

一、填空題

1.算法是指為解決某個(gè)特定問(wèn)題而采取的方法和步驟

2.函數(shù)主main()

3..c.obj.exe

4.(}

5.采用模塊化方法,自上而下,逐步細(xì)化

6.有窮性確定性可行性有零個(gè)或多個(gè)輸入有一個(gè)或多個(gè)輸

二、選擇題

l.D2.D3.B4.B5.D6.A7.B8.D9.C

三、簡(jiǎn)答題

1.程序是指存儲(chǔ)在計(jì)算機(jī)內(nèi)部存儲(chǔ)器中,可以連續(xù)執(zhí)行的一條條指

令的集合。程序設(shè)計(jì)是指對(duì)提出的問(wèn)題進(jìn)行分析、確定數(shù)據(jù)模型、設(shè)

計(jì)算法、編寫(xiě)源代碼、調(diào)試并運(yùn)行的方法和過(guò)程。

2.結(jié)構(gòu)化程序設(shè)計(jì)是采用模塊化結(jié)構(gòu),自上而下,逐步細(xì)化的基本

思想來(lái)進(jìn)行程序設(shè)計(jì)的一種方法。

用結(jié)構(gòu)化程序設(shè)計(jì)方法得到的程序不僅清晰易讀易寫(xiě)、而且易維護(hù)、

易排錯(cuò)、易驗(yàn)證正確性,所以提倡采用此方法。

3.(1)C語(yǔ)言簡(jiǎn)潔、緊湊、使用方便。(2)運(yùn)算功能豐富。(3)數(shù)

據(jù)結(jié)構(gòu)豐富。(4)C語(yǔ)言具有結(jié)構(gòu)化的特點(diǎn)。(5)語(yǔ)法規(guī)則相對(duì)寬松,

程序設(shè)計(jì)自由度大。(6)生成目標(biāo)代碼質(zhì)量高,程序執(zhí)行效率高。(7)

C語(yǔ)言允許直接訪問(wèn)物理地址,能進(jìn)行位操作,具有匯編語(yǔ)言的大部

分功能。(8)可移植性好。

四、編寫(xiě)程序題

#include<stdio.h>

voidmain()

printf("*&*&*&*&*&*&*\n*);

printf("*Youarewelcome!*\n,?);

printf("*&*&*&*&*&*&*\n*);

第2章數(shù)據(jù)類(lèi)型、運(yùn)算符與表達(dá)式

一、選擇題

l.B2.B3.A4.C5.C6.A7.D8.A9.D10.C

ll.C12.A13.B14.B15.C16.B

二、填空題

1、intfloatchar

2、1

3、366.0

4、24612

5、3840

6、換行,將當(dāng)前位置移到下一行的開(kāi)頭橫向跳格到下一個(gè)制表

7、(int)(b*c)

三、程序分析題

1、477

2、5555-4-5

3、b

b

4、M

5、30

第3章C程序設(shè)計(jì)的三種基本結(jié)構(gòu)

一、選擇題

1-56-1011-1516-2021-24

DBDAABCBBACDCCCCAAABABDA

二、填空題

1.順序結(jié)構(gòu)選擇結(jié)構(gòu)(分支結(jié)構(gòu))循環(huán)結(jié)構(gòu)

2.字符輸入函數(shù)從終端輸入一個(gè)字符字符輸出函數(shù)從終

端輸出一個(gè)字符#include<stdio.h>

3.原樣輸出

4.一對(duì)花括號(hào)

5.exp(x*x+y*y)/abs(x-y)

6.1

7.x>12&&x<60llx<0

8.printf("a=%d,b=%d",a,b);

9.12,345

10.6,5,A,B

11.123.460000

12.855

13.yes

14.-2

15.passwarn

16.3,2,-1

17.31

18.7

19.a<10b%4!=0

20.2*x+4*y==100

21.p*10

22.j>0i

23.10

三、程序分析題

1.(1)-100200

(2)i=-100,j=200

(3)i=-100

(4)j=200

2.100,101

d,e

D,E

3.2,20.000000

4.1,5,5,6

5.求出隨機(jī)輸入的3個(gè)數(shù)的最大數(shù)和最小數(shù)

6.6

7.$$$$$

8.7

9.54321

10.3,2,-1

11.32

四、編寫(xiě)程序題

1.輸入一個(gè)3位正整數(shù),以倒序形式輸出它的各位數(shù)。(如輸入123,

輸出321)

#include<stdio.h>

voidmain()

inta,bl,b2,b3;

scanf("%d",&a);

bl=a%10;

b2=a/10%10;

b3=a/100%10;

printf("%d%d%d",bl,b2,b3);

)

2.輸入一個(gè)華氏溫度,要求輸出對(duì)應(yīng)的攝氏溫度。(保留兩位小數(shù))

#include<stdio.h>

voidmain()

(

floatc,f;

printf("請(qǐng)輸入一個(gè)華氏溫度

scanf("%f",&f);

c=(5.0/9.0)*(f-32);

printf("它的攝氏溫度為:%.2f\n",c);

)

3.編寫(xiě)程序,求解一元二次方程ax2+bx+c=0的根。(假設(shè)b2-4acN0)

#include<stdio.h>

#include<math.h>

voidmain()

floata,b,c,disc,xl,x2,p,q;

scanf("%f%f%f",&a,&b,&c);

disc=b*b-4*a*c;

p=-b/(2*a);

q=sqrt(disc)/(2*a);

xl=p+q;

x2=p-q;

printf("x1=%5,2f,x2=%5,2^n",xl,x2);

)

4.編寫(xiě)一個(gè)計(jì)算售票收款數(shù)目的小程序。要求:每張票零售價(jià)格為

20元,團(tuán)體票價(jià)格為15元,一次購(gòu)票數(shù)目為20張以上時(shí)按團(tuán)體票

出售。對(duì)輸入的購(gòu)票數(shù)目計(jì)算并輸出相應(yīng)的購(gòu)票款的數(shù)額。

#include<stdio.h>

main()

(

intsum,number;

printf("Pleaseinputthenumber:");

scanf("%d",&number);

if(number>=20)sum=number*15;

elsesum=number*20;

printf("sum=%d\n",sum);

)

5.輸入一個(gè)正整數(shù),計(jì)算并輸出這個(gè)正整數(shù)的各位數(shù)字之和。(如輸

入179,則各位數(shù)字之和為1+7+9=17)

#include"stdio.h"

#include"math.h"

voidmain()

(

longinta,b,i,n=0;

intsum=0;

printf("Inputthenumber:");

scanf("%ld",&a);

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

if(a/pow(10,i)>=l)

n++;

for(i=n-l;i>=0;i—)

(

b=a/pow(10,i);

a=a-b*pow(10,i);

sum+=b;

)

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

getch();

)

6.隨機(jī)輸入4個(gè)數(shù),編寫(xiě)程序?qū)?個(gè)數(shù)按從大到小的順序輸出。

#include<stdio.h>

main()

(

intt,a,b,c,d;

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

if(a<b){t=a;a=b;b=t;}

if(a<c){t=a;a=c;c=t;}

if(a<d){t=a;a=d;d=t;}

if(b<c){t=b;b=c;c=t;}

if(b<d){t=b;b=d;d=t;}

if(c<d){t=c;c=d;d=t;}

printf("%d%d%d%d\n",a,b,c,d);

)

7.編寫(xiě)程序,輸出1990年?2006年之間所有的閏年年份。

#include<stdio.h>

main()

(

intyear;

for(year=1990;year<=2006;year++)

if(year%4==0&&year%100!=0llyear%400==0)

printf("%d\t",year);

8.編寫(xiě)程序,求解1!+2!+……+10!o

#include<stdio.h>

voidmain()

(

inti;

longn=l,p=0;

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

(

n*=i;

p+=n;

)

printf("l!+2!+...+10!=%ld\n",p);

)

9.編寫(xiě)程序,輸出所有“水仙花數(shù)”。

#include"stdio.h"

main()

(

inti,j,k,n;

for(n=100;n<1000;n++)

(

i=n/100;

j=n/10%10;

k=n%10;

if(n==i*i*i+j*j*j+k*k*k)

printf("%-5d",n);

)

)

10.編寫(xiě)程序,判斷n是否為素?cái)?shù)。

#include"stdio.h"

#include"math.h"

voidmain()

(

inti,m,k;

scanf("%d",&m);

k=sqrt(m);

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

if(m%i==0)break;

if(i>k)printf("%disaprimenumber.\n",m);

elseprintf("%disnotaprimenumber.\n",m);

)

11.編寫(xiě)程序,從鍵盤(pán)上連續(xù)輸入若干個(gè)字符,直到輸入回車(chē)符為止。

統(tǒng)計(jì)并輸出所輸入的空格、大寫(xiě)字母、小寫(xiě)字母及其它字符的個(gè)數(shù)。

#include<stdio.h>

voidmain()

charch;

intal=0,a2=0,a3=0,a4=0;

while((ch=getchar())!='\n')

(

if(ch>='A'&&ch<='Z')al++;

elseif(ch>='a'&&ch<='z')a2++;

elseif(ch=='')a3++;

elsea4++;

)

printf("%d,%d,%d,%d\n",al,a2,a3,a4);

)

12.每個(gè)桃子0.5元,第一天買(mǎi)2個(gè)桃子,從第二天開(kāi)始,每天買(mǎi)前

一天的2倍,直到購(gòu)買(mǎi)的桃子數(shù)不超過(guò)100。編寫(xiě)程序求每天平均花

多少元錢(qián)。

#include<stdio.h>

voidmain()

(

intbuy=2,day=0;

doublesum=0;

while(buy<=100)

sum+=0.5*buy;

day++;

buy*=2;

)

printf("%.lf\n",sum/day);

)

第4章數(shù)組

一、選擇題

l.D2.C3.D4.C5.B6.B7.C8.C9.C10.Cll.B12.D

13.C

二、填空題

1、0,5

2、地址

3、按行存放

4、#include<string.h>或#include“string.h"

5、2

6、1B

7、&num[i]i%4==0printf("\n");

三、程序分析題

1、輸入10個(gè)整數(shù),對(duì)輸入的10個(gè)整數(shù)從大到小進(jìn)行排序。

2、程序運(yùn)行結(jié)果:

Abcbcc

3、程序運(yùn)行結(jié)果:

92

四、編寫(xiě)程序題

1.運(yùn)用數(shù)組求出100之內(nèi)能被5整除的數(shù)。

#include<stdio.h>

voidmain()

(

int

inta[50];

for(i=l,j=0;i<=100;i++)

{if(i%5==0)

{a[j]=i;

j++;

)

m=j;

}

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

printf("%5d",a|j]);

}

2.有10個(gè)數(shù)已按由小到大的順序排列好。要求輸入一個(gè)數(shù),把它插

入到原有數(shù)列中,而且仍然保持原有的順序,并輸出新的數(shù)組。

#include<stdio.h>

voidmain()

(

inti,j,m,tag=0;

inta[ll]={2,4,6,8,10,12,14,16,18,20);

scanf("%d",&m);

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

{if(m<a[i])

{for(j=9;j>=i;j-)

aU+U=a|j];

a[i]=m;

tag=l;

break;

)

)

if(tag==O)

a[10]=m;

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

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

}

3.已知一維數(shù)組a中存放了10個(gè)互不相同的整數(shù),從鍵盤(pán)任意

輸入一個(gè)整數(shù)x,從數(shù)組a中刪除與x相同的元素,然后輸出數(shù)組a。

#include<stdio.h>

voidmain()

(

inti,j,m;

inta[10]={2,4,6,8,10,12,14,16,18,20);

scanf("%d",&m);

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

{if(m==a[i])

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

aUMU+1];

)

)

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

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

)

4.求一個(gè)3x3矩陣對(duì)角線(xiàn)元素之積。

#include<stdio.h>

voidmain()

(

int

inta[3][3]={1,2,34,5,6,7,8,9);

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

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

{if(i==j)

if(i+j==2&&i!=j)

m=m*a[i]「];

)

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

{for(j=0;j<3;j++)

printf("%3d",a[i][j]);

printf("\n");

}

printf("%d",m);

)

5.求出數(shù)組周邊元素的平均值。

#include<stdio.h>

voidmain()

(

inti,j,m=0,num=0;

floatavg;

inta[3][3]={0,l,2,3,4,5,6,7,8);

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

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

if(i==0llj==0lli==2llj==2)

{m=m+a[i][j];

num++;

)

avg=(float)m/num;

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

{for(j=0;j<3;j++)

printf("%3d",a[i][j]);

printf("\n");

)

printf("%.3f',avg);

}

6.打印“魔方陣”。魔方陣是指每一行、每一列和對(duì)角線(xiàn)之和均相等

的方陣。

#defineMAX15

#include<stdio.h>

main()

{intn;

intm=1;

inti,j;

inta[MAX][MAX];

scanf("%d",&n);

i=0,j=(n+l)/2-l;

while(m<=n*n)

a[i][j]=m;

m++,i--,j++;

if((m-l)%n==O&&m>l)

i=i+2,j=j-l;

if(i<0)

i=i+n;

ifG>(n-D)

j=j-n;

)

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

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

{if(a[i][j]/10==0)

printf("%5d",a[i][j]);

elseprintf("%5d",a[i][j]);

)

printf("\n");

)

7.任意輸入一字符串,求該字符串的長(zhǎng)度(不用strlen函數(shù))。

#include<stdio.h>

#include<string.h>

main()

(

charstr[100];

inti,len=O;

gets(str);

for(i=0;str[i]!='\0';i++)

len++;

puts(str);

printf("Thelengthis:%d",len);

)

8.編寫(xiě)程序,在一個(gè)字符數(shù)組中查找一個(gè)指定的字符,若數(shù)組中含

有該字符,則輸出該字符在數(shù)組中第一次出現(xiàn)的位置(下標(biāo)值),否

則輸出-1。

#include<stdio.h>

#include<string.h>

main()

(

charstr[100],c;

inti,flag=O,m;

gets(str);

c=getchar();

for(i=0;str[i]!='\0';i++)

if(c==str[i])

{flag=l;

m=i;

break;

)

if(flag=l)

printf("thelocationisstr[%d]",m);

else

printf("-l");

)

9.輸入兩個(gè)字符串a(chǎn)和b。兩個(gè)字符串對(duì)應(yīng)位置中的字符,把ASCH

碼值大的或相等的字符依次存放到c數(shù)組中,形成一個(gè)新的字符串。

#include<stdio.h>

#include<string.h>

main()

(

chara[100],b[100],c[100];

inti,flag=0,m;

gets(a);

gets(b);

for(i=0;a[i]!='\0'&&b[i]!='\0';i++)

if(a[i]>=b[i])

c[i]=a[i];

else

c[i]=b[i];

puts(a);

puts(b);

puts(c);

第5章函數(shù)

一、選擇題

1-567-1011-1516-18

CABDB無(wú)DACBCDBDBDBA

說(shuō)明:第6小題應(yīng)該為:floatmax(inta,intb)

二、填空題

1.實(shí)參形參

2.return

3.void

4.數(shù)組的首地址數(shù)值

5.作用域

6.外部變量

7.靜態(tài)局部變量(static)

8.任意的

9.age(n-l)+lage(a)

三、程序分析題

1.44

2.j=5,k=6,x=6

j=l,k=5,x=3

3.810

4.12

5.010111212

四、編寫(xiě)程序題

1.編寫(xiě)函數(shù),求解1?6的立方值。

#include<stdio.h>

voidfun(inta)

(

intn=a*a*a;

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

)

voidmain()

(

inti;

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

fun(i);

2.輸入n個(gè)學(xué)生的英語(yǔ)成績(jī),編寫(xiě)函數(shù)求出英語(yǔ)成績(jī)高于英語(yǔ)平均

成績(jī)的人數(shù)。

#include<stdio.h>

fun(inta[],intn)

(

inti,count=0;

floatsum=0.0,ave;

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

sum+=a[i];

ave=sum/n;

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

if(a[i]>ave)

count++;

printf("%d",count);

)

voidmain()

(

intn,i,a[100];

scanf("%d",&n);

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

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

fun(a,n);

)

3.編寫(xiě)函數(shù),求出一個(gè)給定整數(shù)的所有因子。如:72=2*2*2*2*3*3。

#include<stdio.h>

#include<math.h>

voidfun(intn)

(

inti=0;

while(n!=i)

(

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

(

if(n%i==0)

(

printf("%d*",i);

n=n/i;

break;

)

)

)

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

voidmain()

intn;

printf("Inputn:");

scanf("%d",&n);

printf("%d=",n);

fun(n);

)

4.已知方程ax2+bx+c=0,編寫(xiě)函數(shù)分別求解并輸出當(dāng)b2-4ac>0和

b2-4ac=0的根。

#include<stdio.h>

#include<math.h>

voidfun1(floata,floatb,floatc,floatdisc)

{floatxl,x2,p,q;

p=-b/(2*a);

q=sqrt(disc)/(2*a);

xl=p+q;

x2=p-q;

printf("xl=%5.2f,x2=%5.2f\n",xl,x2);

)

voidfun2(floata,floatb,floatc,floatdisc)

floatxl,x2,p,q;

p=-b/(2*a);

printf("xl=x2=%5.2f\n",p);

)

voidmain()

(

floata,b,c,disc;

scanf("%f%f%f",&a,&b,&c);

disc=b*b-4*a*c;

if(disc>0)

funl(a,b,c,disc);

if(disc==0)

fun2(a,b,c,disc);

)

5.在主函數(shù)中輸入一串字符,編寫(xiě)函數(shù)將該字符串中的元音字母復(fù)

制到另一字符串中去,并分別輸出兩個(gè)字符串。

#include<stdio.h>

voidmain()

(

voidcpy(chars[],charc[]);

chars[80],c[80];

printf("\ninputstring:");

gets(s);

puts(s);

cpy(s,c);

printf("%s\n",c);

)

voidcpy(chars[],charc[])

(

inti,j;

i=0;

j=0;

while(s[i]!='\0')

(

if(s[i]==,a,lls[i]=='A,lls[i]==,e,lls[i]=='E'lls[i]=='i,lls[i]==Tlls[i]=='o'

||s[i]=='O,lls[i]==,u'lls[i]=='U')

(

cU]=s[i];

j++;

)

i++;}

c[j]='\O';

6.用定義的函數(shù)將一個(gè)實(shí)數(shù)精確到小數(shù)點(diǎn)后第1位,可使用公式

(x*10+0.5)/10完成。要求主函數(shù)接收返回的函數(shù)值,并將該值輸出。

#include<stdio.h>

floatfun(floatx)

(

floatb;

b=(x*10+0.5)/10;

returnb;

)

voidmain()

(

floata,b;

scanf("%f",&a);

printf("inputnumber:%f\n",a);

b=fun(a);

printf("%.lf\n",b);

)

7.按照下面的要求,完成程序的編寫(xiě)。

(1)在主函數(shù)中輸入10個(gè)無(wú)序的整數(shù)。

(2)定義函數(shù),在函數(shù)中用起泡方法對(duì)數(shù)據(jù)按由小到大的順序排序。

(3)定義函數(shù),在函數(shù)中輸入一個(gè)整數(shù),用折半查找法查找該數(shù)是

否存在于已排序的數(shù)組中,若存在,在主函數(shù)中輸出其所處的位置。

#include<stdio.h>

intfun2(inta[])

(

intl,w,t,p;

scanf("%d",&t);

1=0;

w=9;

while(l<=w)

(

p=(l+w)/2;

if(a[p]==t)

(

returnp;

break;

)

if(t>a[p])l=p+l;

elsew=p-l;

)

)

intfun1(inta[])

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

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

if(a[i]>a[i+l])

{t=a[i];a[i]=a[i+l];a[i+l]=t;}

printf("thesortednumbers:\n");

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

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

m=fun2(a);

returnm;

)

voidmain()

(

inta[10],i,n;

printf("input10numbers:");

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

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

n=funl(a);

printf("Itiselement%dofthearray.\n",n);

)

8.在主函數(shù)中輸入一串字符,編寫(xiě)一個(gè)函數(shù),要求將該字符串中最

長(zhǎng)的單詞輸出。

#include<stdio.h>

#include<string.h>

voidfunction(charstr[]);

voidmain()

(

charstr[100];

printf("Inputstring:");

gets(str);

str[strlen(str)]='#';

function(str);

)

voidfunction(charstr[])

(

inti=O,j=O,k=O;

charstrl[30][30],str2[100];

intstate=0;

for(i=0;str[i]!='\0';i++)

(

if((str[i]>='a'&&str[i]<='z')II(str[i]>='A'&&str[i]<='Z'))

(

strl|j][k]=str[i];

k++;

strl[j][k]='\0';

state=1;

else

(

if(state==1)

j++;

state=O;

k=0;

)

)

strcpy(str2,strl[0]);

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

if(strlen(strl[i])>strlen(str2))

strcpy(str2,strl[i]);

printf("Itis:%s\n",str2);

)

9.定義函數(shù),完成將兩個(gè)字符串連接起來(lái)的功能。

#include<stdio.h>

voidmain()

(

voidcon(charstingl[],charsting2[],charsting3[]);

charsl[20],s2[20],s3[40];

printf("Inputsting1:");

scanf("%s",sl);

printf("Inputsting2:");

scanf("%s",s2);

con(sl,s2,s3);

printf("%s\n",s3);

)

voidcon(charsting1[],charsting2[],charsting3[])

(

inti,j;

for(i=0;stingl[i]!='\0';i++)

sting3[i]=stingl[i];

for(j=0;sting2[j]!='\0';j++)

sting3[i+j]=sting2[j];

sting3[i+j]=>\O';

)

10.設(shè)計(jì)一個(gè)遞歸調(diào)用函數(shù),計(jì)算n個(gè)自然數(shù)之和。

#include"stdio.h"

intadd(int);

intn;

main()

intnum=l,sn;

scanf("%d",&n);

sn=add(num);

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

getch();

)

intadd(intnum)

(

staticintsn;

sn+=num;

if(num==n)

returnsn;

add(++num);

)

第6章指針

一、選擇題

1-56-1011-1516-2021-24

CDDCACDDACBACACACCCDBDCC

二、填充題

1.地址地址

2.存儲(chǔ)地址

3.q是指針型變量

4.下標(biāo)法指針?lè)?/p>

5.*(p++)是選取*p的值,然后使p加1;*(++p)是先使p加1,再取

*p的值

6.p=n;

7.指針數(shù)組p行指針變量p

8.46

9.*(p+2)*(a+2)p[2]

10.語(yǔ)句*p=16;是錯(cuò)誤的

三、程序分析題

1、10,12,70

10,12,70

2、13579n

1357911

3、求10個(gè)數(shù)中的最大數(shù)和最小數(shù)

4.IlikeCprogram.

5、131014182213151719

6、GOOE

7、345

四、編寫(xiě)程序題

1.編寫(xiě)程序,將一個(gè)字符串連接到另一字符串之后。要求使用指針

變量完成。

#include<stdio.h>

#include<string.h>

voidmain()

(

charsl[80],s2[20];

char*s3=s2;

inti=0;

puts("enterthestringofsi:");

scanf("%s",sl);

puts("enterthestringofs2:");

scanf("%s",s2);

while(sl[i]!='\O')

i++;

while(*s3!=!\0')

{

sl[i]=*s3;

s3++;

i++;

)

sl[i]='\0';

printf("\ntheafterstringis%s\n",sl);

)

2.編寫(xiě)一個(gè)指針型函數(shù)sum,該函數(shù)的功能是求解兩個(gè)數(shù)之和,并

把所求和的地址返回主函數(shù)。

#include<stdio.h>

int*fun()

(

int*p,n,m,s;

scanf("%d%d",&n,&m);

s=n+m;

p=&s;

returnp;

)

main()

(

int*w;

w=fun();

printf("%d\n",*w);

)

3.編寫(xiě)程序,統(tǒng)計(jì)出一個(gè)字符串中的大小寫(xiě)字母?jìng)€(gè)數(shù)。要求使用指

向字符串的指針變量完成。

#include<stdio.h>

main()

chara[80],*s=a;

intsl=0,s2=0;

scanf("%s",a);

while(*s!='\O')

(

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

sl++;

if(*s>='a'&&*s<='z')

s2++;

s++;

)

printf("A-Z:%d,a-z:%d\n",sl,s2);

)

4.用指向數(shù)組的指針變量實(shí)現(xiàn)一維數(shù)組由小到大的冒泡排序。要求

編寫(xiě)一個(gè)函數(shù),完成數(shù)據(jù)的排序。

#include<stdio.h>

voidfun1(int*p)

(

inti,j,t;

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

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

if(p[i]>p[i+l])

{t=p[i];p[i]=p[i+l];p[i+l]=t;}

printf("thesortednumbers:\n");

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

printf("%d\t",p[i]);

)

(

inta[10],i,n;

printf("input10numbers:");

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

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

fun1(a);

)

5.編寫(xiě)一個(gè)函數(shù),要求在一給定的字符串中查找子字符串的位置,

并將該位置在主函數(shù)中輸出。

#include<stdio.h>

#include<string.h>

intfun(charsr[],char*p2)

(

inti,a;

for(i=0;sr[i]!='\0';i++)

if(sr[i]==*p2)

a=i;

while(sr[i]==*p2&&*p2!='\0')

i++;

p2++;

)

if(*p2=='\0')

returna;

)

else

i++;

)

voidmain()

(

charstrl[20],str2[20];

intpl;

printf("pleaseinputtwostrings\n");

scanf("%s%s",strl,str2);

pl=fun(strl,str2);

printf("Itisstrl[%d]",pl);

)

6.編寫(xiě)程序,實(shí)現(xiàn)在字符串si中的指定位置插入字符串s2。

#include<stdio.h>

#defineN100

intlen(charch[])

(

inti=0;

while(ch[i]!='\0')

i++;

returni;

)

intchlns(charch[],charchl[],intk)

(

inti;

intlen_ch=len(ch);

intlen_chl=len(chl);

if(k>len_ch)

(

printf("exit!");

return-1;

)

else

(

for(i=len_ch+len_ch1-1;i>=k+len_chl;i—)

ch[i]=ch[i-len_chl];

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

ch[k+i]=chl[i];

ch[len_ch+len_chl]='\0';

return1;

)

)

voidmain()

(

chara[N],b[N];

intk,ins;

scanf("%s",a);

scanf("%s",b);

scanf("%d",&k);

ins=chlns(a,b,k);

if(ins==l)

printf("%s",a);

)

7.編寫(xiě)程序,要求用指針數(shù)組完成:輸入月份號(hào),輸出該月份的英

文名。例如:輸入“5”,則輸出“May”。

#include<stdio.h>

voidmain()

char*month[]={"Illegalmonth","January","February","March",

"April","May","June","July","Augest","September","October","Novem

ber","December");

inti;

printf("Inputnumber:");

scanf("%d",&i);

if(i>=l&&i<=12)

printf("%dmouthname:%s\n",i,month[i]);

else

printf("%dM%s\n",month[0]);

)

8.運(yùn)用指針變量完成:輸入10個(gè)數(shù),將其中最小的數(shù)與第1個(gè)數(shù)交

換,將最大數(shù)和最后一個(gè)數(shù)交換。

#include<stdio.h>

voidmain()

(

inta[10],i,*p,*max,*min,t;

max=min=a;

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

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

for(p=a;p<a+10;p++)

if(*max<*p)max=p;

elseif(*min>*p)min=p;

t=*min;*min=a[O];a[O]=t;

t=*max;*max=a[9];a[9]=t;

for(p=a;p<a+9;p++)

printf("%d,",*p);

printf("%d",a[9]);

)

9.使用指針有關(guān)知識(shí)完成:輸入一行字符,找出其中大寫(xiě)字母、小

寫(xiě)字母、空格、數(shù)字以及其他字符各有多少。

#include"stdio.h"

voidmain()

(

intcle=0,sle=0,di=0,wsp=0,ot=0,i;

char*p,s[20];

printf("enteraline:");

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

s[i]=0;

i=0;

while((s[i]=getchar())!='\n')

i++;

p=&s[0];

while(*p!='\n')

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

++cle;

elseif((*p>='a')&&(*p<='z,))

++sle;

elseif(*p=='')

++wsp;

elseif((*p<='9')&&(*p>=,0'))

++di;

else

++ot;

P++;

)

printf("cle=%d,sle=%d,wsp=%d,di=%d,ot=%d",cle,sle,wsp,di,ot);

)

第7章結(jié)構(gòu)體與共用體

一、選擇題

l.C2.A3.D4.C5.D6.C7.D8.B9.B10.C11.D

12.C

二、填空題

1、所有成員所占內(nèi)存之和

2、work.num,p->num,(*p).num

3、20.80.6,liu

20.80.6,liu

三、程序分析題

1、51

2、20041,703

3、Penghua20045537

4、13431

四、編寫(xiě)程序題

1.用結(jié)構(gòu)體編制一個(gè)程序,有5個(gè)學(xué)生,每個(gè)學(xué)生包括學(xué)號(hào)、成績(jī)、

姓名等信息,找出成績(jī)最高者的姓名和成績(jī)。

#include<stdio.h>

main()

{structstu

{intnum;

charname[20];

floatscore;

}student[5]={{1001,"liuyi",90.5},{10012,"wang",80},{10013,"li",50

},{10014,"zhou",96.5},{10015,"zheng",75}};

inti,aa;

floatmax;

max=student[0].score;

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

if(max<student[i].score)

{max=student[i].score;

aa=i;

)

printf("%d,%s,%.lf',student[aa].num,student[aa].name,student[aa].

score);

)

2.定義一個(gè)結(jié)構(gòu)體變量(包括年、月、日),計(jì)算某日在本年中是第

兒天。

#include<stdio.h>

structdate

(

intyear;

intmonth;

intday;

);

intleap_year(inta);

intcal_day(structdatea);

intleap_year(inta)

(

if(a%400==0ll(a%4==0&&a%100!=0))

return1;

else

return0;

)

intcal_day(structdatea)

(

intsum=0,b[]={31,28,31,30,31,30,31,31,30,31,30,31);

inti;

for(i=0;i<a.month-1;i++)

sum+=b[i];

if(a.month>2)

sum=sum+a.day+leap_year(a.year);

else

sum=sum+a.day;

returnsum;

)

voidmain()

(

structdatea;

intn;

printf("\nPleaseinputthedate(yearmonthdat)\n");

scanf("%d%d%d",&a.year,&a.month,&a.day);

n=cal_day(a);

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

3.有10個(gè)學(xué)生,每個(gè)學(xué)生的數(shù)據(jù)包括學(xué)號(hào)、姓名、2門(mén)課的成績(jī)。

從鍵盤(pán)輸入10個(gè)學(xué)生的信息,要求打印每位學(xué)生2門(mén)課的平均成績(jī),

以及最高分的學(xué)生的信息。

#include<stdio.h>

voidmain()

(

structstu

{intnum;

charname[20];

intscore[2];

}student[10];

intave[10];

inti,j,max,aa;

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

(

scanf("%d,%d,%d",&student[i].num,&student[i].score[0],&student[i

].score[l]);

gets(student[i].name);

)

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

ave[i]=(student[i].score[0]+student[i].score[l])/2;

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

printf("%d,%s,%d,%d,%d\n",student[i].num,student[i].name,student

[i].score[0],student[i].score[l],ave[i]);

max=ave[O];

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

if(max<ave[i])

(

max=ave[i];

aa=i;

)

printf("themaxis%d,%s,%d,%d,%d",student[aa].num,

student[aa].name,student[aa],score[0],student[aa].score[l],ave[aa]);

)

4.有兩個(gè)鏈表al,a2,每個(gè)鏈表中的結(jié)點(diǎn)的數(shù)據(jù)域包括學(xué)號(hào)、成績(jī)。

將鏈表a2連接在鏈表al之后。

#include<stdio.h>

#include"malloc.h"

#defineN3

#defineNULL0

#defineLENsizeof(structstudent)

structstudent

intno;

intscore;

structstudent*next;

);

structstudent*creat(void)

(

structstudent*head,*pl,*p2,*p;

intn;

pl=p2=(structstudent*)malloc(LEN);

scanf("%d,%d",&pl->no,&pl->score);

head=p1;

n=l;

while(n<N)

(

pl=(structstudent*)malloc(LEN);

scanf("%d,%d",&pl->no,&pl->score);

p2->next=p1;

p2=pl;

n++;

p2->next=NULL;

return(head);

)

voidprint(structstudent*head)

(

structstudent*p;

p=head;

while(p!=NULL)

(

printf("%d,%d\n",p->no,p->score);

p=p->next;

)

)

structstudent*connect(structstudent*head_a,structstudent

*head_b)

(

structstudent*p,*q;

p=head_a;

while(p!=NULL)

{q=p;

p=p->next;

q->next=head_b;

return(head_a);

)

voidmain()

(

structstudent*head_a,*head_b;

printf("inputa:");

head_a=creat();

printf("inputb:");

head_b=creat();

print(head_a);

print(head_b);

connect(head_a,head_b);

printf("Finish:");

print(head_a);

)

5.建立一個(gè)鏈表,每個(gè)結(jié)點(diǎn)的數(shù)據(jù)域包括:學(xué)號(hào)、姓名、年

溫馨提示

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

評(píng)論

0/150

提交評(píng)論