c語言第四版譚浩強課後答案,c語言程序設計譚浩強第四版課後答案

本文目錄一覽:

譚浩強版C語言答案

C語言設計譚浩強第三版的課後習題答案(一)

1.5請參照本章例題,編寫一個C程序,輸出以下信息:

************

Very Goodj!

************

解:

main()

{

printf(” ************ \n”);

printf(“\n”);

printf(” Very Good! \n”);

printf(“\n”);

printf(” ************\n”);

}

1.6編寫一個程序,輸入a b c三個值,輸出其中最大者。

解:main()

{int a,b,c,max;

printf(“請輸入三個數a,b,c:\n”);

scanf(“%d,%d,%d”,a,b,c);

max=a;

if(maxb)

max=b;

if(maxc)

max=c;

printf(“最大數為:%d”,max);

}

第三章

3.3 請將下面各數用八進位數和十六進位數表示:

(1)10 (2)32 (3)75 (4)-617

(5)-111 (6)2483 (7)-28654 (8)21003

解:十 八 十六

(10)=(12)=(a)

(32)=(40)=20

(75)=(113)=4b

(-617)=(176627)=fd97

-111=177621=ff91

2483=4663=963

-28654=110022=9012

21003=51013=520b

3.5字元常量與字元串常量有什麼區別?

解:字元常量是一個字元,用單引號括起來。字元串常量是由0個或若干個字元

而成,用雙引號把它們括起來,存儲時自動在字元串最後加一個結束符號’\0′.

3.6寫出以下程序的運行結果:

#includestdio.h

void main()

