目次
3.1 C言語の基本データ型の紹介
C言語のデータ型は、基本型、構築型、ポインタ型、空型の4つに分類できます。
3.2 識別子、定数、変数
1. 識別子
1)、識別子の概念
識別子はソース プログラム内のオブジェクトの名前を識別するために使用され、これらのオブジェクトにはステートメント、データ型、関数、変数、定数、配列などが含まれます。識別子は文字、数字、アンダースコアで構成され、最初の位置には文字またはアンダースコアのみを使用できます。
識別子を使用する場合は、次の規則に注意してください。
(1) 識別子は文字 (a~z、A~Z) またはアンダースコアで始まる必要があります。
(2) 識別子の他の部分は、文字、アンダースコア、または数字 (0 ~ 9) で構成できます。
(3) 大文字と小文字は異なる意味、つまり異なる識別子を表します。
(4) 識別子文字の有効桁数はシステムごとに異なります。
(5) 識別子にTurbo C2.0のキーワードは使用できません。
2) 識別子の種類
(1) キーワード: いわゆるキーワードは、Turbo C 2.0 自体で使用されている単語であり、他の目的には使用できません。システムによって予約されているキーワードは特定の意味を持っており、変数名や関数名などとして使用することはできません。C言語には以下の32個のキーワードがあります。
自動 | ダブル | 整数 | 構造体 | 壊す | それ以外 |
長さ | スイッチ | 場合 | 列挙型 | 登録 | typedef |
文字 | 外部 | 戻る | 連合 | 定数 | 浮く |
短い | 署名されていない | 続く | ために | 署名済み | 空所 |
デフォルト | 後藤 | のサイズ | キャストに | する | もしも |
その間 | 静的 |
(2) 前処理されたコマンドワードをコンパイルします: #include、#define など。
(3) ユーザ識別子:ユーザが定義した変数名、定数名、関数名。
2. 定数
定数とは、プログラムの実行中に変更できない量を指し、数値定数と文字定数の 2 種類に分類されます。
1)、数値定数
(1) 整数定数(整数)
207、30、181 などは整数定数です。整数定数には、10 進整数、8 進整数、16 進整数の 3 つの形式があります。
(2) 実定数(実数)
実定数は、数学で通常表現される実数を表し、小数点を含む数値を表すことができます。10 進形式と指数形式の 2 つの形式があります。
小数の 2 つの形式: ① 2.14 などの小数形式 ② 2.31e10 などの指数形式は 2.31✕e¹⁰ を意味します
小数の 2 つの形式: ①単精度 ②倍精度 倍精度は単精度よりも有効桁数が多くなります。
定数の定義形式は次のとおりです。
#define 常量名 常数值
例えば:
#define PI 3.1415926
2)、文字定数
文字定数は、「A」、「X」、「a」などの文字とその他の一般的な文字定数で構成されます。おなじみの文字定数に加えて、Turbo C ではいくつかの特殊な制御文字も定義されています。
\n | 改行 |
\t | 水平タブ |
\v | 垂直タブ |
\b | バックスペース |
\r | キャリッジリターン |
\f | 用紙送り |
\\ | バックスラッシュ文字 |
\' | 一重引用符文字 |
\? | 疑問符の文字 |
「 | 二重引用符文字 |
\0 | ヌル |
\ddd | 1~3の8進数で表される文字 |
\xhh | 1~2の16進数で表される文字 |
3. 変数
変数とは、プログラムの実行中に変化する可能性のある量です。各変数には名前があり、データを保存するためにメモリ内の特定の記憶領域を占有します。
1)、変数の定義
Turbo C 2.0 では、すべての変数を使用する前に宣言する必要があると規定しています。変数宣言ステートメントは、データ型とそれに続く 1 つ以上の変数名で構成されます。変数定義の形式は次のとおりです。
类型<变量名>;
例えば:
int a,b,c; //说明三个变量a,b,c都是整型变量
unsigned long d; //说明一个变量d是无符号长整型变量
2) 変数の説明
(1) 他の言語と同様、Turbo C 変数は使用する前にデータ型を定義する必要があり、未定義の変数は使用できません。
(2) 変数名は文字、数字、アンダースコアのみで構成でき、数字で始めることはできません。
(3) Turbo C プログラムの記述形式は、厳密な制限がなく非常に柔軟です。
3.3 基本的なデータ型
Turbo C は、整数 (int)、実数 (float または double)、および文字 (char) という基本的なデータ型を提供します。
1. 整数
整数は、整数定数と整数変数で構成されます。
1)、整数変数の定義
整数変数の定義形式:
<整数类型><变量名>;
整数型は、符号なしとデータ サイズによって分類できます。
サインの有無によると、 ① サインあり ② サインなし
データの長さに応じて、 ①長整数 ②短整数
タイプ | 略語 | 単語の長さ | 説明する | 数値の範囲 |
符号付き short int | short または int | 2バイト | 符号付き短整数 | -32768~32767 |
符号付き長整数型 | 長さ | 4バイト | 符号付き長整数 | -2147483648~2147483647 |
unsigned short int | 符号なし整数 | 2バイト | 符号なし短整数 | 0~65535 |
符号なし長整数 | 符号なしロング | 4バイト | 符号なし長整数 | 0~4294967295 |
2) 整数の格納形式
整数がストレージ ユニットに格納される場合、符号付き (符号付き) 整数と符号なし (符号なし) 整数の違いは、その最上位ビットの定義にあります。定義が符号付き整数 (signed int) の場合、C コンパイラーによって生成されたコードは、整数の最上位ビットを符号ビットとして設定し、残りのビットが値を表します。最上位ビットが 0 の場合、整数は正となり、最上位ビットが 1 の場合、整数は負になります。たとえば、16 ビット バイナリで表現すると次のようになります。
[+1] ソースコード=0000000000000001
[-1] ソースコード=1000000000000001
[+127] ソースコード=0000000001111111
[-127] ソースコード=1000000001111111
上記の数値では、左側の数値の最初のビットが符号ビットです。
ほとんどのコンピューターでは、符号付きの数値を表すときに 2 の補数を使用します。正の数の補数コード、逆数コード、ソースコードはすべてソースコードと同等です。負の数の補数は、逆数コードに 1 を加えたもので、逆数コードは、対応する数の絶対値のソース コードの各ビットを反転し、その逆数に 1 を加算して補数コードを取得します。上記の 4 つの数値を、コンピューターの逆コードである符号付き数値として 8 ビット 2 進数で表現すると、補数値は次のようになります。
[+1] ソースコード=0000000000000001=逆コード=補コード
[-1] ソースコード=1000000000000001
[-1] 逆コード=111111111111110
[-1] 補数コード = 逆コード + 1 = 1111111111111111
符号付き整数は多くの操作にとって重要です。ただし、表現できる最大の数値の絶対値は、符号なし数値の半分にすぎません。たとえば、32767 の符号付き整数表現は 011111111111111 です。符号付きであるため、最上位ビットが符号を表すため、32767 が int 符号付き整数の最大数になります。最上位ビットが 1 の場合、その数値は負の数 - 1 として扱われます (1111111111111111 は -1 の補数であるため)。ただし、数値が符号なし整数 (unsigned int) として定義されている場合、最上位ビットを 1 に設定すると 65 535 になります。
3) 整数変数の代入とその説明
(1) 整数変数を定義するときに、変数に初期値を割り当てることができます。これを変数の初期化といいます。
例えば
int a=3,b=100; //a,b被定义为有符号短整型变量,并且a的初值为3,b的初值为100
unsigned long c=65535; //c被定义为无符号长整型变量,并且c的初值为65535
(2) 初期値を代入する場合、8 進数および 16 進数の整数定数は特定の記号で表現する必要があります。
例えば
int f=022; //f的值是八进制数22,按十进制数输出时值为18
(3) 整数定数の後に文字 L または l を追加して、数値が長整数であることを示します (22L、773L など)。
例えば
#define G 22L //G的值定义为长整型数22
#define H 0773L //H的值定义为八进制的长整型数。
2.ソリッドタイプ
1)、実数変数の定義
実数変数の定義形式は以下のとおりです。
<实型><变量列表>
実データは小数点以下の桁数により精度が異なります。C言語には、単精度実数、倍精度実数、長倍精度実数の3種類の実数型があります。これら 3 つのデータ型はコンピュータのメモリに格納され、占有される単位の数が異なり、表現される数値の精度も異なります。具体的な内容は表のとおりです。
タイプ | 単語の長さ | 説明する | 有効な単語数 | 数値の範囲 |
浮く | 4バイト | 単精度実数 | 6~7 | -3.4✕10⁻³⁸ ~ 3.4✕10³⁸ |
ダブル | 8バイト | 倍精度実数 | 15~16 | -1.7✕10⁻³⁰⁸~ 1.7✕10³⁰⁸ |
ロングダブル | 16バイト | 長倍精度実数 | 18~19 | -1.2✕10⁻⁴⁹³² ~ 1.2✕10⁴⁹³² |
実数変数は次のステートメントで定義できます。
float a,b; //a,b被定义为单精度实型变量
double c; //c被定义为双精度实型变量
2) 実データの保存形式
float は語長 4 バイト、2 進数合計 32 桁の単精度実数型で、値の範囲は -3.4✕10⁻³⁸ ~ 3.4✕10³⁸ です。メモリ形式では、上位 24 ビットが小数部を表し、最上位ビットが符号ビットを表し、下位 8 ビットが指数部を表します。実数型番号 3.141 592 6 の格納形式を図に示します。
double データ型の場合、合計 64 ビットを占有します。システムによっては、小数部の格納に 56 ビットが使用され、指数部が 8 ビットになります。これにより、格納される倍精度実数型の有効桁数が増加し、数値演算の誤りを減らすことができます。注意:すべての実数は符号付き実数であり、符号なしの実数は存在しません。
3)、実数変数の代入とその説明
実変数への初期値代入は定義と同時に行うことができます。例えば:
float a=23.562
実数型の説明は以下のとおりです。
(1) 実数型の定数は10進数のみです。
(2) 実数型定数のデフォルトはすべて double 型です。
(3) 絶対値が 1 未満の実数型数値については、小数点前の 0 を省略できます。たとえば、0.22 は .22 と書くことができ、
-0.0015E-3 は -.0015E-3 と書くことができます。
(4) Turbo C のデフォルト形式で実数を出力する場合、小数点以下 6 桁だけが予約されます。
3. 文字の種類
1)、文字変数の定義
文字変数の定義形式は次のとおりです。
<字符类型><变量列表>;
文字には、署名付き文字と署名なし文字の 2 種類があります。
例えば:
char a; //a被定义为有符号字符变量
unsigned char c; //c被定义为无符号字符变量
文字データ型
タイプ | 単語の長さ | 説明する | 数値の範囲 |
文字 | 1バイト | 符号付き文字 | -128~127 |
符号なし文字 | 1バイト | 符号なし文字 | 0~255 |
2) 文字変数の代入と文字定数の表現
文字変数は定義時に直接初期値を割り当てることができます。
char a='A'; //a被定义为有符号字符变量,并且将a变量赋初值为'A',这时a变量中存储A的 ASCII 码值为十进制数 65。
初期値を割り当てる場合は、「a」、「9」、「Z」のように文字を直接一重引用符で囲むことも、文字の ASCII コード値で表すこともできます。
char a='A';
char a= 65;
上記 2 つの初期値の割り当ては同等です。
C 言語で許可される文字列定数は、「Hello TurboC 2.0」のように、二重引用符で囲まれた 1 対の文字シーケンスです。'a' と "a" は異なることに注意してください。前者は文字であり、変数に代入できますが、後者は文字列であり、文字変数に代入できません。C では、各文字列の末尾に文字列終了記号 \0' を追加することが規定されており、C 言語には特別な文字列変数はありません。
3.4 データの入出力
输入与输出的概念是相对计算机而言的,当数据从外部设备(如键盘)送给计算机时,称为“输人”;当数据从计算机中送出到外部设备(如显示器或打印机)时,称为“输出”。
在 C 语言中,没有提供专门的输人输出语句,输人或输出操作是通过调用输入输出库函数来实现的,如 printf()就是库函数。C语言函数库中有一批标准输入输出函数,包括 printf() , scanf() , putchar() , getchar() , puts() 和 gets() 等。
1、字符输出函数
函数的格式:
putchar(ch)
函数的功能:将变量 ch 中的内容以一个字符形式输出到屏幕上。其中 ch 可以是字
符型变量,也可以是整型变量,还可以是字符型常量或整型常量。
putchar()函数,不仅可以输出普通可显示的字符,还可以输出转义控制字符。如 putchar(\n); 表示输出换行符,即控制输出位置换到下一行的开头。
【例1】putchar() 函数的使用。
#include<stdio.h>
int main()
{
char x='A',y='B';
int z=97;
putchar(x);
putchar(y);
putchar('\n');
putchar(z);
}
//运行结果为:
AB
a
2、字符输入函数
函数的调用格式:
c=getchar()
函数的功能:接收从标准输入设备(键盘)输人的一个字符,并将该字符作为函数的值赋给变量 c。
该函数的执行是等待从键盘输入一个字符,当用户输入一个字符后,函数的值就是所输入的字符的 ASCII 码值。所以常用赋值语句的形式,将键盘输人的字符,赋给一个变量。
使用getchar()函数应注意以下两点:
(1)getchar()函数可以作为 putchar()函数的参数,如语句 putchar(getchar()); 是正确的。其功能是显示键盘输人的字符。
(2)使用 getchar()函数时,回车键也会作为输入字符的一部分。尤其在连续使用
getchar()函数时要注意回车键将会作为换行符被下一个 getchar()所接受。
【例2】getchar() 函数的使用。
#include<stdio.h>
int main()
{
putchar(getchar());
}
//运行结果为:
A //输入
A
3、格式输出函数
函数的调用格式:
printf("格式控制",输入项列表);
函数的功能:按某种格式,向输出设备输出若干指定类型的数据。
printf() 函数的参数包括格式控制和输出项列表两部分。格式控制部分又可分为普通字符和格式说明两部分。
(1)普通字符,将原样式输出。例如:
printf("China");
输出结构如下:
China
(2)格式说明部分,以%开头,以”格式说明符“结束。例如:%d,%f 等。
在 printf("sum=%d",a); 中:
sum-->普通字符
%d-->格式说明
a-->输出项列表
输出格式说明符及其含义
格式说明符 | 含义 |
d | 按十进制有符号整型数输出 |
o | 按八进制无符号整型数输出 |
x | 按十六进制无符号整型数输出 |
u | 按十进制无符号整型数输出 |
c | 以字符格式输出,只输出一个字符 |
s | 输出字符串 |
f |
以小数形式输出单,双精度数,输出6位小数 |
e | 以标准指数形式输出单,双精度数 |
g | 按 f 和 e 格式中较短的一种输出 |
l | 用于输出 long 型数据,如 %ld , %lu等 |
m.n | 指定输出域宽及精度, m 和 n 都是正整数 |
- | 左对齐输出数据 |
1)、整型格式说明符
(1)十进制形式输出
① %md:控制输出项按十进制有符号整数形式输出。m 是一个整数,用于指定输出数据的最小占位宽度,若所输出数据的位数小于 m,左端(高位)将以空格占位;若输出数据的位数大于 m,则按数据的实际宽度输出;若省略 m 则按所要输出数据的实际长度
输出。如;
#include<stdio.h>
int main()
{
int a=123,b=123456;
printf("a=%5d\nb=%5d",a,b);
}
//运行结果为:
a= 123
b=123456
② % mld:格式中的 l 符号用于输出 long 型数据,m 指定输出数据的占位宽度,long 型数不能用%d 格式输出。如:
#include<stdio.h>
int main()
{
long a=123456;
printf("%ld\n",a);
printf("%9ld",a);
}
//运行结果为:
123456
123456
③ %一md 或%一mld:格式中的一修饰符表示输出数据左对齐。当输出数据的位
数小于 m 时,数据将左对齐,右边以空格占位,如:
#include<stdio.h>
int main()
{
int a=123;
printf("%5d+%5d=%6d\n",a,a,a+a);
printf("%-5d+%-5d=%-6d\n",a,a,a+a);
}
//运行结果为:
123+ 123= 246
123 +123 =246
④ %mu 或 %mlu:控制输出项按十进制无符号整型数输出。其中 m 和 l 的含义如前所述。
(2)八进制形式
① %mo:控制输出项按八进制整数形式输出。
② %mlo:控制输出项按八进制长整数形式输出。
(3)十六进制形式
① %mx:控制输出项按十六进制整数形式脸出。
② %mlx:控制输出项按十六进制长整数形式输出。
2)、实型格式说明符
用于输出单精度或双精度数的格式说明符是相同的。实型格式说明符有以下两种。
(1)%f 或 %m.nf:以小数形式输出单、双精度数据。格式中的 m 表示输出的整个数据所占的列数(注意小数点占一列),含义如前所述;n 表示输出数据的小数部分的位数,如果不指定 n,则默认输出 6 位小数。
(2)%e 或 %m.ne:以标准指数形式输出单、双精度数。m 的含义如前所述,注意此格式中,实际输出的小数部分的位数为 n一 1 位。若不指定 n ,则默认输出 5 位小数。
3)、字符型格式说明符
该格式用于输出一个字符,字符型数据的格式说明符为%c或%mc。其中 m 表示输出的单个字符占的列数,即在输出的字符前要有m一1个空格占倍。
4)、字符串格式说明符
该格式用于输出一个字符串,字符串型数据的格式说明符为 %-m.ns。格式中的 m 指输出字符串占 m 列。若要输出的字符串长度大于 m,则不受 m 限制,全部输出;若要输出的字符串长度小于 m,则左边以空格占位补齐 m 位。n 用于指定输出字符串左端截取 n 个字符。一表示当输出的字符个数小于 m 时,输出左对齐,右边以空格占位补齐 m 位。
请看下面程序段的运行结果:
#include<stdio.h>
int main()
{
printf("%3s\n%5.2s\n%.4s\n%-5.3s\n","china","china","china","china");
}
//运行结果为:
china
ch
chin
chi
4、格式输入函数
函数的调用格式:
scanf("格式控制",输出项列表);
函数的功能:接收键盘输人的信息,按指定格式转换后,存放到地址列表所对应的变量中。
1)、地址列表
地址列表由若干地址组成,它们可以是变量的地址也可以是字符串的首地址。变量的地址可以通过取地址运算符 & 得到。例如,变量 a的地址表示为&a。
2)、格式控制说明
与 printf类似,格式控制说明以%开头,以格式说明符结束,中间可加入附加说明
符。
输入格式说明符及其含义
格式说明符 | 含义 |
d | 输入十进制整型数 |
o | 输入八进制整型数 |
x | 输入十六进制整型数 |
c | 输入一个字符 |
s | 输入字符串 |
f |
输入十进制的小数形式或指数形式的实数 |
e | 输入一个实数,与 f 相同 |
l | 用于输入 long 型数据,如 %ld , %lu ,或输入double型数据,如%lf |
h | 用于输入short型数据,如 %hd |
m | 域宽说明,是一个正整数,指出输入数据所占列数 |
* | 表示本输入项不赋给变量 |
使用格式输入函数时,需要注意以下几点:
(1)当输入一串数据时,要考虑分隔各个数据。
scanf("%d %d %d",&a,&b,&c); 执行该输入时,要连续输入3个整数,可以用以下几种分隔方法。
① 可以用空格分隔各个数。
② 可以用 Enter 键分隔。
③ 可以用Tab 键分隔
④ 根据格式控制说明中指定的域宽来分隔数据
#include<stdio.h>
int main()
{
int a,b;
scanf("%4d%3d",&a,&b);
printf("a=%d b=%d",a,b);
}
//运行结果为:
1234567 //输入
a=1234 b=567
⑤ 根据格式字符的含义来分隔数据。
#include<stdio.h>
int main()
{
int a;
char b;
float c;
scanf("%d%c%f",&a,&b,&c);
printf("a=%d b=%c c=%f",a,b,c);
}
//运行结果为:
123D3.12 //输入
a=123 b=D c=3.120000
⑥ 使用自定义的分隔符
比如逗号分隔:
#include<stdio.h>
int main()
{
int a,b,c;
scanf("%d,%d,%d",&a,&b,&c);
printf("a=%d b=%d c=%d",a,b,c);
}
//运行结果为:
12,13,14 //输入
a=12 b=13 c=14
(2)附加说明符 * 号的作用是抑制输入,即用 * 说明的输入项不给任何变量。
#include<stdio.h>
int main()
{
int a,b,c;
scanf("%3d%*2d%2d",&a,&b,&c);
printf("a=%d b=%d c=%d",a,b,c);
}
//运行结果为:
1234567 //输入
a=123 b=67 c=0