第3章最簡單的C程序設計_第1頁
第3章最簡單的C程序設計_第2頁
第3章最簡單的C程序設計_第3頁
第3章最簡單的C程序設計_第4頁
第3章最簡單的C程序設計_第5頁
已閱讀5頁,還剩95頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

要編寫C程序,需要兩個方面的知識:一是根據所解問題的要求,設計出解題的具體步驟,這一步驟稱為設計算法二是用C語言寫出程序,以便計算機能正確地執行第3章最簡單的C程序設計

——順序程序設計

3.1算法是程序的靈魂3.2程序的三種基本結構3.3C語句綜述3.4賦值表達式和賦值語句3.5數據輸入輸出的概念3.6字符數據的輸入輸出3.7簡單的格式輸入與輸出3.8順序結構程序設計舉例3.9提高部分3.1算法是程序的靈魂3.1.1算法的概念3.1.2怎樣表示算法P483.1.1算法的概念一個程序包括以下兩個方面的內容:對數據的描述。在程序中要指定數據的類型和數據的組織形式,即數據結構對操作的描述。即操作步驟,也就是算法P48數據是操作的對象操作的目的是對數據進行加工處理,以得到期望的結果著名計算機科學家沃思(NikiklausWirth)提出一個公式:

算法

+數據結構=程序3.1.1算法的概念P48一個程序除了算法和數據結構這主要要素外,還應當采用結構化程序設計方法進行程序設計,并且用某一種計算機語言表示算法、數據結構、程序設計方法和語言工具是一個程序設計人員應具備的知識3.1.1算法的概念P48算法是解決“做什么”和“怎么做”的問題程序中的操作語句,是算法的體現不了解算法就談不上程序設計3.1.1算法的概念P483.1.2怎樣表示算法用自然語言表示算法用流程圖表示算法用N-S流程圖表示算法用偽代碼表示算法P50用自然語言表示算法自然語言就是人們日常使用的語言,可以是漢語、英語,或其他語言用自然語言表示通俗易懂,但文字冗長,容易出現歧義性用自然語言描述包含分支和循環的算法,不很方便除了很簡單的問題外,一般不用自然語言用流程圖表示算法流程圖是用一些圖框來表示各種操作用圖形表示算法,直觀形象,易于理解起止框輸入輸出框處理框判斷框流程線連接點注釋框m被2整除是否開始判斷一個數是否偶數的算法輸入m的值輸出m是偶數輸出m不是偶數結束輸出1~10的算法結束n1開始n10輸出n的值nn+1是否用N-S流程圖表示算法N-S流程圖用以下的流程圖符號:ABAB成立不成立pA當p1成立順序結構選擇結構循環結構判斷一個數是否偶數的算法輸出m是偶數輸出m不是偶數是否m能被2整除輸入m輸出1~100的算法輸出n的值n的值10n=1n=n+1用偽代碼表示算法偽代碼是用介于自然語言和計算機語言之間的文字和符號來描述算法用偽代碼寫算法并無固定的、嚴格的語法規則,可以用英文,也可以中英文混用用偽代碼表示算法“輸出x的絕對值”的算法ifxispositivethenprintxelseprint-x若x為正

輸出x否則

輸出-xifx為正printxelseprint-x3.2程序的三種基本結構順序結構。各操作步驟是順序執行的順序結構是最簡單的一種基本結構P53AB3.2程序的三種基本結構選擇結構又稱判斷結構或分支結構根據是否滿足給定的條件而從兩組操作中選擇一種操作P53AB成立p不成立A成立p不成立3.2程序的三種基本結構循環結構。它又稱重復結構在一定條件下反復執行某一部分的操作P53A成立p1不成立A成立p2不成立3.2程序的三種基本結構一個良好的程序,無論多么復雜,都可以由這3種基本結構組成用這三種基本結構構成的程序稱為“結構化程序”P533.3C語句綜述P54C程序源程序文件1源程序文件2源程序文件n…預處理命令數據聲明函數1函數n函數首部函數體數據聲明執行語句…3.3C語句綜述P54C語句分為以下5類:(1)控制語句:if、switch、for、while、do…while、continue、break、return、goto等(2)函數調用語句(3)表達式語句(4)空語句(5)復合語句3.4賦值表達式和賦值語句3.4.1賦值表達式3.4.2賦值過程中的類型轉換3.4.3賦值語句3.4.4變量賦初值P563.4.1賦值表達式賦值運算符“=”是賦值運算符作用是將一個數據賦給一個變量也可以將一個表達式的值賦給一個變量P563.4.1賦值表達式復合的賦值運算符在賦值符“=”之前加上其他運算符,可以構成復合的運算符a+=3