{

char c1=’a’,c2=’b’,c3=’c’,c4=’\101′,c5=’\116′;

printf(“a%c b%c\tc%c\tabc\n”,c1,c2,c3);

printf(“\t\b%c %c\n”,c4,c5);

解:程序的運行結果為:

aabb cc abc

A N

3.7將”China”譯成密碼.密碼規律:用原來的字母后面第4個字母代替原來的字母,

例如,字母”A”後面第4個字母是”E”,用”E”代替”A”.因此,”China”應譯為”Glmre”.

請編一程序,用賦初值的議程使c1,c2,c3,c4,c5分別變成’G’,’1′,’m’,’r’,’e’,並

輸出.

main()

{char c1=”C”,c2=”h”,c3=”i”,c4=’n’,c5=’a’;

c1+=4;

c2+=4;

c3+=4;

c4+=4;

c5+=4;

printf(“密碼是%c%c%c%c%c\n”,c1,c2,c3,c4,c5);

}

3.8例3.6能否改成如下:

#includestdio.h

void main()

{

int c1,c2;(原為 char c1,c2)

c1=97;

c2=98;

printf(“%c%c\n”,c1,c2);

printf(“%d%d\n”,c1,c2);

}

解:可以.因為在可輸出的字元範圍內,用整型和字元型作用相同.

3.9求下面算術表達式的值.

(1)x+a%3*(int)(x+y)%2/4=2.5(x=2.5,a=7,y=4.7)

(2)(float)(a+b)/2+(int)x%(int)y=3.5(設a=2,b=3,x=3.5,y=2.5)

3.10寫出下面程序的運行結果:

#includestdio.h

void main()

{

int i,j,m,n;

i=8;

j=10;

m=++i;

n=j++;

printf(“%d,%d,%d,%d\n”,i,j,m,n);

}

解:結果: 9,11,9,10

第4章

4.4.a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51274,n=128765,c1=’a’,c2=’b’.想得

到以下的輸出格式和結果,請寫出程序要求輸出的結果如下:

a= 3 b= 4 c= 5

x=1.200000,y=2.400000,z=-3.600000

x+y= 3.60 y+z=-1.20 z+x=-2.40

u= 51274 n= 128765

c1=’a’ or 97(ASCII)

c2=’B’ or 98(ASCII)

解:

main()

{

int a,b,c;

long int u,n;

float x,y,z;

char c1,c2;

a=3;b=4;c=5;

x=1.2;y=2.4;z=-3.6;

u=51274;n=128765;

c1=’a’;c2=’b’;

printf(“\n”);

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

printf(“x=%8.6f,y=%8.6f,z=%9.6f\n”,x,y,z);

printf(“x+y=%5.2f y=z=%5.2f z+x=%5.2f\n”,x+y,y+z,z+x);

printf(“u=%6ld n=%9ld\n”,u,n);

printf(“c1=’%c’ or %d(ASCII)\n”,c1,c2);

printf(“c2=’%c’ or %d(ASCII)\n”,c2,c2);

}

4.5請寫出下面程序的輸出結果.

結果:

57

5 7

67.856400,-789.123962

67.856400 ,-789.123962

67.86,-789.12,67.856400,-789.123962,67.856400,-789.123962

6.785640e+001,-7.89e+002

A,65,101,41

1234567,4553207,d687

65535,17777,ffff,-1

COMPUTER, COM

4.6用下面的scanf函數輸入數據,使a=3,b=7,x=8.5,y=71.82,c1=’A’,c2=’a’,

問在鍵盤上如何輸入?

main()

{

int a,b;

float x,y;

char c1,c2;

scanf(“a=%d b=%d,a,b);

scanf(” x=%f y=%e”,x,y);

scanf(” c1=%c c2=%c”,c1,c2);

}

解:可按如下方式在鍵盤上輸入:

a=3 b=7

x=8.5 y=71.82

c1=A c2=a

說明:在邊疆使用一個或多個scnaf函數時,第一個輸入行末尾輸入的”回車”被第二

個scanf函數吸收,因此在第二\三個scanf函數的雙引號後設一個空格以抵消上行

入的”回車”.如果沒有這個空格,按上面輸入數據會出錯,讀者目前對此只留有一

初步概念即可,以後再進一步深入理解.

4.7用下面的scanf函數輸入數據使a=10,b=20,c1=’A’,c2=’a’,x=1.5,y=-3.75,z=57.8,請問

在鍵盤上如何輸入數據?

scanf(“%5d%5d%c%c%f%f%*f %f”,a,b,c1,c2,y,z);

解:

main()

{

int a,b;

float x,y,z;

char c1,c2;

scanf(“%5d%5d%c%c%f%f”,a,b,c1,c2,x,y,z);

}

運行時輸入:

10 20Aa1.5 -3.75 +1.5,67.8

註解:按%5d格式的要求輸入a與b時,要先鍵入三個空格,而後再打入10與20。%*f是用來禁止賦值的。在輸入時,對應於%*f的地方,隨意打入了一個數1.5,該值不會賦給任何變數。

3.8設圓半徑r=1.5,圓柱高h=3,求圓周長,圓面積,圓球表面積,圓球體積,圓柱體積,用scanf輸入數據,輸出計算結果,輸出時要求有文字說明,取小數點後兩位數字.請編程.

解:main()

{

float pi,h,r,l,s,sq,vq,vz;

pi=3.1415926;

printf(“請輸入圓半徑r圓柱高h:\n”);

scanf(“%f,%f”,r,h);

l=2*pi*r;

s=r*r*pi;

sq=4*pi*r*r;

vq=4.0/3.0*pi*r*r*r;

vz=pi*r*r*h;

printf(“圓周長為: =%6.2f\n”,l);

printf(“圓面積為: =%6.2f\n”,s);

printf(“圓球表面積為: =%6.2f\n”,sq);

printf(“圓球體積為: =%6.2f\n”,vz);

}

4.9輸入一個華氏溫度,要求輸出攝氏溫度,公式為C=5/9(F-32),輸出要有文字說明,取兩位小數.

解: main()

{

float c,f;

printf(“請輸入一個華氏溫度:\n”);

scanf(“%f”,f);

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

printf(“攝氏溫度為:%5.2f\n”,c);

}

第五章 邏輯運算和判斷選取結構

5.4有三個整數a,b,c,由鍵盤輸入,輸出其中最大的數.

main()

{

int a,b,c;

printf(“請輸入三個數:”);

scanf(“%d,%d,%d”,a,b,c);

if(ab)

if(bc)

printf(“max=%d\n”,c);

else

printf(“max=%d\n”,b);

else if(ac)

printf(“max=%d\n”,c);

else

printf(“max-%d\n”,a);

}

方法2:使用條件表達式.

main()

{int a,b,c,termp,max;

printf(” 請輸入 A,B,C: “);

scanf(“%d,%d,%d”,a,b,c);

printf(“A=%d,B=%d,C=%d\n”,a,b,c);

temp=(ab)?a:b;

max=(tempc)? temp:c;

printf(” A,B,C中最大數是%d,”,max);

}

5.5 main()

{int x,y;

printf(“輸入x:”);

scanf(“%d”,x);

if(x1)

{y=x;

printf(“X-%d,Y=X=%d \n”,x,y);

}

else if(x10)

{y=2*x-1;

printf(” X=%d, Y=2*X-1=%d\n”,x,y);

}

else

{y=3*x-11;

printf(“X=5d, Y=3*x-11=%d \n”,x,y);

}

}

5.7給一個不多於5位的正整數,要求:1.求它是幾位數2.分別列印出每一位數字3.按逆序列印出各位數字.例如原數為321,應輸出123.

main()

{

long int num;

int indiv,ten,hundred,housand,tenthousand,place;

printf(“請輸入一個整數(0-99999):”);

scanf(“%ld”,num);

if(num9999)

place=5;

else if(num999)

place=4;

else if(num99)

place=3;

else if(num9)

place=2;

else place=1;

printf(“place=%d\n”,place);

printf(“每位數字為:”);

ten_thousand=num/10000;

thousand=(num-tenthousand*10000)/1000;

hundred=(num-tenthousand*10000-thousand*1000)/100;

ten=(num-tenthousand*10000-thousand*1000-hundred*100)/10;

indiv=num-tenthousand*10000-thousand*1000-hundred*100-ten*10;

switch(place)

{case 5:printf(“%d,%d,%d,%d,%d”,tenthousand,thousand,hundred,ten,indiv);

printf(“\n反序數字為:”);

printf(“%d%d%d%d%d\n”,indiv,ten,hundred,thousand,tenthousand);

break;

case 4:printf(“%d,%d,%d,%d”,thousand,hundred,ten,indiv);

printf(“\n反序數字為:”);

printf(“%d%d%d%d\n”,indiv,ten,hundred,thousand);

break;

case 3:printf(“%d,%d,%d\n”,hundred,ten,indiv);

printf(“\n反序數字為:”);

printf(“%d%d%d\n”,indiv,ten,hundred);

case 2:printf(“%d,%d\n”,ten,indiv);

printf(“\n反序數字為:”);

printf(“%d%d\n”,indiv,ten);

case 1:printf(“%d\n”,indiv);

printf(“\n反序數字為:”);

printf(“%d\n”,indiv);

}

}

5.8 1.if語句

main()

{long i;

float bonus,bon1,bon2,bon4,bon6,bon10;

/*初始化變數*/

bon1=100000*0.1;

bon2=100000*0.075+bon1;

bon4=200000*0.05+bon2;

bon6=200000*0.03+bon4;

bon10=400000*0.015+bon6;

printf(“請輸入利潤”);

scanf(“%ld”,i);

/*計算*/

if(i=le5)

bonus=i*0.1;

else if(i2e5)

bonus=bon1+(1-100000)*0.075;

else if(i=4e5)

bonus=bon2+(i-200000)*0.05;

else if(i=6e5)

bonus=bon4+(i-400000)*0.03;

else if(i=le6)

bonus=bon6+(i-600000)*0.015;

else

bonus=bon10+(i-1000000)*0.01;

printf(“獎金是 %10.2f”,bonus);

}

用switch語句編程序

main()

{long i;

float bonus,bon1,bon2,bon4,bon6,bon10;

int branch;

/*初始化變數*/

bon1=100000*0.1;

bon2=bon1+100000*0.075

bon4=bon2+200000*0.05;

bon6=bon4+200000*0.03;

bon10=bon6+400000*0.015;

printf(“請輸入利潤:”);

scanf(“%ld”,i);

branch=i/100000;

if(branch10)

branch=10;

/*計算*/

switch(branch)

{case 0:bonus=i*0.1;break;

case 1:bonus=bon1+(i-100000)*0.075;break;

case 2:

case 3:bonus=bon2+(i-200000)*0.05;break;

case 4:

case 5:bonus=bon4+(i-400000)*0.03;break;

case 6:

case 7:

case 8:

case 9:bonus=bon6+(i-600000)*0.015;break;

case 10:bonus=bon10+(i-1000000)*0.01;

}

printf(” 獎金是 %10.2f”,bonus);

}

5.9 輸入四個整數,按大小順序輸出.

main()

{int t,a,b,c,d;

printf(“請輸入四個數:”);

scanf(“%d,%d,%d,%d”,a,b,c,d);

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

if(ab)

{t=a;a=b;b=t;}

if(ac)

{t=a;a=c;c=t;}

if(ad)

{t=a;a=d;d=t;}

if(bc)

{t=b;b=c;c=t;}

if(bd)

{t=b;b=d;d=t;}

if(cd)

{t=c;c=d;d=t;}

printf(“\n 排序結果如下: \n”);

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

}

5.10塔

main()

{

int h=10;

float x,y,x0=2,y0=2,d1,d2,d3,d4;

printf(“請輸入一個點(x,y):”);

scanf(“%f,%f”,x,y);

d1=(x-x0)*(x-x0)+(y-y0)(y-y0);

d2=(x-x0)*(x-x0)+(y+y0)(y+y0);

d3=(x+x0)*(x+x0)+(y-y0)*(y-y0);

d4=(x+x0)*(x+x0)+(y+y0)*(y+y0);

if(d11 d21 d31 d41)

h=0;

printf(“該點高度為%d”,h);

}

第六章 循環語句

6.1輸入兩個正數,求最大公約數最小公倍數.

main()

{

int a,b,num1,num2,temp;

printf(“請輸入兩個正整數:\n”);

scanf(“%d,%d”,num1,num2);

if(num1num2)

{

temp=num1;

num1=num2;

num2=temp;

}

a=num1,b=num2;

while(b!=0)

{

temp=a%b;

a=b;

b=temp;

}

printf(“它們的最大公約數為:%d\n”,a);

printf(“它們的最小公倍數為:%d\n”,num1*num2/2);

}

6.2輸入一行字元,分別統計出其中英文字母,空格,數字和其它字元的個數.

解:

#include stdio.h

main()

{

char c;

int letters=0,space=0,degit=0,other=0;

printf(“請輸入一行字元:\n”);

while((c=getchar())!=’\n’)

{

if(c=’a’c=’z’||c’A’c=’Z’)

letters++;

else if(c==’ ‘)

space++;

else if(c=’0’c=’9′)

digit++;

else

other++;

}

printf(“其中:字母數=%d 空格數=%d 數字數=%d 其它字元數=%d\n”,letters,space,

digit,other);

}

6.3求s(n)=a+aa+aaa+…+aa…a之值,其中工是一個數字.

解:

main()

{

int a,n,count=1,sn=0,tn=0;

printf(“請輸入a和n的值:\n”);

scanf(“%d,%d”,a,n);

printf(“a=%d n=%d \n”,a,n);

while(count=n)

{

tn=tn+a;

sn=sn+tn;

a=a*10;

++count;

}

printf(“a+aa+aaa+…=%d\n”,sn);

}

6.4 求1+2!+3!+4!+…+20!.

main()

{

float n,s=0,t=1;

for(n=1;n=20;n++)

{

t=t*n;

s=s+t;

}

printf(“1!+2!+…+20!=%e\n”,s);

}

6.5 main()

{

int N1=100,N2=50,N3=10;

float k;

float s1=0,s2=0,s3=0;

for(k=1;k=N1;k++)/*計算1到100的和*/

{

s1=s1+k;

}

for(k=1;k=N2;k++)/*計算1到50各數平方和*/

{

s2=s2+k*k;

}

for(k=1;k=N3;k++)

{

s3=s3+1/k;

}

printf(“總和=%8.2f\n”,s1+s2+s3);

}

6.6水仙開花

main()

{

int i,j,k,n;

printf(” ‘水仙花’數是:”);

for(n=100;n1000;n++)

{

i=n/100;

j=n/10-i*10;

k=n%10;

if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)

{

printf(“%d”,n);

}

}

printf(“\n”);

}

