《C語言習(xí)題答案人民郵電第2版全.doc》由會(huì)員分享,可在線閱讀,更多相關(guān)《C語言習(xí)題答案人民郵電第2版全.doc(12頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
C語言習(xí)題答案
第1章
1.選擇題
12 345
CBABD
2.填空題
(1)main (2) main (3) 有窮性、確定性、有零個(gè)或多個(gè)輸入、有一個(gè)或多個(gè)輸出、有效性
(4) 順序、分支和循環(huán)(5) 自頂向下,逐步細(xì)化、模塊化設(shè)計(jì)、限制使用goto語句
第2章
1.選擇題
12 345 67 890 12 34 5
ACCDA DDBBA BBACB
2、填空題
(1) 數(shù)字、字母、下劃線 (2)0 (3) 4、8 (4) (a+b)*c/(a-b) (5) -60 (6)-16
(7)9 (8)6、4、2 (9)0 (10)10、6 (11)12、4 (12)5.500000
(13) 0 (14)16 (15)6.6
3、編程題
(1)編寫一個(gè)程序求各種類型數(shù)據(jù)的存儲(chǔ)長度。
#include
main()
{
printf("int:%d byte\n",sizeof(int));
printf("short int:%d byte\n",sizeof(short int));
printf("long int:%d byte\n",sizeof(long int));
printf("float:%d byte\n",sizeof(float));
printf("double:%d byte\n",sizeof(double));
printf("long double:%d byte\n",sizeof(long double));
printf("char:%d byte\n",sizeof(char));
}
(2)
#include
#define RAT 1.60934
main()
{
float k;
printf("input the km:");
scanf("%f",&k);
printf("mile:%f\n",k/RAT);
}
第3章
1.選擇題
12 345 67 890
(1) ~(10):DDCDD DCDCC
2.解析題
(1) x=170,x=ㄩㄩㄩ170,x=ㄩㄩㄩ252,x=ㄩㄩㄩㄩaa,x=ㄩㄩㄩ170
x=170,x=170ㄩㄩㄩ,x=ㄩㄩㄩ170,x=%6d
a=513.789185,a=ㄩㄩ513.79,a=513.78918457,a=513.78918457
(2) a=3ㄩb=7x=8.5ㄩy=71.82c1=Aㄩc2=a
3.編程題
(1)
main()
{
int x,y;
scanf("%d%d",&x,&y);
printf("商數(shù)=%d,余數(shù)=%d",x/y,x%y);
}
(2)
main()
{
double x,y,z,avg;
scanf("%lf%lf%lf",&x,&y,&z);
avg=(x+y+z)/3;
printf("%.1f",avg);
}
第4章
1.選擇題
(1)~(10) CCAAD CCABD
2.填空題
(1)①a>0&&b>0||a>0&&c>0||b>0&&c>0
②a5||-a>5
④(a<=0)&&((int)a)!=a
⑤(a%b)!=0
(2)①!(x>0) ②1 ③!(x>=0&&x<=5)
(3)3、2、2
(4) ch>=A&&ch<=Z ch=ch-32
(5) x<=10&&x>2 x<=2&&x>-1 y=-1 ;
(6) a+b>c&&a+c>b&&b+c>a a==b&&a==c a==b||a==c||b==c
(7) x<0 c=x/10 y!=-2
3.編程題
(1)
#include
main()
{
int x;
printf("please input a number:");
scanf("%d",&x);
if(x%2==0) printf("x is a even number");
else printf("x is a odd number");
}
(2)
#include
main()
{
int x,y;
printf("please input a number:");
scanf("%d",&x);
if(x>-5 && x<0) { y=x; printf("%d",y); }
else if(x==0) { y=x-1; printf("%d",y); }
else if(x>0 && x<10) { y=x+1; printf("%d",y); }
else printf("the number is error");
}
(3)
#include
main()
{ int a,m;
printf("please input a number:");
scanf("%d",&a);
switch(a/10)
{ case 0:
case 1:
case 2:m=1;break;
case 3:m=2;break;
case 4:m=3;break;
case 5:m=4;break;
default:m=5;break;
}
printf("%d",m);
}
(4)
#include
main()
{
float price,tax;
printf("please input the price of product:");
scanf("%f",&price);
if(price>=10000) tax=price*0.05;
else if(price>=5000) tax=price*0.03;
else if(price>=1000) tax=price*0.02;
else tax=0;
printf("%f",tax);
}
(5)
#include
main()
{
float score;
printf("please input the score of student:");
scanf("%f",&score);
if(score>=85) printf("VERY GOOD");
else if(score>=60) printf("GOOD");
else printf("BAD");
}
(6)
# include
main ()
{
int x,y,z;
printf("input two number:");
scanf("%d%d",&x,&y);
if(x<10 || x>99 || y<10 || y>99)
printf("input data error!\n");
else
{ z=(x/10)*1000+(y/10)*100+(x%10)*10+y%10;
printf("%d\n",z);
}
}
第5章
1.選擇題
(1)d (2) c (3)a (4)d (5)a (6)d (7)d (8)b (9)d (10)b
(11)c (12)a (13)d (14)d (15)c
2.填空題
(1) fahr celsius=5.0/9*(fahr-32) fahr+=step (2) 5、4、6 (3) 3*i-2
(4) y-- z*=x (5) 8ㄩ5ㄩ2 (6) j++ i%j==0 j>=i(或j==i)
(7)sum=eps
第三處改正:r*2
(4) 第一處改正:&n
第二處改正:== ==
(5) 第一處改正:t=m/10改為t=m%10
第二處改正:t=0改為t==0
第三處改正:m=m%10改為m=/10
4.編程題
(1) 分式累加和。
#include
main()
{
int s;
float n,t,sum;
t=1; sum=0; n=1; s=1.0;
while(n<=100)
{
sum=sum+t;
n=n+1;
s=-s;
t=s/n;
}
printf("sum=%10.6f\n",sum);
}
(2)1~10的階乘
#include
main()
{
int i;
long int n=1;
for(i=1;i<=10;i++)
{
n=n*i;
printf(i%5==0?"%2d!=%-10ld\n":"%2d!=%-10ld",i,n);
}
}
(3)由*組成的等腰三角形
#include
main()
{
int n,i,j;
scanf("%d",&n);
for(i=1;i<=n;i++)
{ for(j=1;j<=n+i-1;j++)
if(j<=n-i) printf(" ");
else printf("*");
printf("\n");
}
}
(4)完數(shù)
main()
{
int m,s,i;
for(m=2;m<1000;m++)
{ s=0;
for(i=1;i
main()
{
int h10,h7,h5;
for(h10=0; h10<=8; h10++)
for(h7=0; h7<=8; h7++)
for(h5=0; h5<=8; h5++)
if(h10+h7+h5==8 && h10*10+h7*7+h5*5==53)
printf("h10=%d\th7=%d\th5=%d\n",h10,h7,h5);
}
(6) 猴子吃桃子問題。采取逆向思維的方法,從后往前推斷。
//代碼一
main()
{
intday,x1,x2;
day=9;
x2=1;
while(day>0)
{ x1=(x2+1)*2; /*第一天的桃子數(shù)是第2天桃子數(shù)加1后的2倍*/
x2=x1;
day--;
}
printf("thetotalis%d\n",x1);
}
//代碼二
main()
{
int i=9,sum=1;
for(; i>0; sum=2*(sum+1),i--);
printf( "sum=%d\n ",sum);
}
(7)牛頓迭代法
一般地:
f(x)=a0xn+a1xn-1+….+an-1x+an=0
求f(x)在X0附近的根
計(jì)算公式:Xn+1=Xn-f(Xn)/f’(Xn)
精度:ε= |Xn+1-Xn|<1.0e-m,m=5。
所求的根:滿足精度的Xn
#include
#include
main()
{ float x,x0,f,f1;
x=1.5; //可改為scanf("%f",&x);
do
{ x0=x;
f=2*x0*x0*x0-4*x0*x0+3*x0-6;
f1=6*x0*x0-8*x0+3; // f的導(dǎo)數(shù),即它的切線
x=x0-f/f1; // 切線與x軸的交點(diǎn)
}while(fabs(x-x0)>=1e-5);
printf("The root is %8.7f\n",x);
}
(8) 利用輾除法,直到b為0為止
main()
{ int p,r,n,m,temp;
printf("input two integer n,m:");
scanf("%d,%d",&n,&m);
if(n0 n%10+0x30或n%10+0 s[j]=\0
(4)s[i] 、 s[0],s[1] 、str,s[1]、s[2],str
4.改錯(cuò)題
(1) 第一處改正:n=strlen(str)
第二處改正:str[j]==
第三處改正:str[j]!=
(2)第一處改正:ch=str[i]
第二處改正:(j>=0) && (ch
#include
#include
main()
{
int a[12],count=0,i;
srand((unsigned) time(NULL));
for (i=0;i<12;i++)
a[i]=5+rand()%11;
for(i=0;i<12;i++)
{
printf("%5d",a[i]);
count++;
if(count%4==0)printf("\n") ;
}
}
(2)
#include
#define N 5
main()
{
int a[N],max,min,i,sum=0,count=0;
float av;
for(i=0; imax)max=a[i];
if(a[i]av)count++;
printf("max:%d\nmin:%d\nav:%f\ncount:%d",max,min,av,count);
}
(3)
#include
main()
{
int score[30]; /*={61,62,63,64,65,66,67,68,69,70,
71,72,73,74,75,76,77,78,79,80,
81,85,89,90,33,44,55,91,92,93}; //不必賦初值,這是為調(diào)試程序方便*/
int i,count90=0,count80=0,count70=0,count60=0;
for(i=0;i<30;i++)
{
printf("intput NO. %d students score:",i+1);
scanf("%d",score+i);
}
for(i=0;i<30;i++)
{
if(score[i]>=90)
{
count90++;
count80++;
count70++;
count60++;
}
else if(score[i]>=80)
{
count80++;
count70++;
count60++;
}
else if(score[i]>=70)
{
count70++;
count60++;
}
else if(score[i]>=60)
count60++;
}
printf("0~59:%d\n60~69:%d\n70~79:%d\n80~89:%d\n90~100:%d",30-count60,count60-count70,count70-count80,count80-count90,count90);
printf("\n60 or higher:%d\n70 or higher:%d\n80 or higher:%d\n90 or higher:%d\n",count60,count70,count80,count90);
}
(4)
1、
#include
main()
{
char a[45];
int i,j,k;
for(i=0;i<45;i++)a[i]= ;
for(i=0;i<5;i++)
{
for(j=0;j
main()
{
char a[5][9];
int i,j,k;
for(i=0;i<5;i++)
for(j=0;j<9;j++)
a[i][j]= ;
for(i=0;i<5;i++)
{
for(j=0;j
# define N 4
main()
{
int i,j,a[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10};
printf("\nThe original array:\n");
for(i=0;iy?x:y)
(8)
******
######
******
******
######
******
******
######
******
(9) str[ ]=abdef
(10) low<=high (high+low)/2
3.改錯(cuò)題
(1)第一處:void改為int
第二處:i<=n && (n%i==0)改為i<=n && (n%i!=0)或i=1e-6)改為if(fabs(x1-x0)>=1e-6)
4 、編程題
(1)
#include
long act(long n)
{
if (n==1||n==0) return 1;
else
{
return n*act(n-1);
}
}
main()
{
int n=3;
printf("n!=%ld",act(n));
}
(2)
#include
void mmax(float a[],int n);
main()
{
float a[6];
int i;
for(i=1; i<=5; i++)
scanf("%f",&a[i]);
a[0]=1;
mmax(a,5);
printf("%f %d\n",a[(int)a[0]],(int)a[0]);
}
void mmax(float a[],int n)
{
if(n<=0)
return;
else
if(a[n]>a[(int)a[0]])
a[0]=n;
mmax(a,n-1);
}
(3)
#include
#include
int start;
int fun(char str[]);
main()
{
char a[40];
int i,num;
gets(a);
num=fun(a);
if(num==-1)
printf("input string error or no have A\n");
else
{
printf("%d\n",num);
for(i=start; i
#include
void fun(char str[],int a[])//不使用數(shù)組時(shí),可使用全局變量保存統(tǒng)計(jì)結(jié)果
{
int i=0;
a[0]=a[1]=a[2]=a[3]=0;
while(str[i]!=\0)
{
if(str[i]>=A && str[i]<=Z || str[i]>=a && str[i]<=z)
a[0]++;
else if(str[i]>=0 && str[i]<=9)
a[1]++;
else if(str[i]== )
a[2]++;
else
a[3]++;
i++;
}
}
int main()
{
char s[80];
int a[4];
gets(s);
fun(s,a);
printf("letters:%d\tdigits:%d\tspaces:%d\tother the character:%d\n",a[0],a[1],a[2],a[3]);
}
第8章
1.選擇題:
DABAD
2.編程題
(1)
/*習(xí)題8-2-1 */
#define ISALPHA(a) (((a)>=A&&(a)<=Z)||((a)>=a&&(a)<=z))
main()
{ char c;
scanf("%c",&c);
printf("%d\n",ISALPHA(c));
}
(2)
/*習(xí)題8-2-2 */
#define SWAP(t,x,y) {t w; w=x; x=y; y=w; }
main()
{ double a=99.99,b=11.11;
SWAP(double,a,b);
printf("%f,%f\n",a,b);
}
(3)
/*習(xí)題8-2-3 */
#include "stdio.h"
#define MAX 80
#define CHANGE 1
main()
{ char str[MAX];
int i;
printf("Input text:\n");
gets(str);
#if(CHANGE)
{ for (i=0;i=a&&str[i]=A&&str[i]array;p--)
*p=*(p-1);
*array=array_end;
m--;
if(m>0) move(array,n,m); /*遞歸調(diào)用,當(dāng)循環(huán)次數(shù)m減至0時(shí),停止調(diào)用*/
}
(2)
/*習(xí)題9-4-2 */
#include
#include
#define TOTAL 6
int mseek(char*str[],char xstr[],int n)
{ int i;
for(i=0; i
#include
void fun(char *str,int num[4])
{ int i;
for(i=0; i<4; i++) num[i]=0;
while(*str!=\0)
{ if(*str>=a && *str<=z || *str>=A && *str<=Z)
num[0]++;
else if(*str== )
num[1]++;
else if(*str>=0 && *str<=9)
num[2]++;
else
num[3]++;
str++;
}
}
#define N 80
main()
{ int string[N];
int n[4],i;
gets(string);
fun(string,n);
for(i=0; i<4; i++)
printf("%d\t",n[i]);
}
(4)
/*習(xí)題9-4-4 */
/* 調(diào)試時(shí),可這樣輸入數(shù)據(jù):*/
/*11 12 13 14 15
21 22 23 24 25
31 32 33 34 35
41 42 43 44 45
51 52 53 54 55 */
#include
main()
{ int a[5][5],*p,i,j;
void change(int *p);
printf("Input matrix:\n");
for(i=0;i<5;i++) /*輸入矩陣*/
for(j=0;j<5;j++)
scanf("%d",&a[i][j]);
p=&a[0][0]; /*使p指向0行0列元素*/
change(p); /*調(diào)用函數(shù), 實(shí)現(xiàn)交換*/
printf("Now, matrix: \n");
for(i=0;i<5;i++) /*輸出已交換的矩陣*/
{ for(j=0;j<5;j++)
printf("%4d",a[i][j]);
printf("\n");
}
}
void change(int *p) /*交換函數(shù)*/
{ int i,j,temp;
int *pmax,*pmin;
pmax=p;
pmin=p;
for(i=0;i<5;i++) /*找最大值和最小值的地址,并賦給pmax,pmin*/
for(j=0;j<5;j++)
{ if(*pmax<*(p+5*i+j)) pmax=p+5*i+j;
if(*pmin>*(p+5*i+j)) pmin=p+5*i+j;
}
temp=*(p+12); /*將最大值換給中心元素*/
*(p+12)=*pmax;
*pmax=temp;
temp=*p; /*將最小值換給左上角元素*/
*p=*pmin;
*pmin=temp;
pmin=p+1;
for(i=0;i<5;i++) /*找第二最小值的地址賦給pmin*/
for(j=0;j<5;j++)
if(((p+5*i+j)!=p)&&(*pmin>*(p+5*i+j))) pmin=p+5*i+j;
temp=*pmin; /*將第二最小值換給右上角元素*/
*pmin=*(p+4);
*(p+4)=temp;
pmin=p+1;
for(i=0;i<5;i++) /*找第三最小值的地址賦給pmin*/
for(j=0;j<5;j++)
if(((p+5*i+j)!=(p+4))&&((p+5*i+j)!=p)&&(*pmin>*(p+5*i+j)))
pmin=p+5*i+j; /*將第三最小值換給左下角元素*/
temp=*pmin;
*pmin=*(p+20);
*(p+20)=temp;
pmin=p+1;
for(i=0;i<5;i++) /*找第四最小值的地址賦給pmin*/
for(j=0;j<5;j++)
if(((p+5*i+j)!=p)&&((p+5*i+j)!=(p+4))&&((p+5*i+j)!=(p+20))&&(*pmin>*(p+5*i+j)))
pmin=p+5*i+j;
temp=*pmin; /*將第四最小值換給右下角元素*/
*pmin=*(p+24);
*(p+24)=temp;
}
(5)
/*習(xí)題9-4-5 */
/*可以專門編寫一個(gè)函數(shù)求各學(xué)生的平均分,存到aver[4]數(shù)組*/
#include
void avcour1(float score[][5]);
void fali2(int num[4],float score[4][5]);
void good(int num[4],float score[4][5]);
main()
{
int i,j,num[4];//數(shù)組num代表學(xué)號(hào)
float score[4][5];
printf("Input NO. and scores: \n");
for(i=0;i<4;i++)
{ printf("NO.");
scanf("%d",&num[i]);
printf("scores:");
for(j=0;j<5;j++)
scanf("%f",&score[i][j]);
}
printf("\n\n");
avcour1(score); /*求出第一門課的平均成績(jī)*/
printf("\n\n");
fali2(num,score); /*找出2門課不及格的學(xué)生*/
printf("\n\n");
good(num,score); /*找出成績(jī)好的學(xué)生*/
}
void avcour1(float score[][5]) /*第一門課的平均成績(jī)的函數(shù)*/
{ int i;
float sum,average1;
sum=0.0;
for(i=0;i<4;i++)
sum=sum+score[0][i]; /*累計(jì)每個(gè)學(xué)生的得分*/
average1=sum/4; /*計(jì)算平均成績(jī)*/
printf("course 1 average score: %6.2f. \n",average1);
}
void fali2(int num[4],float score[4][5])
/*找兩門以上課程不及格的學(xué)生的函數(shù)*/
{ int i,j,k,label;
float sum=0;
printf("= = = = = = = =Student who is fail = = = = = = = = = = = =\n");
printf(" NO.");
for(i=0;i<5;i++)
printf("%10d",i+1);
printf(" average\n");
for(i=0;i<4;i++)
{ label=0;
for(j=0;j<5;j++)
if((score[i][j])<60.0) label++;
if(label>=2)
{ printf("%5d",num[i]);
for(k=0;k<5;k++)
{ printf("%10.2f",score[i][k]);
sum+=score[i][k];
}
printf("%10.2f\n",sum/5);
}
}
}
void good(int num[4],float score[4][5]
鏈接地址:http://www.hcyjhs8.com/p-12766681.html