等價于

a=a+3P563.4.1賦值表達式賦值表達式一般形式為:

變量

賦值運算符

表達式對賦值表達式求解的過程:求賦值運算符右側的“表達式”的值賦給賦值運算符左側的變量P563.4.1賦值表達式賦值表達式賦值表達式“a=3*5”的值為15,對表達式求解后,變量a的值和表達式的值都是15“a=(b=5)”和“a=b=5”等價“a=b”和“b=a”含義不同P563.4.2賦值過程中的類型轉換兩側類型一致時,直接賦值兩側類型不一致,但都是數值型或字符型,自動將右側的類型轉換為左側類型后賦值定義變量時要防止數據溢出P593.4.3賦值語句賦值語句是由賦值表達式加上一個分號構成賦值表達式的末尾沒有分號,而賦值語句有分號一個表達式可以包含賦值表達式,但決不能包含賦值語句P603.4.4變量賦初值程序中常需要對一些變量預先設置一個初值設置初值既可以用賦值語句去實現,也可以在定義變量的同時使變量初始化,后者更為方便inta,b,c=5;相當于:inta,b,c;c=5;P603.5數據輸入輸出的概念幾乎每一個C程序都包含輸入輸出輸入輸出是程序中最基本的操作之一所謂輸入輸出是以計算機主機為主體而言的從計算機向輸出設備輸出數據稱為輸出,從輸入設備向計算機輸入數據稱為輸入P613.5數據輸入輸出的概念C語言本身不提供輸入輸出語句輸入和輸出操作是由C函數庫中的函數來實現的printf、scanf、putchar、getchar、puts、gets不是關鍵字在使用系統庫函數時,要在程序中使用預編譯命令“#include”P613.6字符數據的輸入輸出3.6.1用putchar函數輸出一個字符3.6.2用getchar函數輸入一個字符P633.6.1用putchar函數輸出一個字符從計算機向顯示器輸出一個字符putchar函數的一般形式為:putchar(c)例3.1先后輸出幾個字符。P63#include<stdio.h>voidmain(){chara,b,c;a='B',b='O',c='Y';putchar(a);putchar(b);putchar(c);putchar('\n');}向顯示器輸出字符B向顯示器輸出換行符BOY#include<stdio.h>voidmain(){chara,b,c;a='B',b='O',c='Y';putchar(a);putchar(b);putchar(c);putchar('\n');}改為inta=66,b=79,c=89;BOYputchar(’\101’)(輸出字符A)putchar(’\’’)(輸出單撇號字符’)3.6.2用getchar函數輸入一個字符向計算機輸入一個字符getchar函數的一般形式為:getchar()例3.2輸入多個字符。P64#include<stdio.h>voidmain(){chara,b,c;a=getchar();b=getchar();c=getchar();putchar(a);putchar(b);putchar(c);putchar('\n');}輸入一個字符,送給變量aBOY↙BOY

B↙O↙BO

#include<stdio.h>voidmain(){chara,b,c;a=getchar();b=getchar();c=getchar();putchar(a);putchar(b);putchar(c);putchar('\n');}putchar(getchar());#include<stdio.h>voidmain(){chara,b,c;

a=getchar();b=getchar();c=getchar();

putchar(a);putchar(b);putchar(c);putchar('\n');}putchar(getchar());putchar(getchar());#include<stdio.h>voidmain(){chara,b,c;

a=getchar();

b=getchar();c=getchar();

putchar(a);putchar(b);putchar(c);putchar('\n');}putchar(getchar());putchar(getchar());putchar(getchar());#include<stdio.h>voidmain(){chara,b,c;

