国产最新a级毛片无码专区_综合亚洲欧美日韩久久精品_日本成年片在线观看66_一本到九九av电影_一级毛片免费网站播放_国内精品久久人无码大片_国产人成视频99在线观看_欧美不卡在线一本二本_国产亚洲电影av_可以免费看黄色软件

知ing

大學C/C++語言程序設計基礎(第2版)

陽小華,馬淑萍 著 / 電子工業(yè)出版社

冥沙 上傳

查看本書

習題7答案

?

一、選擇題

1C ????2A?????3C ????4B ???5D ???6C ?????7D

8C ????9A ???10B ???11C ???12D ???13D ???14C

15C ???16D ???17D ???18D ???19B ???20B ???21B

22C ???23A ???24A ???25A ???26D ???27D ???28D ??29C

?

二、寫出下列程序的運行結(jié)果

1. ?3 ?6 ?9 ???????????24

31,2,3,8,7,6,5,4,910, ??????????????47 ??0

5572

三、程序填空

1. (1)?k ??????????????????????????????(2)?-1

2. (1)?i-1

3. (1)?x[i++]y[i++] ???????????????????(2)i++

4. (1)?‘a(chǎn)’+h-10 ????????????????????????(2)s[i]=?’\0

5. (1)s[i]!=’\0’??????????????????????????(2)s[j++]=s[i]

6. (1)s[j]!=’\0’&& t[k]!=’\0’????????????????(2)t[k]==’\0

?

四、編程題(每個程序的數(shù)據(jù)結(jié)構(gòu)均用數(shù)組)

1編寫程序:從鍵盤上輸入一個字符,用折半查找法找出該字符在已排序的字符串a中的位置。若該字符不在a中則輸出**

#include<stdio.h>

main()

{

char c,a[10]="abcdefghi";

int top,bot,mid;

printf("input c:\n");

scanf("%c",&c);

printf("c=\'%c\'\n",c);

for(top=0,bot=10;top<=bot;)

{

mid=(top+bot)/2;

if(c==a[mid])

{

printf("The position is %d\n",mid+1);

break;

}

else if(c>a[mid]) top=mid+1;

else bot=mid-1;

}

if(top>bot) printf("**\n");

}

?

2編寫程序:輸出某數(shù)列的前20項,該數(shù)列第1、2項分別為01,以后每個奇數(shù)編號的項是前兩項之和,每個偶數(shù)編號的項是前兩項之差的絕對值。生成的20個數(shù)存在一維數(shù)組x中,并按每行4項的形式輸出。

#include<stdio.h>

#include<math.h>

main()

{

int x[21],i;

x[1]=0,x[2]=1;

i=3;

do

{

x[i]=x[i-2]+x[i-1];

x[i+1]=fabs((double)(x[i-1]-x[i]));

i=i+2;

}while(i<=20);

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

{

printf("%6d",x[i]);

if(i%4==0) printf("\n");

}

}

?

3.編寫程序:將s所指字符串中除了下標為奇數(shù)、同時ASCII值也為奇數(shù)的字符之外,其余的所有字符都刪除,串中剩余字符所形成的一個新串放在t所指的數(shù)組中。

例如:若s所指字符串中的內(nèi)容為:“ABCDEFG12345”,則最后t所指的數(shù)組中的內(nèi)容應是:“135”。

#include<stdio.h>

#include<string.h>

void fun(char *s,char t[])

{

int i,j=0;

for(i=1;i<strlen(s);i+=2)

if(s[i]%2!=0)t[j++]=s[i];

t[j]='\0';

}

main()

{

char s[100],t[100];

printf("\nPlease enter string s:");

scanf("%s",s);

fun(s,t);

printf("\nThe result is:%s\n",t);

}

?

4.編寫程序:一個自然數(shù)平方的末幾位與該數(shù)相同時,稱此數(shù)為自同構(gòu)數(shù)。例如,因252=625,故25為自同構(gòu)數(shù)。求出[1700]之間的:① 最大的自同構(gòu)數(shù);② 自同構(gòu)數(shù)數(shù)目。

