C語言基礎複習筆記第四課——順序結構、C語句(說明、表達式、函數調用、空語句、控制語句、複合語句)、賦值運算符、類型轉換、常見格式說明符、格式輸出函數printf函數、格式輸入scanf函數

本着儘可能全跟簡單的原則,總結了一些知識點,希望對大家有用。

一、C語句分類

C語句以分號爲結束標誌。
在這裏插入圖片描述

1. 說明語句:用於定義變量、聲明函數原型的語句。

例如: int a,b;

2. 表達式語句:即表達式之後加分號。

例如: a=3;(賦值語句)、i++;

3. 函數調用語句:即函數調用之後加分號。

例如: printf(“Hello!”);

4. 空語句:即只有一個分號。(這個一般用不到)

5. 控制語句:是用於控制程序執行流程的語句。(學習重點)

例如: if-else、 while等 。

6. 複合語句:是由一對花括號括起來的一組語句。

例如:{t=a; a=b; b=t;}(典型的藉助中間變量交換)
注意:複合語句在語法上視爲一條語句。
複合語句你就可以理解爲

要完成對a賦值的功能
int a=3;
複合語句
{
int a;
a=3;
}
因爲C語言是順序執行語句
一般分號就是語句結束
上面的可能int a結束以後就會因爲某些原因
後面的a=3沒有機會執行
爲了避免這種情況
纔出現了複合語句
t=a;
 a=b;
  b=t;
這三條分開的話很明顯是三條語句
可能由於某些原因
只執行完t=a,後面語句的就沒機會了
{t=a; a=b; b=t;}
就是在意義上{}是一條語句
然後在這一條大語句裏面執行一堆小語句
複合語句用的最多的一個地方就是在一些語句中
如選擇和循環語句,ifforwhile中
本來只能後面跟隨一條語句
利用複合語句可以達到多條語句變成一條語句的效果。

拿例題加深理解一下吧
輸入三個整數,按照由小到大的順序輸出,最後換行。
輸入格式:
輸入三個整數,中間用空格分隔。
輸出格式:
輸出三個整數,中間用英文逗號,分隔,最後換行。

#include<stdio.h>
int main()
{
    int a,b,c,t;
    scanf("%d%d%d",&a,&b,&c);
    if(a>b){t=a; a=b; b=t;}
    if(a>c){t=a; a=c; c=t;}
    if(b>c){t=b; b=c; c=t; }
    printf("%d,%d,%d\n",a,b,c);
    return 0;
}

二、賦值運算符:=

格式:變量=表達式
功能:求出表達式的值,並存入左側變量中。(注意順序)
注意點:

  1. 賦值表達式的值就是左側變量的值。
b=3;
printf("%d" ,a=b+l);
結果就是4
這裏呢%d所指的就是a=b+1(這個式子)的值
計算一下
b+1=3+1=4
a=4
  1. 賦值運算符右側的表達式也可以是賦值表達式,賦值運算符具有右結合性。
    最熟悉的
int a,b,c;
a=b=c=1;
因爲右結合性
所以先進行c=1;
再b=c;
再a=b;
這就是可以連續賦值的原理
  1. 賦值表達式加分號(屬於表達式語句)。
    例如:
    a=a+1 賦值表達式
    a=a+1 ; 賦值語句
  2. 在定義變量的同時,給變量賦值,稱爲變量的初始化。
    例如:
    int a=3;
    相當於
    int a;
    a=3;
  3. 錯誤用法
    int a=b=c=1;
    原因就是b,c未定義就使用
    所以請看第二條,應該先定義了
    在進行賦值
    藉助賦值運算符的右結合性實現連續賦值

三、類型轉換

在C語言中若賦值運算符兩側類型不一致,則以左側變量的類型爲準對右邊的進行類型轉換。

  1. 實數賦給整型(字符型)變量時,將會截斷取整。
int a;
b=1.234;
a=b;
結果:a=1

在這裏插入圖片描述

  1. 整數(字符常量)賦給實型變量時,將會轉換爲 實數格式並存入到實型變量中。
 float a;
 a=1;
 結果a=1.000000
 這裏我記得double還是float來着
 可能會有改變數字的現象
 就是把你輸入的數改成近似值
 很偶然的情況碰到過
 具體的也記不太清了 

在這裏插入圖片描述
3. 當整型數據賦給類型不同但內存位數相同的整型變量時,將會按該數據的內部形式原樣傳送。(這條看着沒啥用處。。。。)
4. 若兩種類型的數據之間可以直接相互賦值,則稱之爲賦值兼容。
例如整型、實型及字符型之間是賦值兼容的。(ASCII碼錶類型轉換啊啥的題目會有)
例題:
從鍵盤輸入一個字符,編程序輸出該字符的ASCII碼。
輸入格式:
鍵盤上輸入任意一個西文字符。
輸出格式:
輸出該該字符的十進制ASCII碼,並換行。

#include <stdio.h>
int main()
{
    char a;
    int b;
    scanf("%c",&a);
    b=(int)a;
    printf("%c的ASCII碼爲%d\n",a,b);
    return 0;
}

四、格式輸出函數printf函數

  1. C語言中輸入輸出均由庫函數實現。(常用printf、getchar、putchar、scanf、puts等等)
    在C程序中調用庫函數時,要用include命令包含相應的頭文件。
    如#include <stdio.h>或#include “stdio.h” (這兩種格式都OK)
  2. printf(格式控制字符串,輸出項表)
    其中的輸出項表是若干個要輸出的數據項(可以是常量、變量或表達式)
    格式控制字符串則用於規定輸出項的輸出格式。
    就是後面的按照前面限定的格式輸出
