當前位置:首頁 » 招生排名 » 大學c教程答案

大學c教程答案

發布時間: 2024-04-01 05:45:18

Ⅰ c++程序設計基礎教程課後答案(清華大學出版社鄭莉 董淵著)

第 一 章 概述

1-1 簡述計算機程序設計語言的發展歷程。

解:
迄今為止計算機程序設計語言的發展經歷了機器語言、匯編語言、高級語言等階段,C++語言是一種面向對象的編程語言,也屬於高級語言。

1-2 面向對象的編程語言有哪些特點?

解:
面向對象的編程語言與以往各種編程語言有根本的不同,它設計的出發點就是為了能更直接的描述客觀世界中存在的事物以及它們之間的關系。面向對象的編程語言將客觀事物看作具有屬性和行為的對象,通過抽象找出同一類對象的共同屬性(靜態特徵)和行為(動態特徵),形成類。通過類的繼承與多態可以很方便地實現代碼重用,大大縮短了軟體開發周期,並使得軟體風格統一。因此,面向對象的編程語言使程序能夠比較直接地反問題域的本來面目,軟體開發人員能夠利用人類認識事物所採用的一般思維方法來進行軟體開發。C++語言是目前應用最廣的面向對象的編程語言。

1-3 什麼是結構化程序設計方法?這種方法有哪些優點和缺點?

解:
結構化程序設計的思路是:自頂向下、逐步求精;其程序結構是按功能劃分為若干個基本模塊;各模塊之間的關系盡可能簡單,在功能上相對獨立;每一模塊內部均是由順序、選擇和循環三種基本結構組成;其模塊化實現的具體方法是使用子程序。結構化程序設計由於採用了模塊分解與功能抽象,自頂向下、分而治之的方法,從而有效地將一個較復雜的程序系統設計任務分解成許多易於控制和處理的子任務,便於開發和維護。
雖然結構化程序設計方法具有很多的優點,但它仍是一種面向過程的程序設計方法,它把數據和處理數據的過程分離為相互獨立的實體。當數據結構改變時,所有相關的處理過程都要進行相應的修改,每一種相對於老問題的新方法都要帶來額外的開銷,程序的可重用性差。
由於圖形用戶界面的應用,程序運行由順序運行演變為事件驅動,使得軟體使用起來越來越方便,但開發起來卻越來越困難,對這種軟體的功能很難用過程來描述和實現,使用面向過程的方法來開發和維護都將非常困難。

1-4 什麼是對象?什麼是面向對象方法?這種方法有哪些特點?

解:
從一般意義上講,對象是現實世界中一個實際存在的事物,它可以是有形的,也可以是無形的。對象是構成世界的一個獨立單位,它具有自己的靜態特徵和動態特徵。面向對象方法中的對象,是系統中用來描述客觀事物的一個實體,它是用來構成系統的一個基本單位,由一組屬性和一組行為構成。
面向對象的方法將數據及對數據的操作方法放在一起,作為一個相互依存、不可分離的整體--對象。對同類型對象抽象出其共性,形成類。類中的大多數數據,只能用本類的方法進行處理。類通過一個簡單的外部介面,與外界發生關系,對象與對象之間通過消息進行通訊。這樣,程序模塊間的關系更為簡單,程序模塊的獨立性、數據的安全性就有了良好的保障。通過實現繼承與多態性,還可以大大提高程序的可重用性,使得軟體的開發和維護都更為方便。
面向對象方法所強調的基本原則,就是直接面對客觀存在的事物來進行軟體開發,將人們在日常生活中習慣的思維方式和表達方式應用在軟體開發中,使軟體開發從過分專業化的方法、規則和技巧中回到客觀世界,回到人們通常的思維。

1-5 什麼叫做封裝?

解:
封裝是面向對象方法的一個重要原則,就是把對象的屬性和服務結合成一個獨立的系統單位,並盡可能隱蔽對象的內部細節。

1-6 面向對象的軟體工程包括哪些主要內容?

解:
面向對象的軟體工程是面向對象方法在軟體工程領域的全面應用,它包括面向對象的分析(OOA)、面向對象的設計(OOD)、面向對象的編程(OOP)、面向對象的測試(OOT)和面向對象的軟體維護(OOSM)等主要內容。

1-7 簡述計算機內部的信息可分為幾類?

解:
計算機內部的信息可以分成控制信息和數據信息二大類;控制信息可分為指令和控制字兩類;數據信息可分為數值信息和非數值信息兩類。

1-8 什麼叫二進制?使用二進制有何優點和缺點?

解:
二進制是基數為2,每位的權是以2 為底的冪的進制,遵循逢二進一原則,基本符號為0和1。採用二進制碼表示信息,有如下幾個優點:1.易於物理實現;2.二進制數運算簡單;3.機器可靠性高;4.通用性強。其缺點是它表示數的容量較小,表示同一個數,二進制較其他進制需要更多的位數。

1-9 請將以下十進制數值轉換為二進制和十六進制補碼:
(1)2 (2)9 (3)93
(4)-32 (5)65535 (6)-1

解:
(1) (2)10 = (10)2 = (2)16
(2) (9)10 = (1001)2 = (9)16
(3) (93)10 = (1011101)2 = (5D)16
(4) (-32)10 = (11100000)2 = (E0)16
(5) (65535)10 = (11111111 11111111)2 = (FFFF)16
(6) (-1)10 = (11111111 11111111)2 = (FFFF)16

1-10 請將以下數值轉換為十進制:
(1)(1010)2 (2)(10001111)2 (3)(01011111 11000011)2
(4)(7F)16 (5)(2D3E)16 (6)(F10E)16

解:
(1)(1010)2 = (10)10
(2)(10001111)2 = (143)10
(3)(01011111 11000011)2 = (24515)10
(4)(7F)16 = (127)10
(5)(2D3E)16 = (11582)10
(6)(F10E)16 = (61710)10

1-11 簡要比較原碼、反碼、補碼等幾種編碼方法。
解:
原碼:將符號位數字化為 0 或 1,數的絕對值與符號一起編碼,即所謂"符號——絕對值表示"的編碼。
正數的反碼和補碼與原碼表示相同。
負數的反碼與原碼有如下關系:
符號位相同(仍用1表示),其餘各位取反(0變1,1變0)。
補碼由該數反碼的最末位加1求得。

第 二 章 C++簡單程序設計

2-1 C++語言有那些主要特點和優點?

解:
C++語言的主要特點表現在兩個方面,一是全面兼容C,二是支持面向對象的方法。C++是一個更好的C,它保持了C的簡潔、高效、接近匯編語言、具有良好的可讀性和可移植性等特點,對C的類型系統進行了改革和擴充,因此C++比C更安全,C++的編譯系統能檢查出更多的類型錯誤。 C++語言最重要的特點是支持面向對象。

2-2 下列標識符哪些是合法的?
Program, -page, _lock, test2, 3in1, @mail, A_B_C_D

解:
Program, _lock, test2, A_B_C_D是合法的標識符,其它的不是。

2-3 例2.1中每條語句的作用是什麼?
#include <iostream.h>
void main(void)
{
cout<<"Hello!\n";
cout<<"Welcome to c++!\n";
}

解:
#include <iostream.h> //指示編譯器將文件iostream.h中的代碼
//嵌入到該程序中該指令所在的地方
void main() //主函數名,void 表示函數沒有返回值
{ //函數體標志
cout<<"Hello!\n"; //輸出字元串Hello!到標准輸出設備(顯示器)上。
cout<<"Welcome to c++!\n"; //輸出字元串Welcome to c++!
}
在屏幕輸出如下:
Hello!
Welcome to c++!

2-4 使用關鍵字const而不是#define語句的好處有哪些?

解:
const定義的常量是有類型的,所以在使用它們時編譯器可以查錯;而且,這些變數在調試時仍然是可見的。

2-5 請寫出C++語句聲明一個常量PI,值為3.1416;再聲明一個浮點型變數a,把PI的值賦給a。

解:
const float PI = 3.1416;
float a = PI;

2-6 在下面的枚舉類型中,Blue的值是多少?
enum COLOR ;

解:
Blue = 102

2-7 注釋有什麼作用?C++中有哪幾種注釋的方法?他們之間有什麼區別?

解:
注釋在程序中的作用是對程序進行註解和說明,以便於閱讀。編譯系統在對源程序進行編譯時不理會注釋部分,因此注釋對於程序的功能實現不起任何作用。而且由於編譯時忽略注釋部分,所以注釋內容不會增加最終產生的可執行程序的大小。適當地使用注釋,能夠提高程序的可讀性。在C++中,有兩種給出注釋的方法:一種是延用C語言方法,使用"/*"和"*/"括起注釋文字。另一種方法是使用"//",從"//"開始,直到它所在行的行尾,所有字元都被作為注釋處理。

2-8 什麼叫做表達式?x = 5 + 7是一個表達式嗎?它的值是多少?

解:
任何一個用於計算值的公式都可稱為表達式。x = 5 + 7是一個表達式,它的值為12。

2-9 下列表達式的值是多少?
1. 201 / 4
2. 201 % 4
3. 201 / 4.0

解:
1. 50
2. 1
3. 50.25

2-10 執行完下列語句後,a、b、c三個變數的值為多少?
a = 30;
b = a++;
c = ++a;

解:
a:32 ; b:30 ; c:32;

2-11 在一個for循環中,可以初始化多個變數嗎?如何實現?