1)最大的自同構(gòu)數(shù):625 ?2)自同構(gòu)數(shù)數(shù)目:7個(1、5、625、76、376、625

#include<stdio.h>

main()

{

int i,n,ns,flag,count,r,rs;

static int a[50];

count=0;

for(i=1;i<700;i++)

{

n=i;

ns=i*i;flag=1;

while(n>0&&flag)

{

r=n%10;n=n/10;

rs=ns%10;ns=ns/10;

if(rs!=r) flag=0;

}

if(flag)

{

a[count]=i;count++;

printf("%5d",i);

}

}

printf("\ncount=%d,max=%d\n",count,a[count-1]);

}

?

5已知

f(0)?=?f(1)?=?1

f(2)?=?0

f(n)?=?f(n?-?1) -?2*f(n?-?2)?+?f(n?-?3) ?????(n>2)

編寫程序:求f(0)f(50)中的最大值。

f(0)f(50)中的最大值:598325

#include<stdio.h>

main()

{

int n;

double f[181],max=0;

f[0]=f[1]=1;f[2]=0;

for(n=3;n<=50;n++)

{

f[n]=f[n-1]-2*f[n-2]+f[n-3];

if(max<f[n]) max=f[n];

}

printf("\n max=%.0lf",max);

}

?

6編寫程序:自然數(shù)11000按順時針圍成一圈,首先取出1,然后順時針方向按步長L?=?50取數(shù)(已取出的數(shù)不再參加計數(shù)),直至所有的數(shù)均取完為止,最后一個取出的數(shù)是多少?

最后一個取出的數(shù)是:630

#include<stdio.h>

main()

{

int a[1001],i,s=0,n=1;

for(i=1;i<=1000;i++) a[i]=i;

a[1]=0;

for(i=1;i<=1000;i++)

{

if(a[i]!=0)

{

s+=1;

if(s==50)

{

n++;

if(n==1000)

{

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

break;

}

a[i]=0;s=0;

}

}

if(i==1000) i=0;

}

}

?

7.編寫程序:輸出下列格式的楊輝三角形前5行。

1

1 ?1

1 ?2 ?1

1 ?3 ?3 ?1

1 ?4??6 ?4 ?1

#include<stdio.h>

main()

{

int a[10][10],i,j,t,k;

printf("input lines <10:\n");

scanf("%d",&t);

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

{ ??

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

{

????printf(" ??");

}

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

{

????if((i==j)||(j==0)) a[i][j]=1;

else a[i][j]=a[i-1][j-1]+a[i-1][j];

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

}

printf("\n");

}

}

?

8若兩素數(shù)之差為2,則稱該兩素數(shù)為雙胞胎數(shù)。編寫程序,求出[2,300]之內(nèi):

1)有多少對雙胞胎數(shù);

2)最大的一對雙胞胎數(shù)?

1)最大的一對雙胞胎數(shù):281、283 ?2)有19對雙胞胎

#include<stdio.h>

int sushu(int n)

{

int flag=1,i;

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

if(n%i==0){flag=0;break;}

return(flag);

}

main()

{

int i,b,max1=0,max2=0,count=0;

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

{

if(sushu(i))

{

b=i+2;

if(sushu(b))

{ ??

if(i>max1)

{max1=i;max2=b;}

count++;

}

}

}

printf("count=%d\nmax1=%4d,max2=%4d\n",count,max1,max2);

}

?

9.編寫程序:將兩個遞增的數(shù)組a[10] = {2,?4,?6,?8,?10,?12,?14,?16,?18,?20}b[10]?=?{1,?3,?5,?7,?9,?11,?13, 15,?17,?19}合并成一個數(shù)組c[20],并保持遞增的順序。

#include<stdio.h>

#define N 10

#define NN 20

main()

