




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
校本課程算法與編程(C++入門)つけ目錄TOC\o"1-5"\h\zC++語言入門(平臺安裝介紹基本功能) 3C++語言簡介 4C++語言程序結構 6賦值語句 8運算符和表達式 10常量和變量 12標準數據類型 14數據輸入輸出 16順序結構實例 18概述 20if選擇結構 22switch喑句 24程序的控制結構練習與總結 26循環的控制結構 28for語句 30while有句 32do-while語句 36C++小結試題 38信息學奧賽校本教材(上)第1章初識C++語言C++語言簡介:信息學奧林匹克競賽是ー項益智性的競賽活動,核心是考查選手的智力和使用計算機解題的能力,選手首先應針對競賽題目的要求構建數學模型,進而構造出計算機可以接受的算法,之后編寫出計算機能夠執行的程序。程序設計是信息學競賽的基本功,選手參與競賽活動的第一步是熟練掌握ー門程序設計語言,目前競賽中允許使用的程序設計語言有C語言、C++語言、PascaLC++語言概述C++由美國AT&T貝爾實驗室的本賈尼?斯特勞斯特盧普博士在20世紀80年代初期發明并實現(最初這種語言被稱作“CwithClasses”帶類的C卜開始,C++是作為C語言的增強版出現的,從給C語言增加類開始,不斷的增加新特性。今天C++已成為世界主流編程語言之一。C++語言的特點:語言簡潔緊湊,使用靈活方便C++語言一共只有32個關鍵字和9種控制語句,程序書寫自由,主要用小寫字母表示。運算符豐富C++語言的運算符包含的范圍很廣泛,共有34個運算符。數據結構豐富C++語言的數據類型有:整型、實型、字符型、數組類型等等結構化語言結構化語言的顯著特點是代碼及數據的分隔化,即程序的各個部分除了必要的信息交流外彼此獨立。生成的代碼質?髙C++語言在代碼效率方面可以和匯編語言相媲美。可移植性強C++語言編寫的程序很容易進行移植,在ー個環境下運行的程序不加修改或少許修改就可以在完全不同的環境下運行。C++程序結構:在介紹C++語言程序的結構之前,我們先來看ー個簡單的例子:例1.1在屏幕上輸出“HelloWorld!:#include<iostream>〃使用cin,cout,須調用iostream庫,否則編譯出錯#include<cstdlib> //使用system()調用cstdlib庫usingnamespacestdJ〃在C語言中要省略,例如在VC++和TC++中intmain() 〃有的C語言可用voidmain。,例如TC++和VC++(cout?"HelloWorld!"?endl;〃輸出“HelloWorld!"system("pause"); 〃暫停作用,使用system("pause")調用cstdlib庫return0i 〃結束整個程序)運行結果:HelloWorld!【說明】:1、以“〃”開頭為注釋行:后的內容用以對語句進行說明,輸入程序時可以不輸入。2、#include<iostream>告訴編譯器的預處理器將輸入輸出流的標準頭文件(iostream)包括在本程序中。這個頭文件包括了C++中定義的基本標準輸入輸出程序庫的聲明。3、usingnamespacestd使用std(標準)名字空間的意思。所謂的名字空間是標準C++中的ー種機制,用來控制不同類庫的沖突問題。使用它可以在不同的空間內使用相同名字的類或者函數。4、intmain()這一行為主函數(mainfunction)的起始聲明。main。是所有C++程序的運行的起始點。不管它是在代碼的開頭,結尾還是中間,此函數中的代碼總是在程序開始ー個被執行。所有C++程序都必須有一個main。,intmain。前int在DevC++中可省略,在TC++和VC++中最好保留。main后面跟了一對圓括號(),表示它是ー個函數。C++中所有函數都跟有ー對圓括號(),括號中可以有一些輸入參數。注意,圓括號中即使什么都沒有也不能省略。如例題中顯示,主函數main。中的內容,由一對花括號{}括起來。5、cout?"HelloWorld!"?endl這個語句在本程序中最重要。cout是ー個輸出語句,告訴計算機把引號之間的字符串送到標準的輸出設備(屏幕)上。cout的聲明在頭文件iostream中,所以要想使用cout必須將頭文件iostream包括在程序開始處。endl是C++語言的換行控制符,表示內容輸出后換行顯示后續的內容。6、system("pause")在4.99以前版本的Dev-C++環境下,為了查看程序運行結果,需要在main函數的return0語句前加上:system("pause"):這樣程序運行到該語句時,結果顯示屏幕將會停留,讓大家有時間看程序的輸出結果,否則結果顯示屏幕將會ー閃而過。在4.99之后的版本可不必加該語句,運行結束后結果顯示屏幕將自動停留。7、return0主函數main()的返回語句,一般是函數的最后一條可執行語句。main。函數末尾使用return語句時數值〇表示程序順利結束,其他數表示有異常。在后面的例子中你會看到C++程序都以類似的語句結束。在C++中,語句的分隔是以分號";”為分隔符的,分行寫代碼只是為了更方便人閱讀。一.啟動Dev-C++.鼠標點擊任務欄中的“開始”按鈕,選“程序”菜單項,然后選“程序”下的子菜單項"BloodshedDev-C++”項,顯示該項下的子菜單。2,方法一:單擊”Dev-C++”菜單項,即可啟動Dev-C++集成開發工具。(如圖1所示)方法二:直接雙擊桌面上的Dev-C++的圖標。如果大家看到界面上的字是英文的,則可以點擊主菜單“Tools>Environment〇ptions”(如圖3),在彈出的對話框中選擇第二個標簽頁”interface"(如圖4),在Language下拉列表中選擇Chinese即可,將操作界面改為中文的。二、新建源程序1)從主菜單選擇“文件”〉“新建”〉“源代碼”即可(如圖2所示..此時屏幕右下側出現ー片白色區域,稱為“源程序編輯區域”;可以在此7輸入程序。如(圖5)所示。注意:.必須在英文輸入環境下編輯程序(如果你當前能在程序編輯區輸入中文,說明你是在中文輸入環境下。為了輸入程序,你必須切換到英文輸入環境下方2.在4.99以前的版本的Dev-C++環境下,為了查看程序運行結果,需要在main函數的return語句前加上:system("pause")或getchar(),這樣程序運行到該語句時,結果顯示屏幕將會停留,讓大家有時間看程序的輸出結果。否則結果顯示屏幕將會ー閃而過。在4.99之后的版本可不必加該語句,運行結束后結果顯示屏幕將自動停留。三、保存源程序到硬盤ー個好的習慣是創建了一個新程序后,在還未輸入代碼之前先將該程序保存到硬盤某個目錄下,然后在程序的編輯過程中經常性地保存程序,以防止機器突然斷電或者死機。要保存程序,只需從主菜單選擇“文件”一〉“保存”就可以將文件保存到指定的硬盤目錄。如圖6所示。此時會弾出ー個對話框。在此你需要指定文件要存放的磁盤目錄(例如:D:\temp),自定文件名稱(例如:ex1)以及保存類型。在點擊右下角的保存按鈕后,在D盤上的temp目錄下將會出現ー個名為exl.cpp的源文件。四、編譯、運行編譯:從主菜單選“運行”ー〉“編譯運行”或快捷鍵“F9”(圖7b如果程序中存在詞法、語法等錯誤,則編譯過程失敗。編譯器會在屏幕右下角的“CompileLog”標簽頁中顯示錯誤信息,如(圖8)所示,并且將源程序相應的錯誤行標成紅色底色。五、調試程序.設置程序斷點通過預處理、編譯和鏈接的程序僅僅是該程序中沒有詞法和語法等錯誤,而無法發現程序深層次的問題(譬如算法不對導致結果不正確ト當程序運行出錯時,需要找出錯誤原因。仔細讀程序來尋找錯誤固然是ー種方法,但是有時光靠讀程序已經解決不了問題,此時需要借助于程序調試(Debug)手段。這是一種有效的排錯手段,每一位同學都需要掌握。如果想讓程序運行到某一行前能暫停下來,就需要將該行設成斷點。具體方法是在代碼所在行行首單擊,該行將被加亮。默認的加亮顏色是紅色。如果想取消不讓某行代碼成為斷點,則在代碼行首再次點擊即可。.運行程序設置斷點后,此時程序運行進入debug狀態。要想運行程序,就不能使用主菜單“Execute”->“Run”,而是需要用主菜單“Debug"ー〉"Debug'(或者按快捷鍵F8),如圖12所示。.單步執行程序要想運行藍色底色的代碼,可以使用圖14所示的“NextStep(F7)”、'"StepInto(ShiftF7ド、"Continue(CtrlF7)","'RuntoCursor(ShiftF4)”等(具9體含義見下面的介紹卜在學習函數之前,一般用的是NextStep和Continue。學習函數后,還會用到StepIntOo.設置watch窗ロ在調試程序時,可能要看程序運行過程中變量的值,以檢測程序對變量的處理是否正確,可以在調試時通過調試菜單下的添加變量(AddWatch)窗口來増加變量watch,新增的變量將會顯示在最左邊Explore的Debug頁中。如果左邊Explore中的當前頁不是Debug頁,則可以點擊Debug標簽使之成為當前頁。無論做任何事情,都要有一定的方式方法與處理步驟,所謂“無規矩無以成方圓計算機程序設計比日常生活中的事務處理更具有嚴謹性、規范性和可行性。為了使計算機有效地解決實際問題,必須將處理步驟編排好,用計算機能理解的計算機語言編寫成“序列”,讓計算機自動識別并執行這個“序列”,達到解決實際問題的目的。將處理問題的步驟編排好,用計算機語言組成序列,就是常說的編寫程序。在C++語言中,執行每條語句都是由計算機完成相應的具體操作,編寫程序是利用C++語句的功能來實現預定的處理要求。“千里之行,始于足下”,我們從簡單程序學起,逐步了解和掌握怎樣編寫程序。在學習C++語言之前,讓我們繞過那些繁瑣的語法規則細節,通過ー些簡單的例題,來熟悉程序的基本組成和基本語句的用法,選手剛接觸編程時,多動手模仿是一條捷徑。例1.2在梯形中陰影部分面積是150平方厘米,求梯形面積。【分析】已知梯形上、下底長為15和25。令梯形的高為h,則由已知三角形面積為150平方厘米,有150二(155)/2,得h為20,然后根據梯形面積公式算出梯形面積。程序如下:#include<cstdio>//printf和scanf調用cstdio庫,在C語言中#include<cstdio>可調用stdio.h庫#include<cstdlib>//使用system()調用cstdlib庫#include<cstdlib>usingnamespacestd;〃在C語言中要省略,例如在usingnamespacestd;〃在C語言中要省略,例如在VC++和TC++中intmain()〃有的C語言可用voidmain。,例如TC++和VC++〃整個程序開始floats,h,up,down;//TC++和VC++〃整個程序開始floats,h,up,down;//float定義s,h,up,down為單精度實型變量up=15;〃已知上底down=25;〃已知下底down=25;〃已知下底h=2*150/up;〃根據上底求出梯形的高h=2*150/up;〃根據上底求出梯形的高s=(up+down)*h/2;〃求出梯形的面積s=(up+down)*h/2;〃求出梯形的面積printf("s=%0.2f\n",s);〃'n是換行控制符,0.2f按實際位數輸出,保留2位小數systemC'pause',);〃暫停作用,TC++和VC++中使用system()調用stdlib.h庫return0;return0;〃結束程序,在TC++和VC++中也要保留運行結果:s=400.00【說明】:所謂namespace,是指標識符的各種可見范圍。C++標準程序庫中的所有標識符都被定義于ー個名為std的namespace中。當使用<iostream.h>時,相當于在C中調用庫函數,使用的是全局命名空間,也就是早期的C++實現;當使用<iostream>的時候,該頭文件沒有定義全局命名空間,必須使用namespacestd;這樣才能正確使用cout、cin和endlo例1.3已知一位小朋友的電影票價是10元,計算x位小朋友的總票價是多少?【分析】假設總票價用y來表示則這個問題可以用以下幾個步驟來實現:①輸入小朋友的數目x;②用公式y=10?x計算總票價;③輸出總票價y的值。程序如下:#include<iostream> 〃使用cin.cout,須調用iostream庫usingnamespacestd;intmain()intx.y;〃定義整型變量intx.y;cout?"lnputx="; 〃輸入提示cin?xJ 〃小朋友的人數y=10*x; 〃計算總票價cout?"total="?y?endl;〃輸出總票價return0J 〃結束程序}【說明】:1、int定義x,y為整型變量,有關整型變量將在第二章詳細介紹。2、cout<<的作用是在屏幕中顯示字符串"Inputx="o3、cin?x的作用是輸入ー個數,賦予變量X。4,cout?"total="?y?end!的作用是輸出提示符total=,輸出y的值,endl是換行的意思。通過以上例1.2和例1.3兩個例子,可以總結出C++語言程序的結構如下:1)C++語言變量在使用之前必須先定義其數據類型,未經定義的變量不能使用。2)程序由一個或多個函數組成,ー個程序中必須有且只有一個主函數,主函數的名字為maino不論main。函數在程序中什么位置,程序都是從main()函數開始執行,main()函數執行完畢,程序也就結束了。3)在程序中可以調用系統提供的庫函數。在調用庫函數之前,必須將相應13頭文件包含在程序中。4)程序中可以有注釋行。注釋是為了使程序更易于理解和提示。)程序的語句以分號結束。分號是C++語言不可缺少的組成部分。)程序的書寫要注意適當的縮進,一般采用“逐層縮進”形式,以便使程序更加清晰易讀。把處理問題的步驟編成能從上到下順序執行的程序,是簡單程序的基本特征。再來分析下面一道例題的程序結構,同時繼續學習基本語句。例1.4有一個牧場,牧場上的牧草每天都在勻速生長,這片牧場可供15頭牛吃20天,或可供20頭牛吃10天,那么,這片牧場每天新生的草?可供幾頭牛吃1天?【分析】解決這類問題的關鍵是利用牛吃的草量,最終求出這片牧場每天新生長的草量,我們設1單位的草量為1頭牛1天所需的草量,于是15頭牛20天所食的草量為300單位(包括這20天內的新生草量),20頭牛10天所食的草量為200單位(包括這10天內的新生草量),兩者的差值即為10天內的新生草量。程序如下:#include<iostream> 〃使用cin.cout,須調用iostream庫usingnamespacestd;intmain()〃變量定義〃變量定義s1=15*20;〃15頭牛20天所食的草量s1=15*20;〃15頭牛20天所食的草量s2=20*10;//20頭牛10天所食的草量s3=(s1-s2)/(20-10);〃每天新生的草量單位數cout?"s="?s3?endl;//1單位為1頭牛1天的食量return0;〃結return0;運行結果:s=10例1.5給定一個字符,用它構造ー個底邊長5個字符,高3個字符的等腰字符三角形。#. ###/〃〃〃〃/程序如下:#include<iostream>〃使用cin,cout,須調用iostream庫usingnamespacestd;intmain()chara;〃定義字符變量,chara;cin?a;〃輸入給定一個字符cin?a;cout?",(?a?endl; 〃輸出1個字符,先輸出2個空格cout?Hn?a?a?a?endl; 〃輸出3個字符,先輸出1個空格cout?a<<a?a?a<<a?endl;〃輸出5個字符return0; 〃結束程序)【DevC++版本注意事項】在5.0版本DevC++中,<iostream>不是萬能庫,不包括cstdio,cstring,cstdlib,其他常用的min,max函數也不保證包括,需要注意如下幾個細節:①、getchar(),stdin,stdout,freopen(),fclose(),scanf()SC++中需要調用<cstdio>②、memset()需要包含C頭文件〈string.h>,在C++中需要調用<cstring>③、qsort(),exit()需要包含C頭文件<stdlib.h>,在C++中需要調用<cstdlib>在5.0版本C++中,根據標準去除了iostream對cstdio,cstring,algorithm的依賴性,需要顯式包括。你現在還可能不透徹理解以上注意事項,就慢慢消化吧,在信息學奧賽中一定要注意以上細節,請記住:“細節決定成敗本書【上機練習】在線評測0J::8088第二章順序結構第一章的簡單程序已體現出處理問題的步驟的順序關系,每條語句按自上而下的順序依次執行ー次,這種自上而下依次執行的程序稱為順序結構程序。在ー個程序中,所有的操作都由執行部分來完成,而執行部分又都是由一條條語句組成的。因此,先要學習C++語言的基本語句,并且在學習過程中逐步學會程序設計的基本方法。我們還是先繞過那些繁瑣的語法規則細節,先看ー些例子,然后給出語法以供選手們參考。賦值語句:在C++語言中作為賦值運算符,而不表示“等于"判斷。賦值語句是由賦值表達式再加上分號構成的表達式語句,它是程序中使用最多的語句之一。變ー=表達式;在賦值語句的使用中,需要注意以下幾點:1)由于賦值運算符“=”右邊的表達式也可以是賦值表達式,因此,下述形式:變?=(變==表達式);是成立的,從而形成嵌套的情形。其展開之后的一般形式為:例如,匕=b=c=d=e=5;",它實際上等價于:e=5;d=e;c=d;b=c;a=b;2)在進行賦值運算時,如果鼠值運算符兩邊的數據類型不同,系統將會自動進行類型轉換,即將鼠值運算符右邊的數據類型轉換成左邊的變?類型。當左邊是整型而右邊是實型時,將去掉小數部分并截取該整型對應的有效位數。例2.1輸入兩個正整數A和B,試交換A、B的值(使A的值等于B,B的值等于Ab【分析】交換兩個變量的值方法很多,一般我們采用引入第三個變量的算法,二個變量交換,可以想像成一瓶醬油和一瓶醋進行交換,這時容易想到拿ー個空瓶子過來:①將醬油倒到空瓶中;②將醋倒到醬油瓶中;③將原空瓶中的醬油倒到醋瓶中。程序如下:#include<iostream> 〃使用cin.cout,須調用iostream庫usingnamespacestd;intmain(){inta,b,c;〃定義三個變量cout?"lnputa,b=";〃輸入提示Inputa,b=cin?a?b;〃輸入A、B的值c=a;a=b;b=c;〃交換A、B的值
cout?"a="?a<<"b="?b?endl!〃輸出結果}例2.2圓柱體的表面積輸入底面半徑r和高h,輸出圓柱體的表面積,保留3位小數,格式見樣例。樣例輸入:3.59樣例輸出:274.889【分析】圓柱體的表面積由3部分組成:上底面積、下底面積和側面積。由于上下底面積相等,完整的公式可以寫成:表面積=底面積?2+側面積。根據平面幾何知識,底面積=ttR2,側面積=2Tirh。參考程序:#include<cstdio> 〃使用printf和scanf,須調用cstdio庫#include<cmath> 〃使用數學函數atari,須調用cmath庫usingnamespacestd: 〃在這個程序中可以省略這行intmain(){constdoublepi=3.1415926J 〃定義pi為常量doubler,h,s1,s2,s; 〃定義雙精度實型,float為單精度實型scanf("%lf%lf',&r,&h);〃scanf("%lf%lf',&r,&h);〃r和h前的&符號不能漏掉,double型用%Ifs1=pi*r*r; //計算底面積s2=2*pi*r*h; 〃計算側面積s=2*s1+s2; //計算總的表面積printf("Area=%0.3lf\n",s): 〃輸出結果保留3位小數,注意用If格式return0;}例2.3數學中經典的“雞兔同籠”問題,已知頭共30個,腳共90只,問籠中的雞和兔各有多少只?【分析】設雞為j只,兔為t只,頭為h,腳為f,那么有:j+t=30 ①2*j+4*t=90 ②假設籠中30個頭全都是兔,那么都按每頭4只腳計算,總腳數為(4*h),與實際腳數(f)之差為(グh-f),如果這個差=0,則籠中全是兔(即雞為〇只);如果這個差值>0,說明多計算了腳數,凡是雞都多計算了兩只腳,用它除以2就能得到雞的只數,算法為:①j=(4*h-f)/2 〃先用腳數差值除以2算出雞的只數〃再②t=h-j〃再用總頭數減雞數算出免的只數注意這兩步運算的先后順序。程序如下:#include<cstdio>cstdio#include<cstdio>cstdio庫#include<iostream>〃使用getchar()語句,須調用〃使用cin.cout,須調用iostream庫usingnamespacestd;intmain()〃定個變量〃賦初始值〃定個變量〃賦初始值//計算雞的只〃計算免h=30;f=90;j=(4*h-f)/2;數t=h-j;的只數cout?"j="?j<<"t="?t?endl;〃輸出結果getchar(): 〃和system("pause")作用相似,用于結果顯示暫停}第二節運算符和表達式:C++語言中運算符和表達式數?之多,在高級語言中是少見的。正是豐富的運算符和表達式使C++語言功能十分完善。這也是C++語言的主要特點之一。運算符縱覽.算術運算符用于各類數值運算。包括加(+)、減(-)、乘(*)、除(/)、求余(或稱模運算,%)、自增(++)、自減(一)共七種。.關系運算符用于比較運算。包括大于(つ、小于(<)、等于(==)、大于等于(>=)、小于等于(v=)和不等于(!=)六種。.邏輯運算符用于邏輯運算。包括與(&&)、或(||)、非(リ三種。.位操作運算符參與運算的,,按二進制位進行運算。包括位與(&)、位或(|)、位非(~)、位異或(八)、左移(vv)、右移(>>)六種。.鼠值運算符用于賦值運算,分為簡單賦值(=)、復合算術賦值(+=,-=,*=,/=,%=)和復合位運算鼠值(&=,ド,"=,>>=,<<=)三類共十一種。.條件運算符這是ー個三目運算符,用于條件求值(?:)。.逗號運算符用于把若干表達式組合成一個表達式(,)。.指針運算符用于取內容(*)和取地址(&)二種運算。.求字節數運算符用于計算數據類型所占的字節數(sizeof)。.特殊運算符有括號(),下標ロ,成員(->,.)等幾種。ー、算術運算符1、橫運算符求余的運算符“%”也稱為橫運算符,是雙目運算符,兩個操作數都是整型數。a%b的值就是a除以b的余數,5%2余數為1〇其操作對象只能是整型數,而其他四種運算符對int,float,double,char都適用。2、除法運算符C++語言的除法運算符有一些特殊之處,即如果a、b是兩個整數類型的變?或常量,那么a/b的值是a除以b的商。例如,5/2的值是2,而不是2.5,而5.0/2或5/2.0的值是2.5。3、自増自減運算符自增、自減運算符用來對ー個操作數進行加1或減1運算,其結果仍然賦予該操作數,而且參加運算的操作數必須是變急,而不能是常■或表達式。)自増運算符。例如,X++表示在使用X之后,使X的值加1,即X=X+1;++X表示使用X之前,先使X的值加1,即x=x+1o232)自減運算符。例如,X-表示在使用x之后,使x的值減1,即X=X-1;-X表示使用X之前,先使X的值減1,即x=x-1o4、復合算術賦值。例如,a+=1,相當于a=a+1;a+=b,相當于a=a+b。例2.4變量自加運算#include<iostream>usingnamespacestd;intmain()(intx,y,z1,z2;x=7; y=8;z1=y-(x++); 〃計算z1=1,計算后x=8z2=y-(++x)! 〃計算前x的值自加1,x的值為9,再與y求差cout?"z1="?z1?endl?*'z2="?z2; 〃分別輸出z1和z2的值)運行結果:z1=1z2=-1二、關系運算符關系運算符用于數值的大小比較。包括大于ひ)、小于(<)、等于(==)、大于等于(>=)、小于等于(v=)和不等于。=)六種,它們都是雙目運算符。關系運算符運算的結果是整型,值只有兩種:0或1,0代表關系不成立,1代表關系成立。請看下面的例子:intmain(){intn1=4,n2=5,n3;//n3的值為〇//n3的值為〇//n3的值變為1//n3的值變為1//n3的值變為〇〃n3的值變為1n3=n1<n2;n3=n1==4;n3=n1!=4;n3=n1==1+3;三、邏輯運算符 C++語言中提供了三種邏輯運算符:與運算(&&)、或運算(II)、非運算。)。與運算符(&&)和或運算符(II)均為雙目運算符。具有左結合性。非運算符(リ為單目運算符,具有右結合性。邏輯運算符和其它運算符優先級的關系可表示如下:按照運算符的優先順序可以得出:a>b&&c>d等價于(a>b)&&(c>d)!b==c||d<a等價于((!b尸c)||(d〈a)a+b>c&&x+y<b等價于((a+b)>c)&&((x+y)<b)邏輯運算的值也為“真”和“假”兩種,用T和“〇”來表示。其求值規則如下:.與運算&&參與運算的兩個量都為真時,結果オ為真,否則為假。例如,5>0&&4>2,由于5>0為真,4>2也為真,相與的結果也為真。.或運算||參與運算的兩個量只要有一個為真,結果就為真。兩個量都為假時,結果為假。例如:5>0||5>8,由于5>0為真,相或的結果也就為真.非運算!參與運算量為真時,結果為假;參與運算量為假時,結果為真。例如:!(5>0)的結果為假。雖然C++編譯在給出邏輯運算值時,以“1”代表“真”,“〇”代表"假’;但反過來在判斷ー個量是為“真”還是為“假"時,以“。”代表‘假”,以非“。”的數值作為“真シ例如:由于5和3均為非“。”因此5&&3的值為“真",即為1〇又如:5||0的值ガ真”,即為1〇需要說明的是,對于有符號數,在右移時,符號位將隨同移動。當操作數為正數時,最髙位為。,而為負數時,最高位為1〇最高位是補。或補1取決于編譯系統的規定。在C++語言中,有一些運算可以簡寫,如下表所示。算術運算符、關系運算符、邏輯運算符和賦值運算符的優先級如下:賦值運算符 邏輯運算符 關系運算符 算術運算符低 高關系運算符的結合性為:自左至右。根據以上優先級和結合性,計算出以下表達式的結果(假設a=3,b=2,C=1)a>b 表達式為真,所以表達式的值為1(a>b)==c 表達式為真,所以表達式的值為1b+c<a 表達式為假,所以表達式的值為〇d=a>b a>b為真,所以d的值為1f=a>b>ca>b為真,結果為1,1>c為假,所以f的值為〇【上機練習】1.A+B問題【1.3編程基礎之算術表達式與順序執行01】大部分的在線題庫,都會將A+B問題作為第一題,以幫助新手熟悉平臺的使用方法。A+B問題的題目描述如下:給定兩個整數A和B,輸出A+B的值。保證A、B及結果均在整型范圍內。現在請你解決這ー問題。輸入:一行,包含兩個整數A,B,中間用單個空格隔開。A和B均在整型范圍內。輸出:ー個整數,即A+B的值。保證結果在整型范圍內。樣例輸入:2樣例輸出:.計算(a+b)*c的值[1.3編程基礎之算術表達式與順序執行02】給定3個整數a、b、c,計算表達式(a+b)*c的值。輸入:輸入僅一行,包括三個整數a、b、c,數與數之間以ー個空格分開。(-10,000<a,b,c<10,000)輸出:輸出一行,即表達式的值樣例輸入:235樣例輸出:25.計算(a+b)/c的值[1.3編程基礎之算術表達式與順序執行03】給定3個整數a、b、c,計算表達式(a+b)/c的值,/是整除運算。輸入;輸入僅一行,包括三個整數a、b、c,數與數之間以ー個空格分開。(-10,000<a,b,c<10,000,c不等于0)輸出:輸出一行,即表達式的值。樣例輸入:樣例輸出:0.帶余除法[1,3編程基礎之算術表達式與順序執行04】給定被除數和除數,求整數商及余數。此題中請使用默認的整除和取余運算,無需對結果進行任何特殊處理。輸入:一行,包含兩個整數,依次為被除數和除數(除數非零),中間用ー個空格隔開。輸出:一行,包含兩個整數,依次為整數商和余數,中間用ー個空格隔開。樣例輸入:103樣例輸出:315.計算分數的浮點數值[1.3編程基礎之算術表達式與順序執行05】兩個整數a和b分別作為分子和分母,既分數a/b,求它的浮點數值(雙精度浮點數,保留小數點后9位)。輸入:輸入僅一行,包括兩個整數a和b。輸出:輸出也僅一行,分數a/b的浮點數值(雙精度浮點數,保留小數點后9樣例輸入:57樣例輸出:0.714285714第三節常?和變?:ー、常?常?是指在程序中使用的ー些具體的數、字符。在程序運行過程中,其值不能被更改。如123,145.88,'m'.TRUE等。1、整型常?:如3、ー5、0等。整型常■是表示整數的常量。有三種表示形式:)十進制形式。如99、ー1。)ハ進制形式。以數字。打頭,由0-7構成,如012,表示八進制整數12,即12(8)〇)十六進制形式。以Ox打頭,如0x12A,表示十六進制整數12A,即12A(化)。2、實型常量:如3.1,-6.1E+2(科學記數法}3、字符常量:是用單引號括起來的字符,如‘k‘、5、‘%’。注意:W與"a"表示的含義是不同的,目表示一個字符常量,七”表示一個字符串。一個常量可以直接調用(如124;A'),也可以給常量取個名字用ー個標識符代表它,這就是符號常量。其語法格式為:const符號常量=常量字串;例如:constdoublePl=3.1415926;例2.5輸入半徑r,求圓的周長及面積。#include<cstdio> 〃調用iostream庫,否則使用printf和scanf語句編譯出錯usingnamespacestd; 〃這個程序可省略這行constdoublePl=3.1415926; //PI是符號常量。代表3.1415926intmain()floatr,c,s;〃定義實型變量printf("「ゴ);〃顯不提不符r=scanf("%f,&r);〃輸入r的值,&符號不能漏掉c=2*PI*r;〃計算圓的周長s=PI*r*r;〃計算圓的面積printf(Mc=%.2fs=%.2f\nM,c,s);〃顯示計算結果,結果保留2位小數程序中定義的PI代表常量3.1415926I在編譯源程序時,遇到PI就用常量3.1415926代替,PI可以和常量一樣進行運算。C++語言規定,每個符號常量31的定義占據ー個書寫行,而且符號常量不能被再賦值。如果在例2.5中使用以下賦值語句是錯誤的。Pl=3.1415926;習慣上,符號常量名用大寫,而變量名用小寫,以便于區別。使用符號常量的好處:)增加了程序的可讀性。如看到例2.5程序中,見到P!就可知道它代表圓周率,定義符號常量名時應該盡量使用見名知意的常量名。)增加了程序的易改性。如例2.5程序中,只需改動ー處,程序中的所有PI都會自動全部代換,做到“ー改全改I;變量代表了一個存儲單元,其中的值是可以改變的,因此稱為變量。如游戲中玩家命的條數最初為3.當你死了一次,命減少一條,這里命的條數就是ー個變量(或者說命的條數存儲在ー個存儲單元中卜ー個程序中可能要使用到若干個變量,為了區別不同的變量,必須給每個變量(存儲單元)取一個名(稱為變量名),該變量(存貯單元)存儲的值稱為變量的值,變量中能夠存儲值的類型為變量的類型。例如游戲中用于存儲“命”的變量,在游戒程序中的存儲命的變量名可取為life,它的類型為整型,游戲初始時這個變量的值為3〇用ー個合法的標識符代表ー個變量。如n,m,rot,total等都是合法變量名。在程序中用到的變量要“先定義后使用”,變量名應遵循自定義標識符的命名規則,并建議使用“見名知義”的原則,即用ー些有意義的單詞作為變量名。在C++語言,變量名大小寫有區別。用來標識變量名、符號常量名、函數名、數組名、類型名、文件名的有效字符序列稱為標識符。C++語言規定,標識符只能由字母(包含下劃線“一”)開頭,后面的字符可以是字母或數字。對于標識符的長度,不同的C++語言編譯器有不同的規定,考慮到系統的可移植性,建議變量名的長度不要超過8個字符。例如:month,一age、s2為合法的標識符;m.k.jack、a<=b、9y為不合法的標識符。定義變■的語法格式為:數據類型變■表例如:inti=5,j,k: 〃定義i,j,k為整型變量,//i賦初值為5J,k的初值未知。chara,b,c; 〃定義a,b,c為字符變量floatx,y,z; 〃定義x,y,z為實型變量C++語言允許在定義變量的同時為變量賦初值。常量是有類型的數據,變量在某ー固定時刻用來存儲ー個常量,因此也應有相應的類型。如整型變量用來存儲整數,實型變量用來存儲實數。變量的類型,可以是標準數據類型int、short、long、float、double和char等,也可以是用戶自定義的各種類型。變量ー經定義系統就在計算機內存中為其分配ー個存儲空間。在程序中使用到變量時,就在相應的內存中存入數據或取出數據,這種操作稱為變量的訪問。【上機練習】1.甲流疫情死亡率【1.3編程基礎之算術表達式與順序執行06】甲流并不可怕,在中國,它的死亡率并不是很高。請根據截止2009年12月22日各省報告的甲流確診數和死亡數,計算甲流在各省的死亡率。輸入:輸入僅一行,有兩個整數,第一個為確診數,第二個為死亡數。輸出:輸出僅一行,甲流死亡率,以百分數形式輸出,精確到小數點后3位。樣例輸入:1043360樣例輸出:0.575%.計算多項式的值[1.3編程基礎之算術表達式與順序執行07】對于多項式f(x)=axA3+bxA2+cx+d和給定的a,b,c,d,x,計算f(x)的值,保留到小數點后7位。輸入:輸入僅一行,包含5個實數,分別是x,及參數a、b、c、d的值,每個數都是絕對值不超過100的雙精度浮點數。數與數之間以ー個空格分開。輸出:輸出一個實數,即f(x)的值,保留到小數點后7位。樣例輸入:2.311.2223樣例輸出:33.0838692.溫度表達轉化[1.3編程基礎之算術表達式與順序執行08】利用公式C=5*(F-32)/9(其中C表示攝氏溫度,F表示華氏溫度)進行計算轉化,輸入華氏溫度f,輸出攝氏溫度c,要求精確到小數點后5位。輸入:輸入一行,包含一個實數f,表示華氏溫度。(f>=-459.67)輸出:輸出一行,包含ー個實數,表示對用的攝氏溫度,要求精確到小數點后5位。樣例輸入:41樣例輸出:5.00000.與圓相關的計算[1.3編程基礎之算術表達式與順序執行09】給出圓的半徑,求圓的直徑、周長和面積。輸入圓的半徑實數r,輸出圓的直徑、周長、面積,每個數保留小數點后4位。輸入:輸入包含ー個實數r(0<r<=10,000),表示圓的半徑。輸出:輸出一行,包含三個數,分別表示圓的直徑、周長、面積,數與數之間以ー個空格分開,每個數保留小數點后4位。樣例輸入:3.0樣例輸出:6.000018.849528.2743.計算并聯電阻的阻值[1.3編程基礎之算術表達式與順序執行10】對于阻值為r1和r2的電阻,其并聯電阻阻值公式計算如下:R=1/(1/r1+1/r2)o輸入兩個電阻阻抗大小,浮點型。輸出并聯之后的阻抗大小,結果保留小數點后2位。輸入:兩個電阻阻抗大小,浮點型,以ー個空格分開。輸出:并聯之后的阻抗大小,結果保留小數點后2位樣例輸入:12樣例輸出:0.67第四節標準數據類型:C++語言提供了豐富的數據類型,本節介紹幾種基本的數據類型:整型、實型、字符型。它們都是系統定義的簡單數據類型,稱為標準數據類型。字符型字符常量有以下兩種表示法:1、普通表示形式字符常量是由單個字符組成,所有字符采用ASCI!編碼,ASCI!編碼共有128個字符(表2-4)。在程序中,通常用一對單引號將單個字符括起來表示一個字符常量。如:'a','A',‘〇'等。如字符A的序號是65,字符a的序號是97,字符〇的序號的48〇2、轉義字符表示形式(初學者暫不教)轉義字符有三種用法:表示控制字符、表示特殊字符、表示所有字符。常用的轉義字符如右表所示。例2.6整型數據類型存儲空間大小分別定義int,short類型的變量各ー個,并依次輸出它們的存儲空間大小(單位:字節)。【參考程序】#include<iostream>usingnamespacestd;intmain()intx;shorty;cout?sizeof(x)?H,,?sizeof(y)?endl;//sizeof返回一個對象或者類型所占的內存字節數return0;}基于char數據的這個特點,它可以和int變量一樣做加減運算,例2.7說明了這種用法。例2.7大小字母的轉換#include<iostream>usingnamespacestd;intmain(){charc1,c2;c1ゴa';c2=,A';cout?c1?*'"?c2?endl;c1=c1-32; 〃小寫字母轉換大寫字母c2=c2+32; 〃大寫字母轉換小寫字母cout?c1?MM?c2?endl;}運行結果:aAAa【說明如下】)縱向箭頭表示必定會進行的轉換,如float型數據必先轉換為double型數據,然后與其他操作數進行運算。與此類似,char型或short型數據必先轉換為int型數據,然后進行運算。)橫向箭頭表示當運算對象為不同類型數據時的轉換方向,如int型數據與unsigned型數據進行運算,int型轉換為unsigned型后方可進行運算。int型與double型進行運算,int型直接轉換為double型后進行運算,不能理解為先轉換為unsignedint型,然后轉換為longint型,最后再轉換為double型。當賦值運算符兩側的數據類型不同時,需進行類型轉換,這種轉換是系統自動進行的,轉換規則如下:1)float、double型賦值給int型:直接截斷小數。例如:'inti=f+0.6;",f的值為4.0,右邊算術表達式運算后的結果為4.6的double型數據,根據上述轉換原則,直接舍棄小數,所以i的值為4〇2)int、char型賦值給float、double型:補足有效位以進行數據類型轉換。例如イfloatf=4;",float為7位有效數字,所以f的值為4.0000000。)char型(1字節)賦給int型(4字節):數值賦給int型的低8位,其它位補〇〇)longint型賦值給int型:longint型截斷低字節給int型。)int型賦值給!ongint型:賦給!ongint型的低16位,如果int型的最高位是〇,則longint的高16位全為〇;如果int型的最高位是1,則longint型的高16位全為1(稱為“符號擴展”卜)unsignedint型賦值給int型:直接傳送數值。)非unsignedint型賦值給位數相同的unsignedint型:直接傳送數值。在C++語言中,還允許強制類型轉換,即將某ー數據的數據類型轉換為指定的另ー種數據類型,強制類型轉換只是臨時轉換。強制轉換運算符組成的運算表達式的一般形式為:(類型名)(表達式)例如:已知有變量定義“intb=7;floata=2.5,c=4.7;”,求下面算術表達式的值。a+(int)(b/3*(int)(a+c)/2.0)%4根據運算符的結合性規則,表達式要自左至右執行,b/3為2,2*(int)(a+c)為14,14/2.0為7.0.強制類型轉換后為7,7%4為3,a的值2.5與3相加,最終結果為5.5。.整型數據類型存儲空間大小【1.2編程基礎之變量定義、賦值及轉換01】分別定義int,short類型的變量各ー個,并依次輸出它們的存儲空間大小(單位:字節)。輸入:無〇輸出:一行,兩個整數,分別是兩個變量的存儲空間大小,用ー個空格隔開。.浮點型數據類型存儲空間大小【1.2編程基礎之變量定義、賦值及轉換02】分別定義float,double類型的變量各ー個,并依次輸出它們的存儲空間大小(單位:字節)。輸入:無〇輸出:一行,兩個整數,分別是兩個變量的存儲空間大小,用ー個空格隔開。.其他數據類型存儲空間大小【1.2編程基礎之變量定義、賦值及轉換03】分別定義bool,char?類型的變量各一個,并依次輸出它們的存儲空間大小(單位:字節)。輸入:無。輸出:一行,兩個整數,分別是兩個變量的存儲空間大小,用ー個空格隔開。.浮點數向零舍入【1.2編程基礎之變量定義、賦值及轉換06】輸入ー個單精度浮點數,將其向零舍入到整數。說明:向零舍入的含義是,正數向下舍入,負數向上舍入。提示:可以使用強制類型轉換來實現。輸入:輸出:ー個單精度浮點數。 ー個整數,即向零舍入到整數的結果。樣例輸入:2.3樣例輸出:2.打印ASCII碼【1.2編程基礎之變量定義、賦值及轉換07】輸入ー個除空格以外的可見字符(保證在函數scanf中可使用格式說明符%c讀入),輸出其ASCII碼。輸入:一個除空格以外的可見字符。輸出:ー個十進制整數,即該字符的ASCII碼。樣例輸入:A樣例輸出:65.打印字符【1.2編程基礎之變量定義、賦值及轉換08】輸入ー個整數,即字符的ASCII碼,保證存在對應的可見字符。輸出相對應的字符。輸入:一個整數,即字符的ASCII碼,保證存在對應的可見字符。輸出:一行,包含相應的字符。樣例輸入:65樣例輸出:A.整型與布爾型的轉換【1.2編程基礎之變量定義、賦值及轉換09】將一個整型變量的值賦給ー個布爾型變量,再將這個布爾型變量的值賦給ー個整型變量,得到的值是多少?輸入:ー個整型范圍內的整數,即初始時整型變量的值。輸出:一個整數,經過上述過程后得到的結果。樣例輸入:3樣例輸出:1.整型與布爾型的轉換【1.2編程基礎之變量定義、賦值及轉換09】將一個整型變量的值賦給ー個布爾型變量,再將這個布爾型變量的值賦給一個整型變量,得到的值是多少?輸入:一個整型范圍內的整數,即初始時整型變量的值。輸出:一個整數,經過上述過程后得到的結果。樣例輸入:3樣例輸出:1.Hello,World!的大小【1.2編程基礎之變量定義、賦值及轉換10】在上一章里,我們曾經輸出過的“Hell。,World!”嗎?它雖然不是本章所涉及的基本數據類型的數據,但我們同樣可以用sizeof函數獲得它所占用的空間大小。輸入:無〇輸出:一個整數,即“Hello,World!”的大小。第五節數據輸入輸出:C++語言中沒有提供專門的輸入輸出語句,所有的輸入輸出都是調用標準庫函數中的輸入輸出函數來實現的。在使用時,應在源程序的開頭使用如下語句:#include<iostream>#include<cstdio>usingnamespacestd;C++語言標準函數庫提供了許多標準輸入、輸出函數,本節將介紹6個最基本的輸入、輸出函數:字符輸入getchar,字符輸出putchar,格式化輸入scant,格式化輸出print,流輸入cin,流輸出coutogetchar函數是接收從鍵盤輸入的單個字符數據。它是ー個無參函數,其語法格式為:getchar();【說明】1)通常把輸入的字符賦予ー個字符變量,構成賦值語句。例如:charch;ch=getchar();2)getchar函數只能接受單個字符,輸入數字也按字符處理。3)輸入多于ー個字符時,只接收第一個字符。4)getchar函數等待用戶輸入,直到按回車鍵オ結束,可用于暫停程序的運行,直到輸入ー個回車鍵。5)如果在程序中連續有兩個以上getchar。函數,應該ー次性輸入所需字符,最后再按回車鍵,否則會把回車作為ー個字符傳給后面的getchar。函數。例2.8利用getchar函數接收鍵盤輸入。#include<cstdio>#include<iostream>usingnamespacestd;intmain。{charch;ch=getchar(); 〃讀入字符cout?,,input=*'?ch?endl;}putchai"函數是字符輸出函數,功能是向標準輸出設備(如顯示器)輸出單個字符數據,其語法格式為:putchar(ch); 〃其中,ch為一個字符變量或常量。例2.9利用putchar函數輸出字符。#include<cstdio>#include<iostream>usingnamespacestd;intmain()(charc='B'; 〃定義字符變量c并賦值‘B'putchar(c); 〃輸出該字符putchar('\x42'); 〃用轉義字符輸出字母Bputchar(0x42); 〃用16進制ASCII碼值輸出字母putchar(66); 〃用10進制ASCI!碼值輸出字母B)運行結果:BBBB流插入運算符<<和cout結合在ー起使用,可向顯示器屏幕輸出數據。格式1:功能:它把表達式的值輸出到屏幕上,該表達式可以是各種基本類型的常量、變量或者由它們組成的表達式。輸出時,程序根據表達式的類型和數值大小,采用不同的默認格式輸出,大多數情況下可滿足要求。47若要輸出多個數據,可以連續使用流插入運算符格式2:功能:將表達式的內容一項接ー項的輸出到屏幕上。四、通過cin流讀入數據流讀取運算符〉〉和cin結合在ー起使用,可從鍵盤輸入數據。格式1:功能:是從鍵盤讀取ー個數據并將其賦給“變量‘:說明:在使用cin輸入的時候必須考慮后面的變量類型。如果你要求輸入ー個整數,在〉〉后面必須跟ー個整型變量,如果要求一個字符,后面必須跟ー個字符型變量。例2.14聲明一個整型變量age然后等待用戶從鍵盤輸入到cin并將輸入值存儲在這個變量中。intage;cin?age;也可以連續使用〉〉,實現從鍵盤對多個變量輸入數據。格式2:這要求從鍵盤輸入的數據的個數、類型與變量相一致。從鍵盤讀取數據時,各數據之間要有分隔符,分隔符可以是一個或多個空格鍵、回車鍵等。例2.15用cin讓用戶輸入多個數據。cin?a?b;等同于:cin?a;cin?b;五、格式化輸入函數scanfscanf函數的功能是格式化輸入任意數據列表,其一般調用格式為:scanf(格式控制符,地址列表)【說明】1)地址列表中給出各變量的地址,可以為變量的地址,也可以為字符串的首地址。2)格式控制符由%和格式符組成,作用是將要輸入的字符按指定的格式輸入,如%d,%c等六、格式化輸出函數printfprintf函數的功能是格式化輸出任意數據列表,其一般調用格式為:printf(格式控制符,輸出列表)【說明】)格式控制由輸入格式說明和普通字符組成,必須用雙引號括起來。?格式說明由%和格式字符組成,作用是將要輸出的字符轉換為指定的格式,如%d,%c等。?普通字符是在輸出時原樣輸出的字符,一般在顯示時起提示作用。)輸出列表是需要輸出的ー組數據(可以為表達式和變量),各參數之49
間用“;’分開。要求格式說明和各輸出項在數量和類型上要ーー對應,否則將會出現意想不到的錯誤。例2.12某幼兒園里,有5個小朋友編號為1,2,3,4,5I他們按自己的編號順序圍坐在ー張圓桌旁。他們身上都有若干個糖果(鍵盤輸入),現在他們做一個分糖果游戲。從1號小朋友開始,將自己的糖果均分三份(如果有多余的糖果,則立即吃掉),自己留一份,其余兩份分給他的相鄰的兩個小朋友。接著2號、3號、4號、5號小朋友同樣這么做。問ー輪后,每個小朋友手上分別有多少糖果。【分析】題目中有5位小朋友,他們初始時糖果的數目不確定,用a,b,c,d,e分別存儲5個小朋友的糖果數,初始值由鍵盤輸入。程序如下:#include<cstdio>usingnamespacestd;intmain()(inta,b,c,d,e;scanf(,'%d%d%d%d%d",&a,&b,&c,&d,&e);a=a/3;b=b+a;e=e+a; //1號小朋友分糖b=b/3;c=c+b;a=a+b; //2號小朋友分糖c=c/3;d=d+c;b=b+c;〃c=c/3;d=d+c;b=b+c;〃3號小朋友分糖d=d/3;e=e+d;c=c+d; 〃4號小朋友分糖e=e/3;a=a+e;d=d+e; 〃5號小朋友分糖printf("%5d%5d%5d%5d%5d\n",a,b,c,d,e);//%5d按5位寬度輸出return0;}1、cin和cout在DevC++中只能調用<iostream>庫,而其他輸入輸出格式要調用<stdio.h>庫或<cstdio>庫。2、cin和cout屬于C++的概念,調用時涉及輸入輸出流,而scanf和printf屬于C的概念,是C語言的標準輸入/輸出庫中的函數,所以在時效上,scanf和printf優于cin、cout,對于大數據的輸入輸出,通常情況下應該用scanf、printfo3、對于普通數據的輸入輸出,cin和cout比較方便,而在格式化方面,scanf和printf比較容易。cin效率比scanf低很多,尤其輸入數據達到20萬以上時非常明顯,在100萬時cin讀入就會超時。4,scanf和printf也缺點,cin和cout能夠自動識別變量的數據類型,因此,在進行輸入輸出時,不需要指定數據類型,printf和scanf函數在輸入輸出時需指定數據類型。.輸出保留3位小數的浮點數[1.1編程基礎之輸入輸出04]讀入ー個單精度浮點數,保留3位小數輸出這個浮點數。輸入:只有一行,ー個單精度浮點數。輸出:也只有一行,讀入的單精度浮點數。樣例輸入:12.34521樣例輸出:12.345.輸出保留12位小數的浮點數[1.1編程基礎之輸入輸出05】讀入一個雙精度浮點數,保留12位小數,輸出這個浮點數。輸入:只有一行,一個雙精度浮點數。輸出:也只有一行,保留12位小數的浮點數。樣例輸入:3.1415926535798932樣例輸出:3.141592653580.空格分隔輸出【1.1編程基礎之輸入輸出06】讀入ー個字符,ー個整數,一個單精度浮點數,ー個雙精度浮點數,然后按順序輸出它們,并且要求在他們之間用ー個空格分隔。輸出浮點數時保留6位小數。輸入:第一行是ー個字符;第二行是ー個整數;第三行是ー個單精度浮點數;第四行是ー個雙精度浮點數。輸出:輸出字符、整數、單精度浮點數和雙精度浮點數,之間用空格分隔。樣例輸入: 樣例輸出:aa122.3000003.200000122.33.2.輸出浮點數【1.1編程基礎之輸入輸出07】讀入一個雙精度浮點數,分別按輸出格式"%f';'%「保留5位小數:%e”和“%g”的形式輸出這個整數,每次在單獨一行上輸出。輸入:ー個雙精度浮點數。輸出:第一行是按“%f’輸出的雙精度浮點數;第二行是按“%「保留5位小數輸出的雙精度浮點數;第三行是按“%e”輸出的雙精度浮點數;第四行是按“%g”輸出的雙精度浮點數。樣例輸入:12.3456789樣例輸出:12.34567912.345681.234568e+00112.3457.字符菱形[1.1編程基礎之輸入輸出09】給定一個字符,用它構造ー個對角線長5個字符,傾斜放置的菱形。輸入:輸入只有一行,包含一個字符。輸出:該字符構成的菱形。樣例輸入:樣例輸出:*★******★★★*第六節順序結構實例:我們已經學習了數據輸入輸出、賦值語句以及基本的數據類型。下面舉ー些實例,通過閱讀和模仿這些程序,讓選手逐步熟悉程序的編寫和鞏固知識點,為以后各章的學習打好基礎。例2.13輸入ー個三位數,要求把這個數的百位數與個位數對調,輸出對調后的數。【分析】先求出自然數的個位、十位、百位,然后個位與百位對調。程序如下:#include<iostream>usingnamespacestd;intmain(){inta,b,c,m,n;cin?m; 〃輸入ー個三位數a=m/100; 〃百位數〃十位數b=(m/10)%10;〃十位數〃個位數c=m%10;〃個位數n=c*100+b*10+a; 〃重新組合對調后的數cout?"n="?n?endl; 〃輸出結果}運行結果:輸入:234 輸出:n=432例2.14已知某班有男同學x位,女同學y位,x位男生平均分是87分,y位女生的平均分是85,問全體同學平均分是多少分?【分析】男女生的人數需要用戶輸入,然后根據題意(x*87+y*85)/(x+y)求出全體同學的平均分。程序如下:#include<iostream>usingnamespacestd;intmain()(intx,y;cin?x?yi 〃輸入男女人數cout?float(x*87+y*85)/(x+y)?endl; 〃數據類型強制轉換,按實數格式輸出,4位小數
例2.15歌手大獎賽上6名評委給一位參賽者打分,6個人打分的平均分為9.6分;如果去掉一個最高分,這名參賽者的平均分為9.4分;如果去掉一個最低分,這名參賽者的平均分為9.8分;如果去掉ー個最高分和一個最低分,這名參賽者的平均是多少?【分析】首先求出6名評委的總分,然后根據去掉最高分的總分和最低分的總分,求出最高分的分值和最低分的分值,最后總分減去最高分和最低分除以4即是答案。程序如下:#include<cstdio>intmain()floathigh,low,sc_all,sc_high,scjow,ans;sc_all=6*9,6;〃求6名評委的總分sc_all=6*9,6;sc_high=5*9.4;sc_low=5*9.8;sc_high=5*9.4;sc_low=5*9.8;high=sc_all-sc_high;low=sc_all-sc_low;ans=(sc_all-high-low)/4;printf("%5.2f\n",ans);位小數〃求去掉最高分后的總分〃求去掉最低分后的總分〃求最高分〃求最低分〃求平均分〃%5.2f按實數格式輸出,保留2〃運行結果:9.60例2.16傳說古代的敘拉古國王海倫二世發現的公式,利用三角形的三條邊長來求取三角形面積。已知aABC中的三邊長分別為a,b,c,求aABC的面積。(提示:海倫公式,其中p=(a+b+c)/2)【分析】公式中p是三角形周長的一半,求出p后直接代入海倫公式中求得面積。#include<cstdio><stdio.h>求得面積。#include<cstdio><stdio.h>庫#include<math.h>cmathintmain(){floata,b,c,p,s;scanf("%f%f%f',&a,&b,&c);p=(a+b+c)/2;s=sqrt(p*(p-a)*(p-b)*(p-c));printf("%0.3f\n",s);留3位小數)//DevC++可調用<iostream>和〃在DevC++中可調用數學函數庫〃輸入三角形的三邊〃求出p的值〃根據p求面面積,sqrt是開方函數〃輸出面積,0.3f按實際位數輸出,保運行結果:輸入:345輸出:6.000.計算浮點數相除的余【1.3編程基礎之算術表達式與順序執行11】計算兩個雙精度浮點數a和b的相除的余數,a和b都是雙精度浮點數。這里余數(r)的定義是:a=k*b+r,其中k是整數,0<=r<bo輸入:輸入僅一行,包括兩個雙精度浮點數a和b。輸出:輸出也僅一行,a-b的余數樣例輸入:73.2630.9973樣例輸出:0.4601.計算球的體積[1.3編程基礎之算術表達式與順序執行12】對于半徑為r的球,其體積的計算公式為V=4/3*TTr3,這里取tt=3.14o現給定r,即球半徑,類型為double,求球的體積V,保留到小數點后2位。輸入:輸入為ー個不超過100的非負實數,即球半徑,類型為doubleo輸出:輸出一個實數,即球的體積,保留到小數點后2位。樣例輸入:4樣例輸出:267.95.反向輸出一個三位數[1.3編程基礎之算術表達式與順序執行13]將一個三位數反向輸出,例如輸入358,反向輸出853〇輸入:一個三位數no輸出:反向輸出n0樣例輸入:100樣例輸出:001.大象喝水查[1.3編程基礎之算術表達式與順序執行14]ー只大象口渴了,要喝20升水才能解渴,但現在只有一個深h厘米,底面半徑為r厘米的小圓桶(h和r都是整數)。問大象至少要喝多少桶水オ會解渴。輸入:輸入有一行:包行兩個整數,以ー個空格分開,分別表示小圓桶的深h和底面半徑r,單位都是厘米。輸出:輸出一行,包含ー個整數,表示大象至少要喝水的桶數。樣例輸入:2311樣例輸出:3.計算線段長度[1.3編程基礎之算術表達式與順序執行16】已知線段的兩個端點的坐標A(Xa,Ya),B(Xb,Yb),求線段AB的長度,保留到小數點后3位。輸入:第一行是兩個實數Xa,Ya,即A的坐標。第二行是兩個實數Xb,Yb,即B的坐標。輸入中所有實數的絕對值均不超過WOOOo輸出:ー個實數,即線段AB的長度,保留到小數點后3位。樣例輸入:12樣例輸出:1.414.計算三角形面積[1.3編程基礎之算術表達式與順序執行18】平面上有一個三角形,它的三個頂點坐標分別為(x1,y1),(x2,y2),(x3,y3),那么請問這個三角形的面積是多少,精確到小數點后兩位。輸入:輸入僅一行,包括6個單精度浮點數,分別對應x1,y1,x2,y2,x3,y3。輸出:輸出也是一行,輸出三角形的面積,精確到小數點后兩位。樣例輸入:004003樣例輸出:6.00.A*B問題[1.3編程基礎之算術表達式與順序執行19】輸入兩個正整數A和B,求A*B的值。注意乘積的范圍和數據類型的選擇。輸入:一行,包含兩個正整數A和B,中間用單個空格隔開。1<=A,B<=50000o輸出:ー個整數,即A*B的值。樣例輸入:34樣例輸出:12.計算2的幕[1.3編程基礎之算術表達式與順序執行20】給定非負整數n,求2,的值,即2的n次方。輸入:一個整數n。0<=n<31o輸出:一個整數,即2的n次方。樣例輸入:3樣例輸出:8.蘋果和蟲子[1.3編程基礎之算術表達式與順序執行15】你買了一箱n個蘋果,很不幸的是買完時箱子里混進了一條蟲子。蟲子每x小時能吃掉ー個蘋果,假設蟲子在吃完一個蘋果之前不會吃另ー個,那么經過y小時你還有多少個完整的蘋果?輸入:輸入僅一行,包括n,x和y(均為整數)。輸出:輸出也僅一行,剩下的蘋果個數樣例輸入:1049樣例輸出:7.求三角形面積[1.3編程基礎之算術表達式與順序執行17】給定三條線段的長度,判斷這三條線段是否能夠構成三角形。如果能夠構成,則計算其面積。輸入:輸入只有一行,包含三個浮點數,分別表示三角形三邊的邊長,數與數之間以一個空格分開。輸出:對于可以構成三角形的情況,輸出三角形的面積,保留4位小數。對于不能構成三角形的情況,輸出“DataError”。樣例輸入:345樣例輸出:6.0000第三章程序的控制結構程序由若干條語句組成,各語句按照順序一條一條地執行,這種順序結構是簡潔的。但在現實世界中,在解決問題的過程中,不可避免地遇到需要進行選擇、或需要循環工作的情況。這時,程序執行的順序需要發生變化,而非從前向后逐一執行。因此,程序中除了順序結構以外,通常還有選擇結構、循環結構以及轉移機制。C++為了支持這些控制結構,提供了豐富、靈活的控制語句。從結構化程序設計的觀點看,所有程序都可用3種控制結構即順序結構、選擇結構、和循環結構實現。C++在默認的情況下采取順序結構,除非特別指明,計算機總是按語句順序一條一條地執行。為使程序更清晰、更易調試與修改,并且不容易出錯,結構化編程要盡量少用或不用goto等跳轉語句。選擇類語句包括if語句和sw讓ch語句,用它們來解決實際應用中按不同的情況進行不同處理的問題。如根據學生的成績,對學生做出不同的等第評價。if選擇結構稱為單分支選擇結構,選擇或忽略一個分支的操作。if/else選擇結構稱為雙分支選擇結構,在兩個不同分支中選擇。switch選擇結構稱為多分支(或多項)選擇結構,以多種不同的情況選擇多個不同的操作。循環類語句包括for循環語句、while循環語句和do循環語句三種,用它們來解決實際應用中需要重復處理的問題。如當統計全班同學總分時,就需要重復地做加法,依次把每個人的分數累加起來if、else、switch,while,do和for等都是C++關鍵字。這些關鍵字是該語言保留的,用于實現C++控制結構的不同特性。關鍵字不能作為變量名等ー些標識符。注意,將關鍵字while的拼寫變為“While”是個語法錯誤,因為C++是區分大65小寫的語言。while、if和else等所有C++保留關鍵字只能包含小寫字母。C++提供三種選擇結構,即if選擇結構、if-else選擇結構和switch選擇結構。ー、if語句(單分支結構)格式1:if(條件表達式)語句1;功能:如果條件表達式的值為真,即條件成立,語句1將被執行。否則,語句1將被忽略(不被執行),程序將按順序從整個選擇結構之后的下一條語句繼續執行。執行流程如圖3-1所示說明:格式中的“條件表達式”必須用圓括號括起來。程序設計風格提示:從語法上來講,整個if語句可以寫在一行。如果條件表達式和語句都非常制單,那么整個語句可以寫在一行;否則,最好在條件表達式后換行,而且語句部分要相對if縮逬兩格。例3.1讀入ー個整數a,如果a為偶數在屏幕上輸出yes#include<iostream>usingnamespacestd;intmain()inta;cin?a;if(a%2==0)cout?',yesM;return0;)注意:關系運算符==用來表達該符號的左右兩邊是否相等,不要寫成賦值號=。試ー試若題目改為“讀入ー個整數a,如果a為奇數在屏幕上輸出n。”該如何修改程序?例3.2讀入ー個數,若這個數大于1并且小于100.則輸出yes#include<iostream>usingnamespacestd;intmain()(inta;cin?a;if((a>1)&&(a<100))cout?nyesM;return0;)注意:此程序中的條件表達式為(a>1)&&(a<100)I根據要 求“條件表達式”必須用圓括號括起來,否則編譯會出錯。格式2:if(條件表達式)(語句1;語句2;)若條件成立時,要執行的操作由多個句子構成,我們必須把這些句子括在ー對花括號{}內,我們稱這種形式為語句塊或復合語句。程序設計風格提示:書寫語句塊(也稱為復合語句)時,左右花括號要對齊,組成語句塊的各語句要相對花括號縮進ー層并對齊。例3.3輸入三個整數,按從大到小的順序輸出。【分析
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論