Biến-Hằng-Câu lệnh và biểu thức trong C/C++

0
  • Thư viện chuẩn trong C cung cấp các hàm xử lý cho việc nhập và xuất.
  • Thư viện chuẩn có các hàm I/O, dùng để quản lý việc nhập, xuất, các thao tác trên ký tự và chuỗi.
  • Thiết bị nhập chuẩn thường là bàn phím.
  • Thiết bị xuất chuẩn thường là màn hình (console).
  • Nhập và xuất có thể được xử lý qua các tập tin thay vì từ các thiết bị chuẩn.
Thư viện: #include <stdio.h> (standard input/output). 
  • #include <stdio.h>
    • Đây là câu lệnh tiền xử lý
  • stdio.h là tập tin header (header file)
  • Chứa các macro sử dụng cho nhiều hàm nhập/xuất trong C
  • Các macro trong stdio.h giúp các hàm printf(), scanf(), putchar(), getchar() thực thi

printf( ) – Dùng cho xuất có định dạng

  • Được dùng để hiển thị dữ liệu ra thiết bị xuất chuẩn như màn hình (console)

Cú pháp => printf ( “control string”, argument list);

  • Danh sách đối số (argument list) chứa hằng, biến, biểu thức hoặc các hàm phân cách bởi dấu phẩy
  • Phải có một lệnh định dạng trong “control string” cho mỗi đối số trong danh sách
  • Các lệnh định dạng phải khớp với danh sách đối số về số lượng, kiểu và thứ tự.
  • control string luôn được đặt trong dấu nhấy kép “ ”, đây là dấu phân cách
  • control string chứa một trong ba kiểu phần tử sau:

1.Các ký tự văn bản:   gồm các ký tự có thể in được

2.Các lệnh định dạng: bắt đầu với ký hiệu % và theo sau là một mã định dạng tương ứng cho từng phần tử dữ liệu

3.Các ký tự không in được:   gồm tab, blank và new_line

Mã định dạng

Định dạng printf() scanf()
Ký tự đơn (single character) %c %c
Chuỗi (string) %s %s
Số nguyên có dấu (signed decimal integer) %d %d
Kiểu float – dạng dấu chấm thập phân (decimal notation) %f %f hoặc %e
Kiểu float – dạng dấu chấm thập phân %lf %lf
Kiểu float – dạng lũy thừa (exponential notation) %e %f or %e
Kiểu float ( %f  hay %e , khi ngắn hơn) %g
Số nguyên không dấu (unsigned decimal integer) %u %u
Số nguyên hệ 16 không dấu – sử dụng “ABCDEF” (unsigned hexadecimal integer) %x %x
Số nguyên hệ 8 không dấu (unsigned octal integer) %o %o

Trong bảng trên : c, d, f, lf, e, g, u, s, o và x là các bộ đặc tả kiểu

định dạng Các qui ước in
%d Các con số trong số nguyên
%f Các chữ số phần nguyên sẽ được in ra. Phần thập phân sẽ chỉ in 6 chữ số. Nếu phần thập phân ít hơn 6 chữ số, nó sẽ được thêm các chữ số 0 vào từ bên phải, ngược lại nó sẽ làm tròn số từ bên phải.
%e Một con số bên trái của dấu chấm thập phân và 6 vị trí bên phải, như %f ở trên

image008

 Các ký tự đặc biệt

\\ In ra ký tự \
\ In ra ký tự
%% In ra ký tự  %

Ví dụ: Chương trình hiển thị số nguyên, thập phân, ký tự và chuỗi

#include <stdio.h>
void main()
{
		int a = 10;
		float b = 24.67892345;
		char ch = 'A';
		printf("Integer data = %d", a);
		printf("Float Data = %f",b);
		printf("Character = %c",ch);
		printf("This prints the string");
		printf("%s","This also prints a string");
}

Kết quả hiện ra ở màn hình là:

  Integer data = 10

  Float Data = 24.678923

  Character = A

  This prints the string

  This also prints a string