6.7完數

main()

#include M 1000/*定義尋找範圍*/

main()

{

int k0,k1,k2,k3,k4,k5,k6,k7,k8,k9;

int i,j,n,s;

for(j=2;j=M;j++)

{

n=0;

s=j;

for(i=1;ij;i++)

{

if((j%i)==0)

{

if((j%i)==0)

{

n++;

s=s-i;

switch(n)/*將每個因子賦給k0,k1…k9*/

{

case 1:

k0=i;

break;

case 2:

k1=i;

break;

case 3:

k2=i;

break;

case 4:

k3=i;

break;

case 5:

k4=i;

break;

case 6:

k5=i;

break;

case 7:

k6=i;

break;

case 8:

k7=i;

break;

case 9:

k8=i;

break;

case 10:

k9=i;

break;

}

}

}

if(s==0)

{

printf(“%d是一個『完數』,它的因子是”,j);

if(n1)

printf(“%d,%d”,k0,k1);

if(n2)

printf(“,%d”,k2);

if(n3)

printf(“,%d”,k3);

if(n4)

printf(“,%d”,k4);

if(n5)

printf(“,%d”,k5);

if(n6)

printf(“,%d”,k6);

if(n7)

printf(“,%d”,k7);

if(n8)

printf(“,%d”,k8);

if(n9)

printf(“,%d”,k9);

printf(“\n”);

}

}

方法二:此題用數組方法更為簡單.

main()

{

static int k[10];

int i,j,n,s;

for(j=2;j=1000;j++)

{

n=-1;

s=j;

for(i=1;ij;i++)

{

if((j%i)==0)

{

n++;

s=s-i;

k[n]=i;/*將每個因子賦給k0,k1…k9*/

}

}

if(s==0)

{

printf(“%d是一個完數,它的因子是:”,j);

for(i=0;in;i++)

printf(“%d,”,k[i]);

printf(“%d\n”,k[n]);

}

}

5.8 有一個分數序列:2/1,3/2,5/3,8/5……求出這個數列的前20項之和.

解: main()

{

int n,t,number=20;

float a=2,b=1,s=0;

for(n=1;n=number;n++)

{

s=s+a/b;

t=a,a=a+b,b=t;

}

printf(“總和=%9.6f\n”,s);

}

6.9球反彈問題

main()

{

float sn=100.0,hn=sn/2;

int n;

for(n=2;n=10;n++)

{

sn=sn+2*hn;/*第n次落地時共經過的米數*/

hn=hn/2;/*第n次反跳高度*/

}

printf(“第10次落地時共經過%f米 \n”,sn);

printf(“第10次反彈%f米.\n”,hn);

}

6.10猴子吃桃

main()

{

int day,x1,x2;

day=9;

x2=1;

while(day0)

{

x1=(x2+1)*2;

x2=x1;

day–;

}

printf(“桃子總數=%d\n”,x1);

}

6.14列印圖案

main()

{

int i,j,k;

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

{

for(j=0;j=2-1;j++)

printf(” “);

for(k=0;k=2*i;k++)

printf(“*”);

printf(“\n”);

}

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

{

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

printf(” “);

for(k=0;k=4-2*i;k++)

printf(“*”);

printf(“\n”);

}

6.15乒乓比賽

main()

{

char i,j,k;/*i是a是對手;j是b是對手;k是c的對手*/

for(i=’x’;i=’z’;i++)

for(j=’x’;j=’z’;j++)

{

if(i!=j)

for(k=’x’;k=’z’;k++)

{

if(i!=kj!=k)

{if(i!=’x’ k!=’x’ k! =’z’)

printf(“順序為:\na-%c\tb–%c\tc–%c\n”,i,j,k);

}

}

}

}

C語言設計譚浩強第三版的課後習題答案(二) Post By:2008-3-12 20:42:27

7.1用篩選法求100之內的素數.

/*用篩選法求100之內的素數*/

#includemath.h

#define N 101

main()

{int i,j,line,a[N];

for(i=2;iN;i++) a[i]=i;

for(i=2;isqrl(N);i++)

for(j=i+1;jN;j++)

{if(a[i]!=0 a[j]!=0)

if(a[j]%a[i]==0)

a[j]=0;

printf(“\n”);

for(i=2,line=0;iN;i++)

{ if(a[i]!=0)

{printf(“%5d”,a[i]);

line++;

if(line==10)

{printf(“\n”);

line=0;}

}

}

7.2用選擇法對10個數排序.

/*選擇法排序.*/

#define N 10

main()

{ int i,j,min,temp,a[N];

/*輸入數據*/

printf(“請輸入十個數:\n”);

for (i=0;iN;i++)

{ printf(“a[%d]=”,i);

scanf(“%d”,a[i]);

}

printf(“\n”);

for(i=0;iN;i++)

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

printf(“\n”);

/*排序*/

for (i=0;iN-1;i++)

{ min=i;

for(j=i+1;jN;j++)

if(a[min]a[j]) min=j;

temp=a[i];

a[i]=a[min];

a[min]=temp;

}

/*輸出*/

printf(“\n排序結果如下:\n”);

for(i=0;iN;i++)

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

}

7.3對角線和:

/*計算矩陣對角線元素之和*/

main()

{

float a[3][3],sum=0;

int i,j;

printf(“請輸入矩陣元素:\n”);

for(i=0;i3;i++)

for(j=0;j3;j++)

scanf(“%f”,a[i][j]);

for(i=0;i3;i++)

sum=sum+a[i][i];

printf(“對角元素之和=6.2f”,sum);

}

7.4插入數據到數組

/*插入數據到數組*/

main()

{int a[11]={1,4,6,9,13,16,19,28,40,100};

int temp1,temp2,number,end,i,j;

printf(“初始數組如下:”);

for (i=0;i10;i++)

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

printf(“\n”);

printf(“輸入插入數據:”);

scanf(“%d”,number);

end=a[9];

if(numberend)

a[10]=number;

else

{for(i=0;i10;i++)

{ if(a[i]number)

{temp1=a[i];

a[i]=number;

for(j=i+1;j11;j++)

{temp2=a[j];

a[j]=temp1;

temp1=temp2;

}

break;

}

}

}

for(i=0;j11;i++)

printf(“a%6d”,a[i]);

}

7.5將一個數組逆序存放。

/*數組逆序存放*/

#define N 5

main()

{ int a[N]={8,6,5,4,1},i,temp;

printf(“\n 初始數組:\n”);

for(i=0;iN;i++)

printf(“%4d”,a[i]);

for(i=0;iN/2;i++)

{ temp=a[i];

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

a[N-i-1]=temp;

}

printf(“\n 交換後的數組:\n”);

for(i=0;iN;i++)

printf(“%4d”,a[i]);

}

7.6楊輝三角

/*列印楊輝三角形*/

#define N 11

main()

{ int i,j,a[N][N];

for(i=1;iN;i++)

{a[i][i]=1;

a[i][1]=1;

}

for(i=3;iN;i++)

for(j=2;j=i-1;j++)

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

for(i=1;iN;i++)

{ for(j=1;j=i;j++)

printf(“%6d”,a[i][j];

printf(“\n”);

}

printf(“\n”);

}

7.8鞍點

/*查找鞍點*/

#define N 10

#define M 10

main()

{ int i,j,k,m,n,flag1,flag2,a[N][M],max,maxi,maxj;

printf(“\n輸入行數n:”);

scanf(“%d”,n);

printf(“\n輸入列數m:”);

scanf(“%d”,m);

for(i=0;in;i++)

{ printf(“第%d行?\n”,i);

for(j=0;jm,j++);

scanf(“%d”,a[i][j];

}

for(i=0;in;i++)

{ for(j=0;jm;j++)

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

pritf(“\n”);

}

flag2=0;

for(i=0;in;i++)

{ max=a[i][0];

for(j=0;jm;j++)

if(a[i][j]max)

{ max=a[i][j];

maxj=j;

}

for (k=0,flag1=1;kn flag1;k++)

if(maxa[k][max])

flag1=0;

if(flag1)

{ printf(“\n第%d行,第%d列的%d是鞍點\n”,i,maxj,max);

flag2=1;

}

}

if(!flag2)

printf(“\n 矩陣中無鞍點! \n”);

}

7.9變數說明:top,bott:查找區間兩端點的下標;loca:查找成功與否的開關變數.

/*折半查找*/

#includestdio.h

#define N 15

main()

{ int i,j,number,top,bott,min,loca,a[N],flag;

char c;

printf(“輸入15個數(a[i][i-1])\n);

scanf(“%d”,a[0]);

i=1;

while(iN)

{ scanf(“%d”,a[i]);

if(a[i]=a[i-1])

i++;

esle

{printf(“請重輸入a[i]”);

printf(“必須大於%d\n”,a[i-1]);

}

}

printf(“\n”);

for(i=0;iN;i++)

printf(“%4d”,a[i]);

printf(“\n”);

flag=1;

while(flag)

{

printf(“請輸入查找數據:”);

scanf(“%d”,number);

loca=0;

top=0;

bott=N-1;

if((numbera[0])||(numbera[N-1]))

loca=-1;

while((loca==0)(top=bott))

{ min=(bott+top)/2;

if(number==a[min])

{ loca=min;

printf(“%d位於表中第%d個數\n”,number,loca+1);

}

else if(numbera[min])

bott=min-1;

else

top=min+1;

}

if(loca==0||loca==-1)

printf(“%d不在表中\n”,number);

printf(“是否繼續查找?Y/N!\n”);

c=getchar();

if(c==’N’||c==’n’)

flag=0;

}

}

7.10/*統計字元數*/

main()

{ int i,j,uppn,lown,dign,span,othn;

char text[3][80];

uppn=lown=dign=span=othn=0;

for(i=0;i3;i++)

{ printf(“\n請輸入第%d行:\n”,i);

gets(text[i]);

for(j=0;j80 text[i][j]!=’\0′;j++)

{if(text[i][j]=’A’ text[i][j]=’Z’)

uppn+=1;

else if(text[i][j]=’a’ text[i][j]=’z’)

lown+=1;

else if(text[i][j]=’1′ text[i][j]=’9′)

dign+=1;

else if(text[i][j]=’ ‘)

span+=1;

else

othn+=1;

}

}

for(i=0;i3;i++)

printf(“%s=n”,text[i]);

printf(“大寫字母數:%d\n”,uppn);

printf(“小寫字母數:%d\n”,lown);

printf(“數字個數:%d\n”,dign);

printf(“空格個數:%d\n”,span);

printf(“其它字元:%d\n”,othn);

}

7.11/*列印圖案*/

main()

{static char a[5]={‘*’,’*’,’*’,’*’,’*’};

int i,j,k;

char space=’ ‘;

for(i=0;i=5;i++)

{printf(“\n”);

for(j=1;j=3*i;j++)

printf(“%lc”,space);

for(k=0;k=5;k++)

printf(“%3c”,a[k];

}

}

7.12/*譯電文*/

#includestdio.h

main()

{int i,n;

char ch[80],tran[80];

printf(“請輸入字元:”);

gets(ch);

printf(“\n密碼是%c”,ch);

i=0;

while(ch[i]!=’\0′)

{if((ch[i]=’A’)(ch[i]=’Z’))

tran[i]=26+64-ch[i]+1+64;

else if((ch[i]=’a’)(ch[i]=’z’))

tran[i]=26+96-ch[i]+1+96;

else

tran[i]=ch[i];

i++;

}

n=i;

printf(“\n原文是:”);

for(i=0;in;i++)

putchar(tran[i]);

}

7.13/*連接兩個字元串(不用’stract’)*/

main()

{

char s1[80],s2[40];

int i=0,j=0;

printf(“\n請輸入字元串1:”);

scanf(“%s”,s1);

printf(“\n請輸入字元串2:”);

scanf(“%s”,s2);

while(s1[i]!=’\0′)

i++;

while(s2[j]!=’\0′)

s1[i++]=s2[j++];

s1[i]=’\0′;

printf(“\n連接後字元串為:%s”,s1);

}

7.14/*字元串比較*/

#includestdio.h

main()

{int i,resu;

char s1[100],s2[100];

printf(“請輸入字元串1:\n”);

gets(s1);

printf(“\n 請輸入字元串2:\n”);

gets(s2);

i=0;

while((s1[i]==s2[i]) (s1[i]!=’\0′))i++;

if(s1[i]==’\0′ s2[i]==’\0′)resu=0;

else

resu=s1[i]-s2[i];

printf(” %s與%s比較結果是%d”,s1,s2,resu);

}

7.15/*字元串複製*/

#includestdio.h

main()

{

char from[80],to[80];

int i;

printf(“請輸入字元串”);

scanf(“%s”,from);

for(i=0;i=strlen(from);i++)

to[i]=from[i];

printf(“複製字元串為:%s\n”,to);

}

第八章 函數

譚浩強C語言程序設計第四版,第113頁第10題的第二小題求答案,謝謝

#include stdio.h

int main()

{

int i;

double bonus,bon1,bon2,bon4,bon6,bon10;

bon1=100000*0.1;

bon2=bon1+100000*0.075;

bon4=bon2+100000*0.05;

bon6=bon4+100000*0.03;

bon10=bon6+400000*0.015;

printf(“請輸入利潤i:”);

scanf(“%d”,i);

if (i=100000)

bonus=i*0.1;

else if (i=200000)

bonus=bon1+(i-100000)*0.075;

else if (i=400000)

bonus=bon2+(i-200000)*0.05;

else if (i=600000)

bonus=bon4+(i-400000)*0.03;

else if (i=1000000)

bonus=bon6+(i-600000)*0.015;

else

bonus=bon10+(i-1000000)*0.01;

printf(“獎金是: %10.2f\n”,bonus);

return 0;

}

#include stdio.h

int main()

{

int i;

double bonus,bon1,bon2,bon4,bon6,bon10;

int branch;

bon1=100000*0.1;

bon2=bon1+100000*0.075;

bon4=bon2+200000*0.05;

bon6=bon4+200000*0.03;

bon10=bon6+400000*0.015;

printf(“請輸入利潤i:”);

scanf(“%d”,i);

branch=i/100000;

if (branch10) branch=10;

switch(branch)

{ case 0:bonus=i*0.1;break;

case 1:bonus=bon1+(i-100000)*0.075;break;

case 2:

case 3: bonus=bon2+(i-200000)*0.05;break;

case 4:

case 5: bonus=bon4+(i-400000)*0.03;break;

case 6:

case 7:

case 8:

case 9: bonus=bon6+(i-600000)*0.015;break;

case 10: bonus=bon10+(i-1000000)*0.01;

}

printf(“獎金是 %10.2f\n”,bonus);

return 0;

}

關於C語言的問題求助! 另求C程序設計第四版(譚浩強編)的答案

1,輸出:c1=a,c2=b

c1=97,c2=98

原因:因為輸出為整型格式時,就輸出對應的ASC代碼值;字元格式就輸出相應的字元。

2,輸出:c1=?,c2=?

c1=-59c2=-58

原因:英文字母對應的asc值越界,所以輸出?(不能輸出對應的特殊符號,應為格式是%c),至於後面輸出的負數,是因為字元常量在內存中存儲的時候實際上是以二進位形式存儲的,197和198存儲進去,內存中因為越界不能完整存儲相應的二進位碼,而存儲的二進位碼輸出來的整數就是那二進位碼對應的負數了。

3,輸出:c1=a,c2=b

c1=97,c2=98

原因和1的問基本相同了。。

我有一本譚浩強的那個書,電子書自己去下了網上很多的。

求《C語言程序設計》第四版,譚浩強編,清華大學出版社 課後習題答案

#includestdio.h

int main(){

fload a[3];

scanf(“%f,%f,%f”,a[0],a[1],a[2]);

float temp;

if(a[0]a[1]){

temp = a[0];

a[0] = a[1];

a[1] = temp;

}

if(a[1]a[2]){

temp = a[1];

a[1] = a[2];

a[2] = temp;

}

if(a[0]a[1]){

temp = a[0];

a[0] = a[1];

a[1] = temp;

}

print(“%f %f %f \n”, a[0],a[1],a[2]);

}

原創文章,作者:YQBM,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/144016.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
YQBM的頭像YQBM
上一篇 2024-10-24 15:26
下一篇 2024-10-24 15:26

相關推薦

  • AES加密解密演算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密演算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES演算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演著非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • 小甲魚Python最新版課後作業及答案

    Python編程語言已經成為最受歡迎的計算機編程語言之一。而小甲魚的Python教程已經深受廣大編程學習者的青睞,其中課後作業及答案是學習過程中的必要部分。下面我們從幾個方面具體闡…

    編程 2025-04-29
  • 學堂雲Python語言程序設計答案

    學堂雲Python語言程序設計是一門重要的計算機專業課程。它涵蓋了Python語言及其應用,包括基礎語法、函數、文件處理、數據結構、圖形界面和網路編程等內容。在學習中,我們經常會需…

    編程 2025-04-29
  • Python語言由荷蘭人為中心的全能編程開發工程師

    Python語言是一種高級語言,很多編程開發工程師都喜歡使用Python語言進行開發。Python語言的創始人是荷蘭人Guido van Rossum,他在1989年聖誕節期間開始…

    編程 2025-04-28
  • Python語言設計基礎第2版PDF

    Python語言設計基礎第2版PDF是一本介紹Python編程語言的經典教材。本篇文章將從多個方面對該教材進行詳細的闡述和介紹。 一、基礎知識 本教材中介紹了Python編程語言的…

    編程 2025-04-28
  • Python語言實現人名最多數統計

    本文將從幾個方面詳細介紹Python語言實現人名最多數統計的方法和應用。 一、Python實現人名最多數統計的基礎 1、首先,我們需要了解Python語言的一些基礎知識,如列表、字…

    編程 2025-04-28

發表回復

登錄後才能評論