解:
在for循環設置條件的第一個";"前,用,分隔不同的賦值表達式。
例如:
for (x = 0, y = 10; x < 100; x++, y++)

2-12 執行完下列語句後,n的值為多少?
int n;
for (n = 0; n < 100; n++)

Ⅱ 求山東理工大學C語言實驗答案(在線等、求速度)

實驗一 簡單C程序的調試
一、實驗目的
熟悉在VC的運行環境下,編輯調試C語言程序的一般步驟。掌握編寫與調試簡單C語言程序的基本方法。
二、實驗要求
1. 仔細閱讀下列實驗內容,並編寫出相應的C語言源程序。
2. 在VC運行環境下,編輯錄入源程序。
3. 調試運行源程序,並記錄下調試運行過程中出現的所有錯誤及改正方法。
4. 掌握如何根據出錯信息查找語法錯誤。
5. 寫出本次實驗的實驗報告。
三、實驗內容
1.從鍵盤輸入一個以秒為單位的時間值(如10000秒),將其轉化為以時、分、秒錶示的時間值並輸出。
#include <stdio.h>
void main()
{int time,h,min,sec;
printf("請輸入時間,以秒為單位\n");
scanf("%d",&time);
h=time/3600;
min=(time%3600)/60;
sec=(time%3600)%60;
printf(" 時間轉換為:%d h %d min %d s\n",h,min,sec);
}

2.已知如下二元一次方程組的系數值,求該方程組的解。
a1x+b1y=c1
a2x+b2y=c2

#include <stdio.h>
void main()
{float a1,b1,c1,a2,b2,c2,m,n,p;
printf(" 請輸入二元一次方程組的各項參數:");
scanf("%f %f %f %f %f %f",&a1,&b1,&c1,&a2,&b2,&c2);
p=a1*b2-a2*b1;
if(p!=0)
m=(b2*c1-b1*c2)/(a1*b2-a2*b1);
n=(a1*c2-a2*c1)/(a1*b2-a2*b1);
printf("%fx+%fy=%f\n%fx+%fy=%f\n",a1,b1,c1,a2,b2,c2);
printf("解為:\n x=%f\n y=%f\n",m,n);
}
實驗二 順序結構程序設計
一、實驗目的
掌握順序程序設計的基本思想和順序程序設計的基本方法
二、實驗要求
1. 仔細閱讀下列實驗內容,並編寫出相應的C語言源程序。
2. 在VC運行環境下,編輯錄入源程序。
3. 調試運行源程序,並記錄下調試運行過程中出現的所有錯誤及改正方法。
4. 掌握如何根據出錯信息查找語法錯誤。
5. 掌握如何通過動態跟蹤程序運行過程查找邏輯錯誤。
6. 寫出本次實驗的實驗報告。
三、實驗內容
1.編程序實現:輸入一個年份y,求出從公元1年1月1日到y年的1月1日,總共有多少天(提示:400年97閏)。
#include <stdio.h>
void main()
{
int year,days;
printf("please enter a year:");
scanf("%d",&year);
days=365*(year-1)+97*((year-1)/400)+24*(((year-1)%400)/100)+(((year-1)%400)%100)/4+1;
printf("公元1年1月1日到公元%d年1月1日有%d天。\n",year,days);
}
實驗三 選擇結構程序設計
一、 實驗目的
掌握選擇結構程序設計的一般方法及選擇結構程序的調試方法。
二、實驗要求
1. 仔細閱讀下列實驗內容,並編寫出相應的C語言源程序。
2. 在VC運行環境下,編輯錄入源程序。
3. 調試運行源程序,並記錄下調試運行過程中出現的所有錯誤及改正方法。
4. 掌握如何根據出錯信息查找語法錯誤。
5. 掌握如何通過動態跟蹤程序運行過程查找邏輯錯誤。
6. 寫出本次實驗的實驗報告。
三、實驗內容
1.編程序實現:輸入一個年份和月份,求出這個月的天數並輸出。
#include <stdio.h>
void main()
{
int year,month,n;
printf("please enter a date like 2010/4\n");
scanf("%d/%d",&year,&month);
switch (month)
{
case 1: n=31;break;
case 2: n=28;break;
case 3: n=31;break;
case 4: n=30;break;
case 5: n=31;break;
case 6: n=30;break;
case 7: n=31;break;
case 8: n=31;break;
case 9: n=30;break;
case 10: n=31;break;
case 11: n=30;break;
case 12: n=31;break;
default:break;
}
if(year%4==0&&year%100!=0||year%400==0&&month==2)
n=29;
printf("%d年%d月有%d天。、\n",year,month,n);
}
2.編程序實現:輸入一個年份y,求出y年的1月1日是星期幾(提示:公元1年1月1日是星期一)。
#include <stdio.h>
void main()
{
int m,n=0,year,i;
printf("please enter a year");
scanf("%d",&year);
n=365*(year-1)+97*((year-1)/400)+24*(((year-1)%400)/100)+(((year-1)%400)%100)/4+1;
printf("%d年1月1日是",year);
m=n%7;
switch (m)
{
case 0: printf("星期天\n");
case 1:printf("星期一\n");break;
case 2:printf("星期二\n");break;
case 3:printf("星期三\n");break;
case 4:printf("星期四\n");break;
case 5:printf("星期五\n");break;
case 6:printf("星期六\n");break;
default:break;
}

}
3.(拓展題,選做)編程序實現:輸入任意一個日期的年、月、日的值,求出是星期幾並輸出。
#include <stdio.h>
void main()
{
int year,month, day,n,i;
printf("please enter a date like 2010/4/16\n");
scanf("%d/%d/%d",&year,&month,&day);
n=365*(year-1)+97*((year-1)/400)+24*(((year-1)%400)/100)+(((year-1)%400)%100)/4;
switch (month)
{
case 1: n+=day;break;
case 2: n+=day+31;break;
case 3: n+=day+59;break;
case 4: n+=day+90;break;
case 5: n+=day+120;break;
case 6: n+=day+151;break;
case 7: n+=day+181;break;
case 8: n+=day+212;break;
case 9: n+=day+243;break;
case 10: n+=day+274;break;
case 11: n+=day+304;break;
case 12: n+=day+344;break;
default:break;
}
if(year%4==0&&year%100!=0||year%400==0&&month>2)
n+=1;
n=n%7;
switch (n)
{
case 0: printf("星期天\n");
case 1:printf("星期一\n");break;
case 2:printf("星期二\n");break;
case 3:printf("星期三\n");break;
case 4:printf("星期四\n");break;
case 5:printf("星期五\n");break;
case 6:printf("星期六\n");break;
default:break;
}
}


實驗四 循環程序綜合應用
一、實驗目的:
掌握循環結構程序設計的一般方法及循環結構程序的調試方法,能夠綜合運用順序、選擇和循環結構解決一般難度的實際應用問題。
二、實驗要求:
1.仔細閱讀下列實驗內容,並編寫出相應的C語言源程序。
2.在VC運行環境下,編輯錄入源程序。
3.調試運行源程序,並記錄下調試運行過程中出現的所有錯誤及改正方法。
4.掌握如何根據出錯信息查找語法錯誤。
5.掌握如何通過動態跟蹤程序運行過程查找邏輯錯誤。
6.寫出本次實驗的實驗報告。
三、實驗內容:
1.編程序實現如下功能:輸入任意一個年份的值,按以下格式輸出該年份一月份的公歷日歷。
要求用循環控制列印。

2011年日歷
1月
日 一 二 三 四 五 六
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31

#include <stdio.h>
void main()
{
int year,days,i,m,k=0,j;
printf("please enter a year:");
scanf("%d",&year);
days=365*(year-1)+97*((year-1)/400)+24*(((year-1)%400)/100)+(((year-1)%400)%
100)/4+1;
m=days%7;
printf("%d年日歷\n一月\n",year);
printf(" 日 一 二 三 四 五 六\n");
for(i=1;i<=m;i++)
{
k++;
printf(" ");}
k=m;
for(j=1;j<=31;j++)
{
k++;

printf("%3d",j);

if(k%7==0)
printf("\n");}
printf("\n");
}

2.(拓展題,選做)編程序實現如下功能:輸入任意一個年份的值,輸出該年份全年的公歷日歷。#include <stdio.h>
void main()
{
int year,days,i,m,n,k=0,j,day,month;
printf("please enter a year:");
scanf("%d",&year);
printf("%d年日歷\n",year);
days=365*(year-1)+97*((year-1)/400)+24*(((year-1)%400)/100)+(((year-1)%400)%100)/4+1;
for(month=1;month<=12;month++)
{
switch (month)
{
case 1: day=31;break;
case 2: day=28;break;
case 3: day=31;break;
case 4: day=30;break;
case 5: day=31;break;
case 6: day=30;break;
case 7: day=31;break;
case 8: day=31;break;
case 9: day=30;break;
case 10: day=31;break;
case 11: day=30;break;
case 12: day=31;break;
default:break;
}
if(year%4==0&&year%100!=0||year%400==0&&month==2)
n=29;
switch (month)
{
case 1: days+=0;break;
case 2: days+=31;break;
case 3: days+=59;break;
case 4: days+=90;break;
case 5: days+=120;break;
case 6: days+=151;break;
case 7: days+=181;break;
case 8: days+=212;break;
case 9: days+=243;break;
case 10: days+=274;break;
case 11: days+=304;break;
case 12: days+=334;break;
default:break;
}
if(year%4==0&&year%100!=0||year%400==0&&month>2)
days+=1;
m=days%7;
printf("%d月\n",month),
printf(" 日 一 二 三 四 五 六\n");
for(i=1;i<=m;i++){k++;
printf(" ");}
k=m;
for(j=1;j<=day;j++)
{
k++;
printf("%3d",j);
if(k%7==0)
printf("\n");}
printf("\n");
}
}
都是同學啊!
最後兩題米看到答案,我的方法不大對,就不給你了。

