1. 程式人生 > >C語言程式設計---3:順序程式設計

C語言程式設計---3:順序程式設計

賦值表示式

賦值運算子按照“自右而左”的結合順序運算。因此

  • a = (b = 5);
  • a = b = c;
  • a = 5 + (c = 6); a = 11
  • a = (b = 4) + (c = 6); a = 10;
  • a = (b = 10)/(c = 2); a = 5;
  • (a = 3*5) = 4*3; 先將15賦給a,然後執行4*3運算,得到12,再把12賦給a。
  • a = 3*5 = 4*3;語法錯誤,因為 3*5 不是左值。

將賦值表示式作為表示式的一種,使賦值操作不僅可以出現在賦值語句中,而且可以以表示式形式出現在其他語句(如輸出語句、迴圈語句等)中,例如:

  • printf(“%d”,a = b);

賦值過程中的型別轉換

#include<stdio.h>
void main()
{
    int a = 23;
    float f = a;            /*會有warning*/
    printf("%f\n",f);
    double d = a;           /*不會有warning*/  
    printf("%lf\n",d);
    d = f;                  /*不會有warning*/
    printf("%lf\n",d);
    d = 123.456789e2;
    f = d;                  /*會有warning*/
printf("%lf\n",f); a = 2.365; /*會有warning*/ printf("%d\n",a); }

結果:

23.000000
23.000000
23.000000
12345.678900
2

將一個佔位元組多的整型資料賦給一個佔位元組少的整型變數或字元變數(例如把一個4位元組的long型資料賦給一個2位元組的short型變數,或將一個2位元組的int型資料賦給1位元組的char型變數),只將其低位元組原封不動地送到該變數(即發生截斷)。

例如:

#include<stdio.h>
void main()
{
    int
i = 289; char c = 'a'; c = i; printf("%d\n",c); }

結果為:!
因為!的ASCII碼為33.

i = 289   0000 0001 0010 0001
             c = 33 0010 0001

如果將一個有符號整數賦給無符號整型變數,或將一個無符號整數賦給有符號整型變數,是按照儲存單元位元組中原樣傳送的。

int a = 3,b = 3,c = 3;      正確
int a = b = c = 3;          錯誤

資料輸入輸出的概念

printf和scanf

printfscanf不是C語言的關鍵字,而只是庫函式的名字。

編輯、編譯、連線、執行一個C語言程式的具體過程如下:  

  1. 編輯源程式,完成之後將源程式以副檔名.c存檔。
  2. 對源程式進行編譯,即將源程式轉換為副檔名為.obj的二進位制程式碼。若源程式有錯,必須予以修改,然後重新編譯。
  3. 對編譯通過的源程式連線,即加入庫函式和其他二進位制程式碼生成可執行程式。連線過程中,可能出現未定義的函式等錯誤,為此,必須修改源程式,重新編譯和連線。
  4. 執行生成的可執行程式碼,若必能得到正確的結果,必須修改源程式,重新編譯和連線。若能得到正確的結果,則整個編輯、編譯、連線、執行過程順利結束。

C語言源程式經過編譯得到目標檔案(obj檔案),然後與各軟體公司提供的系統函式庫(已被編譯成obj檔案)相連線,生成一個可執行的目標程式(exe檔案)。如果源程式中有printf函式,在編譯時並不把它翻譯成目標指令,而是在連線階段與系統函式庫相連線後,在執行階段呼叫函式庫中的printf函式。

不把輸入輸出作為C語句的目的,是使C語言編譯系統簡單,因為將語句翻譯成二進位制的指令是在編譯階段完成的,沒有輸入輸出語句就可以避免在編譯階段處理與硬體有關的問題,可以使編譯系統簡化,而且通用性強,可移植性好,在各種型號的計算機和不同的編譯環境下都能適用,便於在各種計算機上實現。

C語言函式庫有一批“標準輸入輸出函式”:

putchar (輸出字元)
getchar (輸入字元)
printf  (格式輸出)
scanf   (格式輸入)
puts    (輸出字串)
gets    (輸入字串)

include

#include <stdio.h>,編譯系統在程式編譯時從存放C庫函式標頭檔案的子目錄中去找所要包含的檔案(如stdio.h),這稱為標準方式。
#include “stdio.h”,在編譯時,系統現在使用者當前目錄中尋找要包含的檔案,若找不到,再按標準方式查詢。如果檔案不在當前目錄中,可以 #include “C:\temp\filel.h”

字元資料的輸入輸出

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

結果:
輸入 boy 輸出boy
輸入 b+enter+o 輸出b換行o enter為換行