{

int a[N]={2,4,6,8,10,12,14,16,18,20},b[N]={1,3,5,7,9,11,13,15,17,19},

c[NN];

int i,j,t,k;

i=0;j=0;t=0;

do

{

if(a[i]<b[j])

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

else {c[t]=b[j];j++;t++;}

}while(i<N&&j<N);

if(i<N)

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

{c[t]=a[k];t++;}

if(j<N)

for(k=j;k<N;k++)

{c[t]=b[k];t++;}

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

printf("%4d",c[j]);

}

}

?

10請編寫程序建立一個N×N的矩陣N<10。矩陣元素的構(gòu)成規(guī)律是:最外層元素的值全部為1;從外向內(nèi)第2層元素的值全部為2;第3層元素的值全部為3,……依次類推。例如,當N?= 5,生成的矩陣為:


#include<stdio.h>

#define N 7

void fun(int (*a)[N])

{

int i,j,k,m;

if(N%2==0)m=N/2;

else m=N/2+1;

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

{

for(j=i;j<N-i;j++)

a[i][j]=a[N-i-1][j]=i+1;

for(k=i+1;k<N-i;k++)

a[k][i]=a[k][N-i-1]=i+1;

}

}

main()

{

int x[N][N]={0},i,j;

fun(x);

printf("\nThe result is:\n");

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

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

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

printf("\n");

}

}

?

習題8參考答案

一、選擇題

1.D ????2.C ????3.A ????4.D ???5.A ????6.D ?????

7.C ????8.B ????9.D ???10.C ??11.D ???12.A ??

二、寫出下列程序的運行結(jié)果

1.s=30 ?

t=-10 ?

m=200 ??????????

2.2 ?2 ?2 ?2 ?1 ???????3.51 ?????????????4.a(chǎn)bcdeedcba

5.31 ??????????????????6. 1bc,a23 ????????7. 50

三、程序填空

1. ?*p2=*p1???????p1++ ??????p2++(注意:第二空和第三空的答案可以調(diào)換位置)

2. ?*p&&*q或*p!='\0'&&*q!='\0'*p!=0&&*q!=0????*p>*q ?*p>=*q ???q++

3. q=&s[k]

4. s1[m1-1+k]?????sub

5.?return ?min????min=minnum(a,N)

6. ?avg=avg/n?????a

7. sp ????????????k ??????<0 ???printf(%s\n,str[k]) 或puts(str[k]) ?

8. 48或'0'????????ctod(b)

9.?n<0或n<=0?????n%8 ?????*(s+i-1)或s[i-1]

10. a[i][j]???????j ????????find==1

11. char *name[]???strcmp(name[k],name[j])>0 ??????name[i]

?

四、編程題

1.(1)定義一個函數(shù)separate(int *data,int n),該函數(shù)將n的各個位上的數(shù)分離保存在data所指向的數(shù)組中。

2)定義一個函數(shù)judge(int *data,int len),判斷data所指向的數(shù)組是否為回文。

3)在main函數(shù)中調(diào)用上述函數(shù),完成程序的功能。

參考代碼:

#include "stdio.h"

#include "stdlib.h"

#define N 10

int separate(int *data,int n)

{

??int i,k=0,temp;

????while(n>0)

{ ?

??data[k]=n%10;

??n=n/10;

??k++;

?

}

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

{

temp=data[i];

data[i]=data[k-1-i];

data[k-1-i]=temp;

}

return k;

}

int judge(int *data,int len)

{

int i,j;

i=0;j=len-1;

????while(i<j)

{

if(data[i]==data[j])

{i++;j--;}

else

return 0;

}

return 1;

}

?

void main()

{

??int data[N],n,len;

??printf("請輸入要轉(zhuǎn)換的數(shù)n\n");

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

??len=separate(data,n);

??if(judge(data,len)==1)

??printf("%d是回文數(shù)\n",n);

??else

??printf("%d不是回文數(shù)\n",n);

??

}

?

2.從鍵盤輸入兩個字符串,輸出第一個字符串在第二個字符串中第一次出現(xiàn)的位置(即第一個字符串的首字母在第二個字符串中的位置,如“abc”在“bbacccabcddaw3”中的位置為7)。