a=getchar();

b=getchar();

c=getchar();

putchar(a);putchar(b);putchar(c);putchar('\n');}putchar(getchar());putchar(getchar());putchar(getchar());3.7簡單的格式輸入與輸出3.7.1用簡單的printf函數輸出數據3.7.2用簡單的scanf函數輸入數據P663.7.1用簡單的printf函數輸出數據在C程序中用來實現輸出和輸入的,主要是printf函數和scanf函數這兩個函數是格式輸入輸出函數用這兩個函數時,必須指定格式P661.printf函數的一般格式printf(格式控制,輸出表列)例如:printf(”i=%d,c=%c\n”,i,c);格式聲明1.printf函數的一般格式printf(格式控制,輸出表列)例如:printf(”i=%d,c=%c\n”,i,c);普通字符1.printf函數的一般格式printf(格式控制,輸出表列)例如:printf(”i=%d,c=%c\n”,i,c);可以是常量、變量或表達式2.基本的格式字符d格式符。按十進制整型數據的實際長度輸出i格式符。作用與d格式符相同2.基本的格式字符c格式符。用來輸出一個字符charch=’a’;printf(”%c”,ch);輸出字符:a2.基本的格式字符c格式符。用來輸出一個字符例3.3用printf函數輸出字符數據。

#include<stdio.h>voidmain(){charc='a';inti=97;printf("c=%c,c=%d\n",c,c);printf("i=%c,i=%d\n",i,i);}c=a,c=97i=a,i=972.基本的格式字符s格式符。用來輸出一個字符串printf(”%s”,”CHINA”);輸出字符串:CHINA2.基本的格式字符f格式符。用來輸出實數,以小數形式輸出例3.4輸出實數時的有效位數。#include<stdio.h>voidmain(){floata,b;a=111111.111;b=222222.222;printf("%f\n",a+b);}333333.3281252.基本的格式字符f格式符。用來輸出實數,以小數形式輸出例3.5輸出雙精度數時的有效位數。#include<stdio.h>voidmain(){doublea,b;a=11111111.11111111;b=22222222.22222222;printf("%f\n",a+b);}33333333.3333332.基本的格式字符f格式符。用來輸出實數,以小數形式輸出float型數據只能保證6~7位有效數字double型數據能保證15~16位有效數字計算機輸出的數字不都是絕對精確有效的2.基本的格式字符e格式符。指定以指數形式輸出實數VC++給出小數位數為6位指數部分占5列小數點前必須有而且只有1位非零數字printf(”%e”,123.456);

輸出:1.234560

e+0021.scanf函數的一般形式scanf(格式控制,地址表列)含義同printf函數3.7.2用簡單的scanf函數輸入數據P701.scanf函數的一般形式scanf(格式控制,地址表列)可以是變量的地址,或字符串的首地址3.7.2用簡單的scanf函數輸入數據P70例3.6用scanf函數輸入數據。#include<stdio.h>voidmain(){inta,b,c;scanf(“%d%d%d”,&a,&b,&c);printf("a=%d,b=%d,c=%d\n",a,b,c);}3.7.2用簡單的scanf函數輸入數據P70345↙a=3,b=4,c=52.scanf函數中的格式聲明與printf函數中的格式聲明相似以%開始,以一個格式字符結束,中間可以插入附加的字符scanf("a=%db=%dc=%d",&a,&b,&c);3.7.2用簡單的scanf函數輸入數據P70說明scanf(”%d,%d”,a,b);錯scanf(”%d,%d”,&a,&b);對對于scanf("a=%d,b=%d,c=%d",&a,&b,&c);

122436↙

a=12,b=24,c=36↙

a=12b=24c=36↙

錯3.7.2用簡單的scanf函數輸入數據P70說明對于scanf(”%c%c%c”,&c1,&c2,&c3);

abc↙

abc↙

錯對于scanf(”%d%c%f”,&a,&b,&c);若輸入

1234a123o.26↙3.7.2用簡單的scanf函數輸入數據P70說明對于scanf(”%c%c%c”,&c1,&c2,&c3);