Bổ từ trong hàm printf( )

  1. Bổ từ ‘-‘

   Phần tử dữ liệu sẽ được canh lề trái, phần tử sẽ được in bắt đầu từ vị trí bên trái trong cùng của trường.

  1. Bổ từ xác định độ rộng trường

   Có thể được sử dụng với kiểu float, double hoặc mảng ký tự (chuỗi). Độ rộng trường là một số nguyên xác định độ rộng nhỏ nhất cho phần tử dữ liệu.

3. Độ chính xác

    Được sử dụng với kiểu float, double hoặc mảng ký tự (chuỗi). Nếu dùng với kiểu float hay double, chuỗi con số xác định số lượng lớn nhất các con số được in bên phải dấu chấm thập phân.

  1. Bổ từ ‘0’

    Mặc định thì khoảng trống sẽ được thêm vào một trường. Nếu người dùng muốn thêm số 0 vào trường thì bổ từ ‘0’ được dùng

  1. Bổ từ ‘l’

    Bổ từ này có thể được dùng hiển thị các đối số nguyên kiểu int hay double. Mã định dạng tương ứng là %ld

  1. Bổ từ ‘h’

   Bổ từ này được sử dụng để hiển thị dạng short int. Mã định dạng tương ứng như là %hd

  1. Bổ từ ‘*’

   Nếu người dùng không muốn xác định độ rộng trường nhưng muốn chương trình xác định điều đó, bổ từ này được sử dụng

Ví dụ: Chương trình minh họa dùng bổ từ với  printf()

#include <stdio.h>
#include <conio.h>
void main()
{
	printf("The number 555 in various forms:\n");
	printf("Without any modifier: \n");
	printf("[%d]\n",555);
	printf("With – modifier :\n");
	printf("[%-d]\n",555);
	printf("With digit string 10 as modifier :\n");
	printf("[%10d]\n",555);
	printf("With 0 as modifier : \n");
	printf("[%0d]\n",555);
	printf("With 0 and digit string 10 as modifiers :\n");
	printf("[%010d]\n",555);
	printf("With -,0 and digit string 10 as modifiers:\n");
	printf("[%-010d]\n",555);
	getch();
}

Kết quả như sau:

The number 555 in various forms:
Without any modifier:
[555]
With – modifier :
[555]
With digit string 10 as modifier :
[               555]
With 0 as modifier :
[555]
With 0 and digit string 10 as modifiers :
[0000000555]
With -,0 and digit string 10 as modifiers:
[555              ]

scanf( ) – Sử dụng để nhập có định dạng

  • Được sử dụng để nhập dữ liệu

Dạng tổng quát của hàm scanf():   scanf(“control string”, argument list);

  • Những định dạng dùng trong hàm printf() cũng được sử dụng với cùng cú pháp trong hàm scanf()

Ví Dụ: Tính tiền khách ở trong tháng.

  • Nhập vào ngày đến ở khách sạn, nhập ngày rời khỏi khách sạn. Ngày là một số nguyên >=1 và <=31
  • Tính tổng số ngày khách đã ở trong tháng.
  • Tính tiền khách phải trả, biết rằng đơn giá tuần là 650 và đơn giá ngày là 100.
#include<stdio.h>
#include<conio.h>
void main()
{
	int nv, nr;
	printf("Nhap vao ngay vao, ngay ra: ");
	scanf("%d%d", &nv, &nr);
	int tong = nr - nv;
	printf("Tong so ngay khach o trong thang: %d\n", tong);
	int tien = tong/7 * 650 + tong % 7 * 100;
	printf("Tien khach phai tra la: %d", tien);
	getch();
}

Sự khác nhau về danh sách đối số giữa printf( ) và scanf( )

  • printf() sử dụng các tên biến, hằng, hằng biểu tượng và các biểu thức
  • scanf() sử dụng các con trỏ tới biến
  • Không có tuỳ chọn  %g
  • Mã định dạng %f và %e là giống nhau

Danh sách đối số trong scanf() phải theo qui tắc:

  • Đọc giá trị vào một biến có kiểu dữ liệu cơ sở, sử dụng ký hiệu & trước tên biến
  • Đọc giá trị vào một biến có kiểu dữ liệu dẫn xuất, không sử dụng & trước tên biến

Xem thêm Cấu trúc IF-ELSE