如果程式改成這樣

#include<stdio.h>
void main()
{
    putchar(getchar());
    putchar(getchar());
    putchar(getchar());
    putchar('\n');
}

結果:
輸入 boy 輸出boy
輸入 b+enter 輸出b+換行 輸入o+enter 輸出b

簡單的格式輸入和輸出

%f:用來輸出實數(包括單、雙精度),以小數形式輸出,可以不指定輸出資料的長度,由系統自動指定。系統的處理方法一般是:實數中的整數部分全部輸出,小數部分輸出6位。

#include<stdio.h>
void main()
{
    float a,b;
    a = 111111.111;
    b = 222222.222;
    printf("%f\n",a+b);
}

結果:
333333.328125
解釋:

                                    小數點
111111.111      1 1011 0010 0000 0111 . 0001 11
222222.222     11 0110 0100 0000 1110 . 0011 1
相加之和          101 0001 0110 0001 0101 . 0101 01
兩個float轉為double,在相加

想輸出%,需要用連續兩個%表示。

#include<stdio.h>
void main()
{
    double a,b;
    a = 111111.111;
    b = 222222.222;
    printf("%f\n",a+b);
    printf("%e",123.456);
}

結果:
333333.333333
1.234560e+002

#include<stdio.h>
void main()
{
    int a,b,c;
    scanf("%d   %d   %d",&a,&b,&c);
    printf("a=%d,b=%d,c=%d\n",a,b,c);
    scanf("%d ,%d ,%d",&d,&e,&f);
    char g,h,i;
    scanf("%c%c%c",&g,&h,&i);
    printf("g=%c,h=%c,i=%c\n",g,h,i);
}

結果:

12      33      42
a=12,b=33,c=42
2,3,4
a=2,b=3,c=4
qw
g=
,h=q,i=w
  • “&a”中的“&”是地址運算子。
  • scanf輸入的時候,兩個資料之間可以用多個空格、回車、tab
  • scanf輸入的時候,兩個資料之間不能用逗號(,)
  • 如果在“格式控制字串”中除了格式宣告以外還有其他字元,則輸入字元時在對應位置應輸入與這些字元相同的字元。
  • 在用“%c”格式宣告輸入字元時,空格字元和轉義字元都作為有效字元輸入,注意enter
  • -

相關推薦

C語言程式設計---3順序程式設計