Ⅲ 急需《C語言程序設計教程》第三版(譚浩強\張基溫)編著,高等教育出版社出版,課後習題答案!

C程序設計(第三版)[譚浩強著]課後題答案!!!(2009-06-04 19:57:53)標簽:教育 分類:學習

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
第四章
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.600_ _y+z=-1.20_ _z+x=-2.40
c1=ˊaˊ_or_97(ASCII)
c2=ˊbˊ_or_98(ASCII)
main()
{int a=3,b=4,c=5;
long int u=51274,n=128765;
float x=1.2,y=2.4,z=3.6;
char c1=』a』,c2=』b』;
printf("a=%2d b=%2d c=%2d\n",a,b,c);
printf("x=%f,y=%f,z=%f\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("%s %s %d%s\n","c1=』a』","or",c1,"(ASCII)");
printf("%s %s %d%s\n","c2=』a』","or",c2,"(ASCII)");
}
4.7用scanf下面的函數輸入數據,使a=3,b=7,x=8.5,y=71.82,c1=ˊAˊ,c2=ˊaˊ,問在鍵盤上如何輸入?
main()
{
int a,b;float x,y;char c1c2;
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
4.8設圓半徑r=1.5,圓柱高h=3,求圓周長、圓面積、圓球表面積、圓球體積、圓柱體積。用scanf輸入數據,輸出計算結果,輸出時要求文字說明,取小數點後兩位數字。請編程序。
main()
{float r,h,C1,Sa,Sb,Va,Vb;
scanf("%f,%f",&r,&h);
C1=2*3.14*r;
Sa=3.14*r*r;
Sb=4*Sa;
Va=4*3.14*r*r*r/3;
Vb=Sa*h;
printf("C1=%.2f\n",C1);
printf("Sa=%.2f\nSb=%.2f\nVa=%.2f\nVb=%.2f\n",Sa,Sb,Va,Vb);
}
4.9輸入一個華氏溫度,要求輸出攝氏溫度。公式為
c=5(F-32)/9
輸出要求有文字說明,取位2小數。
main()
{float F,c;
scanf("%f",&F);
c=5*(F-32)/9;
printf("c=%.2f",c);
}
4.10編程序,用getchar函數讀入兩個字元給c1、c2,然後分別用函數和函數輸出這兩個字元。並思考以下問題:(1)變數c1、c2應定義為字元型或整形?抑二者皆可?(2)要求輸出c1和c2值的ASCII碼,應如何處理?用putchar函數還是printf函數?(3)整形變數與字元變數是否在任何情況下都可以互相代替?如:
char c1,c2;

int c1,c2;
是否無條件的等價?
#include"stdio.h"
main()
{char c1,c2;
c1=getchar();c2=getchar();
putchar(c1);putchar(』\n』);putchar(c2);putchar(』\n』);
}
#include"stdio.h"
main()
{char c1,c2;
c1=getchar();c2=getchar();
printf("c1=%d c2=%d\n",c1,c2);
printf("c1=%c c2=%c\n",c1,c2);
}
第五章
5.1 什麼是算術運算?什麼是關系運算?什麼是邏輯運算?
解:略。

5.2 C語言中如何表示「真」和「假」?系統如何判斷一個量的「真」和「假」?
解:設有一個邏輯表達式,若其結果為「真」,則以1表示;若其結果為「假」,則以0表示。但是判斷一個邏輯量的值時,以0代表「真」,以非0代表「假」。例如3&&5的值為「真」,系統給出3&&5的值為1。

5.3 寫出下面各邏輯表達式的值。設a=3,b=4,c=5。
(1) a+b>c&&b==c
(2) a||b+c&&b-c
(3) !(a>b)&&!c||1
(4) !(x=a)&&(y=b)&&0
(5) !(a+b)+c-1&&b+c/2

解:
(1) 0
(2) 1
(3) 1
(4) 0
(5) 1
5.4 有3個整數a、b、c,由鍵盤輸入,輸出其中最大的數。

解:
方法一
#include <stdio.h>
main()
{ int a,b,c;
printf("請輸入3個整數:");
scanf("%d,%d,%d",&a,&b,&c);
if(a<b)
if(b<c) printf("max=%d\n",c);
else printf("max=%d\n",b);
else if(a<c) printf("max=%d\n",c);
else printf("max=%d\n",a);
}

方法二:使用條件表達式,可以使程序更加簡明、清晰。
程序如下:
#include <stdio.h>
main()
{ int a,b,c,temp,max;
printf("請輸入3個整數:");
scanf("%d,%d,%d",&a,&b,&c);
temp=(a>b)?a:b;
max=(temp>c)?temp:c;
printf("3個整數的最大數是%d\n」,max);
}

5.5 有一函數:

寫一程序,輸入x值,輸出y值。
解:
#include <stdio.h>
main()
{int x,y;
printf("輸入x:");
scanf("%d",&x);
if(x<1)
{ y=x;
printf("x=%3d, y=x=%d\n",x,y);
}
else if (x<10)
{ y=2*x-1;
printf("x=%3d, y=2*x-1=%d\n",x,y);
}
else
{ y=3*x-11;
printf("x=%3d, y=3*x-11=%d\n",x,y);
}
}

5.6 給一個百分製成績,要求輸出等級』A』、』B』、』C』、』D』、』E』。90分以上為』A』,80~90分為』B』,70~79分為』C』,60分以下為』D』。
解:
程序如下:
#include <stdio.h>
main()
{ float score;
char grade;
case 2:
printf("請輸入學生成績:");
scanf("%f",&score);
while(score>100||(score<0)
{ printf("\n輸入有誤,請重新輸入:");
scanf("%f",&score);
}
switch((int)(score/10))
{ case 10:
case 9: grade=』A』;break;
case 8: grade=』B』;break;
case 7: grade=』C』;break;
case 6: grade=』D』;break;
case 5:
case 4:
case 3:
case 1:
case 0: grade=』E』;
}
printf("成績是%5.1f,相應的等級是%c。\n",score,grade);
}
說明:對輸入的數據進行檢查,如小於0或大於100,要求重新輸入。(int)(score/10)的作用是將 (score/10) 的值進行強制類型轉換,得到一個整型值。
5.7 給定一個不多於5位的正整數,要求:① 求它是幾位數;② 分別列印出每一位數字;③ 按逆序列印出各位數字。例如原數為321,應輸出123。
解:
#include <stdio.h>
main()
{ long int num;
int indiv,ten,hundred,thousand,ten_thousand,place;

printf("請輸入一個整數(0~99999):");
scanf("%ld",&num);
if (num>9999) place=5;
else if(num>999) place=4;
else if(num>99) place=3;
else if(num>9) place=2;
else place=1;
printf("place =%d\n", place);
ten_thousand=num/10000;
thousand=num/1000%10;
hundred=num/100%10;
ten=num%100/10;
indiv=num%10;
switch(place)
{ case 5: printf("%d,%d,%d,%d,%d",ten_thousand,thousand,hundred,ten,indiv);
printf("\n反序數字為;");
printf("%d%d%d%d%d\n",indiv,ten,hundred,thousand,ten_thousand);
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",hundred,ten,indiv);
printf("\n反序數字為:");
printf("%d%d%d\n",indiv,ten,hundred);
break;
case 2: printf("%d,%d",ten,indiv);
printf("\n反序數字為:");
printf("%d%d\n",indiv,ten);
break;
case 1: printf("%d",indiv);
printf("\n反序數字為:");
printf("%d\n",indiv);
break;
}
}

5.8 企業發放的獎金根據利潤提成。利潤I低於或等於10萬元時,獎金可提成10% ;利潤高於10萬元,低於20萬元(100000<I≤200000)時,其中10萬元按10%提成,高於10萬元的部分,可提成7.5% ;200000<I≤400000時,其中20萬元仍按上述辦法提成(下同),高於20萬元的部分按5%提成;400000<I≤600000時,高於40萬元的部分按3%提成;600000〈I≤1000000時,高於60萬的部分按1.5%提成;I>1000000時,超過100萬元的部分按1%提成。從鍵盤輸入當月利潤I,求應發放獎金總數。要求:(1)用if語句編程序;(2)用switch語句編程序。
解:計算利潤時,要特別注意不同利潤的不同提成比例。例如,利潤為15萬元,其中有10萬元按10%的比例提成,另外5萬元則按7.5%提成。
(1) 用if語句編程序。

#include <stdio.h>
main()
{ long i;
float bonus,bon1,bon2,bon4,bon6,bon10;
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("%ld",&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);
}

此題的關鍵在於正確寫出每一區間的獎金計算公式。例如利潤在10萬元至20萬時,獎金應由兩部分組成:①利潤為10萬元時應得的獎金。即100000ⅹ0.1;②10萬元以上部分應得的獎金。即(num-100000)ⅹ0.075。同理,20萬~40萬這個區間的獎金也應由兩部分組成:①利潤為20萬元時應得的獎金,即100000ⅹ0.1ⅹ10萬ⅹ0.075;②20萬元以上部分應得的獎金,即(num-200000)ⅹ0.05。程序中先把10萬、20萬、40萬、60萬、100萬各關鍵點的獎金計算出來,即bon1、bon2、bon4、bon6、hon10;然後再加上各區間附加部分的獎金。

(2) 用switch語句編程序。
輸入利潤i,確定相應的提成等級branch
根據branch確定獎金值
0 獎金=i*0.1
1 獎金=bon1+(i-105)*0.075
2 獎金=bon2+(i-2*105)*0.05
3
4 獎金=bon4+(i-4*105)*0.03
5
6 獎金=bon6+(i-6*105)*0.015
7
8
9
10 獎金=bon10+(i-106)*0.01
輸出獎金
#include <stdio.h>
main()
{ long i;
float bonus, bon1, bon2, bon4, bon6, bon10;
int c;
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("%ld",&i);
c=i/100000;
if(c>10) c=10;
switch(c)
{ case 0: bonus=1*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 輸入4個整數,要求按由大到小的順序輸出。
解:此題採用依次比較的方法排出其大小順序。在學習了循環和數組以後,可以有更多的排序方法。
#include <stdio.h>
main()
{ int t,a,b,c,d;
printf("請輸入4個整數:");
scanf("%d,%d,%d,%d",&a,&b,&c,&d);
printf("\n a=%d,b=%d,c=%d,d=%d\n",a,b,c,d);
if(a>b) {t=a; a=b; b=t;}
if(a>c) {t=a; a=c; c=t;}
if(a>d) {t=a; a=d; d=t;}
if(b>c) {t=a; b=c; c=t;}
if(b>d) {t=b; b=d; d=t;}
if(c>d) {t=c; c=d; d=t;}
printf("排序結果如下:\n");
printf("%d, %d, %d, %d\n",a,b,c,d);
}

5.10 有4個圓塔,圓心分別為(2,2)、(-2,2)、(2,-2)、(-2,-2),圓半徑為1。這4個塔的高度分別為10m。塔以外無建築物。今輸入任一點的坐標,求該點的建築高度(塔外的高度為零)。

程序如下:
#include <stdio.h>
main()
{ int h=10;
float x1=2,y1=2,x2=-2,y2=2,x3=-2,y3=-2,x4=-2,y4=-2,x,y,d1,d2,d3,d4;
printf("請輸入一個點(x,y):");
scanf("%f,%f",&x,&y);
d1=(x-x1)*(x-x1)+(y-y1)*(y-y1);
d2=(x-x2)*(x-x2)+(y+y2)*(y+y2);
d3=(x+x3)*(x+x3)+(y-y3)*(y-y3);
d4=(x+x4)*(x-x4)*(y+y4)*(y+y4);
if(d1>1&&d2>1&&d3>1&&d4>1) h=0;
printf("該點高度為%d\n",h);
}

第六章
第六章 循環控制

6.1輸入兩個正整數m和n,求其最大公約數和最小公倍數。
main()
{long m,n,i=1,j,s;
scanf("%ld,%ld",&m,&n);
for(;i<=m&&i<=n;i++)
{if(m%i==0&&n%i==0) s=i;}
if(m>=n) j=m;
else j=n;
for(;!(j%m==0&&j%n==0);j++);
printf("s=%ld,j=%ld\n",s,j);
}
6.2輸入一行字元,分別統計出其中英文字母、空格、數字和其他字元的個數。
#include"stdio.h"
main()
{char c;int i=0,j=0,k=0,l=0;
while((c=getchar())!=』\n』)
{if(c>=65&&c<=90||c>=97&&c<=122) i++;
else if(c>=48&&c<=57) j++;
else if(c==32) k++;
else l++;}
printf("i=%d,j=%d,k=%d,l=%d\n",i,j,k,l);
}
6.3求Sn=a+aa+aaa+…+aa…aaa(有n個a)之值,其中a是一個數字。例如:2+22+222+2222+22222(n=5),n由鍵盤輸入。
#include"math.h"
main()
{int n,sum=0,i=1,s=2;
scanf("%d",&n);
while(i<=n)
{sum=sum+s;s=s+2*pow(10,i);
i++;}
printf("sum=%d\n",sum);
}
6.4 求 ,(即求1!+2!+3!+4!+5!+…+20!)
main()
{int n,i=1;long sum=0,s=1;
scanf("%d",&n);
while(i<=n) {s=s*i;sum=sum+s;i++;}
printf("sum=%ld\n",sum);
}
6.5 求
main()
{double i=1,j=1,k=1,s1=0,s2=0,s3=0,sum;
for(;i<=100;i++) s1=s1+i;
for(;j<=50;j++) s2=s2+j*j;
for(;k<=10;k++) s3=s3+1/k;
sum=s1+s2+s3;
printf("sum=%f\n",sum);
}
6.6列印出所有"水仙花數",所謂"水仙花數"是指一個三位數,其各位數字立方和等於該本身。例如:153是一個水仙花數,因為153=1^3+5^3+3^3。
#include"math.h"
main()
{int x=100,a,b,c;
while(x>=100&&x<1000) {a=0.01*x;b=10*(0.01*x-a);c=x-100*a-10*b;
if(x==(pow(a,3)+pow(b,3)+pow(c,3))) printf("%5d",x);x++;}
}
6.7一個數如果恰好等於它的因子之和,這個數就稱為"完數"。例如,6的因子為1、2、3,而6=1+2+3,因此6是"完數"。編程序找出1000之內的所有完數,並按下面格式輸出其因子:
6 its factors are 1、2、3
main()
{int m,i,j,s;
for(m=6;m<10000;m++)
{s=1;
for(i=2;i<m;i++)
if(m%i==0) s=s+i;
if(m-s==0)
{printf("%5d its fastors are 1 ",m);for(j=2;j<m;j++) if(m%j==0)
printf("%d ",j);printf("\n");}
}
}

main()
{int m,i,j,s;
for(m=6;m<1000;m++)
{s=m-1;
for(i=2;i<m;i++)
if(m%i==0) s=s-i;
if(s==0)
{printf("%5d its fastors are 1 ",m);for(j=2;j<m;j++) if(m%j==0)
printf("%d ",j);printf("\n");}
}
}
6.8有一分數序列:

求出這個數列的前20項之和。
main()
{int i=1,n;double t,x=1,y=2,s,sum=0;
scanf("%ld",&n);
while(i<=n) {s=y/x;sum=sum+s;t=y;y=y+x;x=t;i++;}
printf("%f\n",sum);
}
6.9一球從100米高度自由下落,每次落地後返回原高度的一半,再落下。求它在第10次落地時共經過多少米?第10次反彈多高?
main()
{int i,n;double h=100,s=100;
scanf("%d",&n);
for(i=1;i<=n;i++)
{h*=0.5;if(i==1) continue;s=2*h+s;}
printf("h=%f,s=%f\n",h,s);
}
6.10猴子吃桃問題。猴子第一天摘下若干個桃子,當即吃了一半,還不過癮,又多吃了一個。第二天早上又將剩下的桃子吃掉一半,又多吃一個。以後每天早上都吃了前一天剩下的一半零一個。到第10天早上想再吃時,見只剩下一個桃子了。求第一天共摘多少桃子。
main()
{int i=1,sum=0;
for(;i<=10;sum=2*sum+1,i++);
printf("sum=%d\n",sum);
}
6.11用迭代法求 。求平方根的迭代公式為:

要求前後兩次求出的得差的絕對值少於0.00001。
#include"math.h"
main()
{float x0,x1,a;
scanf("%f",&a);
x1=a/2;
do
{x0=x1;x1=(x0+a/x0)/2;}
while(fabs(x0-x1)>=0.00001);
printf("%.3f\n",x1);
}
6.12 用牛頓迭代法求方程在1.5附近的根。

main()
{double x,y;x=1.5;
do{y=2*x*x*x-4*x*x+3*x-6;
x=x-y/(6*x*x-8*x+3);}
while(y!=0);
printf("x=%.3f\n",x);
}
6.13用二分法求方程在(-10,10)之間的根

main()
{double x1,x2,y1,y2;x1=-10;x2=10;
do{y1=2*x1*x1*x1-4*x1*x1+3*x1-6;
x1=x1-y1/(6*x1*x1-8*x1+3);}
while(y1!=0);
do
{y2=2*x2*x2*x2-4*x2*x2+3*x2-6;
x2=x2-y2/(6*x2*x2-8*x2+3);}
while(y2!=0);
printf("x1=%.3f,x2=%.3f\n",x1,x2);
}
6.14列印以下圖案

*
* * *
* * * * *
* * * * * * *
* * * * *
* * *
*
#include"math.h"
main()
{int i,j,k;
for(i=0;i<=3;i++)
{for(j=0;j<=2-i;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");
}
}
第七章
第七章 數組

7.1 用篩法求之內的素數。
main()
{ int i,j,a[100];
for(i=2;i<100;i++)
{ a[i]=i;
for(j=2;j<=i;j++)
{if(j<i)
if(a[i]%j==0)
break;
if(a[i]-j==0)
printf("%5d",a[i]);
}
}
printf("\n");
}

#include"math.h"
main()
{static int i,j,k,a[98];
for(i=2;i<100;i++)
{a[i]=i;k=sqrt(i);
for(j=2;j<=a[i];j++)
if(j<k) if(a[i]%j==0)
break;
if(j>=k+1)
printf("%5d",a[i]);
}
printf("\n");
}
7.2用選擇法對10個整數從小到大排序。
main()
{ int i,j,a[10],t;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(j=1;j<10;j++)
for(i=0;i<=9-j;i++)
if(a[i]>a[i+1])
{t=a[i+1];a[i+1]=a[i];a[i]=t;}
for(i=0;i<10;i++)
printf("%5d",a[i]);
}

main()
{static int a[10],i,j,k,t;
for(i=1;i<11;i++)
scanf("%d",&a[i]);
for(j=1;j<10;j++)
for(i=1;i<=10-j;j++)
if (a[i]>a[i+1])
{t=a[i+1];a[i+1]=a[i];a[i]=t;}
for(i=1;i<11;i++)
printf("%d",a[i]);
printf("\n");
}
7.3求一個3×3矩陣對角線元素之和。
main()
{int i=0,j=0,a[3][3],s1,s2;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
s1=a[0][0]+a[1][1]+a[2][2];
s2=a[0][2]+a[1][1]+a[2][0];
printf("s1=%d,s2=%d\n",s1,s2);
}

main()
{
static int i,j,s1,s2,a[3][3];
for(i=1;i<=3;i++)
for(j=1;j<=3;j++)
scanf("%d",&a[i][j]);
s1=a[1][1]+a[2][2]+a[3][3];
s2=a[1][3]+a[2][2]+a[3][1];
printf("%d,%d\n",s1,s2);
}
7.4已有一個已排好的數組今輸入一個數要求按原來排序的規律將它插入數組中。
main()
{ static int a[10]={1,7,8,17,23,24,59,62,101};int i,j,t;
scanf("%d",&a[9]);
for(i=9;i>0;i--)
if(a[i]<a[i-1])
{t=a[i-1];a[i-1]=a[i];a[i]=t;}
for(i=0;i<10;i++)
printf("%5d",a[i]);printf("\n");
}

main()
{
static int a[5]={1,4,5,6,7};
int i,t,b;
scanf("%d",&b);
for(i=0;i<5;i++)
{if(b<=a[i])
{t=a[i];a[i]=b;b=t;}
printf("%d ",a[i]);}
printf("%d",b);
}
7.5將一個數組的值按逆序重新存放,例如,原來順序為:8,6,5,4,1。要求改為:1,4,5,6,8。
main()
{ int i,b[10];
for(i=0;i<10;i++)
scanf("%d",&b[i]);
for(i=9;i>-1;i--)
printf("%5d",b[i]);
printf("\n");}
7.6列印出以下楊輝三角形(要求列印出10行)。
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1


main()
{ static int m,n,k,b[15][15];
b[0][1]=1;
for(m=1;m<15;m++)
{for(n=1;n<=m;n++)
{ b[m][n]=b[m-1][n-1]+b[m-1][n];
printf("%-5d",b[m][n]);}printf("\n");
}
}
}

main()
{ int i,j,n,k,a[10][10];
static a[][1]={{1},{1},{1},{1},{1},{1},{1},{1},{1},{1}};
a[1][1]=1;
for(k=2,k<11;k++)
for(i=2;i<=k;i++)
for(j=2;j<=i;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
for(k=1;k<11;k++)
for(i=1;i<=k;i++)
for(j=1;j<=i;j++)
printf("%d",a[i][j]);
}
7.7 列印「魔方陣」,所謂魔方陣是指這樣的方陣,它的每一行、每一列和對角線之和均相等。例如,三階魔方陣為
8 1 6
3 5 7
4 9 2
要求列印出由1~n2的自然數構成的魔方陣。
解:
#include <stdio.h>
main()
{ int a[16][16],i,i,k,p,m,n;
p=1;
while(p==1)
{ printf("Enter n(n=1~15):");
scanf("%d",&n);
if((n!=0)&&(n<=15)&&(n%2!=0)) p=0;
}
for(i=1;i<=n;i++)
for(j=1;j<=n;j++) a[i][j]=0

Ⅳ c語言教程習題答案

第一章
1.1 EXE
1.2 C OBJ EXE
1.3 順序 選擇 循環

第二章
一. 選擇題
2.1 B 2.2 D 2.3 B 2.4 A 2.5 C 2.6 A 2.7 B
2.8 B 2.9 D 2.10 C 2.11 B 2.12 B 2.13 A
二. 填空題
2.14 11 12
2.15 4.2 4.2
2.16 { } 定義 執行語句
2.17 關鍵字 用戶標識符
2.18 int float double
2.19 float a1=1; float a2=1;
2.20 存儲單元
2.21 3.5
2.22 (a*b)/c a*b/c a/c*b
2.23 把常量10賦給變數s
2.24 位 1或0
2.25 8 127 0111111 -128 10000000
2.26 32767 -32768 1000000000000000
2.27 10 8 16
三. 上機改錯題
2.28
#include "stdio.h"; 刪除行尾的";"
main(); / * main function * / 刪除")"後的";",注釋中的*要緊靠「/」,即應為「/*」和「*/」
函數開始處遺失了一個「{」
float r,s ; /*/*r is radius*/,/* s is area of circuilar*/*/ 注釋符號不可嵌套使用
r = 5.0 ;
s = 3.14159 * r * r ;
printf("%f\n",s) 行尾遺失了「;」
函數結束處遺失了一個「}」

2.29
#include "stdio.h"
main /* main function */ main後遺失了「()」
{
float a,b,c,v; /*a,b,c are sides, v is volume of cube */
a=2.0; b=3.0; c=4.0 行尾遺失了「;」
v=a*b*c;
printf("%f\n", v) 行尾遺失了「;」
}

第三章
一. 選擇題
3.1 C 3.2 C 3.3 D 3.4 C 3.5 D 3.6 B 3.7 C 3.8 D 3.9 A 3.10 B
3.11 C 3.12 D 3.13 D 3.14 A 3.15 C 3.16 C 3.17 C 3.18 無答案 3.19 C 3.20 B

二. 填空題
3.21 (1)-2002500(2)i=-200,j=2500
(3)i=-200
j=2500
3.22 12 0 0
3.23 一條語句 ;
3.24 ;
3.25 100,25.81,1.89234 100 25.81 1.89234 100 25.81 1.89234
3.26 x=127,x= 127,x= 177,x= 7f,x= 127
3.27 x=127,x=127 ,x=$127 ,x=$000127,x=d
3.28 a=513.789215,a= 513.79,a= 513.78921500,a= 513.78921500

三. 編程題和改錯題
3.29 修改後的程序如下:
main()
{
double a,b,c,s,v;
printf("input a,b,c:");
scanf("%lf%lf%lf",&a,&b,&c);
s =a*b;
v=a*b*c;
printf("a=%f,b=%f,c=%f\n", a,b,c);
printf("s=%f,v=%f\n",s,v);
}
3.30
#include
main()
{
int a=560,b=60;
printf("560 minute is %d hour and %d minute.\n",a/b,a%b);
}
3.31
#include
main()
{
int a,b;
a=1500;b=350;
printf("a div b is : %d\n",a/b);
printf("a mod b is : %d\n",a%b);
}
3.32
#include
main()
{
double a,b,c,ave;
printf ("input 3 double number : \n");
scanf ("%lf%lf%lf",&a,&b,&c);
printf ("%.1f\n",(a b c)/3);
}
3.33
#include
void main()
{
int a,b,c,t;
printf("請依次輸入整數a,b,c:");
scanf("%d%d%d",&a,&b,&c);
printf("\n你輸入的值是: a=%d,b=%d,c=%d\n",a,b,c);
t=b;b=a;a=c;c=t;
printf("交換之後的值是:a=%d,b=%d,c=%d\n",a,b,c);
}

第四章
一. 選擇題
4.1 A 4.2 A 4.3 A 4.4 D 4.5 C 4.6 A 4.7 B 4.8 C 4.9 D 4.10 C
二. 填空題
4.11 非0 0
4.12 < > >= <=同級 == !=同級
4.13 ! && ||
4.15 !
4.16 a == b || a < c x > 4 || x < -4
4.17 1
4.18 x <= 0 1 > 0
4.19 3 2 2
4.20 *#

三. 編程題
4.21 略
4.22
#include

/* 檢查日期的合法性 */
int checkdate(int year, int month, int day)
{
if(year < 1900 || year > 2005)
{
printf("輸入的年份無效!\n");
return 0;
}
else if(month < 0 && month > 12)
{
printf("輸入的月份無效!\n");
return 0;
}
else if(day <= 0 && day > 31)
{
printf("輸入的日期無效!\n");
return 0;
}
else
{
switch(month)
{
case 4:
case 6:
case 9:
case 11:
if(day > 30)
{
printf("輸入的日期無效!\n");
return 0;
}
break;
case 2:
if((year%4 == 0 && year0 != 0) || year@0 == 0)
{
if(day > 29)
{
printf("輸入的日期無效!\n");
return 0;
}
}
else
{
if(day > 28)
{
printf("輸入的出生日期無效!\n");
return 0;
}
}
break;
}/* end of switch(m0)*/
}
return 1;
}

void main()
{
int y0, m0, d0; /* 生日 */
int y1, m1, d1; /* 當前日期 */
int years, months, days; /* 實足年齡*/

printf("請輸入學生的生日:");
scanf("%d%d%d", &y0,&m0,&d0);

if(checkdate(y0, m0, d0))
{
printf("請輸入當前日期:");
scanf("%d%d%d", &y1,&m1,&d1);
/*當前日期合法性檢查*/
if(!checkdate(y1, m1, d1))
{
return;
}
else if(y0 > y1)
{
printf("出生年份比當前年份晚!\n");
return;
}
else if(y0 == y1)
{
if(m0 > m1)
{
printf("出生年月比當前年月晚!\n");
return;
}
else if(m0 == m1)
{
if(d0 > d1)
{
printf("出生年月日比當前年月日晚!\n");
return;
}
}
}
}

/* 計算實足年齡 */
years = y1 - y0;
months = m1 - m0;
days = d1 - d0;

/* 修正實足年齡天數*/
if(days < 0)
{
months--;
switch(m1)
{
case 1:
case 5:
case 7:
case 10:
case 12:
days = 30;
break;
case 2:
case 4:
case 6:
case 8:
case 9:
case 11:
days = 31;
break;
case 3:
if((y1%4 == 0 && y10 != 0) || y1@0 == 0)
{
days = 29;
}
else
{
days = 28;
}
break;
}/* end of switch(m1) */

}/* end of if(days < 0) */

/* 修正實足年齡月數*/
if(months < 0)
{
months = 12;
years--;
}/* end of if(months < 0) */

printf("出生日期: %d年%d月%d日\n", y0, m0, d0);
printf("當前日期: %d年%d月%d日\n", y1, m1, d1);
printf("實足年齡: %d年%d月%d日\n", years, months, days);

return;
}

4.23
#include

void main()
{
int a;
printf ("請輸入一個整數 :");
scanf ("%d",&a);
if (a%2==0)
{
printf ("%d 是偶數\n", a);
}
else
{
printf ("%d 是奇數\n", a);
}
}

4.24
#include

void main()
{
int a,b,c,temp,max;
printf ("請輸入三個整數 :");
scanf ("%d %d %d",&a,&b,&c);
temp=(a>b)? a:b;
max=(temp>c)? temp:c;
printf ("\n");
printf ("你輸入的數中最大的是 %d.\n",max);
}

4.25
(1)不嵌套的if語句
#include

void main()
{
int x,y;
printf("input x :");
scanf("%d",&x);
if ( x>-5 && x<0 )
{
printf("y is %d\n",y=x);
}
if ( x==0 )
{
printf("y is %d\n",y=x-1);
}
if ( x>0 && x<10 )
{
printf("y is %d\n",y=x 1);
}
if ( x>=10 || x<=-5)
{
printf("error\n");
}
}
(2)嵌套的if語句
#include

void main()
{
int x,y;
printf("input x :");
scanf("%d",&x);
printf("\n");
if(x < 0)
{
if(x > -5)
{
printf("y is %d.\n",y=x);
}
else
{
printf("error!\n");
}
}
if(0 == x)
{
printf("y is %d.\n",y=x-1);
}
if(x > 0)
{
if(x < 10)
{
printf("y is %d.\n",y=x 1);
}
else
{
printf("error!\n");
}
}
}
(3)if_else語句
#include

void main()
{
int x,y;
printf("input x :");
scanf("%d",&x);
if( x>-5 && x<0 )
{
printf("y is %d.\n",y=x);
}
else if( x==0 )
{
printf("y is %d.\n",y=x-1);
}
else if( x>0 && x<10 )
{
printf("y is %d.\n",y=x 1);
}
else
{
printf("error!\n");
}
}
(4)switch語句
#include

void main()
{
int x,y;
printf("input x : ");
scanf("%d",&x);
switch (x)
{
case -4:
case -3:
case -2:
case -1:
printf("y is %d.\n",y=x);
break;
case 0:
printf("y is %d.\n",y=x-1);
break;
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
printf("y is %d.\n",y=x 1);
break;
default:
printf("error!\n");
}
}

第五章

一. 選擇題
5.1 D 5.2 C 5.3 B 5.4 C 5.5 C 5.6 B 5.7 D 5.8 A 5.9 D 5.10 D

二. 填空題
5.11 5 4 6
5.12 死循環
5.13 -1
5.14 11
5.15 d=1.0 k k<=n
5.16 x>=0 x
三. 編程題
5.17
#include
void main()
{
int i;
int sig = 1;
int sum = 0;
for(i=1; i<=101; i ,i )
{
sum = sig*i;
sig *= -1;
}
printf("sum=%d\n", sum);
}

5.18
(1)
#include

void main()
{
int i;
double m=1.0;
double e = 1.0;
for(i=1; i<50; i )
{
m *= i;
e = 1/m;
}
printf("e=%f\n",e);
}
(2)
#include

void main()
{
int i=1;
double m=1.0;
double e = 1.0;
while(1/m >= 0.0004)
{
m *= i;
e = 1/m;
i ;
}
printf("e=%f\n",e);
}

5.19
#include

void main()
{
int year;
int col = 0;
for(year=1600; year<=2000; year )
{
if((year%4 == 0 && year0 != 0) || year@0 == 0)
{
printf("%d\t", year);
col ;
if(col%5 == 0)
{
printf("\n");
}
}
}
printf("\n");
}

5.20
#include
#define N 7

void main()
{
int i;
int j;
int m;
int k = N/2;
for(i=0; i {
m = i-k;
if(m < 0)
{
m *= -1;
}
for(j=0; j {
printf(" ");
}
for(j=0; j<2*(k-m) 1; j )
{
printf("*");
}
printf("\n");
}
}

第六章

一. 選擇題
6.1 B 6.2 D 6.3 A 6.4 A 6.5 B 6.6 D 6.7 D 6.8 B 6.9 A 6.10 A 6.11 C

二. 填空題
6.12 -1
6.13 1
6.14 ctype.h
6.15 1
6.16 10A 20B 30C 40D
6.17 7.29 101.298AB
6.18 A7.29B101.298
6.19 A B C (每個字元後有三個空格)

三. 編程題
6.20
#include
#define N 80

void main()
{
char str[N];
int iLoop = 0;
gets(str);
while(str[iLoop])
{
printf("%c-%d\t", str[iLoop],str[iLoop]);
iLoop ;
if(iLoop%3 == 0)
{
printf("\n");
}
}
printf("\n");
}

6.21
#include
#define N 80

void main()
{
char str[N];
int num = 0;
int iLoop = 0;
gets(str);
while(str[iLoop])
{
if(str[iLoop] >= '0' && str[iLoop] <= '9')
{
num = 10*num (str[iLoop] - '0');
}
iLoop ;
}
printf("%d\n",num);
}

6.22
#include
#include
#define N 80

void main()
{
char str[N];
int num = -1;
do
{
gets(str);
num ;
}while(strcmp(str, "EOF"));
printf("您輸入了%d行字元!\n",num);
}

6.23
#include
#define N 80

void main()
{
char str[N];
int iLoop = 0;
int num = 0;
gets(str);
while(str[iLoop] && iLoop < N)
{
if(str[iLoop] >= 'a' && str[iLoop] <= 'z')
{
num ;
}
iLoop ;
}
printf("您輸入了字元中有%d個小寫字母!\n",num);
}

6.24
#include

void main()
{
int line;
int iLoop1;
int iLoop2;

printf("請輸入圖案的行數(不大於26):");
scanf("%d", &line);
for(iLoop1 = 0; iLoop1 < line; iLoop1 )
{
for(iLoop2 = 0; iLoop2 < line - iLoop1; iLoop2 )
{
printf(" ");
}
for(iLoop2 = 0; iLoop2 < 2*iLoop1 1; iLoop2 )
{
printf("%c",iLoop1 'A');
}
printf("\n");
}
}
第七章

一. 選擇題
7.1 C 7.2 C 7.3 B 7.4 C 7.5 A 7.6 D 7.7 A

二. 填空題
7.8 12
7.9 9.000000
7.10 4
7.11 n=1 s
7.12 <=y z*x
7.13 1 s*i 0 f(k)

三. 程序調試和編程題
7.14
fun(int n)
{ int k,yes;
for(k=2; k<=n/2; k )
{
if(n%k == 0) { yes = 0; break;}
else yes = 1;
}
return yes;
}
7.15
int mymod(int a, int b)
{
return a%b;
}
7.16
double fun(int n)
{
double sum = 0;
int iLoop;
int sig = -1;
for(iLoop=1; iLoop<=n; iLoop )
{
sig *= -1;
sum = sig*1.0/iLoop;
}
return sum;
}
7.17
double fun(int n)
{
double t = 1.0;
int iLoop;
long tmp;
for(iLoop=2; iLoop<=n; iLoop )
{
tmp = iLoop*iLoop;
t -= 1.0/tmp;
}
return t;
}
7.18
#include
#include

double fun(double x)
{
return x*x 5*x 4;
}

void main()
{
int x = 2;
printf("y1=%f\n", fun(x));
printf("y2=%f\n", fun(x 15));
printf("y3=%f\n", fun(sin(x)));
}
2005-7-29 17:53 myhome1702
第八章
一. 選擇題
8.1 A 8.2 B 8.3 B 8.4 C 8.5 B 8.6 B 8.7 C 8.8 D 8.9 B 8.10 C 8.11 C 8.12 C

二. 填空題
8.13 110
8.14 7 1
8.15 (1)char *p=&ch; (2) p=&ch; (3)scanf("%c",p); (4)*p='A'; (5)printf("%c",*p);
8.16 (1)s=p 3; (2)s=s-2 (3)50 (4)*(s 1) (5)2 (6)10 20 30 40 50

三. 編程題
8.17
void fun(double x, double y, double *sum, double *div)
{
*sum = x y;
*div = x - y;
return;
}
8.18
void fun(double x, double y, double z, double *max, double *min)
{
*max = x;
*min = x;
if(*max < y)
{
*max = y;
}
if(*max < z)
{
*max = z;
}
if(*min > y)
{
*min = y;
}
if(*min > z)
{
*min = z;
}
return;
}

第九章
一. 選擇題
9.1 D 9.2 A 9.3 A 9.4 C 9.5 C 9.6 A 9.7 B 9.8 D 9.9 C 9.10 C
9.11 C 9.12 D 9.13 D 9.14 A 9.15 A 9.16 A 9.17 C 9.18 C

二. 填空題
9.19 9 0
9.20 6
9.21 12
9.22 3
9.23 2721
9.24 -850,2,0
9.25 k=p k
9.26 (c=getchar()) c-'A'

三. 編程題
9.27
#include
#define N 81
int main()
{
int counter[10] = {0};
int iLoop = 0;
char str[N];

gets(str);
while(str[iLoop])
{
if(str[iLoop] >= '0' && str[iLoop] <= '9')
{
counter[str[iLoop] - '0'] ;
}
iLoop ;
}
for(iLoop=0; iLoop < 10; iLoop )
{
printf("%d - %d\n", iLoop, counter[iLoop]);
}
return 0;
}
9.28
void fun(int array[], int arraysize, int start)
{
int iLoop;
if(start < arraysize-1)
{
if(start <=0)
{
start = 1;
}
for(iLoop = start; iLoop < arraysize; iLoop )
{
array[iLoop-1] = array[iLoop];
}
}
for(iLoop = 0; iLoop < arraysize; iLoop )
{
printf("No.%d = %d\n", iLoop, array[iLoop]);
}
}
9.29
int fun(int arry1[], int arry2[], int arrysize)
{
int iLoop;
int counter = 0;
for(iLoop = 0; iLoop < arrysize; iLoop )
{
if(arry1[iLoop] % 2)
{
arry2[counter ] = arry1[iLoop];
}
}
return counter;
}
9.30
void fun(char array[], int arraysize)
{
int iLoop1;
int iLoop2;
char temp;
/* 冒泡排序 */
for(iLoop1 = 0; iLoop1 < arraysize - 1; iLoop1 )
{
for(iLoop2 = 0; iLoop2 < arraysize - 1 - iLoop1; iLoop2 )
{
if(array[iLoop2] < array[iLoop2 1])
{
temp = array[iLoop2];
array[iLoop2] = array[iLoop2 1];
array[iLoop2 1] = temp;
}
}
}
}
9.31
#include

void fun(int array[], int arraysize, int inertNumber)
{
int iLoop;
int iLoop2;
if(array[0] < array[arraysize-1])
{
for(iLoop = 0; iLoop< arraysize; iLoop )
{
if(array[iLoop] > inertNumber)
{
for(iLoop2 = arraysize - 1; iLoop2 >= iLoop; iLoop2--)
{
array[iLoop2 1] = array[iLoop2];
}
array[iLoop] = inertNumber;
break;
}
}
if(iLoop >= arraysize)
{
array[arraysize] = inertNumber;
}
}
else
{
for(iLoop = 0; iLoop< arraysize; iLoop )
{
if(array[iLoop] < inertNumber)
{
for(iLoop2 = arraysize - 1; iLoop2 >= iLoop; iLoop2--)
{
array[iLoop2 1] = array[iLoop2];
}
array[iLoop] = inertNumber;
break;
}
}
if(iLoop >= arraysize)
{
array[arraysize] = inertNumber;
}
}
}

int main()
{
int iLoop;
int a[20] = {7,6,5,3,2,1};
for(iLoop = 0; iLoop < 6; iLoop )
{
printf("%d ", a[iLoop]);
}
printf("\n");
fun(a, 6, 0);
for(iLoop = 0; iLoop < 7; iLoop )
{
printf("%d ", a[iLoop]);
}
printf("\n");
fun(a, 7, 4);
for(iLoop = 0; iLoop < 8; iLoop )
{
printf("%d ", a[iLoop]);
}
printf("\n");
fun(a, 8, 8);
for(iLoop = 0; iLoop < 9; iLoop )
{
printf("%d ", a[iLoop]);
}
printf("\n");
return 0;
}
9.32
int fun(int number, int array[])
{
int iLoop = 0;
int iLoop2;
int binLen;
int midNumber;
int div;
int remain;

midNumber = number;
do
{
div = midNumber/2;
remain = midNumber%2;
midNumber = div;
array[iLoop ] = remain;
}while(midNumber);

binLen = iLoop;

for(iLoop2 = 0, iLoop = binLen - 1; iLoop2 < iLoop; iLoop2 , iLoop--)
{
midNumber = array[iLoop2];
array[iLoop2] = array[iLoop];
array[iLoop] = midNumber;
}
return binLen;
}
9.33
#include
#include
#define N 15

void fun(int array[], int arraysize)
{
int x;
int iLoop;
int iLoop2;

for(iLoop = 0; iLoop < arraysize; iLoop )
{
iLoop2 = 0;
x = rand() ;
do
{
if(x == array[iLoop2] && iLoop > 0)
{
x = rand() ;
iLoop2 = 0;
}
iLoop2 ;
}while(iLoop2 < iLoop);
array[iLoop] = x;
}
}

int main()
{
int a[N];
int iLoop;

fun(a, N);
for(iLoop = 0; iLoop < N; iLoop )
{
printf("%d\n", a[iLoop]);
}
return 0;
}

第十章
一. 選擇題
10.1 C 10.2 B 10.3 C 10.4 B 10.5 C 10.6 A 10.7 C 10.8 A 10.9 C 10.10 C

二. 填空題
10.11 GFEDCB
10.12 XYZ
10.13 SO
10.14 10
10.15 Itis
10.16 strlen(str)-1 j--
10.17 3
10.18 goodgood!

三. 編程題
10.19
char* mygets(char *str)
{
int iLoop = 0;
char ch;
while((ch=getchar()) != '\n')
{
str[iLoop ] = ch;
}
str[iLoop] = '\0';
return str;
}
char * myputs(char *str)
{
int iLoop = 0;
while(str[iLoop])
{
putchar(str[iLoop ]);
}
putchar('\n');
return str;
}
10.20
#include
#include

int fun(char *str)
{
int len;
int iLoop1;
int iLoop2;
int result = 1;

len = strlen(str);
for(iLoop1 = 0, iLoop2 = len - 1; iLoop1 < iLoop2; iLoop1 , iLoop2--)
{
if(str[iLoop1] != str[iLoop2])
{
result = 0;
break;
}
}

return result;
}

int main()
{
char a[20] = "ABCDCBA";
char b[20] = "ABCDEBA";

printf("%d\n", fun(a));
printf("%d\n", fun(b));

return 0;
}
10.21
char fun(char *str, int pos)
{
int len;
int iLoop;
char ch;

len = strlen(str);
if(pos > len)
{
return NULL;
}
ch = str[pos];
for(iLoop = pos; iLoop < len - 1; iLoop )
{
str[iLoop] = str[iLoop 1];
}
str[len-1] = '\0';
return ch;
}
2005-7-29 17:54 myhome1702
第十一章
一. 選擇題
11.1 D 11.2 B 11.3 A 11.4 C

二. 填空題
11.5 IJKLEFGHABCD
11.6 7
11.7 8
11.8 *(s j) i 1 i
11.9 17
11.10 (*fun)() (*fun)(a i*h)/h mypoly

三. 編程題
11.11
#include
#include
#define N 81
int main(int argc, char **argv)
{
char sig;
int dig;
int pos;
char str[N] = {'\0'};
char outStr[N] = {'\0'};

if(argc < 2)
{
sig = '-';
dig = 10;
}
else
{
sig = argv[1][0];
dig = argv[1][1] - '0';
}

printf("請輸入一個字元串:");
gets(str);

if(sig == '-')
{
pos = strlen(str) - dig;
if(pos <= 0)
{
pos = 0;
}
strcpy(outStr, str pos);
}
else if(sig == ' ')
{
strcpy(outStr, str);
pos = strlen(outStr);
if(pos > dig)
{
pos = dig;
}
outStr[pos] = '\0';
}

printf("處理後的字串為:");
printf("%s\n", outStr);

return 0;
}
11.12
#include
#include

void movebin(char *bin)
{
int len;
int iLoop;
len = strlen(bin);
for(iLoop = len; iLoop > 0; iLoop--)
{
bin[iLoop] = bin[iLoop - 1];
}
return;
}

void fun(int n, char *bin)
{
int pos;
pos = strlen(bin);
if(n == 0)
{
return;
}
if(n == 1)
{
movebin(bin);
bin[0] = '1';
return;
}
movebin(bin);
bin[0] = (n%2) '0';
n /= 2;
fun(n, bin);
return;
}

int main()
{
int a = 4;
char bin[50] = {""};

fun(a, bin);
printf("%s\n", bin);

return 0;
}
11.13
#include

long fun(int n)
{
if(n == 1)
{
return n;
}
else
{
return fun(n-1) n;
}
}

int main()
{
int num;
int sum;

printf("請輸入一個自然數:");
scanf("%d", &num);
sum = fun(num);

printf("結果是:%d\n", sum);

return 0;
}
11.14
#include

int fun(int n)
{
if(n == 0 || n == 1)
{
return 1;
}
else
{
return fun(n-1) fun(n-2);
}
}

int main()
{
int num;
int result;

printf("請輸入一個自然數:");
scanf("%d", &num);

result = fun(num);
printf("斐波拉契級數為:%d\n", result);

return 0;
}

第十二章
一. 選擇題
12.1 B 12.2 B 12.3 A 12.4 C 12.5 D 12.6 B 12.7 A 12.8 A

二. 填空題
12.9 2,5,1,2,3,-2
12.10 2468

第十三章
一. 選擇題
13.1 A 13.2 C 13.3 B 13.4 C 13.5 D 13.6 D 13.7 D

二. 填空題
13.8 ar=9 ar=9 ar=11
13.9 int* s *b

三. 編程題
13.10
#define MYALPHA(C) ((C>='A' && C<='Z') || (C>='a' && C<='z')) ? 1 : 0
13.11
#define SWAP(t,x,y) {t tmp; tmp=x; x=y; y=tmp;}
13.12
#include
#include

int main()
{
int *p;
int tmp;
int iLoop;
int iLoop2;

p = (int *)malloc(sizeof(int)*3);

scanf("%d%d%d", p,p 1,p 2);
for(iLoop = 0; iLoop < 2; iLoop )
{
for(iLoop2 = 0; iLoop2 < 2 - iLoop; iLoop2 )
{
if(*(p iLoop2) > *(p iLoop2 1))
{
tmp = *(p iLoop2);
*(p iLoop2) = *(p iLoop2 1);
*(p iLoop2 1) = tmp;
}
}
}
printf("%d %d %d\n", *p, *(p 1), *(p 2));

free(p);
p = NULL;
return 0;
}
字太多了 粘不完

Ⅳ c語言程序設計能力教程答案

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 */ <br>printf("cock hen chick\n"); <br>for(i=1;i<=20;i++) <br>for(j=1;j<=33;j++) <br>for(k=1;k<=33;k++) <br>if (i+j+k*3==100&&i*5+j*3+k==100) <br>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; <br>a=b=1; <br>for(i=1;i<=10;i++) /*要計算前30項,把10改為15。*/ <br>{printf("%8ld%8ld",a,b); <br>a=a+b;b=b+a;}}
遞歸法 源程序:
main()
{int i; <br>for(i=0;i<=19;i++) <br>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; <br>x=1.5; <br>do {x0=pow(x+1,1./3); <br>deltax=fabs(x0-x); <br>x=x0; <br>}while(deltax>1e-12);
printf("%.10f\n",x);}
執行結果:
1.3247179572
5.源程序略。(分子、分母均構成斐波那契數列)
結果是32.66026079864
6.源程序:
main()
{int a,b,c,m; <br>printf("Please input a,b and c:"); <br>scanf("%d %d %d",&a,&b,&c); <br>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; <br>scanf("%d",&a); <br>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; <br>scanf("%d %d",&a,&b); <br>c=a;a=b;b=c; <br>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; <br>scanf("%d:%d",&h,&m); <br>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; <br>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; <br>scanf("%lf%lf%lf",&a,&b,&c); <br>if (a+b>c&&a+c>b&&b+c>a) <br>{double s=(a+b+c)/2; <br>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; <br>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; <br>scanf("%d %d %d",&a,&b,&c); <br>m=a;a=b;b=c;c=m; <br>printf("%d %d %d\n",a,b,c);}
執行結果:
5 6 7
6 7 5
8.源程序:
main()
{int a,b,c; <br>scanf("%d %d %d",&a,&b,&c); <br>printf("average of %d,%d and %d is %.2f\n",a,b,c,(a+b+c)/3.); <br>執行結果: <br>6 7 9 <br>average of 6,7 and 9 is 7.33 <br>9.不能。修改後的源程序如下: <br>main() <br>{int a,b,c,x,y; <br>scanf("%d %d %d",&a,&b,&c); <br>x=a*b;y=x*c; <br>printf("a=%d,b=%d,c=%d\n",a,b,c); <br>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; <br>scanf("%d,%d,%d",&a,&b,&c); <br>printf("min=%d\n",a>b?b>c?c:b:a>c?c:a);}
2.源程序:
main()
{unsigned long a; <br>scanf("%ld",&a); <br>for(;a;printf("%d",a%10),a/=10);}
執行結果:
12345
54321
3.(1)源程序:
main()
{int x,y; <br>scanf("%d",&x); <br>if (x>-5&&x<0)y=x; <br>if (x>=0&&x<5)y=x-1; <br>if (x>=5&&x<10)y=x+1; <br>printf("%d\n",y);}
(2)源程序:
main()
{int x,y; <br>scanf("%d",&x); <br>if(x<10) if(x>-5) if(x>=0) if(x>=5)y=x+1; <br>else y=x-1; else y=x; <br>printf("%d\n",y);}
(3)源程序:
main()
{int x,y; <br>scanf("%d",&x); <br>if(x<10) if(x>=5)y=x+1; <br>else if(x>=0)y=x-1; <br>else if(x>-5)y=x; <br>printf("%d\n",y);}
(4)源程序:
main()
{int x,y; <br>scanf("%d",&x); <br>switch(x/5) <br>{case -1:if(x!=-5)y=x;break; <br>case 0:y=x-1;break; <br>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; <br>printf("請輸入三個整數:"); <br>scanf("%d %d %d",&a,&b,&c); <br>if(a&&b&&c&&a==b&&a==c)printf("構成等邊三角形\n"); <br>else if(a+b>c&&a+c>b&&b+c>a) <br>if(a==b||a==c||b==c)printf("構成等腰三角形\n"); <br>else printf("構成一般三角形\n"); <br>else printf("不能構成三角形\n");}
執行結果:
請輸入三個整數:5 6 5
構成等腰三角形
6.源程序:
main()
{int x,y; <br>scanf("%d",&x); <br>if(x<20)y=1; <br>else switch(x/60) <br>{case 0:y=x/10;break; <br>default:y=6;}
printf("x=%d,y=%d\n",x,y);}
7.源程序:
main()
{unsigned m;float n; <br>scanf("%d",&m); <br>if(m<100)n=0; <br>else if(m>600)n=0.06; <br>else n=(m/100+0.5)/100; <br>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; <br>scanf("%ld",&i); <br>printf("%ld %d\n",i%10,(int)log10(i)+1);}
執行結果:
99887
7 5
10.源程序:
main()
{unsigned long i;unsigned j[10],m=0; <br>scanf("%ld",&i); <br>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; <br>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; <br>for(i=1;i<=10;i++) <br>{scanf("%lf",&f); <br>if (f>0)p+=f; else n+=f;}
printf("%lf %lf %lf\n",p,n,p+n);}
3.源程序:
main()
{unsigned a; <br>scanf("%ld",&a); <br>for (;a;printf("%d,",a%10),a/=10); <br>printf("\b \n");}
執行結果:
23456
6,5,4,3,2
4.源程序:
main()
{unsigned long a,b,c,i; <br>scanf("%ld%ld",&a,&b); <br>c=a%1000; <br>for(i=1;i<b;i++)c=c*a%1000; <br>if(c<100)printf("0"); <br>if(c<10)printf("0"); <br>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; <br>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; <br>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; <br>scanf("%d",&d); <br>for (i=1;i<=(d+2)/3;i++) <br>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); <br>for(i=1;i<=d;i++) <br>printf("%10ld",fun(i));}
執行結果:
15
1 2 3 6 11 20 37 68
125 230 423 778 1431 2632 4841
8.源程序:
main()
{int i; <br>for(i=1010;i<=9876;i+=2) <br>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; <br>printf("apple watermelon pear\n"); <br>for(i=1;i<=100;i++) <br>for(j=1;j<=10;j++) <br>if((k=100-i-j)*2==400-i*4-j*40) <br>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; <br>for(i=1;i<m;printf("\n"),i++) <br>for(j=1;j<m; <br>putchar(N-abs(i-N)<=abs(j++-N)?' ':'*'));}
如果把N值改為5,則執行結果如下:
*
***
*****
*******
*********
*******
*****
***
*

Ⅵ 大學c語言,急求答案!!!

這個程序里的變數名不正確。C語言的變數名可以由數字、字母和下劃線組成,但是一般只能以下劃線和字母開頭,所以程序中的2cd和π是不符合要求的。另外變閉和蘆量名轎帶也不能使用C語言中棚困的關鍵字,所以使用for也是不符合要求的。

熱點內容
北京大學老師聯系方式 發布:2025-01-11 17:16:45 瀏覽:328
天津工業大學電氣考研 發布:2025-01-11 17:13:00 瀏覽:278
雲南大學藝術類研究生招生簡章 發布:2025-01-11 17:12:49 瀏覽:22
德國圖賓根大學莫爾特曼教授 發布:2025-01-11 17:12:46 瀏覽:585
大學與喜歡的老師相處 發布:2025-01-11 17:00:24 瀏覽:727
公安大學教授周農 發布:2025-01-11 17:00:19 瀏覽:664
韓國啟明大學讀博士 發布:2025-01-11 16:56:07 瀏覽:371
桂林電子科技大學碩士研究生保送生名單 發布:2025-01-11 16:45:38 瀏覽:558
西南石油大學考研939 發布:2025-01-11 16:42:34 瀏覽:596
蘭州大學李文老師電話 發布:2025-01-11 16:32:19 瀏覽:701