C語言第三版
『壹』 譚浩強(第三版)c語言的課後答案 要第13章
第十三章
13.4從鍵盤輸入一個字元串,將其中的小寫字母全部轉換成大寫字母,然後輸出到一個磁碟文件「test」中保存。輸入的字元串以「!」結束。
解:#include <stdio.h>
main()
{
File *fp;
Char str[100];
Int I=0;
If((fp=fopen(「test」,」w」)==NULL)
{printf(「Can not open the file\n」);
exit(0);
}
printf(「Input a string:\n」);
gets(str);
while(str[i]!=』!』)
{if (str[i]>=』a』&&str[i]<=』z』)
str[i]=str[I-32];
fputc(str[i],fp);
I++;
}
fclose(fp);
fp=fopen(「test」,」r」);
fgets(str,strlen(str)+1,fp);
printf(「%s\n」,str);
fclose(fp);
}
13.5有兩個磁碟文件」A」和」B」,各存放一行字母,要求把這兩個文件中的信息合並(按字母順序排列),輸出到一個新文件」C」中。
解:#include<stdio.h>
main()
{
FILE *fp;
Int I,j,n,i1;
Char c[100],t ,ch;
If((fp=fopen(「a1」,」r」))==NULL)
{printf(「can not open the file\n」);
exit(0);
}
printf(「\n file A:\n」);
for(I=0;(ch=fgetc(fp)!=EOF;I++)
{c[i]=ch;
putchar(c[i]);
}
fclose(fp);
i1=I;
if((fp=fopen(「b1」,」r」))==NULL)
{printf(「\n can not ipen the file」);
exit(0);
}
printf(「\n file B:\n」);
for(I=i1;(ch=fgenc(fp))!=EOF;I++)
{c[i]=ch;
putchar(c[i]);
}
fclose(fp);
n=I;
for(i=0;I<n;I++)
for(j=I+1;j<n;j++)
if(c[i]>c[j])
{t=c[i];
c[i]=c[j];
c[j]=t;
printf(「\n file C:\n」);
fp=fopen(「c1」,」w」);
for(I=0;I<n;I++)
{putc(c[i],fp);
putchar(c[i]);
}
fclose(fp);
}
13.6有5個學生,每個學生有3門課的成績,從鍵盤輸入以上數據(包括學生號、姓名、三門課成績),計算出平均成績,將原有數據和計算出的平均分數存放在磁碟文件stud中。
解:
#include<stdio.h>
struct student
{char num[10];
char name[8];
int score[3];
float ave;
}stu[5];
main()
{int I,j,sum;
FILE *fp;
For(I=0;I<5;I++)
{printf(「\n input score of student%d:\n」,I+1);
printf(「NO.:」);
scanf(「%s」,stu[i].num);
printf(「name:」);
scanf(「%s」,stu[i].name);
sum=0;
for(j=0;j<3;j++)
{printf(「score %d :」j+1);
scanf(「%d」,&stu[i].score[j]);
sum+=stu[i].score[j];
}
stu[i].ave=sum/3.0
}
fp=fopen(「stud」,」w」);
for(I=0;I<5;I++)
if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)
printf(「File write error\n」);
fclose(fp);
fp=fopen(「stud」,」r」);
for(I=0;I<5;I++)
{fread(&stu[i],sizeof(struct student),1,fp);
printf(「%s,%s,%d,%d,%d,%6.2f\n」,stu[i].num,stu[i].name,stu[i].score[0], stu[i].score[1], stu[i].score[2] ,stu[i].ave);
}
}
13.7將上題stud文件中的學生數據按平均分進行排序處理,並將已排序的學生數據存入一個新文件stu-sort中。
解:
#include <stdio.h>
#define N 10
struct student
{char num[10];
char name[8];
int score[3];
float ave;
}st[N],temp;
main()
{
FILE *fp;
Int I,j,n;
If((fp=fopen(「stud」,」r」))==NULL)
{printf(「can not open the file」);
exit(0);
}
printf(「\n file 『stud』:」);
for(I=0;fread(&st[i],sizef(struct student),1,fp)!=0;I++)
{printf(「\n%8s%8s」,st[i].num,,st[i].name);
for(j=0;j<3;j++)
printf(「%8d」,st[i].score[j]);
printf(「%10.f」,st[i].ave);
fclose(fp);
n=I;
for(I=0;I<n;I++)
for(j=I+1;j<n;j++)
if(st[i].ave<st[j].ave)
{temp=st[i];
st[i]=st[j];
st[j]=temp;
}
printf(「\nnow:」);
fp=fopen(「stu-sort」,」w」);
for(I=0;I<n;I++)
{fwrite(&st[i],sizeof(struct student),1,fp);
printf(「\n%8s%8s」,st[i].num,st[i].name);
for(j=0;j<3;j++)
printf(「%8d」,st[i].score[j]);
printf(「%10.2f」,st[i].ave);
fclose(fp);
}
13.8將上題以排序的學生成績文件進行插入處理。插入一個學生的3門課成績,程序先計算新插入學生的平均成績,然後將它按平均成績高低順序插入,插入後建立一個新文件。
解:#include <stdio.h>
struct student
{char num[10];
char name[8];
int score[3];
float ave;
}st[10],s;
main()
{FILE *fp, * fp1 ;
int I,j,t,n;
printf(「\n NO.:」);
scanf(「%s」,s.num);
printf(「name:」);
scanf(「%s」,s.name);
printf(「score1,score2,score3:」);
scanf(「%d,%d,%d」,&s. score[0], &s. score[1], &s. score[2]);
s.ave=(s.score[0]+s.score[1]+s.score[2])/3.0;
if((fp=fopen(「stu_sort」,」r」))==NULL)
{printf(「can not open file.」);
exit(0);
}
printf(「original data:\n」);
for(I=0;fread(&st[i],sizeof(struct student),1,fp)!=0;I++)
{printf(「\n%8s%8s」,st[i].num,st[i].name);
for(j=0;j<3;j++)
printf(「%8d」,st[i].score[j]);
printf(「%10.2f」,st[i].ave);
}
n=I;
for(t=0;st[t].ave>s.ave&&t<n;t++);
printf(「\nnow:\n」);
fp1=fopen(「sort1.dat」,」w」);
for(I=p;j<t;I++)
{fwrite(&st[i],sizeof(stuct student),1,fp1);
print(「\n%8s%8s」,st[i],num,st[i].name);
for(j=0;j<3;j++)
ptintf(「%8d」,st[i].score[j]);
printf(「%10.2f」,st[i].ave);
}
fwrite(&s,sizeof(struct student),1,fp1);
printf(「\n%8s%7s%7d%7d%7d%10.2f」,s.num,s.name,s.score[0],s.score[1],s.score[2],s.ave);
for(I=t;I<n;I++)
{fwrite(&st[i],sizeof(struct student),1,fp1);
printf(「\n %8s%8s」,st[i].num,st[i].name);
for(j=0;j<3;j++)
printf(「%8d」,st[i].score[j]);
printf(「10.2f」,st[i].ave);
fclose(fp);
fclose(fp1);
}
13.9上題結果仍存入原有的stu_sort文件而不另建立新文件。
解: #include<stdio.h>
struct student
{char num[10];
char name[8];
int score[3];
float ave;
}st[10],s;
main()
{FILE *fp, *fp1;
int I ,j,t,n;
printf(「\nNO.:」);
scanf(「%s』,s.num);
printf(「name:」);
scanf(「%s』,s.name);
printf(「score1,score2,score3:」);
scanf(「%d%d%d」,&s.score[0]+&s.score[1]+&s.score[1], &s.score[2]);
s.ave=( s.score[0]+ s.score[1]+ s.score[2])/3.0;
if((fp=fopen(「stu=sort」,」r」))==NULL)
{printf(「can not open the file.」);
exit(0);
}
printf(「original data:\n」);
for(I=0;fread(&st[i],sizeof(struct student),1,fp)!=0;I++)
{printf(「\n%8s%8s」,st[i].num,st[i].name);
for(j=0;j<3;j++)
printf(「%8d」,st[i].score[j]);
printf(「%10.2f」,st[i].ave);
}
fclose(fp);
n=I;
for(t=0;st[t].ave>s.ave+&&t<n;t++);
ptintf(「\nnow:\n」);
fp=fopen(「stu_sort」,」w」);
for(I=0;I<t;I++)
{fwrite(&st[i],sizeof(struct student),1,fp);
printf(「\n%9s%8s%8d%8d%8d%10.2f」,s.num,s.name,s.score[0],s.score[1] s.score[2] s.ave);
for(I=t;I<n;I++)
{fwrit(&sr[i],sizeof(struct srudent),1,fp);
printf(「\n %8s%8s」,st[i].num,st[i].name);
for(j=0;j<3;j++)
printf(「%8d」,st[i].score[j]);
printf(「%10.2f」,st[i].ave);
}
fclose(fp);
}
13.10 有一磁碟文件emploee,內存放職工的數據。每個職工的數據包括:職工姓名、職工號、性別、年齡、住址、工資、健康狀況、文化程度。要求將職工名和工資的信息單獨抽出來另建一個簡明的職工工資文件。
解:#include<stdio.h>
struct emploee
{char num[6];
char name[10];
char sex[2];
int age;
char addr[20];
int salary;
char health[8];
char class[10];
}en[10];
struct emp
{char name[10];
int salary;
}em-case[10];
main()
{FILE *fp1, *fp2;
int I,j;
if ((fp1=fopen(「emploee」,」r」))==NULL)
{printf(「can not open the file.」);
exit(0);
}
printf(「\n NO. name sex age addr salary health class\n」);
for(I=0;fread(&em[i],sizeof(struct emploee),1,fp1)!=p;I++)
{printf(「\n%4s%8s%4s%6s%10s%6s%10s%8s」,em[i].num,em[i].name,em[i].sex, em[i].age, em[i].addr, em[i].salary, em[i].health, em[i].class);
strcpy(em_case[i].name, em[i].name);
em_case[i].salary=en[i].salary;
}
printf(「\n\n*****************************************」);
if((fp2=fopen(「emp_salary」,」wb」))==NULL)
{printf(「can not open the file.」);
exit(0);}
for(j=0;j<I;j++)
{if(fwrite(&en_case[j],sizeof(struct emp),1,fp2)!=1)
printf(「error!」);
printf(「\n %12s%10d」,em_case[j].name,em_case[j].salary);
}
printf(「\n*******************************************」);
fclose(fp1);
fclose(fp2);
}
13.11從上題的「職工工資文件」中刪區一個職工的數據,再存回原文件。
解:#incude <stdio.h>
#incude <string.h>
struct emploee
{char name[10];
int salary;
}emp[20];
main()
{FILE *fp;
int I,j,n,flag;
char name[10];
int salary;
if((fp=fopen(「emp_salary」,」rb」))==NULL)
{printf(「can not open file.」);
exit(0);
}
printf(「\n original data:」);
for(I=0;fead(&emp[i],sizeof(struct emploee),1,fp)!=0;I++)
printf(「\n %8s %7d」,emp[i].name,emp[i].salary);
fclose(fp);
n=I;
printf(「\n input name deleted:」);
scanf(「%s」,name);
for(flag=1,I=0;flag&&I<n;I++)
{if(strcmp(name,emp[i].name)==0)
{for(j=I;j<n-1;j++)
{strcmp(name,emp[i].name)==0
{for(j=I;j<n-1;j++)
{strcpy(emp[j].name,emp[j+1].name);
emp[j].salary=emp[j+1].salary;
}
flag=0;
}
}
if(!flag)
n=n-1;
else
printf(「\n Now,the content of file:\n」);
fp=fopen(「emp-dalary」,」wb」);
for(I=p;I<n;I++)
fwrite(&emp[i],sizeof(struct emploee),1,fp);
fclose(fp);
fp=fopen(「emp_salary」,」r」);
for(I=0;fread(&emp[i],sezeof(struct emploee),1,fp)!=0;I++)
printf(「\n%8s%7d」,emp[i].name,emp[i].salary);
fclose(fp);
}
13.12 從鍵盤輸入若干行字元(每行長度不等),輸入後把它們存儲到一磁碟文件中。再從該文件中讀入這些數據,將其中小寫字母轉換成大寫字母後在顯示屏上輸出。
解: #include<stdio.h>
main()
{int I,flag;
char str[80],c;
FILE *fp;
Fp=fopen(「text」,」w」);
Flag=1;
While(flag==1)
{printf(「\n Input string:\n」);
ges(str);
fprintf(fp,」%s」,str);
printf(「\nContinue?」);
c=getchar();
if((c==』N』)||(c==』n』))
flag=0;
getchar();
}
fcolse()fp;
fp=fopen(「text」,」r」);
while(fscanf(fp,」%s」,str)!=EOF)
{for(I=0;str[i]!=』\0』;I++)
if((str[i]>=』a』)&& (str[i]<=』z』))
str[i]-=32;
printf(「\n%s\n」,str);
}
fclose(fp);
}
『貳』 譚浩強的《C語言程序設計》第三版,這本書好嗎
可定時好的,我推薦《
C語言程序設計
》+《
C語言程序設計與上機指導
》搭配用,絕對給力,只要你細心看,仔細學,二級不在話下~!
『叄』 請問C語言程序設計第二版和第三版有什麼區別
事實上,並沒有多大的區別~~
對於一個函數,返回類型 fun(參數列表),在C語言中,如果返回類型為整型的話,可以省略不寫返回類型。即為第二版的形式,對於第三版的形式,是把main函數當做沒有返回類型,事實上,以上2種寫法都不是很好,main()函數是有返回值,返回調用main()的狀態,0為調用main()成功,其他值為失敗,(具體如果學習到UNIX或者Linux下的系統編程時就會很深刻的理解到了。)一個C語言的真正形式應該是:
int main(int argc,char * argv[])
{
*** 其中argc,是調用者的參數個數,argv[]是各個想對應的參數值,因此
main也可以寫成:
return 0;
}
int main()
{
******
return 0; 由於return 語句在具體運行中,調用了庫函數exit(){或者說系統調
用_Exit()或者_exit()}
}
因此main()又可以寫成 int main(){ exit(0);}
但是一般寫成 int main(){ return 0;},以上涉及到很多main()運行原理之類的知識,可能在學習LINUX中的系統編程才能深刻理解,這里說明知識為了讓你更深刻理解main()的本質而已。
對於工具而言,用VC比使用turbo C好些,但是如果想真正的學習C語言,我覺得在UNIX或者LINUX環境下編程和編譯,更妙,因為C語言是為了開發UNIX系統而被發明的。
如果對於不準備把C語言或者編程當做以後謀生的一部分,那麼對於main函數,只要理解到
int main(){return 0;}即可。其它涉及的東西可以暫時不去考慮。
『肆』 c語言第三版課後習題答案
1.5請參照本章例題,編寫一個C程序,輸出以下信息:
**************************
Very Good!
**************************
解:
mian()
{printf(「**************************」);
printf(「\n」);
printf(「Very Good!\n」);
printf(「\n」);
printf(「**************************」);
}
1.6 編寫一個程序,輸入a、b、c三個值,輸出其中最大值。
解:
mian()
{int a,b,c,max;
printf(「請輸入三個數a,b,c:\n」);
scanf(「%d,%d,%d」,&a,&b,&c);
max=a;
if(max<b)
max=b;
if(max<c)
max=c;
printf(「最大數為:「%d」,max);
}
第三章
3.6寫出以下程序運行的結果。
main()
{char c1=』a』,c2=』b』,c3=』c』,c4=』\101』,c5=』\116』;
printf(「a%cb%c\tc%c\tabc\n」,c1,c2,c3);
printf(「\t\b%c %c」,c4,c5);
}
解:
aaㄩbbㄩㄩㄩccㄩㄩㄩㄩㄩㄩabc
AㄩN
3.7要將"China"譯成密碼,解碼規律是:用原來字母後面的第4個字母代替原來的字母.例如,字母"A"後面第4個字母是"E"."E"代替"A"。因此,"China"應譯為"Glmre"。請編一程序,用賦初值的方法使cl、c2、c3、c4、c5五個變數的值分別為,』C』、』h』、』i』、』n』、』a』,經過運算,使c1、c2、c3、c4、c5分別變為』G』、』l』、』m』、』r』、』e』,並輸出。
解:
#include <stdio.h>
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);
}
運行結果:
密碼是Glmre
3.9求下面算術表達式的值。
(1)x+a%3*(int)(x+y)%2/4
設x=2.5,a=7,y=4.7
(2)(float)(a+b)/2+(int)x%(int)y
設a=2,b=3,x=3.5,y=2.5
(1)2.5
(2)3.5
3.10寫出程序運行的結果。
main()
{int i,j,m,n;
i=8;
j=10;
m=++i;
n=j++;
printf(「%d,%d,%d,%d」,i,j,m,n);
}
解:
9,11,9,10
3.12 寫出下面表達式運算後a的值,設原來a=12。設a和n都已定義為整型變數。
(1)a+=a (2) a-=2 (3) a*=2+3 (4)a/=a+a
(5) a%=(n%=2),n的值等於5
(6)a+=a-=a*=a
解:
(1) 24 (2) 10 (3) 60 (4) 0 (5) 0 (6) 0
『伍』 c語言程序設計 譚浩強 第三版跟其他版本有什麼不同
前兩版書中,採用的Turbo C 2.0對程序進行編譯。第三版改用Turbo C++3.0作為編譯工具。還有就是前兩版書中的14章和15章介紹的C++的初步知識。由於作者已出版《C++程序設計》,為壓縮篇幅,第三版不再保留這兩章的內容。適合初學者學習,也是全國計算機2級C的教材,但不適合深究C語言。
『陸』 c語言程序設計第三版課後習題答案
習 題 1
1.1 填空題
1.函數
2.主函數main();主函數main()
3.主函數main()
4.函數首部;函數體
5.{;}
6.順序結構;選擇結構;循環結構
7..c;.obj;.exe
1.2 思考題
1.答:結構化程序設計是指,為使程序具有一個合理的結構以保證程序正確性而規定的一套如何進行程序設計的原則。順序結構,選擇結構,循環結構
2.答:演算法是對具體問題求解步驟的一
『柒』 誰有C語言程序設計(第三版)杜友福主編的答案啊
C語言程序設計(第三版)習題答案
習題一
一、名詞解釋
(1)程序P1 (2)程序設計P1 (3)機器語言P1 (4)高級語言P2
(5)匯編程序P3 (6)編譯程序P4 (7)演算法P5 (8)結構化程序設計方法P10
二、簡答題
1. 設計程序時應遵循哪些基本原則?P4
答:正確性、可靠性、簡明性、有效性、可維護性、可移植性。
2. 演算法具有哪些特點?
答:有窮性、確定性、有效性、有零個或多個輸入、有一個或多個輸出。
3. 演算法的表示形式有哪幾種?
答:自然語言、偽代碼、傳統流程圖、N-S流程圖、計算機語言。
4. 結構化程序設計方法的三種基本結構是什麼?
答:順序結構、選擇結構和循環結構。
5. 傳統流程圖與N-S流程圖最大的區別是什麼?
答:N-S流程圖去掉了在傳統流程圖中常用的流程線,使得程序的結構顯得更加清晰、簡單。
三、用傳統流程圖或N-S流程圖表示求解以下問題的演算法。
1. 從鍵盤輸入10個和塌整數,求出其中的最小數並輸出。
2. 求1 2 3 … 100的值。
3. 求10~50的所有素數之和。
4. 求下列分段函數的值。
四、請參照本章例題,編寫一個簡單的C程序,輸出以下三行信息。
**************************
Yangtze University
**************************
#include <stdio.h>
void main()
{
printf("**************************\n");
printf(" Yangtze University\n");
printf("**************************\n");
}
習題二
一、選擇題
1~10: B C D C D D B C A A
11~20: D A C D B D B A C D
二、填空題
1.字母 L 或字母 l
2. %c(或字元) 、 %d(或整數)
3. 在程序運行過程中,其值可以在一定的范圍內變化的量
4. '\0'
5. 小數形式 、 指數形式
6. 關鍵字 、 預定義標識符 、 用戶標識符
7. 字母 、 數字 、 下劃線 、 數字
8. 18
9. 2 、 1 、 30
10. 雙精度實數或double
11. 賦值 、 逗號 、 20 、 20 、 20 、 4
12. 4 、 4
習題三
一、選擇題
1~10: B C C B C C C D C C
註:第4題答案D為: 10 22↙
33↙
二、填空題
1. printf 、 scanf
2. h
3. "]"
4. '\0'
5. e 、 E
6. 6
7. s 、 c
8. *
9. - 、
10. i
三、編程題
1. 編寫程序,從鍵盤輸入一個以秒為單位的時間數,將其換算成幾小時幾分幾秒,然後進
行輸出。例如輸入的時間為4258秒,則輸出結果為:1小時10分58秒。
#include <stdio.h>
void main()
{
int x,h,m,s;
scanf("%d",&x);
h=x/3600; m=x600/60; s=x`;
printf("%ds=%d:%d:%d!\n",x,h,m,s);
}
2. 編寫程序,讀入三個整數給變數a、b、c,然後交換它們中的數,把a中原來的值給b,
把b中原來的值給c,把c中原皮念來的值給a。
#include <stdio.h>
void main()
{
int a,b,c,t;
printf("input a b c:");
scanf("%d%d%d",&a,&b,&c);
printf("a=%d,b=%d,c=%d\n",a,b,c);
t=a;a=c;c=b;b=t;
printf("a=%d,b=%d,c=%d\n",a,b,c);
}
習題四
一、填空題
1. 1 、喚握圓 0
2. ! % + <= != && || =
3. x==0
4. 0 、 2
5. 20 、 0 、 0
二、選擇題
1~7:D D C A D D C
三、程序閱讀題
1. 595959
2. 0.500000
3. 1
4. 2
5. 6
6. a=2,b=1
7. pass
warn
8. 1
四、編程題
1. 設a為整型變數且其值大於零,請將以下if語句改寫成switch語句。
if(a<60) m=1;
else if(a<70) m=2;
else if(a<80) m=3;
else if(a<90) m=4;
else m=5;
方法1
#include <stdio.h>
void main()
{
int a,m;
scanf("%d",&a);
switch(a/10)
{
case 0:case 1:case 2:case 3:
case 4:case 5:m=1;break;
case 6:m=2;break;
case 7:m=3;break;
case 8:m=4;break;
default:m=5;break;
}
printf("m=%d\n",m);
}
方法2
#include <stdio.h>
void main()
{
int a,m;
scanf("%d",&a);
m=0;
switch(a/10)
{
default:m ;
case 8:m ;
case 7:m ;
case 6:m ;
case 5:case 4:case 3:case 2:
case 1:case 0:m ;
}
printf("m=%d\n",m);
}
2. 編寫程序,從鍵盤輸入一個整數,列印出它是奇數還是偶數。
#include <stdio.h>
void main()
{
int a;
scanf("%d",&a);
if(a%2==1)
printf("%d is a odd number!\n",a);
else
printf("%d is a even number!\n",a);
}
3. 編寫程序,從鍵盤輸入一個字元,判別它是否是小寫字母,如果是,將它轉換為大寫字母;如果不是,不轉換。然後輸出最後得到的字元。
#include <stdio.h>
void main()
{
char ch;
scanf("%c",&ch);
if(ch>='a' && ch<='z')
ch=ch-32;
printf("%c\n",ch);
}
4. 編寫程序,從鍵盤輸入一個不多於4位的正整數,列印出它是幾位數。
#include <stdio.h>
void main()
{
int x,n;
scanf("%d",&x);
if(x>1000) n=4;
else if(x>100) n=3;
else if(x>10) n=2;
else n=1;
printf("%d\n",n);
}
5. 當一個人的月收入在3500元以下時免稅;月收入在3500元到5000元之間時,超過3500的部分納稅3%;月收入在5000元以上時,3500至5000之間的部分納稅3%,超過5000的部分納稅10%。編寫程序從鍵盤輸入月收入income,計算並輸出應交稅款tax。
#include <stdio.h>
void main()
{
int income;
float tax;
scanf("%d",&income);
if(income<=3500) tax=0;
else if(income<=5000) tax=0.03*(income-3500);
else tax=0.03*(5000-3500) 0.10*(income-5000);
printf("tax=%f\n",tax);
}
6. 迴文是指正讀和反讀都一樣的數或字元串。例如:12321、55455、35553等都是迴文。請編寫一個程序,從鍵盤上讀取一個包含五位數字的長整數,並判斷它是否是迴文。(提示:用除法運算和求余運算把一個數的個位、十位、百位、千位等分別分離出來。)
#include <stdio.h>
void main()
{
long x;
int a,b,d,e;
scanf("%ld",&x);
a=x/10000;
b=x000/1000;
d=x0/10;
e=x;
if(a==e && b==d)
printf("%ld is huiwen!\n",x);
else
printf("%ld is not huiwen!\n",x);
}
習題五
一、閱讀題
1. 8
2. 4321
3. X
4. -1
5. 23
6. 52
7. 5
8. 3
二、填空題
1. 18
2. 2
3. b=i 1
4. 17
5. i<=9 、 j%3!=0
6. d=1.0 、 k=k 1 、 k<=10
三、選擇題
1~8:A D D A B D D A
四、編程題
1. 編寫程序,列印出所有的「水仙花數」,所謂「水仙花數」是指一個三位數,其各位數字的立方之和等於該數本身。例如,407是一個「水仙花數」,因為407=43 03 73。(註:若將題意改為列印出最大的或最小的「水仙花數」,則應將循環語句作如何調整?)。
#include <stdio.h>
void main()
{
int a,b,c,k;
for(k=100;k<=999;k )
//求最大的「水仙花數」改用:for(k=999;k>=100;k--)
{
a=k/100;b=k/10;c=k;
if(k==a*a*a b*b*b c*c*c)
{
printf("]",k);
//求最大或最小」水仙花數」時增加一個語句:break;
}
}
printf("\n");
}
2. 編寫程序,輸出1980~2880年所有閏年的年號。每輸出5個年號換一行。
#include <stdio.h>
void main()
{
int k,flag,n=0;
for(k=1980;k<=2880;k )
{
flag=(k%4==0)&&(k0!=0)||(k@0==0);
if(flag)
{
printf("]",k);
n ;
if(n==0)
printf("\n");
}
}
printf("\n");
}
3. 編寫程序,求1-3 5-7 …-99 101的值。
#include <stdio.h>
void main()
{
int n,t=1,s=1;
for(n=3;n<=101;n =2)
{ t=-t; s=s t*n; }
printf("s=%d\n",s);
}
4. 編寫程序,計算並輸出下列級數的前n項之和Sn。n的值從鍵盤輸入。
#include <stdio.h>
void main()
{
int fz,fm,n,i;
float s,t;
fz=2;fm=1;s=0;
scanf("%d",&n);
for(i=1;i<=n;i )
{
t=(1.0*fz)/fm;
s=s t;
fz=fz fm;
fm=fz-fm;
}
printf("s=%f\n",s);
}
5.編寫程序,求e的值e=1 1/1! 1/2! 1/3! 1/4! … 1/n!
#include <stdio.h>
void main()
{
int n,i;
float t,fm=1,e=1;
scanf("%d",&n);
for(i=1;i<=n;i )
{ fm=fm*i; t=1.0/fm; e=e t; }
printf("n=%d,e=%f\n",n,e);
}
6. 已知某球從80米高度自由落下,落地後反復彈起,每次彈起的高度都是上次高度的一半。求此球8次落地所經過的總路程。
#include <stdio.h>
void main()
{
int n;
float s=80,h=s/2;
for(n=2;n<=8;n )
{
s=s 2*h;
h=h/2;
}
printf("s=%f\n",s);
}
7. 用牛頓迭代法求高次方程f(x)=2x3-4x2 5x-18=0的根(約為2.466)。
註:牛頓迭代公式為:x2=x1-f(x1)/f』(x1),其中f』(x1)為導函數在點x1的值。
#include <stdio.h>
#include <math.h>
void main()
{
float x,f,f1;
x=8; // x的初值可為任意值
do
{ f=2*x*x*x-4*x*x 5*x-18; f1=6*x*x-8*x 5; x=x-f/f1;
}while(fabs(f)>0.00001);
printf("x=%f,f=%f\n",x,f);
}
8. 有這樣一些真分數:其分子和分母都是兩位正整數,且分子的個位數與分母的十位數相同,如果把該分數的分子的個位數與分母的十位數同時去掉,所得到的新的分數正好與原分數的值相等,如26/65=2/5。試編程求出所有滿足上述條件的真分數。
#include <stdio.h>
void main()
{
int a,b,c; // 設這個分數為ab/bc
for(a=1;a<=9;a )
for(b=1;b<=9;b )
for(c=1;c<=9;c )
if((a<c)&&(1.0*a/c==(a*10.0 b)/(b*10.0 c)))
printf("%d/%d=%d%d/%d%d=%f\n",a,c,a,b,b,c,1.0*a/c);
}
9. 編寫程序,求數列:1,(1 1/2),(1 1/2 1/3),(1 1/2 1/3 1/4),(1 1/2 1/3 1/4 1/5),…的前10項之和。
#include <stdio.h>
void main()
{
float s,t;
int i;
s=0,t=0;
for(i=1;i<=10;i )
{ t=t 1.0/i; s=s t; }
printf("s=%f\n",s);
}
10. 編寫程序,求3到100之間的所有素數之和。
#include <stdio.h>
void main()
{
int s,i,k,flag;
s=0;
for(i=3;i<=100;i )
{
flag=1;
for(k=2;k<i;k )
if(i%k==0)
{ flag=0; break; }
if(flag)
{ s=s i; printf("M",i); }
}
printf("\nsum=%d\n",s);
}
11. 編寫程序,求Fibonacci數列中大於800的最小的一個數(結果為987)。
#include <stdio.h>
void main()
{
int f1=1,f2=1,f3;
while(f3<=800)
{
f3=f1 f2;
f1=f2;
f2=f3;
}
printf("Fibonacci數列中大於800的最小數是]\n",f3);
}
習題六
一、選擇題
1~10:D D C B A B C D C D
11~20:A B B C C D C A B B
21~30:B B D D D D C D C A
註:第16題答案C為:字元串"SHORT"與"SHORT "相等
第19題題目為:已知:char str1[10],str2[10]={"books"};則在程序中能夠將字元串
"books"賦給數組str1的正確語句是 。
第21題題目為:設有:char str1[20]="abcde",str2[20]="xyz";則執行語句:
printf("%d",strlen(strcpy(str1,str2)); 的結果是 。
第28題答案D為: aaaa
bbbb
cccc dddd
二、填空題
1. 9 、 0
2. 先行後列
3.
『捌』 C程序設計譚浩強版本的第四版和第三版有什麼區別
一、指代不同
1、C程序設計譚浩強版本的第四版:是2010年清華大學出版社出版的圖書,作者是譚浩強。
2、C程序設計譚浩強版本的第三版:被普遍認為是學習C語言的好教材,並被全國大多數高校選用。
二、特點不同
1、C程序設計譚浩強版本的第四版:內容先進,體系合理,概念清晰,講解詳盡,降低台階,分散難點,例題豐富,深入淺出,文字流暢,通俗易懂,是初學者學習C程序設計的理想教材,可作為高等學校各專業的正式教材。
2、C程序設計譚浩強版本的第三版:累計發行了700多萬冊,創同類書的全國最高記錄,是學習C語言的主流用書。
三、影響不同
1、C程序設計譚浩強版本的第四版:該書被大多數高校用作C語言學習的教材,更正了第三版中的不足。
2、C程序設計譚浩強版本的第三版:曾榮獲原電子工業部優秀教材一等獎、高校出版社優秀暢銷書特等獎、全國高等院校計算機基礎教育研究會優秀教材一等獎。