abc↙

abc↙

錯對于scanf(”%d%c%f”,&a,&b,&c);若輸入

1234a123o.26↙3.7.2用簡單的scanf函數輸入數據P70說明對于scanf(”%c%c%c”,&c1,&c2,&c3);

abc↙

abc↙

錯對于scanf(”%d%c%f”,&a,&b,&c);若輸入

1234a123o.26↙3.7.2用簡單的scanf函數輸入數據P703.8順序結構程序設計舉例P73

例3.7輸入三角形的三邊長,求三角形面積。解題思路:假設給定的三個邊符合構成三角形的條件找到求三角形面積的公式:

其中s=(a+b+c)/23.8順序結構程序設計舉例P73#include<stdio.h>#include<math.h>voidmain(){doublea,b,c,s,area;scanf("%lf,%lf,%lf",&a,&b,&c);s=(a+b+c)/2.0; area=sqrt(s*(s-a)*(s-b)*(s-c));printf("a=%f\nb=%f\n%f\n",a,b,c);printf("area=%f\n",area);}計算s計算area輸入a、b、c的值#include<stdio.h>#include<math.h>voidmain(){doublea,b,c,s,area;scanf("%lf,%lf,%lf",&a,&b,&c);s=(a+b+c)/2.0; area=sqrt(s*(s-a)*(s-b)*(s-c));printf("a=%f\nb=%f\n%f\n",a,b,c);printf("area=%f\n",area);}數學函數,計算平方根調用數學函數加此行9.89,12.65,8.76↙a=9.890000b=12.65000c=8.760000area=43.165683

例3.8從鍵盤輸入一個大寫字母,要求改用小寫字母輸出。解題思路:關鍵是找到大、小寫字母間的內在聯系小寫字母的ASCII碼=大寫字母的ASCII碼+32#include<stdio.h>voidmain(){charc1,c2;c1=getchar();printf("%c,%d\n",c1,c1);c2=c1+32;printf("%c,%d\n",c2,c2);}將大寫轉小寫A↙A,65a,97#include<stdio.h>voidmain(){printf(“%c”,getchar()+32);printf(“%c”,getchar()+32);printf("%c\n",getchar()+32);}

例:輸入3個大寫字母,輸出相應的3個小寫字母。#include<stdio.h>voidmain(){putchar(getchar()+32);putchar(getchar()+32);putchar(getchar()+32);putchar('\n');}

例:輸入3個大寫字母,輸出相應的3個小寫字母。例3.9求

方程的根。a、b、c由鍵盤輸入

>0解題思路:首先要知道求方程式的根的方法。由數學知識已知:如果

≥0,則一元二次方程有兩個實根:若記#include<stdio.h>#include<math.h>voidmain(){doublea,b,c,disc,x1,x2,p,q;

scanf(“a=%lf,b=%lf,c=%lf",&a,&b,&c);disc=b*b-4*a*c;p=-b/(2*a);q=sqrt(disc)/(2*a);x1=p+q;x2=p-q;

printf("x1=%.2f\nx2=%.2f\n",x1,x2);}程序中調用數學函數sqrt輸入a,b,c的值#include<stdio.h>#include<math.h>voidmain(){doublea,b,c,disc,x1,x2,p,q;

scanf(“a=%lf,b=%lf,c=%lf",&a,&b,&c);disc=b*b-4*a*c;p=-b/(2*a);q=sqrt(disc)/(2*a);x1=p+q;x2=p-q;

printf("x1=%.2f\nx2=%.2f\n",x1,x2);}輸入的是雙精度型實數#include<stdio.h>#include<math.h>voidmain(){doublea,b,c,disc,x1,x2,p,q;

scanf(“a=%lf,b=%lf,c=%lf",&a,&b,&c);disc=b*b-4*a*c;p=-b/(2*a);q=sqrt(disc)/(2*a);x1=p+q;x2=p-q;

printf("x1=%.2f\nx2=%.2f\n",x1,x2);}a=1,b=3,c=2↙x1=-1.00x2=-2.00要求輸入3個實數自動轉成實數后賦給a,b,c#include<stdio.h>#include<math.h>voidmain(){doublea,b,c,disc,x1,x2,p,q;