#include <stdio.h>
int main()
{
int a=100;
float x=1.234 ;
printf("a=%d,x=%f\n",a,x);
return 0;
}

在這裏插入圖片描述格式控制串中的字符分爲兩類:
格式說明
由“%”和格式說明字符組成,如%d、%f等,用於規定與之對應的數據項的
輸出格式。
如上例中的%d對應於變量a, %f對應於變量X。
類型搞錯了的話,在輸出的時候就可能出現錯誤,或許不會報錯,結果出問題,這個排查的時候也不好看出來

  1. 普通字符是格式說明以外的字符,普通字符將原樣輸出。
    如上例中的“a=”、“,”、“x=”、“\n”等都是普通字符。
    故上例的運行結果爲:a=100,x=1.234000

五、常見格式說明符

  1. d(或i)格式符
    用於輸出有符號十進制整數。
    %d ( 或%i)
    按實際位數輸出有符號十進制整數。
    %ld ( 或%li)
    按實際位數輸出有符號十進制長整數。
    %hd (或%hi)
    按實際位數輸出有符號十進制短整數。
    %md、%mld、%mhd
    按指定位數輸出有符號十進制整數。
    其中的m爲正整數,用於指定輸出位數。

當你限定長度以後,如果位數不足,那麼會在左邊補空格
在這裏插入圖片描述
當實際位數大的時候,指定的位數就不起作用了,按照實際位數輸出(避免數據丟失)。
當指定位數小於實際位數時,將按實際位數輸出避免數據丟失,指定位數不起作用。
如果指定位數大於實際位數時,則在輸出的數據左側用空格補齊不足的位數。

  1. f格式符
    用於以十進制小數形式輸出實數。
    包括以下幾種用法:
    %f
    用於輸出float型或double型數據。
    整數部分按實際長度輸出,並固定輸出6位小數(可以觀察一下以前的)
    %m.nf
    其中的m、n均爲正整數。m指定輸出實數的總位數,n指定小數位數。
    規則同上:
    當指定總位數小於實際位數時,將按實際位數輸出,指定的總位數不起作用;
    如果指定位數大於實際位數時,則在輸出的數據左側用空格補齊不足的位數。從而避免造成整數部分的有效數據丟失。
  2. c格式符
    用於輸出字符型數據
  3. printf函數輸出字符串的
    格式字符是 “%s"。
    不過在輸出字符串常量時,也可以不使用格式說明“%s",而直接輸出字符串常量。
printf ("%s ","How are you?\n") ;
printf ("How are you?\n") ;
  1. 神圖
    在這裏插入圖片描述

六、格式輸入scanf函數(類比printf函數,兩者差別不大)

  1. scanf(格式控制字符串,變量地址表)
    例如:
    scanf( “%d%d” ,&a,&b);
    其中的格式控制字符串,用於規定變量的輸入格式。
    變量地址表,是若干個存儲數據的變量的地址。
    &爲取地址運算符。
  2. 神圖
    在這裏插入圖片描述
  3. d (或i) 格式符
    用於輸入有符號十進制整數。
    包括%d、%ld、 %hd (或%i、%li、 %hi),分別用於輸入有符號十進制整數、長整數、短整數。
int a;
scanf("%d",&a);
printf( "%d\n",a);
  1. f格式符
    用於以十進制小數形式輸入實數。
    包括以下幾種用法:
    %f
    用於輸入float型實數。
    %lf
    用於輸入double型實數。
    這個地方是個與printf函數區別的地方
float x;
double y;
scanf("%f",&x);
scanf("%1f",&y);
printf("%f\n",x);
printf( "%f\n",y);

輸入double型數據時,必須使用“%lf”

  1. c格式符
    用於輸入字符型數據。
char ch;
scanf("%c",&ch);
printf("ch=%c\n", ch);

注意事項:

  1. 可以指定輸入數據所佔的寬度,但是不能指定輸入數據的精度。
float x,y;
scanf( "%6f",&x);   //正確
scanf( "%6.2f"&y);    //錯誤

一般來說用不到這種限定輸入寬度的形式,知道是個啥意思就OK了,選擇填空可能會考到。

  1. 格式控制字符串中的普通字符,必須原樣輸入。
1int x,y;
scanf("%d%d",&x,&y);
無內容的話兩個數之間空格啊、tab啊、回車啊都可以作爲間隔

BUT
(2scanf("%d,%d",&x, &y);
就必須
1,2
這種格式輸入,還要注意中英文符號

(3scanf("x=%d,y=%d",&x,&y);
輸入時候
x=1,y=2
這屬實是麻煩人

(4)

scanf("%d %d",&x,&y);
不建議在%d %d之間加空格,何必去找那個麻煩呢
  1. 用%c格式符輸入字符型數據時,每個字符之前不需要分隔符。
int a;
char b,c;
scanf("%d%c%c",&a,&b,&c);
輸入的時候
1ab
結果a=1,b=b;c=c
10000yz
結果a=10000,b=y,c=z
這樣子輸入就OK
輸入的時候不要隨便加空格,空格會被字符b取到
1 ab
結果a=1,b= ,c=a;
填空選擇可能會考這種細節吧,我也不太清楚。
  1. 在scanf函數的格式控制字符串的末尾,不能添加"\n",否則運行時不能正常退出。(跟空格那個差不多,別給自己挖坑很重要)
scanf("%d%d\n",&x,&y);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章