要求:使用指針的方法遍歷數(shù)組。

參考代碼:

#include<stdio.h>

int find(char *s,char *t);

main()

{ ?

int n;

char a[]="apbcdabfabcx";

char b[]="ab";

????n=find(a,b);

if(n!=-1)

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

else

printf("未找到!");

}

int ?find(char *s,char *t)

{ ?

char *p,*q,*r;

int len,Loc=1;

while(*s)

{

p=s;r=t;

while(*r)

if(*p==*r)

{

p++;r++;

}

else

break;

if(*r=='\0') return Loc;

s++;Loc=Loc+1;


}

return ?-1;

}

?

3.有n個人圍成一圈,順序排號。從第一個人開始報數(shù)(從13報數(shù)),報到3的人退出圈子,問最后留下的是原來第幾號的人。

參考代碼:

#include "stdio.h"

#define N 20 ????????????/*總?cè)藬?shù)*/

void main()

{

int i,a[N],num,dist;

num=0;

for(i=0;i<N;i++) a[i]=1;

i=0;dist=0;

????while(num<N)

{

????????if(a[i]==1) dist++;

if(dist==3)

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

a[i]=0;

dist=0;

num++;

}

i=(i+1)%N;

}

printf("最后留下的人是:%d\n",i);

}

?

4.編寫一個程序,實現(xiàn)兩個順序字符串(ASC碼值由小到大)的連接,連接后的字符串仍為順序串。如字符串1為“aty”,字符串2為“eknx”,連接后的字符串為“aekntxy”。

?參考代碼:

#include "stdio.h"

void fun(char *s,char *t,char str[]) /*stascii碼順序連接存入str*/

{

?int k=0;

?while(*s&&*t)

?{

?if(*s<*t) str[k++]=*s++;?

?else ?str[k++]=*t++;

?}

?while(*s) str[k++]=*s++;/*把串s剩余字符存入str*/

?while(*t) str[k++]=*t++;/*把串t剩余字符存入str*/

?str[k]='\0';

}

?

void main()

{

char s[20],t[20],str[40];

printf("請輸入字符串st\n");

scanf("%s%s",s,t);

fun(s,t,str);

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

}

?

5.輸入一行文字,找出其中大寫字母、小寫字母、空格、數(shù)字及其他字符各有多少?

參考代碼:

#include "stdio.h"

void main()

{

char str[40],*p,n1=0,n2=0,n3=0,n4=0,n5=0;

gets(str);

p=str;

????while(*p)

{

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

else if(*p>='a'&&*p<='z') ??n2++; ?

else if(*p>='0'&&*p<='9') ??n3++;

else if(*p==' ') ??n4++;

else ?n5++;

p++;

}

printf("大寫字母:%d 小寫字母:%d

數(shù)字:%d 空格:%d 其它:%d\n",n1,n2,n3,n4,n5);

}

?

6.輸入一個字符串,內(nèi)有數(shù)字和非數(shù)字字符,如:a123x4564567?45at587,將其中連續(xù)的數(shù)字作為一個整數(shù),依次存放到數(shù)組a中。例如,123存放在a[0],456存放在a[1],…,統(tǒng)計共有多少個整數(shù),并輸出這些數(shù)。

參考代碼:

#include "stdio.h"

#define N 10

void main()

{

char str[40],*p;

int k,i,a[N]; ???

gets(str);

p=str;

k=0; ????????/*k保存字符串中數(shù)的個數(shù)*/

for(;*p!='\0';p++)

if(*p>='0'&&*p<='9') ??/*計算連續(xù)的數(shù)字,遇到非數(shù)字結(jié)束計算,并將該數(shù)保存*/

{

a[k]=*p-'0';

p++;

while(*p>='0'&&*p<='9')

{

a[k]=a[k]*10+(*p-'0');

p++;

}

k++;

}

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

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

}


查看更多