『壹』 跪求c語言程序設計課後習題答案及C語言程序設計習題解答與實驗指導答案。
第一部分習題解答
第1章引言習題解答1
第2章基本的程序語句習題解答2
第3章程序的簡單演算法制定習題解答6
第4章分支結構習題解答11
第5章循環結構習題解答19
第6章函數和宏定義習題解答30
第7章數組習題解答38
第8章指針習題解答48
第9章構造數據類型習題解答56
第10章文件操作習題解答65
第11章位運算習題解答73
第二部分實驗
第1章引言實驗79
1.1目的和要求79
1.2實驗練習79
1.3綜合練習83
第2章基本的程序語句實驗83
2.1目的和要求83
2.2相關知識83
2.3實驗練習84
2.4綜合練習90
第3章程序的簡單演算法制定實驗91
3.1目的和要求91
3.2實驗練習91
第4章分支結構實驗96
4.1目的和要求96
4.2相關知識96
4.3實驗練習97
4.4綜合練習105
第5章循環結構實驗107
5.1目的和要求107
5.2相關知識107
5.3實驗練習108
5.4綜合練習118
第6章函數和宏定義實驗120
6.1目的和要求120
6.2相關知識121
6.3實驗練習122
6.4綜合練習126
第7章數組實驗127
7.1目的和要求127
7.2相關知識128
7.3實驗練習129
7.4綜合練習134
第8章指針實驗136
8.1目的和要求136
8.2相關知識136
8.3實驗練習137
8.4綜合練習144
第9章構造數據類型實驗145
9.1目的和要求145
9.2相關知識145
9.3實驗練習147
9.4綜合練習153
第10章文件操作實驗155
10.1目的和要求155
10.2相關知識156
10.3實驗練習157
10.4綜合練習164
第11章位運算實驗165
11.1目的和要求165
11.2相關知識165
11.3實驗練習166
11.4綜合練習168
第三部分其他
第12章集成開發環境介紹170
12.1Turbo C的安裝及使用170
12.1.1Turbo C的安裝170
12.1.2Turbo C簡介170
12.1.3Turbo C的使用173
12.2Borland C++的安裝及使用175
12.2.1Borland C++的安裝175
12.2.2編輯、編譯和運行程序175
第13章常見編譯錯誤信息176
13.1致命錯誤177
13.2一般錯誤177
13.3警告185
『貳』 c語言程序設計第四版答案 第八章指針 課後3 。14 。15答案
//課後3
#include <stdio.h>
int main()
{ void input(int *);
void max_min_value(int *);
void output(int *);
int number[10];
input(number);
max_min_value(number);
output(number);
return 0;
}
void input(int *number)
{int i;
printf("input 10 numbers:");
for (i=0;i<10;i++)
scanf("%d",&number[i]);
}
void max_min_value(int *number)
{ int *max,*min,*p,temp;
max=min=number;
for (p=number+1;p<number+10;p++)
if (*p>*max) max=p;
else if (*p<*min) min=p;
temp=number[0];number[0]=*min;*min=temp;
if(max==number) max=min;
temp=number[9];number[9]=*max;*max=temp;
}
void output(int *number)
{int *p;
printf("Now,they are: ");
for (p=number;p<number+10;p++)
printf("%d ",*p);
printf("\n");
}
//課後14
#include <stdio.h>
int main()
{void sort (char *p,int m);
int i,n;
char *p,num[20];
printf("input n:");
scanf("%d",&n);
printf("please input these numbers:\n");
for (i=0;i<n;i++)
scanf("%d",&num[i]);
p=&num[0];
sort(p,n);
printf("Now,the sequence is:\n");
for (i=0;i<n;i++)
printf("%d ",num[i]);
printf("\n");
return 0;
}
void sort (char *p,int m) // 將n個數逆序排列函數
{int i;
char temp, *p1,*p2;
for (i=0;i<m/2;i++)
{p1=p+i;
p2=p+(m-1-i);
temp=*p1;
*p1=*p2;
*p2=temp;
}
}
//課後15
#include <stdio.h>
int main()
{void avsco(float *,float *);
void avcour1(char (*)[10],float *);
void fali2(char course[5][10],int num[],float *pscore,float aver[4]);
void good(char course[5][10],int num[4],float *pscore,float aver[4]);
int i,j,*pnum,num[4];
float score[4][5],aver[4],*pscore,*paver;
char course[5][10],(*pcourse)[10];
printf("input course:\n");
pcourse=course;
for (i=0;i<5;i++)
scanf("%s",course[i]);
printf("input NO. and scores:\n");
printf("NO.");
for (i=0;i<5;i++)
printf(",%s",course[i]);
printf("\n");
pscore=&score[0][0];
pnum=&num[0];
for (i=0;i<4;i++)
{scanf("%d",pnum+i);
for (j=0;j<5;j++)
scanf("%f",pscore+5*i+j);
}
paver=&aver[0];
printf("\n\n");
avsco(pscore,paver); // 求出每個學生的平均成績
avcour1(pcourse,pscore); // 求出第一門課的平均成績
printf("\n\n");
fali2(pcourse,pnum,pscore,paver); // 找出2門課不及格的學生
printf("\n\n");
good(pcourse,pnum,pscore,paver); // 找出成績好的學生
return 0;
}
void avsco(float *pscore,float *paver) // 求每個學生的平均成績的函數
{int i,j;
float sum,average;
for (i=0;i<4;i++)
{sum=0.0;
for (j=0;j<5;j++)
sum=sum+(*(pscore+5*i+j)); //累計每個學生的各科成績
average=sum/5; //計算平均成績
*(paver+i)=average;
}
}
void avcour1(char (*pcourse)[10],float *pscore) // 求第一課程的平均成績的函數
{int i;
float sum,average1;
sum=0.0;
for (i=0;i<4;i++)
sum=sum+(*(pscore+5*i)); //累計每個學生的得分
average1=sum/4; //計算平均成績
printf("course 1:%s average score:%7.2f\n",*pcourse,average1);
}
void fali2(char course[5][10],int num[],float *pscore,float aver[4])
// 找兩門以上課程不及格的學生的函數
{int i,j,k,labe1;
printf(" ==========Student who is fail in two courses======= \n");
printf("NO. ");
for (i=0;i<5;i++)
printf("%11s",course[i]);
printf(" average\n");
for (i=0;i<4;i++)
{labe1=0;
for (j=0;j<5;j++)
if (*(pscore+5*i+j)<60.0) labe1++;
if (labe1>=2)
{printf("%d",num[i]);
for (k=0;k<5;k++)
printf("%11.2f",*(pscore+5*i+k));
printf("%11.2f\n",aver[i]);
}
}
}
void good(char course[5][10],int num[4],float *pscore,float aver[4])
// 找成績優秀學生(各門85以上或平均90分以上)的函數
{int i,j,k,n;
printf(" ======Students whose score is good======\n");
printf("NO. ");
for (i=0;i<5;i++)
printf("%11s",course[i]);
printf(" average\n");
for (i=0;i<4;i++)
{n=0;
for (j=0;j<5;j++)
if (*(pscore+5*i+j)>85.0) n++;
if ((n==5)||(aver[i]>=90))
{printf("%d",num[i]);
for (k=0;k<5;k++)
printf("%11.2f",*(pscore+5*i+k));
printf("%11.2f\n",aver[i]);
}
}
}
『叄』 C語言程序設計教程答案~有追加懸賞100分!
1 【C語言】《C語言程序設計教程(第二版)》習題答案
說 明
1. 本文所指的《C語言程序設計教程(第二版)》是李鳳霞主編、北京理
工大學出版社出版的,綠皮。
2 第1章 程序設計基礎知識
一、單項選擇題(第23頁)
1-4.CBBC 5-8.DACA
二、填空題(第24頁)
1.判斷條件 2.面向過程編程 3.結構化 4.程序 5.面向對象的程序設計語言 7.有窮性 8.直到型循環 9.演算法 10.可讀性 11.模塊化 12.對問題的分析和模塊的劃分
三、應用題(第24頁)
2.源程序:
main()
{int i,j,k; /* i:公雞數,j:母雞數,k:小雞數的1/3 */
printf("cock hen chick\n");
for(i=1;i<=20;i++)
for(j=1;j<=33;j++)
for(k=1;k<=33;k++)
if (i+j+k*3==100&&i*5+j*3+k==100)
printf(" %d %d %d\n",i,j,k*3);}
執行結果:
cock hen chick
4 18 78
8 11 81
12 4 84
3.現計算斐波那契數列的前20項。
遞推法 源程序:
main()
{long a,b;int i;
a=b=1;
for(i=1;i<=10;i++) /*要計算前30項,把10改為15。*/
{printf("%8ld%8ld",a,b);
a=a+b;b=b+a;}}
遞歸法 源程序:
main()
{int i;
for(i=0;i<=19;i++)
printf("%8d",fib(i));}
fib(int i)
{return(i<=1?1:fib(i-1)+fib(i-2));}
執行結果:
1 1 2 3 5 8 13 21 34 55
89 144 233 377 610 987 1597 2584 4181 6765
4.源程序:
#include "math.h";
main()
{double x,x0,deltax;
x=1.5;
do {x0=pow(x+1,1./3);
deltax=fabs(x0-x);
x=x0;
}while(deltax>1e-12);
printf("%.10f\n",x);}
執行結果:
1.3247179572
5.源程序略。(分子、分母均構成斐波那契數列)
結果是32.66026079864
6.源程序:
main()
{int a,b,c,m;
printf("Please input a,b and c:");
scanf("%d %d %d",&a,&b,&c);
if(a<b){m=a;a=b;b=m;}
if(a<c){m=a;a=c;c=m;}
if(b<c){m=b;b=c;c=m;}
printf("%d %d %d\n",a,b,c);}
執行結果:
Please input a,b and c:123 456 789
789 456 123
7.源程序:
main()
{int a;
scanf("%d",&a);
printf(a%21==0?"Yes":"No");}
執行結果:
42
Yes
3 第2章 C語言概述
一、單項選擇題(第34頁)
1-4.BDCB 5-8.AABC
二、填空題(第35頁)
1.主 2.C編譯系統 3.函數 函數 4.輸入輸出 5.頭 6. .OBJ 7.庫函數 8.文本
三、應用題(第36頁)
5.sizeof是關鍵字,stru、_aoto、file、m_i_n、hello、ABC、SIN90、x1234、until、cos2x、s_3是標識符。
8.源程序:
main()
{int a,b,c;
scanf("%d %d",&a,&b);
c=a;a=b;b=c;
printf("%d %d",a,b);}
執行結果:
12 34
34 12
4 第3章 數據類型與運算規則
一、單項選擇題(第75頁)
1-5.DBACC 6-10.DBDBC 11-15.ADCCC 16-20.CBCCD 21-25.ADDBC 26-27.AB
二、填空題(第77頁)
1.補碼 2.±(10^-308~10^308) 3.int(整數) 4.單目 自右相左 5.函數調用 6.a或b 7.1 8.65,89
三、應用題(第78頁)
1.10 9
2.執行結果:
11
0
0
12
1
5 第4章 順序結構程序設計
一、單項選擇題(第90頁)
1-5.DCDAD 6-10.BACBB
二、填空題(第91頁)
1.一 ;2. 5.169000 3.(1)-2002500 (2)I=-200,j=2500 (3)i=-200
j=2500 4.a=98,b=765.000000,c=4321.000000 5.略 6.0,0,3 7.3 8.scanf("%lf%lf%lf",&a,&b,&c); 9. 13 13.000000,13.000000 10.a=a^c;c=c^a;a=a^c;(這種演算法不破壞b的值,也不用定義中間變數。)
三、編程題(第92頁)
1.仿照教材第27頁例2-1。
2.源程序:
main()
{int h,m;
scanf("%d:%d",&h,&m);
printf("%d\n",h*60+m);}
執行結果:
9:23
563
3.源程序:
main()
{int a[]={-10,0,15,34},i;
for(i=0;i<=3;i++)
printf("%d\370C=%g\370F\t",a[i],a[i]*1.8+32);}
執行結果:
-10℃=14°F 0℃=32°F 15℃=59°F 34℃=93.2°F
4.源程序:
main()
{double pi=3.14159265358979,r=5;
printf("r=%lg A=%.10lf S=%.10lf\n",r,2*pi*r,pi*pi*r);}
執行結果:
r=5 A=31.4159265359 S=49.3480220054
5.源程序:
#include "math.h";
main()
{double a,b,c;
scanf("%lf%lf%lf",&a,&b,&c);
if (a+b>c&&a+c>b&&b+c>a)
{double s=(a+b+c)/2;
printf("SS=%.10lf\n",sqrt(s*(s-a)*(s-b)*(s-c)));}
else printf("Data error!");}
執行結果:
4 5 6
SS=9.9215674165
6.源程序:
main()
{int a=3,b=4,c=5;float d=1.2,e=2.23,f=-43.56;
printf("a=%3d,b=%-4d,c=**%d\nd=%g\ne=%6.2f\nf=%-10.4f**\n",a,b,c,d,e,f);}
7.源程序:
main()
{int a,b,c,m;
scanf("%d %d %d",&a,&b,&c);
m=a;a=b;b=c;c=m;
printf("%d %d %d\n",a,b,c);}
執行結果:
5 6 7
6 7 5
8.源程序:
main()
{int a,b,c;
scanf("%d %d %d",&a,&b,&c);
printf("average of %d,%d and %d is %.2f\n",a,b,c,(a+b+c)/3.);
執行結果:
6 7 9
average of 6,7 and 9 is 7.33
9.不能。修改後的源程序如下:
main()
{int a,b,c,x,y;
scanf("%d %d %d",&a,&b,&c);
x=a*b;y=x*c;
printf("a=%d,b=%d,c=%d\n",a,b,c);
printf("x=%d,y=%d\n",x,y);}
6 第5章 選擇結構程序設計
一、單項選擇題(第113頁)
1-4.DCBB 5-8.DABD
二、填空題(第115頁)
1.非0 0 2.k==0
3.if (abs(x)>4) printf("%d",x);else printf("error!");
4.if((x>=1&&x<=10||x>=200&&x<=210)&&x&1)printf("%d",x);
5.k=1 (原題最後一行漏了個d,如果認為原題正確,則輸出k=%。)
6. 8! Right!11 7.$$$a=0 8.a=2,b=1
三、編程題(第116頁)
1.有錯。正確的程序如下:
main()
{int a,b,c;
scanf("%d,%d,%d",&a,&b,&c);
printf("min=%d\n",a>b?b>c?c:b:a>c?c:a);}
2.源程序:
main()
{unsigned long a;
scanf("%ld",&a);
for(;a;printf("%d",a%10),a/=10);}
執行結果:
12345
54321
3.(1)源程序:
main()
{int x,y;
scanf("%d",&x);
if (x>-5&&x<0)y=x;
if (x>=0&&x<5)y=x-1;
if (x>=5&&x<10)y=x+1;
printf("%d\n",y);}
(2)源程序:
main()
{int x,y;
scanf("%d",&x);
if(x<10) if(x>-5) if(x>=0) if(x>=5)y=x+1;
else y=x-1; else y=x;
printf("%d\n",y);}
(3)源程序:
main()
{int x,y;
scanf("%d",&x);
if(x<10) if(x>=5)y=x+1;
else if(x>=0)y=x-1;
else if(x>-5)y=x;
printf("%d\n",y);}
(4)源程序:
main()
{int x,y;
scanf("%d",&x);
switch(x/5)
{case -1:if(x!=-5)y=x;break;
case 0:y=x-1;break;
case 1:y=x+1;}
printf("%d\n",y);}
4.本題為了避免考慮每月的天數及閏年等問題,故採用面向對象的程序設計。
現給出Delphi源程序和C++ Builder源程序。
Delphi源程序:
procere TForm1.Button1Click(Sender: TObject);
begin
edit3.Text:=format('%.0f天',[strtodate(edit2.text) -strtodate(edit1.text)]);
end;
procere TForm1.FormCreate(Sender: TObject);
begin
Edit2.Text:=datetostr(now);
button1click(form1)
end;
C++ Builder源程序:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Edit3->Text=IntToStr(StrToDate(Edit2->Text)-StrToDate(Edit1->Text))+"天";
}
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Edit2->Text=DateToStr(Now());
Button1Click(Form1);
}
執行結果:(運行於Windows下) http://img378.photo.163.com/nxgt/41463572/1219713927.jpg
5.源程序:
main()
{unsigned a,b,c;
printf("請輸入三個整數:");
scanf("%d %d %d",&a,&b,&c);
if(a&&b&&c&&a==b&&a==c)printf("構成等邊三角形\n");
else if(a+b>c&&a+c>b&&b+c>a)
if(a==b||a==c||b==c)printf("構成等腰三角形\n");
else printf("構成一般三角形\n");
else printf("不能構成三角形\n");}
執行結果:
請輸入三個整數:5 6 5
構成等腰三角形
6.源程序:
main()
{int x,y;
scanf("%d",&x);
if(x<20)y=1;
else switch(x/60)
{case 0:y=x/10;break;
default:y=6;}
printf("x=%d,y=%d\n",x,y);}
7.源程序:
main()
{unsigned m;float n;
scanf("%d",&m);
if(m<100)n=0;
else if(m>600)n=0.06;
else n=(m/100+0.5)/100;
printf("%d %.2f %.2f\n",m,m*(1-n),m*n);}
執行結果:
450
450 429.75 20.25
8. 2171天(起始日期和終止日期均算在內)
本題可利用第4小題編好的程序進行計算。把起始日期和終止日期分別打入「生日」和「今日」欄內,單擊「實足年齡」按鈕,將所得到的天數再加上1天即可。
9.源程序:
#include "math.h";
main()
{unsigned long i;
scanf("%ld",&i);
printf("%ld %d\n",i%10,(int)log10(i)+1);}
執行結果:
99887
7 5
10.源程序:
main()
{unsigned long i;unsigned j[10],m=0;
scanf("%ld",&i);
for(;i;){j[m++]=(i+2)%10;i/=10;}
for(;m;m--)i=i*10+j[m-1];
printf("%ld\n",i);}
執行結果:
6987
8109
(註:要加密的數值不能是0或以0開頭。如果要以0開頭需用字元串而不能是整數。)
7 第6章 循環結構程序設計
一、單項選擇題(第142頁)
1-4.BCCB 5-8.CBCA
二、填空題(第143頁)
1.原題可能有誤。如無誤,是死循環 2.原題有誤。如果把b=1後面的逗號改為分號,則結果是8。 3.20 4.11 5. 2.400000 6.*#*#*#$ 7.8 5 2 8.①d=1.0 ②++k ③k<=n 9.①x>=0 ②x<amin
三、編程題(第145頁)
1. 源程序:
main()
{int i=1,sum=i;
while(i<101){sum+=i=-i-2;sum+=i=-i+2;}
printf("%d\n",sum);}
執行結果:
51
2.源程序:
main()
{double p=0,n=0,f;int i;
for(i=1;i<=10;i++)
{scanf("%lf",&f);
if (f>0)p+=f; else n+=f;}
printf("%lf %lf %lf\n",p,n,p+n);}
3.源程序:
main()
{unsigned a;
scanf("%ld",&a);
for (;a;printf("%d,",a%10),a/=10);
printf("\b \n");}
執行結果:
23456
6,5,4,3,2
4.源程序:
main()
{unsigned long a,b,c,i;
scanf("%ld%ld",&a,&b);
c=a%1000;
for(i=1;i<b;i++)c=c*a%1000;
if(c<100)printf("0");
if(c<10)printf("0");
printf("%ld\n",c);}
執行結果:
129 57
009
5.略
6.原題提供的計算e的公式有誤(前面漏了一項1)。正確的公式是e= 1 + 1 + 1/2! + 1/3! + … + 1/n! + …
(1)源程序:
main()
{double e=1,f=1;int n;
for(n=1;n<=20;n++){f/=n;e+=f;}
printf("e=%.14lf\n",e);}
執行結果:
e=2.71828182845905
(2)源程序:
main()
{double e=1,f=1;int n;
for(n=1;f>1e-4;n++){f/=n;e+=f;}
printf("e=%.4f\n",e);}
執行結果:
e=2.7183
7.源程序:
main()
{unsigned long a=0,b=1,c=0;int i,d;
scanf("%d",&d);
for (i=1;i<=(d+2)/3;i++)
printf("%10ld%10ld%10ld",a,b,(a+=b+c,b+=c+a,c+=a+b));}
本題還可以用遞歸演算法(效率很低),源程序如下:
unsigned long fun(int i)
{return i<=3?i:fun(i-1)+fun(i-2)+fun(i-3);}
main()
{int i,d; scanf("%d",&d);
for(i=1;i<=d;i++)
printf("%10ld",fun(i));}
執行結果:
15
1 2 3 6 11 20 37 68
125 230 423 778 1431 2632 4841
8.源程序:
main()
{int i;
for(i=1010;i<=9876;i+=2)
if(i/100%11&&i%100%11&&i/10%100%11&&i/1000!=i%10&&i/1000!=i/10%10&&i/100%10!=i%10)printf(" %d",i);}
執行結果:
1024 1026 1028 1032 1034 1036 …… …… 9874 9876
9.源程序:
main()
{int i,j,k;
printf("apple watermelon pear\n");
for(i=1;i<=100;i++)
for(j=1;j<=10;j++)
if((k=100-i-j)*2==400-i*4-j*40)
printf("%4d%7d%9d\n",i,j,k);}
執行結果:
apple watermelon pear
5 5 90
24 4 72
43 3 54
62 2 36
81 1 18
10.源程序:
#include "stdio.h";
#define N 4 /* N為階數,可以改為其他正整數 */
main()
{int m=N*2,i,j;
for(i=1;i<m;printf("\n"),i++)
for(j=1;j<m;
putchar(N-abs(i-N)<=abs(j++-N)?' ':'*'));}
如果把N值改為5,則執行結果如下:
*
***
*****
*******
*********
*******
*****
***
*
作者:寧西貫通 2006-5-7 23:41 回復此發言
--------------------------------------------------------------------------------
8 說明
注意:上面最後一題的輸出結果應該是由星號組成的一個菱形,
9 第7章 數 組
一、單項選擇題(第192頁)
1-4.BBCC 5-8.AABA
二、填空題(第194頁)
1.1
2
4
8
16
32
64
128
256
512
2. ①a[age]++ ②i=18;i<26
3. ①break ②i==8
4. ①a[i]>b[j] ②i<3 ③j<5
5. ①b[j]=a[j][0] ②b[j]<a[j][k] 6.a[k++]=a[j]
三、編程題(第196頁)
1.源程序:
main()
{int a[4][4],i,j,s=0;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
scanf("%d",&a[i][j]);
for(i=0;i<4;i++)
for(j=0;j<4;j++)
if(i==j||i+j==3)s+=a[i][j];
printf("%d\n",s);} /* 注:5×5矩陣不能照此計算! */
執行結果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
68
2. 源程序:
main()
{int i,a[36];
a[0]=2;
for(i=1;i<=29;i++)a[i]=a[i-1]+2;
for(;i<=35;i++)a[i]=a[(i-30)*5+2];
for(i=0;i<=35;i++)printf("%d\t",a[i]);}
執行結果:
2 4 6 8 10 12 14 16 18 20
22 24 26 28 30 32 34 36 38 40
42 44 46 48 50 52 54 56 58 60
6 16 26 36 46 56
3. 源程序:
#include "stdlib.h"
#include "time.h"
main()
{int a[30],i,m=0;
randomize();
for(i=0;i<=29;i++)
{a[i]=rand();
if(m<a[i])m=a[i];
printf("%d\t",a[i]);}
for(i=0;i<=29;i++)if(a[i]==m)a[i]=-1;
printf("\n-----------------\n");
for(i=0;i<=29;i++)
if(~a[i])printf("%d\t",a[i]);
printf("\n");}
執行結果:
20679 29377 18589 9034 27083 4959 3438 5241 32278 23344
32499 29305 22340 5927 13031 2161 2583 31855 22977 14283
4851 22038 6992 11394 20887 27381 6293 18347 16414 10210
-----------------
20679 29377 18589 9034 27083 4959 3438 5241 32278 23344
29305 22340 5927 13031 2161 2583 31855 22977 14283 4851
22038 6992 11394 20887 27381 6293 18347 16414 10210
4.源程序:
main()
{int i,n=0,b[16];
scanf("%d",&i);
for(;i;i>>=1)b[n++]=i&1;
for(;n;)printf("%d",b[--n]);}
執行結果:
9876
10011010010100
本題也可以不用數組。源程序如下:
#include "stdio.h"
main()
{int i,n;
scanf("%d",&i);
for(n=16;n;n--)
{asm ROL i,1
putchar(i&1|48);}
} /* ROL是循環左移的匯編指令 */
5. 源程序:
#include "stdlib.h"
#include "time.h"
#define M 5
#define N 6
main()
{int a[M][N],i,j,t[M];
randomize();
/*生成M行N列隨機數*/
for(i=0;i<M;printf("\n"),t[i++]=0)
for(j=0;j<N;j++)
printf("%4d",a[i][j]=random(50));
/*找出每行的最小數,t[M]是第M行的最小數所在的列數*/
for(i=0;i<M;i++)
for(j=0;j<N;j++)
if(a[i][t[i]]>a[i][j])t[i]=j;
/*比較每個最小數在其所在的列上是否也是最小*/
for(j=0;j<M;j++)
for(i=0;i<M;i++)
{if(i==j)continue;
if(a[j][t[j]]>a[i][t[j]])
{t[j]=-1;break;}
}
printf("-------------------\n");
/*輸出在行和列上均為最小的數*/
for(i=0;i<M;i++)
if(t[i]!=-1)
printf("a[%d,%d]=%d\n",i,t[i],a[i][t[i]]);
}
執行結果:
13 19 13 20 0 1
20 41 6 16 35 30
3 5 37 8 23 15
6 36 24 29 18 1
1 5 28 21 46 34
-------------------
a[0,4]=0
a[1,2]=6
a[3,5]=1
a[4,0]=1
6. 源程序:
#include "stdlib.h"
#include "time.h"
#define M 5
#define N 7
main()
{int a[M][N],i,j,t=0;
randomize();
for(i=0;i<M;i++)
{a[i][N-1]=0;
for(j=0;j<N-1;j++)
{printf("%4d",a[i][j]=random(91)+10);
a[i][N-1]+=a[i][j];}
printf("%4d\n",a[i][N-1]);}
for(i=1;i<M;i++)
if(a[i][N-1]>a[t][N-1])t=i;
if(t)for(j=0;j<N;j++)
{i=a[0][j];a[0][j]=a[t][j];a[t][j]=i;}
printf("-----------------\n");
for(i=0;i<M;printf("\n"),i++)
10 第7章 數 組
for(j=0;j<N;j++)
printf("%4d",a[i][j]);
}
執行結果:
89 17 32 95 35 20 288
39 48 22 27 73 22 231
51 87 39 71 84 46 378
84 94 97 77 27 26 405
69 50 56 89 37 46 347
-----------------
84 94 97 77 27 26 405
39 48 22 27 73 22 231
51 87 39 71 84 46 378
89 17 32 95 35 20 288
69 50 56 89 37 46 347
7. 源程序:
#include "stdlib.h"
#include "time.h"
#define M 5
#define N 6
main()
{int a[M][N],i,j;
struct data{int value,x,y;}max,min;
max.value=0;min.value=100;
randomize();
for(i=0;i<M;printf("\n"),i++)
for(j=0;j<N;j++)
{printf("%4d",a[i][j]=random(100)+1);
if(max.value<a[i][j])
{max.value=a[i][j];max.x=i;max.y=j;}
if(min.value>a[i][j])
{min.value=a[i][j];min.x=i;min.y=j;}
}
printf("-----------------\n");
i=a[0][N-1];a[0][N-1]=max.value;a[max.x][max.y]=i;
i=a[M-1][0];a[M-1][0]=min.value;a[min.x][min.y]=i;
for(i=0;i<M;printf("\n"),i++)
for(j=0;j<N;j++)
printf("%4d",a[i][j]);
}
執行結果:
51 53 74 65 30 40
30 26 50 6 61 27
47 16 54 58 76 19
57 74 44 92 71 48
73 57 60 32 73 67
-----------------
51 53 74 65 30 92
30 26 50 73 61 27
47 16 54 58 76 19
57 74 44 40 71 48
6 57 60 32 73 67
9. 源程序:
main()
{char s[255];int i,j,b=1;
printf("Input a string:");
scanf("%s",s);
i=strlen(s);
for(j=1;j<=i/2;j++)
b=b&&(s[j-1]==s[i-j]);
printf(b?"Yes\n":"No\n");}
執行結果:
Input a string:level
Yes
10. 源程序:
main()
{char s[255],t,max=0,min=0,l,i;
printf("Input a string(length>4):");
gets(s);
l=strlen(s);
for(i=0;i<l;i++)
{if(s[max]<s[i])max=i;if(s[min]>s[i])min=i;}
t=s[1];s[1]=s[max];s[max]=t;if(min==1)min=max;
t=s[l-2];s[l-2]=s[min];s[min]=t;
printf("%s\n",s);}
執行結果:
Input a string(length>4):C++Builder
Cu+Beild+r
11. 源程序:
main()
{char m[13][10]={"****","January","February","March",
"April","May","June","July","August","September",
"October","November","December"};
int i,j,k,a,s,n;
printf("Please input an integer(100..999):");
scanf("%d",&n);
printf("%d:%d+%d+%d=%d, %d%%13=%d, %s\n", n,i,j,k,s,s,a,m[a=((s=(i=n/100)+(j=n/10%10)+(k=n%10))%13)]);}
執行結果:
Please input an integer(100..999):539
539:5+3+9=17, 17%13=4, April
11 第8章 函 數
一、單項選擇題(第241頁)
1-5.BCCAA 6-10.CCDDD 11-15.ACACB
二、填空題(第243頁)
1.看不出原題的意圖。因為要計算1~n的累加和,n應是一個≥1的正整數。可是題目中卻出現了n=0的情況。除非另加規定當n=0時1~n的累加和為0,或者把原題中的計算式改為計算0~n的累加和。據此猜測,原題應填為:①return(0) ②return(n+sum(n-1))
根據題意,如下程序較為合理:
int sum(int n)
{if(n<=0)return(-1); /* -1是出錯標志 */
else if(n==1)return(1);
else return(n+sum(n-1));}
2. ①return(1) ②return(n*facto(n-1))
三、編程題(第244頁)
3.源程序:
main()
{int i,a,b,c;
for(i=100;i<999;i++)
if((a=i/100)*a*a+(b=i/10%10)*b*b+(c=i%10)*c*c==i)
printf("%d\t",i);}
執行結果:
153 370 371 407
8.源程序(非遞歸演算法):
#define P 13 /* P可以改為其他正整數 */
main()
{int a[P],r,c;
for(r=0;r<=P;r++)
{a[r]=1;
for(c=r-1;c>=1;a[c--]+=a[c-1]);
printf("%*d",(P-r)*3+1,a[0]);
for(c=1;c<=r;printf("%6d",a[c++]));
printf("\n");}
}
執行結果:
(應該排列成一個三角形,是貼吧造成現在這個樣子的,不是程序有問題)
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
1 10 45 120 210 252 210 120 45 10 1
1 11 55 165 330 462 462 330 165 55 11 1
1 12 66 220 495 792 924 792 495 220 66 12 1
1 13 78 286 715 1287 1716 1716 1287 715 286 78 13 1
9.源程序(遞歸演算法):
#include "stdio.h"
void printOCT(unsigned long n)
{unsigned long i;
if(i=n>>3)printOCT(i);
putchar((n&7)+48);}
main()
{unsigned long i;
scanf("%ld",&i);
printOCT(i);}
執行結果:
1234567890
11145401322
本題也可以不用遞歸演算法,源程序請參考第7章第三題4。
12 回復:【C語言】《C語言程序設計教程(第二版)》習題答案
但是不同時間印刷的版本課後題不太一樣呢,象我們的是1999年12月第2版,2005年12月第69次印刷的。沒有選擇填空,應用題和樓主不知道有多少相同的,因為看不到原題。這個比較麻煩呢。
作者:210.77.204.* 2006-5-9 18:38 回復此發言
--------------------------------------------------------------------------------
13 回復:【C語言】《C語言程序設計教程(第二版)》習題答案
你對照一下主編和出版社,看看對嗎?(見說明的第一條。)
我不是說叫你有問題另發帖子嗎?
14 第9章 指 針
一、單項選擇題(第276頁)
1-5.DCDAC 6-10.CCABC 11-16.AABBB 16-20.DCDBD
二、填空題(第278頁)
1.①int * ②*z
2.*p++
3.①'\0' ②++
4.①q=p+1 ②q<p+10 ③*q>max ④*q<min
三、編程題(第280頁)
7.源程序:
main()
{int i=0;char c[20];
do{scanf("%s",&c);i++;}
while(strcmp(c,"stop"));
printf("%d\n",i);}
執行結果:
This car ran form Nanyang
to Luoyang without a stop
10
9.源程序:
main()
{char s[255],c[255]={0};int i;
gets(s);
for(i=0;s[i];c[s[i++]]++);
for(i=0;i<255;i++)
if(c[i])printf("%c=%d\t",i,c[i]);}
執行結果:
abcedabcdcd
a=2 b=2 c=3 d=3 e=1
『肆』 求<c語言程序設計>的答案
(第一題)#include <stdio.h>
void main()
{
int gy(int m, int n);
int x,y,max, min;
printf("請輸入兩個大於0的正整數,以空格或者回車間隔:\n");
scanf("%d%d",&x,&y);
while(x<1 || y<1)
{
printf("輸入數據不正確,請重新輸入。\n");
printf("請輸入兩個大於0的正整數,以空格或者回車間隔:\n");
scanf("%d%d",&x,&y);
}
max=gy(x,y);
min=x*y/max;
printf("%d與%d的最大公約數是:%d,最小公倍數是:%d\n",x,y,max,min);
}
int gy(int m, int n)
{
int max, t;
while(m%n != 0) // while(m%n)
{
t=n; n=m%n; m=t;
}
max=n;
return max;
}
第二題#include <stdio.h>
#include <math.h>
void main()
{
void root(double a, double b, double c);
double a, b, c;
printf("請輸入一元二次方程的系數,用空格或者回車間隔:\n");
scanf("%lf%lf%lf",&a,&b,&c);
root(a,b,c);
}
void root(double a, double b, double c)
{
double disc, x1, x2, real , imag;
disc = b*b-4*a*c;
if(disc>0)
{
x1 = (-b+sqrt(disc))/(2*a);
x2 = (-b-sqrt(disc))/(2*a);
printf("方程有兩個實根,分別是:%f 與 %f\n", x1, x2);
}
else if(disc==0)
{
x1 = (-b)/(2*a);
printf("方程有一個實根,它是:%f\n ", x1);
}
else
{
real=(-b)/(2*a);
imag=sqrt(-disc)/(2*a);
printf("方程有兩個虛根,分別是:%f+%fi, %f-%fi\n", real,imag,real,imag);
}
}
測試1:請輸入一元二次方程的系數,用空格或者回車間隔:1 2 1
方程有一個實根,它是:-1.000000
測試2:請輸入一元二次方程的系數,用空格或者回車間隔:1 6 5
方程有兩個實根,分別是:-1.000000 與 -5.000000
測試3:請輸入一元二次方程的系數,用空格或者回車間隔:1 1 1
方程有兩個虛根,分別是:-0.500000+0.866025i, -0.500000-0.866025i
第三題#include <stdio.h>
#include <math.h>
void main()
{
int isprime(int n);
int n;
scanf("%d",&n);
while(n<2)
{
printf("Please reinput(n>=2):");
scanf("%d",&n);
}
if(isprime(n))
printf("%d是素數。\n",n);
else
printf("%d不是素數。\n",n);
}
int isprime(int n)
{
int i,k=sqrt(n);
for(i=2;i<=k;i++)
{
if(n%i==0)
return 0;
}
return 1;
}
第四題#include <stdio.h>
#include <math.h>
void main()
{
void printA(int a[3][3]);
void reverse(int a[3][3]); //轉置函數的聲明
int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
printf("原二維數組:\n");
printA(a);
reverse(a); //函數轉置
printf("轉置後的數組:\n");
printA(a);
}
void printA(int a[3][3])
{
int i,j;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
printf("%6d",a[i][j]);
}
printf("\n");
}
}
void reverse(int a[3][3]) //函數轉置的定義
{
int i,j,t;
for(i=0;i<3;i++)
{
for(j=0;j<i;j++)
{
t=a[i][j];
a[i][j]=a[j][i];
a[j][i]=t;
}
}
}
第五題#include <stdio.h>
#include <string.h>
void main()
{
char str[30];
void fanxu(char *p);
printf("請輸入一個字元串:");
gets(str);
printf("進行反序......\n");
fanxu(str);
printf("反序後的字元串:");
puts(str);
}
void fanxu(char *p)
{
int len=strlen(p);
char *q,c;
q=p+len-1; //字元串最後一個字元位置
for(;p<q;p++,q--)
{
c=*p; *p=*q; *q=c;
}
}
第六題#include <stdio.h>
#include <string.h>
void main()
{
char str1[60],str2[30];
void str_(char *p, char *q);
printf("請輸入第一個字元串:");
gets(str1);
printf("請輸入第二個字元串:");
gets(str2);
str_(str1, str2);
printf("連接後的字元串:");
puts(str1);
}
void str_(char *p, char *q)
{
for(;*p!='\0';p++);
for(;*q!='\0';p++,q++)
{
*p=*q;
}
*p='\0';
}
(0808)#include <stdio.h>
#include <string.h>
void main()
{
char str[80];
void insert(char str[]); //插入空格的函數
printf("請輸入一個字元串:");
gets(str);
insert(str); //插入空格
puts(str); //輸出字元串
}
void insert(char str[])
{
int len, i;
len=strlen(str);
for(i=len; i>0; i--) // 設置空格
{
str[2*i]=str[i];
str[2*i-1]=' ';
}
}
(0809)#include <stdio.h>
int letter; //字母個數
int digit; //數字個數
int space; //空格個數
int others; //其它字母個數
void main()
{
void count(char str[]); //統計個數的函數的聲明
char s[81];
printf("請輸入一個字元串:");
gets(s);
letter=0; digit=0;
space=0; others=0;
count(s);
printf("字元串中共有 %d 個字母,%d 個數字,%d 個空格,%d個其它字母。\n",letter,digit,space,others);
}
void count(char str[]) //統計個數的函數的定義
{
int i;
char c;
for(i=0; str[i]!='\0';i++)
{
c=str[i];
if(c>='a' && c<='z' || c>='A' && c<='Z')
{ letter++; }
else if(c>='0' && c<='9')
{ digit++; }
else if(c==' ')
{ space++; }
else
{ others++; }
}
}
(0810)#include <stdio.h>
#include <string.h>
void main()
{
int i;
char line[81];
int alphabetic(char c); //判斷一個字元是空格還是其它字母
int longest(char str[]);//尋找最長單詞的起始位置
printf("請輸入一行字元串:\n");
gets(line);
printf("最長的字元串是:");
for(i=longest(line); alphabetic(line[i]); i++)
{ printf("%c",line[i]);}
printf("\n");
}
int alphabetic(char c) //如果為空格返回0,其它字母返回1
{
if(c!=' ')
return 1;
else
return 0;
}
int longest(char str[])
{
int len=0; // 記錄每一個單詞的長度
int length=0; // 記錄最長單詞的長度
int flag=1; // 其值為0時表示當前位置處於字元串中,為1時表示當前位置為空格
int place=0; // 記錄最長字元串(單詞)的起始位置
int point; // 每個字元串的起始位置
for(int i=0; i<=strlen(str); i++)
{
if(alphabetic(str[i])) //如果當前位置為非空格
{
if(flag) //如果前一字元為空格
{
point = i; // 設置當前單詞的起始位置
flag = 0; // flag設為0,表示處於單詞中
}
else //如果前一字元為非空格
{ len++; } // 單詞的長度加1
}
else //當前位置為空格
{
flag = 1; //flag設為1,表示當前位置為空格
if(len >= length) //如果最近單詞的長度大於最長長度
{
length = len;
place = point; //設置最長單詞的起始位置
len = 0; //len歸0,重新開始計算單詞的長度
}
}
}
return place;
}
(0811)#include <stdio.h>
#include <string.h>
void main()
{
void inputNum(int a[], int n);
void outputNum(int a[], int n);
void bubble(int a[], int n);
int a[11], n;
printf("請輸入你要排序的數的個數:");
scanf("%d",&n);
inputNum(a,n);
outputNum(a,n);
bubble(a,n);
printf("從小到大排序為:\n");
outputNum(a,n);
}
void inputNum(int a[], int n)
{
int i;
for(i=1;i<=n;i++)
{
printf("a[%d]=",i);
scanf("%d",&a[i]);
}
}
void outputNum(int a[], int n)
{
int i;
for(i=1;i<=n;i++)
{
printf("%6d",a[i]);
}
printf("\n");
}
void bubble(int a[], int n)
{
int i,j,t;
for(i=1;i<=n-1;i++)
{
for(j=1; j<=n-i; j++)
{
if(a[j]>a[j+1])
{ t=a[j]; a[j]=a[j+1]; a[j+1]=t; }
}
}
}
(0813)#include <stdio.h>
void main()
{
double lrd(int, double);
double x;
int n;
printf("請輸入n階勒讓德多項式的階數:\n");
scanf("%d",&n);
printf("請輸入x的值:\n");
scanf("%lf",&x);
printf("參數為%f 的 %d 階勒讓德多項式的值為 %f.\n",x,n,lrd(n,x));
}
double lrd(int n, double x)
{
if(n==0)
return 1;
else if(n==1)
return x;
else
return ((2*n-1)*x - lrd(n-1,x) -(n-1)*lrd(n-2,x))/n;
}
/*
測試1:請輸入n階勒讓德多項式的階數:0請輸入x的值:99.99參數為99.990000 的 0 階勒讓德多項式的值為 1.000000.
測試2:請輸入n階勒讓德多項式的階數:1請輸入x的值:99.99
參數為99.990000 的 1 階勒讓德多項式的值為 99.990000.
測試3:請輸入n階勒讓德多項式的階數:2
請輸入x的值:99.99 參數為99.990000 的 2 階勒讓德多項式的值為 99.490000.
測試4:請輸入n階勒讓德多項式的階數:10
請輸入x的值:1.1
參數為1.100000 的 10 階勒讓德多項式的值為 0.888677.
(0817)#include <stdio.h>
void main()
{
int num;
void convert(int num); // 轉換為字元串的函數的聲明
printf("請輸入一個整數:\n");
scanf("%d",&num);
printf("轉換成字元串:");
if(num<0)
{
putchar('-');
num = -num;
}
convert(num);
printf("\n");
}
void convert(int n)
{
int i;
if((i = (n/10)) != 0)
{
convert(i);
}
putchar(n%10 + '0');
}
(0818)#include <stdio.h>
int d[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
void main()
{
int year,month,day;
int days;
int count(int year,int month, int day);
int leap(int y);
printf("請輸入年份:");
scanf("%d",&year);
while(year<=0)
{
printf("年份不能為負,請重新輸入:");
scanf("%d",&year);;
}
if(leap(year)) //如果為閏年,2月份的天數為29
{ d[2]=29; }
printf("輸入月份:");
scanf("%d",&month);
while(month<1 || month>12)
{
printf("月份在1月和12月之間,你的輸入有誤,請重新輸入:");
scanf("%d",&month);
}
printf("輸入日數:");
scanf("%d",&day);;
while(day<1 || day >d[month])
{
printf("日數應在1和%d之間,請重新輸入:",d[month]);
scanf("%d",&day);
}
days=count(year,month,day);
printf("%d年%d月%d日是該年的第%d天\n",year,month,day,days);
}
int leap(int y)
{
if(y%4==0 && y%100!=0 || y%400==0)
return 1;
else
return 0;
}
int count(int year,int month, int day)
{
int i,days=0;
for(i=1; i<month; i++)
{ days += d[i]; }
days+=day;
return days;
}
(08050)#include <stdio.h>
#include <string.h>
void main()
{
char str[30];
void fanxu(char str[]);
printf("請輸入一個字元串:");
gets(str);
printf("進行反序......\n");
fanxu(str);
printf("反序後的字元串:");
puts(str);
}
void fanxu(char str[])
{
int len=strlen(str);
int i,j;
char c;
i=0; j=len-1;//i,j分別存儲第一個字元和最後一個字元的下標
for(;i<j; i++,j--)
{
c=str[i]; str[i]=str[j]; str[j]=c;
}
}
(08051)#include <stdio.h>
#include <string.h>
void main()
{
char str[30];
void fanxu(char s[]);
printf("請輸入一個字元串:");
gets(str);
printf("進行反序......\n");
fanxu(str);
printf("反序後的字元串:");
puts(str);
}
void fanxu(char s[])
{
int len=strlen(s);
int i;
char c;
for(i=0;i<=len/2;i++)
{
c=s[i];
s[i]=s[len-i-1];
s[len-i-1]=c;
}
}
(08061)#include <stdio.h>
#include <string.h>
void main()
{
char str1[60],str2[30];
void str_(char s1[], char s2[]);
printf("請輸入第一個字元串:");
gets(str1);
printf("請輸入第二個字元串:");
gets(str2);
str_(str1, str2);
printf("連接後的字元串:");
puts(str1);
}
void str_(char s1[], char s2[])
{
int i,j;
for(i=0;s1[i];i++); // s1[i]!='\0'
for(j=0;s1[i]=s2[j];i++,j++);
// (s1[i]=s2[j])!='\0'
}
(08110)#include <stdio.h>
#include <string.h>
void main()
{
void inputNum(char a[], char n);
void outputNum(char a[], char n);
void bubble(char a[], char n);
char a[11], n;
printf("請輸入你要排序的數的個數:");
scanf("%d",&n);
inputNum(a,n);
outputNum(a,n);
bubble(a,n);
printf("從小到大排序為:\n");
outputNum(a,n);
}
void inputNum(char a[], char n)
{
char i;
printf("請連續輸入%d個字元:",n);
fflush(stdin); //一般在輸入字元或者字元串之前要清空輸入緩沖區
for(i=1;i<=n;i++)
{
scanf("%c",&a[i]);
}
}
void outputNum(char a[], char n)
{
char i;
for(i=1;i<=n;i++)
{
printf("%2c",a[i]);
}
printf("\n");
}
void bubble(char a[], char n)
{
char i,j,t;
for(i=1;i<=n-1;i++)
{
for(j=1; j<=n-i; j++)
{
if(a[j]>a[j+1])
{ t=a[j]; a[j]=a[j+1]; a[j+1]=t; }
}
}
}
(08112)#include <iostream.h>
#include <iomanip.h>
void main()
{
void inputNum(int a[], int n);
void outputNum(int a[], int n);
void bubble(int a[], int n);
int a[11], n;
cout<<"請輸入你要排序的數的個數:";
cin>>n;
while(n<1 || n>10)
{
cout<<"請重新輸入,(1<=n<=10):";
cin>>n;
}
inputNum(a,n);
outputNum(a,n);
bubble(a,n);
cout<<"從小到大排序為:\n";
outputNum(a,n);
}
void inputNum(int a[], int n)
{
int i;
for(i=1;i<=n;i++)
{
cout<<"a["<<i<<"]=";
cin>>a[i];
}
}
void outputNum(int a[], int n)
{
int i;
for(i=1;i<=n;i++)
{
cout<<setw(6)<<a[i];
}
cout<<endl;
}
void bubble(int a[], int n)
{
int i,j,t;
for(i=1;i<=n-1;i++)
{
for(j=1; j<=n-i; j++)
{
if(a[j]>a[j+1])
{ t=a[j]; a[j]=a[j+1]; a[j+1]=t; }
}
}
}
(08181)#include <iostream.h>
#include <iomanip.h>
int d[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
void main()
{
int year,month,day;
int days;
int count(int year,int month, int day);
int leap(int y);
cout<<"請輸入年份:";
cin>>year;
while(year<=0)
{
cout<<"年份不能為負,請重新輸入:";
cin>>year;
}
if(leap(year)) //如果為閏年,2月份的天數為29
{ d[2]=29; }
cout<<"輸入月份:";
cin>>month;
while(month<1 || month>12)
{
cout<<"月份在1月和12月之間,你的輸入有誤,請重新輸入:";
cin>>month;
}
cout<<"輸入日數:";
cin>>day;
while(day<1 || day >d[month])
{
cout<<"日數應在1和"<<d[month]<<"之間,請重新輸入:"<<endl;
cin>>day;
}
days=count(year,month,day);
cout<<year<<"年"<<month<<"月"<<day<<"日是該年的第"<<days<<"天\n";
}
int leap(int y)
{
if(y%4==0 && y%100!=0 || y%400==0)
return 1;
else
return 0;
}
int count(int year,int month, int day)
{
int i,days=0;
for(i=1; i<month; i++)
{ days += d[i]; }
days+=day;
return days;
}
『伍』 c語言課後題答案
第一題
#include<stdio.h>
void main()
{ int i;
int count=1;
printf("請輸入數據:");
scanf("%d",&i);
printf("逆序輸出結果為:");
while(i/10)
{printf("%d ",i%10);
count++;
i=i/10; }
printf("%d\n",i%10);
printf("它是%d位數\n",count);
}
第二題
#include<stdio.h>
int fact(int n)
{
int i;
int f=1;
for(i=1;i<=n;i++)
f*=i;
return f;
}
float sum(int n)
{
float sum1=0;
int i;
for(i=1;i<=n;i++)
sum1+=1.0/fact(i);
return sum1;
}
void main()
{ int i;
float total;
printf("請輸入數據:");
scanf("%d",&i);
total=sum(i);
printf("結果為:");
printf("%.5f ",total);
}
上面兩個程序已經上機通過了。。。
『陸』 急需c語言程序設計教程第四版實驗指導與習題解答課後習題答案,謝謝!!
你把這個拿去試試,我到網上找了一個幫你改的,看看可以不,
#include<stdio.h>
int main()
{
//int a[10][10];
int n;
printf("please input the line:\n");
scanf("%d\n",&n);
getchar();
int i,j;
for(i=0;i<n;i++)
{
a[i][0]=1;
a[i][i]=1;
}
for(i=2;i<n;i++)
for(j=1;j<i;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
for(i=0;i<n;i++)
{
for(j=0;j<=i;j++)
printf("%d ",a[i][j]);
printf("\n");
}
return 0;
}
『柒』 c語言程序設計第三版課後習題答案
習 題 1
1.1 填空題
1.函數
2.主函數main();主函數main()
3.主函數main()
4.函數首部;函數體
5.{;}
6.順序結構;選擇結構;循環結構
7..c;.obj;.exe
1.2 思考題
1.答:結構化程序設計是指,為使程序具有一個合理的結構以保證程序正確性而規定的一套如何進行程序設計的原則。順序結構,選擇結構,循環結構
2.答:演算法是對具體問題求解步驟的一
『捌』 c語言『c』+1等於多少
c1=197 c語言
c1=197 c語言,c語言:整型和字元型的范圍易錯及分析
大大的藍天
轉載
關注
4點贊·1994人閱讀
分析下面的程序:
#include
int main()
{
char c1, c2;
c1 = 97;
c2 = 98;
printf("c1=%c,c2=%c\n", c1, c2);
printf("c1=%d,c2=%d\n", c1, c2);
return 0;
}
(1)運行時會輸出什麼信息?為什麼?
解:運行時輸出:
c1=a,c2=b
c1=97,c2=98
請按任意鍵繼續. . .
第一行輸出是將c1,c2按%c的格式輸出,97是a的ASCII碼,98是字元b的ASCII碼;
第二行輸出是將c1,c2按%d的格式輸出,所以輸出兩個十進制整數。
(2)如果將程序第4,5行改為:
c1=197;
c2=198;
運行時會輸出什麼信息?為什麼?
解:程序:
#include
int main()
{
char c1, c2;
c1 = 197;
c2 = 198;
printf("c1=%c,c2=%c\n", c1, c2);
printf("c1=%d,c2=%d\n", c1, c2);
return 0;
}
結果:
c1=?c2=?
c1=-59,c2=-58
請按任意鍵繼續. . .
由於在VS中,字元型數據是作為signed char類型處理的,存字元的有效范圍為[0,127]之間,超過此范圍的處理方法,不同系統得到結果不同,因而用「%c」格式輸出,結果不可預料;
用「%d」格式輸出時,輸出c1=-59,c2=-58,這是按補碼形式輸出的,內存位元組中第1位為1時,作為負數,59+197=58+198=256。
(3)如果將程序第3行改為:int c1,c2;
運行時會輸出什麼信息?為什麼?
解:程序1:
#include
int main()
{
int c1,c2;
c1 = 97;
c2 = 98;
printf("c1=%c,c2=%c\n",c1,c2);
printf("c1=%d,c2=%d\n", c1, c2);
return 0;
}
結果:
c1=a,c2=b
c1=97,c2=98
請按任意鍵繼續. . .
輸出結果和(1)相同
程序2:
#include
int main()
{
int c1,c2;
c1 = 197;
c2 = 198;
printf("c1=%c,c2=%c\n",c1,c2);
printf("c1=%d,c2=%d\n", c1, c2);
return 0;
}
結果:
c1=?c2=?
c1=197,c2=198
請按任意鍵繼續. . .
當c1 = 197;c2 = 198;時,用「%c」輸出,仍然是不可預料的字元;用「%d」輸出時,得到c1=197,c2=198
,因為它們在int類型的有效范圍(-2^31,2^31-1)內,分配4個位元組。
c1=197 c語言
喜報!兒子上985,女兒上211,本地媽媽出名了!點醒無數家長
教育專欄
廣告
C程序設計譚浩強第五版課後答案 第三章習題答案
2510閱讀·0評論·1點贊
2021年1月31日
c語言轉義字元表解析,C語言常用轉義字元表
910閱讀·0評論·1點贊
2021年5月19日
【C語言】字元類型
2884閱讀·0評論·1點贊
2017年7月10日
C語言 轉義字元和ASCII碼對照表
6745閱讀·0評論·7點贊
2021年2月1日
c語言 變數 字元表,第3章 變數和數據類型 7、C語言中的字元(char)
171閱讀·0評論·0點贊
2021年5月19日
3-分析下面程序
1315閱讀·0評論·2點贊
2021年4月9日
快來,在Soul上有秒回消息的人
00:16
Soul
版本 4.57.1
立即下載
廣告
隱私
許可權
上海任意門科技有限公司
【c語言】—— 類型轉換
177閱讀·0評論·0點贊
2018年11月21日
c語言197對應什麼字母,c語言的問題
1763閱讀·0評論·0點贊
2021年5月19日
c語言char197用%d輸出變為-59,強制類型轉換所導致的數據改變
3566閱讀·1評論·17點贊
2021年3月30日
C語言輸出ASCII碼128~255和有符號char型溢出的問題記錄
2004閱讀·1評論·6點贊
2020年3月22日
C語言常用字元ASCII代碼表,C語言常用轉義字元、ASCII、優先順序對照表
1145閱讀·0評論·0點贊
2021年5月20日
c語言中198對應的字元是什麼,c語言中轉義字元是什麼意思
411閱讀·0評論·0點贊
2021年5月20日
c語言中各個符號的含義總結,C語言中的符號總結
1.7W閱讀·0評論·4點贊
2021年5月19日
分析下面的程序#include<stdio.h> int main() { char c1,c2; c1=197; c2=198;
1.8W閱讀·0評論·3點贊
2021年3月28日
譚浩強C程序設計:第三章習題
431閱讀·0評論·0點贊
2022年3月26日
C語言數據類型的存儲和轉換
1069閱讀·0評論·1點贊
2022年3月14日
c語言綜合作業答案,C語言作業答案
228閱讀·0評論·0點贊
2021年5月18日
C語言程序設計(第四版)譚浩強 課後習題答案 第三章
3270閱讀·0評論·6點贊
2020年4月22日
關於C語言輸出ASCII碼128~255和有符號char型溢出的問題。此處大坑弄明白了後記錄下來分享……
6685閱讀·3評論·14點贊
2019年3月19日
在C語言中為什麼c1出現錯誤,c語言:用scanf函數輸入數據,舉例並分析錯誤原因...
232閱讀·0評論·0點贊
2021年5月19日
去首頁
看看更多熱門內容