scanf(“a=%lf,b=%lf,c=%lf",&a,&b,&c);disc=b*b-4*a*c;p=-b/(2*a);q=sqrt(disc)/(2*a);x1=p+q;x2=p-q;

printf("x1=%.2f\nx2=%.2f\n",x1,x2);}小數點后輸出2列a=1,b=3,c=2↙x1=-1.00x2=-2.003.9提高部分3.9.1無符號數據與有符號數據之間的賦值3.9.2較復雜的輸入輸出格式控制3.9.3簡單易用的C++的輸入輸出3.9.4C++用“//”作為注釋的標識P763.9.1無符號數據與有符號數據之間的賦值將有符號整數賦值給長度相同的無符號整型變量:按字節原樣賦值(連原有的符號位也作為數值一起傳送)P76例3.10有符號整數賦值給無符號整型變量,數據會失真。#include<stdio.h>voidmain(){unsigneda;intb;b=-1;a=b;printf("%u\n",a);}1111111111111111ba1111111111111111輸出無符號整數假設占2字節65535將無符號整數賦值給長度相同的有符號整型變量:不要超出有符號整型變量的數值范圍,否則會出錯例3.11無符號整數賦值給有符號整型變量,注意數值范圍。#include<stdio.h>voidmain(){unsigneda;intb;a=65535;b=a;printf("%d\n",b);}1111111111111111ba1111111111111111補碼形式假設占2字節-13.9.2較復雜的輸入輸出格式控制1.輸出數據時的格式控制%md。用來指定輸出數據的寬度,m是指定的寬度,如果數據實際的位數小于m,則左端補以空格,若大于m,按實際位數輸出printf("%4d,%4d",123,12345);P78123,123453.9.2較復雜的輸入輸出格式控制1.輸出數據時的格式控制%ld。對于int型數據占2字節的系統,在輸出長整型數據時要在格式字符d前面加一個英文字母llonga=135790;printf(“%ld",a);printf(“%8ld",a);P781357901357903.9.2較復雜的輸入輸出格式控制1.輸出數據時的格式控制%o。以八進制整數形式輸出。由于是將內存單元中的各位的值(0或1)按八進制形式輸出,因此輸出的數值不帶符號,即將符號位也一起作為八進制數的一部分輸出inta=-1;printf(″%d,%o″,a,a);P78-1,17777711111111111111113.9.2較復雜的輸入輸出格式控制1.輸出數據時的格式控制%x。以十六進制數形式輸出整數。同樣不會出現負的十六進制數inta=-1;printf(″%d,%x″,a,a);P78-1,ffff11111111111111113.9.2較復雜的輸入輸出格式控制1.輸出數據時的格式控制%u。用來輸出無符號型數據,以十進制整數形式輸出一個有符號整數也可用%u格式輸出;反之,一個無符號型數據也可用%d格式輸出按相互賦值的規則處理無符號型數據也可用%o或%x格式輸出P78例3.12無符號數據的輸出。#include<stdio.h>voidmain(){unsigneda=65535;intb=-2;printf("a=%d,%o,%x,%u\n",a,a,a,a);printf("b=%d,%o,%x,%u\n",b,b,b,b);}3.9.2較復雜的輸入輸出格式控制P78在TC2.0下(占2字節)的運行結果為:a=-1,177777,ffff,65535b=-2,177776,fffe,65534

在VC++6.0下(占4字節)的運行結果為:a=65535,177777,ffff,65535b=-2,37777777776,fffffffe,42949672943.9.2較復雜的輸入輸出格式控制%mc。用來指定輸出字符數據的寬度charc=‘a’;printf(“%3c”,c);P78a3.9.2較復雜的輸入輸出格式控制%ms。指定輸出的字符串占m列若串長大于m,則將串全部輸出若串長小于m,則左補空格%-ms。如果串長小于m,則在m列范圍內,字符串向左靠,右補空格。P78例3.13字符串的輸出。#include<stdio.h>voidmain()

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論