天天看點

【C】順序程式設計

文章目錄

    • 語句分類
    • 函數調用語句
      • putchar和getchar函數
      • printf函數
      • scanf函數
      • 例題
        • 例一
        • 例二

從程式流程的角度來看,程式可以分為三種基本結構,即順序結構、分支結構、循環結構。這三種基本結構可以組成所有的各種複架程式。C語言提供了多種語句來實作這些程式結構。

語句分類

C程式的執行部分是由語句組成的。程式的功能也是由執行語句實作的,C語句可以分為下面五類:

  • 表達式語句
    • 表達式語句由表達式加上分号“;”組成
    • 一般形式:表達式;
    • 執行表達式語句就是計算表達式的值
    • 列如:i++;
  • 函數調用語句
    • 函數調用語句由函數名、實際參數加上分号";"組成
    • 一般形式:函數名(實際參數表);
    • 執行函數語句就是調用函數體并且把實際參數賦予函數中定義的形式參數,然後執行被調函數體中的語句
    • 例如:printf(“hello world”);
  • 控制語句
    • 控制語句用于控制程式的流程,以實作程式的各種結構方式。C語言的九種控制語句,大緻可以分為以下三類
    • 條件判斷語句:if、switch
    • 循環執行語句:do while、while、for
    • 轉向語句:break、goto、continue、return
  • 複合語句
    • 複合語句是吧多個語句是由括号括起來組成一個語句
    • 在程式中把複合語句看成是單條語句,而不是多條
    • 例如:
      {
      	x = y + z;
      	a = b + c;
      	printf("%d%d",x,a);
          }
                 
    • 符合語句内的各條語句都必須以分号結尾,在括号外不能加分号
  • 空語句
    • 空語句是隻有分号組成的語句,空語句是什麼也不執行的語句。在程式中空語句可用來作空循環體
    • 例子如下
      while(getchar()!='\n'){
          ;
      }
                 
    • 本語句的功能是,隻要從鍵盤上輸入的不是回車那麼久重新輸入

函數調用語句

putchar和getchar函數

//因為是輸出輸入函數是以必須調用stdio
//stdio 就是standard input output的縮寫  也就是标準輸入輸出
#include<stdio.h>
void main() {
	char c;
	printf("input a character\n");
	//getchar是用來擷取鍵盤上的輸入的
	c = getchar();
	//putchar是用來将字元輸出的
	putchar(c);
}
           

結果顯示

【C】順序程式設計

printf函數

printf函數(格式輸出函數),他的最後一個字母f即為format格式的意思,他的功能是按使用者指定的格式,把指定的資料顯示到顯示器上

printf函數是一個标準的庫函數,他的函數在頭檔案"stdio.h"之中。但是作為一個特例,不要求在使用printf函數之前必須包含stdio.h檔案

printf的使用步驟及效果如下

#include<stdio.h>
void main() {
	//printf的簡單使用
	int month = 12;
	printf("一年有%d個月", month);
}
           

效果顯示如下

【C】順序程式設計

prinf不僅僅隻要%d還有其他的

格式字元 意義
d 以十進制形式輸出帶符号整數(正數不輸出符号)
o 以八進制形式輸出無符号整數(不輸出字首0)
x,X 以十六進制形式輸出無符号整數(不輸出字首0x)
u 以十進制形式輸出無符号整數
f 以小數形式輸出單、雙精度實數
e、E 以指數形式輸出單、雙精度實數
g、G 以%f或%e中較短的輸出寬度輸出單、雙精度實數
c 輸出單個字元
s 輸出字元串

輸出的最小寬度:用十進制整數來表示輸出的最少位數。若實際位數多餘定義的寬度,則按實際位數輸出,若實際位數少于定義的寬度則以0或者空格補全

标志:标志字元為+、-、#、空格四種,他的意義如下:

标志 意義
- 結果左對齊,右邊填空格
+ 輸出符号(正号或者負号)
空格 輸出值為正時冠以空格,為符号時冠以負号
# 對c、s、d、u類沒有影響。對于o類,在輸出的時候加字首哦,對于x類,在輸出的時候加字首0x;對于e、g、f類目前結果有小數時才給出小數點

scanf函數

scanf格式輸入函數,即按照使用者指定的格式從鍵盤上把資料輸入到指定的變量之中。

scanf是一個标準庫函數,他的函數原型在頭檔案stdio.h中,與printf函數相同,C語言也允許在使用scanf函數之前不必包含stdio.h檔案

scanf的一般形式為:

其中格式控制字元串的作用與printf函數相同,但不能顯示非格式字元串,也就是不能顯示提示字元串,位址就是儲存接收到的位址

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

void main(){
	//定義三個變量
	int a, b, c;
	printf("input a,b,c\n");
	//将鍵盤打入儲存
	//&變量名是擷取其位址
	scanf("%d%d%d", &a, &b,&c);
	//輸出
	printf("a=%d,b=%d,c=%d",a,b,c);
}
           

結果

【C】順序程式設計

三個數字在輸入的時候要麼輸入一個按一個空格要麼回車

*符表示跳過該輸入值

如果輸入的值是1,2,3那麼把1賦予a,2被跳過,3賦予c

寬度:用十進制整數指定輸入的寬度

//輸入1234567但隻将12345賦予給a,其他的舍去
scanf("%5d",&a);
//輸入123456将12賦予給a,将34賦給b
scanf("%2d%2d",&a,&b);
           

如果格式控制串中有非格式字元,那麼在輸入的時候也要輸入改字元

//下面就必須要輸入1,2,3
scanf("%d,%d,%d",&a,&b,&c);
//下面要輸入a=1,b=2,c=3
scanf("a=%d,b=%d,c=%d",&a,&b,&c);
           

例題

例一

輸入三角形的三邊長,求三角形的面積

已知三角形的三邊長為a,b,c,該三角形的面積公式為

【C】順序程式設計

其中s=(a+b+c)/2

程式如下

#define _CRT_SECURE_NO_WARNINGS 1
#include<math.h>
#include<stdio.h>
void main()
{
	float a, b, c, s, area;
	printf("input a b and c\n");
	scanf("%f%f%f", &a, &b, &c);
	//這裡之是以不直接除以2是因為浮點型乘以浮點型才能保持答案的正确
	s = 1.0/2*(a + b + c);
	area = sqrt(s*(s - a)*(s - b)*(s - c));
	//7.2是保留倆位小數
	printf("area=%7.2f", area);
}
           

結果

【C】順序程式設計

Math函數庫還有以下的函數

序号 函數 & 描述
1 double acos(double x) 傳回以弧度表示的 x 的反餘弦。
2 double asin(double x) 傳回以弧度表示的 x 的反正弦。
3 double atan(double x) 傳回以弧度表示的 x 的反正切。
4 double atan2(double y, double x) 傳回以弧度表示的 y/x 的反正切。y 和 x 的值的符号決定了正确的象限。
5 double cos(double x) 傳回弧度角 x 的餘弦。
6 double cosh(double x) 傳回 x 的雙曲餘弦。
7 double sin(double x) 傳回弧度角 x 的正弦。
8 double sinh(double x) 傳回 x 的雙曲正弦。
9 double tanh(double x) 傳回 x 的雙曲正切。
10 double exp(double x) 傳回 e 的 x 次幂的值。
11 double frexp(double x, int *exponent) 把浮點數 x 分解成尾數和指數。傳回值是尾數,并将指數存入 exponent 中。所得的值是 x = mantissa * 2 ^ exponent。
12 double ldexp(double x, int exponent) 傳回 x 乘以 2 的 exponent 次幂。
13 double log(double x) 傳回 x 的自然對數(基數為 e 的對數)。
14 double log10(double x) 傳回 x 的常用對數(基數為 10 的對數)。
15 double modf(double x, double *integer) 傳回值為小數部分(小數點後的部分),并設定 integer 為整數部分。
16 double pow(double x, double y) 傳回 x 的 y 次幂。
17 double sqrt(double x) 傳回 x 的平方根。
18 double ceil(double x) 傳回大于或等于 x 的最小的整數值。
19 double fabs(double x) 傳回 x 的絕對值。
20 double floor(double x) 傳回小于或等于 x 的最大的整數值。
21 double fmod(double x, double y) 傳回 x 除以 y 的餘數。

例二

求ax2+bx+c=0方程的根,abc都由鍵盤輸入,設b2-4ac>0,求根公式如下

【C】順序程式設計

代碼如下

#define _CRT_SECURE_NO_WARNINGS 1
#include<math.h>
#include<stdio.h>
void main()
{
	float  a, b, c, p, q, x1, x2;
	printf("請輸入a、b、c\n");
	scanf("%f%f%f", &a, &b, &c);
	p = -(b / 2 * a);
	q = sqrt(b*b - 4 * a*c) / 2 * a;
	x1 = p + q;
	x2 = p - q;
	printf("x1=%7.2f,x2=%7.2f", x1, x2);
}
           

結果

【C】順序程式設計

繼續閱讀