賦值表示式 賦值運算子按照“自右而左”的結合順序運算。因此 a = (b = 5); a = b = c; a = 5 + (c = 6); a = 11 a = (b = 4) + (c = 6); a = 10; a = (b = 10)/(c =

c++網路程式設計3UDP程式設計

一.概念:         UDP是傳輸層中面向無連線的協議,所以UDP丟包後是不會重傳的,而且他在程式設計上服務端和客戶端是沒有區別的,有的只是“虛擬上”的服務端和客戶端,他在程式設計的實現上也很簡單,不像TCP那麼複雜。 二.UDP終端的程式設計       由於UD

程式設計3僅用遞迴函式和棧操作逆序一個棧

<?php header("content-type:text/html;charset=utf-8"); /* * 僅用遞迴函式和棧操作逆序一個棧 P8 */ function getAndRemoveLastElement(SplStack $stack){ if($stack-

併發程式設計3執行緒池的使用與執行流程

併發程式設計系列的文章醞釀好久了,但由於沒有時間和毅力去寫那麼多練習 demo,很多文章寫了一半就停止了。 在寫某一系列的過程中總有其他想寫的內容蹦出來,

C語言異或運算在程式設計中的妙用

異或運算子^也稱XOR運算子。它的規則是若參加運算的兩個二進位同號,則結果為0(假);異號則為1(真)。即0 ^ 0=0,0 ^ 1=1,1 ^ 1=0。 性質: (1) 一個數與1異或會翻轉 (2) 一個數與0異或保持不變 (3) 一個數異或它本身等於0

中國大學MOOC課程《程式設計入門——C語言》 第5周程式設計練習

1 素數和(5分) 題目內容: 我們認為2是第一個素數,3是第二個素數,5是第三個素數,依次類推。 現在,給定兩個整數n和m,0<n<=m<=200,你的程式要計算第n個素數到第m個素數之間所有的素數的和,包括第n個素數和第m個素數。 輸入格式:

C語言與VT100控制碼程式設計

C語言與VT100控制碼程式設計 宣告: 1. 如果您打算閱讀本文,希望您已經瞭解過C語言的基本語法,本文不對C語言的基本語法進行說明,因為那些東西幾乎唾手可得; 2. 本文在vim中編輯,請儘量是用vim進行閱讀,因為有

MFC筆記(四)——多執行緒程式設計3用_beginthreadex()來代替使用CreateThread()

        CreateThread()函式是Windows提供的API介面,在C/C++語言另有一個建立執行緒的函式_beginthreadex(),在很多書上(包括《Windows核心程式設計》)提到過儘量使用_begin

C語言作業2-迴圈結構程式設計-2九九乘法表

C語言作業2-迴圈結構程式設計-2九九乘法表 問題描述: 編寫一個程式,列印“九九乘法表“ 程式碼實現: #include<stdio.h> #include<stdlib.h> int main() { int i = 1; int j = 1;

C語言作業2-迴圈結構程式設計-1利用三種迴圈求階乘累加和

C語言作業2-迴圈結構程式設計-1利用三種迴圈求階乘累加和 問題描述: 利用while , do while, 和for迴圈分別編寫求 ∑ n! (即1!+2!+3!+…+25!)的程式 程式碼實現: #include<stdio.h> #include<s

面向切面程式設計(3)AOP實現機制

1 AOP各種的實現   AOP就是面向切面程式設計,我們可以從幾個層面來實現AOP,如下圖。 圖1 AOP實現的不同層面   在編譯器修改原始碼,在執行期位元組碼載入前修改位元組碼或位元組碼載入後動態建立代理類的位元組碼,以下是各種實現機制的比較。  類別

【LeetCode & 劍指offer刷題】熟悉OJ平臺3OJ程式設計例項

【LeetCode & 劍指offer 刷題筆記】目錄(持續更新中...)   OJ程式設計例項 給定一棵二叉樹的前序(根、左、右)和中序(左、根、右)的列印結果,輸出此二叉樹按層(從左往右)列印結果。 例如一棵二叉樹前序:1 2 4 5 3;

C語言中有關字串的程式設計

(1)字串拷貝strcpy 特點:只能拷貝字串,遇到\0停止拷貝 char* MyStrcpy(char* dst,const char* src) { assert(dst != NU

程式設計入門——C語言 翁愷 期末考試程式設計

題目內容:分數可以表示為“分子/分母”的形式。編寫一個程式,要求使用者輸入一個分數,然後將其約分為最簡分式。最簡分式是指分子和分母不具有可以約分的成分了。如6/12可以被約分為1/2。當分子大於分母時,不需要表達為整數又分數的形式,即11/8還是11/8;而當分子分母相等時,仍然表達為1/1的分數形式。輸入格

c語言libcurl網路http操作程式設計庫使用

http://www.cnblogs.com/moodlxs/archive/2012/10/15/2724318.html 目錄索引: 一、LibCurl基本程式設計框架 二、一些基本的函式 三、curl_easy_setopt函式部分選項介紹 四、curl_e

大一上C語言期末複習 輸入三角形三條邊長,求周長和麵積。注意要保證3邊能構成三角形

題目: 輸入三角形三條邊長,求周長和麵積。注意要保證3邊能構成三角形 計算三角形面積的海倫公式:S=√[p(p-a)(p-b)(p-c)]     (其中p為半周長)  #include <stdio.h> #include <math.h> #i

大一上C語言期末複習輸入一個正整數,將其分解為質因數,如90=2*3*3*5

//輸入一個正整數,將其分解為質因數,如90=2*3*3*5 #include <stdio.h> int main() { int n,i; while(scanf("%d",&n)) { if(n==1) { printf("n=

(C語言列印圖形題4)程式設計,輸入n,輸出如下例(n=4)所示的高為n的倒立等腰三角形。

程式設計,輸入n,輸出如下例(n=4)所示的高為n的等腰三角形。          *******            *****             ***              *  

手動搭建I/O網路通訊框架3NIO程式設計模型,升級改造聊天室

第一章:手動搭建I/O網路通訊框架1:Socket和ServerSocket入門實戰,實現單聊 第二章:手動搭建I/O網路通訊框架2:BIO程式設計模型實現群聊     在第二章中用BIO程式設計模型,簡單的實現了一個聊天室。但是其最大的問題在解釋BIO時就已經說了:ServerSocket接收請求

從執行上下文角度重新理解.NET(Core)的多執行緒程式設計[3]安全上下文

在前兩篇文章(《基於呼叫鏈的”引數”傳遞》和《同步上下文》)中,我們先後介紹了CallContext(IllogicalCallContext和LogicalCallContext)、AsyncLocal<T>和SynchronizationContext,它們都是執行緒執行上下文的一部分。本篇介