С хэлний
стандарт сан/C
standard library/
Lecture 16
Programming Language
Агуулга
 C програм зохиогдсоны дараа өөртөө build-in үйлдлүүдээр
хангагдаагүй байсан. 1970 оноос энэ хэл ихээхэн түгээмэл
болж ирсэн ба олон сургууль байгууллага өөр өөрсдийн
хувилбарт боломжуудыг гаргаж эхэлсэн. 1980 оноос С-н янз
бүрийн хувилбарын хоорондын зөрөө нь хүндрэл үүсгэж эхэлсэн.
Иймээс 1983 онд American National Standards Institute(ANSI) –с
ANSI С хувилбарыг гаргаж эхэлсэн ба энэ ажил 1989 онд дуусаж
С89 хувилбар бий болсон. Энэ нь өргөн хэрэглэгдэх функцууд
болон төрөл тогтмол, хувьсагчуудыг төрөлжүүлэн стандарт
сангуудыг бий болгосон. Хамгийн сүүлд 1999 онд эдгээр санг
өргөтгөн С99-г гаргаад байна. Стандарт сан дараах 24 header-т
агуулагдана. Үүний 15 нь С89-
х, <iso646.h>, <wchar.h>, <wctype.h> уудыг Normative Addendum
1(NA1),1995, <complex.h>, <fenv.h>, <inttypes.h>, <stdbool.h>, <std
int.h>, <tgmath.h> 1999-д шинэчилсэн. Ингэснээр уг сангаас
ашиглах зүйлийг агуулах файлыг #include директивээр холбож
чөлөөтэй ашиглах боломжтой болсон.
<assert.h>
Оношлогч, assert macro-г агуулна, логик алдааг шалгахад хэрэглэх ба алдаа
гарвал оношилгооны мэдээллийг хэвлээд програмын биелэлтийг дуусгана.
<complex.h>
Комплекс тоонууд дээр боловсруулалт хийх функцуудыг агуулна. (C99-р
шинэчлэгдсэн)
<ctype.h> Тэмдэгтийг шалгах, хөрвүүлэх зэрэг функцуудыг агуулна.
<errno.h>
Алдаанууд. Зарим сангийн функцуудыг дуудахад алдаа илэрч байгаа
эсэхийг шалгахыг зөвшөөрөх эс зөвшөөрөх макрогоор хангана
<fenv.h> Бутархай тооны орчинг хянах. (C99-р шинэчлэгдсэн)
<float.h> Бутархай тооны нарийвчлал мужлал төрөл зэргийг тодорхойлох.
<inttypes.h> Бүхэл төрлүүдийн хоорондох хувиргалт. (C99-р шинэчлэгдсэн)
<iso646.h> ISO 646 хувилбарт тэмдэгтүүдтэй ажиллах. (New with NA1)
<limits.h> Бүхэл төрлүүдийн дээд доод заагийн тогтмолууд(_MIN, _MAX).
<locale.h>
Setlocale() ба харгалзах тогтмолууд. Хэл ба улсыг тодорхойлох функцаар
хангана. Windows програмын Regional and Language тай төстэй
<math.h> Математикийн функцуудын сан
<setjmp.h> setjmp ба longjmp макронууд байна. non-local-н хувьд хэрэглэгдэх
<signal.h> exception нөхцлүүдийг хянах
<stdarg.h> Янз бүрийн тооны аргумент бүхий функцийг ашиглах боломжоор хангана.
<stdbool.h> Булийн төрөлд зориулсан. (C99-р шинэчлэгдсэн)
<stdint.h> Янз бүрийн бүхэл төрөл тодорхойлоход. (C99-р шинэчлэгдсэн)
<stddef.h> Төрөл макро тодорхойлоход, нийтлэг тогтмолууд
<stdio.h> C хэлний оролт гаралтын. Жишээ нь printf гэх мэт функцууд.
<stdlib.h>
Олон төрлийн зориулалт бүхий сан жишээ нь:санамсаргүй тоо, санах ойн
хувиарлалт, процесс удирдах, орчин, сигналь, хайлт, эрэмбэлэлт.
<string.h> Тэмдэгт мөрийг боловсруулах.
<tgmath.h> type-generic математик функцууд. (C99-р шинэчлэгдсэн)
<time.h> Цаг ба огнооны функцууд.
<wchar.h> wide тэмдэгтийг боловсруулах нэмэлт хэлнүүд. (NA1-р шинэчлэгдсэн)
<wctype.h> wide тэмдэгтийн ангилал. (NA1-р шинэчлэгдсэн)
С хэлний стандарт сангийн хувьд Java зэрэг бусад хэлийг бодвол маш бага. Иймд
стандарт санг судалж хэрэглэхэд маш хялбар байна.
Зарим сангийн функцууд
Жишээ:
#include <string.h>
#include <stdio.h>
#include <ctype.h>
int main(void)
{
int length, i;
char *string = "this is a string";
length = strlen(string);
for (i=0; i<length; i++)
{
string[i] = toupper(string[i]);
}
printf("%sn",string);
return 0;
}
isalnum() isalpha() isspace() toupper()
isdigit() islower() iscntrl() tolower()
ispunct() isupper()
ctype.h
asin() cos() exp() fabs() floor() fmod()
log() log10() pow() ceil() sqrt() tanh()
#include <math.h>
#include <stdio.h>
int main(void)
{
double number = 123.54;
double down, up;
double x = 4.0, result;
result = sqrt(x);
printf("The square root of %lf is %lfn", x, result);
down = floor(number);
up = ceil(number);
printf("original number %5.2lfn", number);
printf("number rounded down %5.2lfn", down);
printf("number rounded up %5.2lfn", up);
return 0;
}
math.h
time.h
time() огноо буцаана, ctime() огноог тэмдэгт болгон
хувиргана
#include <stdio.h>
#include <time.h>
int main(void)
{
time_t t;
time(&t);
printf("Today's date and time: %sn", ctime(&t));
return 0;
}
stdlib.h
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int sort_function( const void *a, const void *b);
char list[5][4] = { "cat", "car", "cab", "cap", "can" };
int main(void)
{
int x;
qsort((void *)list, 5, sizeof(list[0]), sort_function);
for (x = 0; x < 5; x++)
printf("%sn", list[x]);
return 0;
}
int sort_function( const void *a, const void *b)
{
return( strcmp((char *)a,(char *)b) );
}
stdarg.h
#include <stdio.h>
#include <stdarg.h>
/* calculate sum of a 0 terminated list */
void sum(char *msg, ...)
{
int total = 0;
va_list ap;
int arg;
va_start(ap, msg);
while ((arg = va_arg(ap,int)) != 0) {
total += arg;
}
printf(msg, total);
va_end(ap);
}
int main(void) {
sum("The total of 1+2+3+4 is %dn", 1,2,3,4,0);
return 0;
}

C standard library

  • 1.
    С хэлний стандарт сан/C standardlibrary/ Lecture 16 Programming Language
  • 2.
    Агуулга  C програмзохиогдсоны дараа өөртөө build-in үйлдлүүдээр хангагдаагүй байсан. 1970 оноос энэ хэл ихээхэн түгээмэл болж ирсэн ба олон сургууль байгууллага өөр өөрсдийн хувилбарт боломжуудыг гаргаж эхэлсэн. 1980 оноос С-н янз бүрийн хувилбарын хоорондын зөрөө нь хүндрэл үүсгэж эхэлсэн. Иймээс 1983 онд American National Standards Institute(ANSI) –с ANSI С хувилбарыг гаргаж эхэлсэн ба энэ ажил 1989 онд дуусаж С89 хувилбар бий болсон. Энэ нь өргөн хэрэглэгдэх функцууд болон төрөл тогтмол, хувьсагчуудыг төрөлжүүлэн стандарт сангуудыг бий болгосон. Хамгийн сүүлд 1999 онд эдгээр санг өргөтгөн С99-г гаргаад байна. Стандарт сан дараах 24 header-т агуулагдана. Үүний 15 нь С89- х, <iso646.h>, <wchar.h>, <wctype.h> уудыг Normative Addendum 1(NA1),1995, <complex.h>, <fenv.h>, <inttypes.h>, <stdbool.h>, <std int.h>, <tgmath.h> 1999-д шинэчилсэн. Ингэснээр уг сангаас ашиглах зүйлийг агуулах файлыг #include директивээр холбож чөлөөтэй ашиглах боломжтой болсон.
  • 3.
    <assert.h> Оношлогч, assert macro-гагуулна, логик алдааг шалгахад хэрэглэх ба алдаа гарвал оношилгооны мэдээллийг хэвлээд програмын биелэлтийг дуусгана. <complex.h> Комплекс тоонууд дээр боловсруулалт хийх функцуудыг агуулна. (C99-р шинэчлэгдсэн) <ctype.h> Тэмдэгтийг шалгах, хөрвүүлэх зэрэг функцуудыг агуулна. <errno.h> Алдаанууд. Зарим сангийн функцуудыг дуудахад алдаа илэрч байгаа эсэхийг шалгахыг зөвшөөрөх эс зөвшөөрөх макрогоор хангана <fenv.h> Бутархай тооны орчинг хянах. (C99-р шинэчлэгдсэн) <float.h> Бутархай тооны нарийвчлал мужлал төрөл зэргийг тодорхойлох. <inttypes.h> Бүхэл төрлүүдийн хоорондох хувиргалт. (C99-р шинэчлэгдсэн) <iso646.h> ISO 646 хувилбарт тэмдэгтүүдтэй ажиллах. (New with NA1) <limits.h> Бүхэл төрлүүдийн дээд доод заагийн тогтмолууд(_MIN, _MAX). <locale.h> Setlocale() ба харгалзах тогтмолууд. Хэл ба улсыг тодорхойлох функцаар хангана. Windows програмын Regional and Language тай төстэй <math.h> Математикийн функцуудын сан <setjmp.h> setjmp ба longjmp макронууд байна. non-local-н хувьд хэрэглэгдэх <signal.h> exception нөхцлүүдийг хянах <stdarg.h> Янз бүрийн тооны аргумент бүхий функцийг ашиглах боломжоор хангана. <stdbool.h> Булийн төрөлд зориулсан. (C99-р шинэчлэгдсэн) <stdint.h> Янз бүрийн бүхэл төрөл тодорхойлоход. (C99-р шинэчлэгдсэн) <stddef.h> Төрөл макро тодорхойлоход, нийтлэг тогтмолууд <stdio.h> C хэлний оролт гаралтын. Жишээ нь printf гэх мэт функцууд. <stdlib.h> Олон төрлийн зориулалт бүхий сан жишээ нь:санамсаргүй тоо, санах ойн хувиарлалт, процесс удирдах, орчин, сигналь, хайлт, эрэмбэлэлт. <string.h> Тэмдэгт мөрийг боловсруулах. <tgmath.h> type-generic математик функцууд. (C99-р шинэчлэгдсэн) <time.h> Цаг ба огнооны функцууд. <wchar.h> wide тэмдэгтийг боловсруулах нэмэлт хэлнүүд. (NA1-р шинэчлэгдсэн) <wctype.h> wide тэмдэгтийн ангилал. (NA1-р шинэчлэгдсэн)
  • 4.
    С хэлний стандартсангийн хувьд Java зэрэг бусад хэлийг бодвол маш бага. Иймд стандарт санг судалж хэрэглэхэд маш хялбар байна. Зарим сангийн функцууд Жишээ: #include <string.h> #include <stdio.h> #include <ctype.h> int main(void) { int length, i; char *string = "this is a string"; length = strlen(string); for (i=0; i<length; i++) { string[i] = toupper(string[i]); } printf("%sn",string); return 0; } isalnum() isalpha() isspace() toupper() isdigit() islower() iscntrl() tolower() ispunct() isupper() ctype.h
  • 5.
    asin() cos() exp()fabs() floor() fmod() log() log10() pow() ceil() sqrt() tanh() #include <math.h> #include <stdio.h> int main(void) { double number = 123.54; double down, up; double x = 4.0, result; result = sqrt(x); printf("The square root of %lf is %lfn", x, result); down = floor(number); up = ceil(number); printf("original number %5.2lfn", number); printf("number rounded down %5.2lfn", down); printf("number rounded up %5.2lfn", up); return 0; } math.h
  • 6.
    time.h time() огноо буцаана,ctime() огноог тэмдэгт болгон хувиргана #include <stdio.h> #include <time.h> int main(void) { time_t t; time(&t); printf("Today's date and time: %sn", ctime(&t)); return 0; }
  • 7.
    stdlib.h #include <stdio.h> #include <stdlib.h> #include<string.h> int sort_function( const void *a, const void *b); char list[5][4] = { "cat", "car", "cab", "cap", "can" }; int main(void) { int x; qsort((void *)list, 5, sizeof(list[0]), sort_function); for (x = 0; x < 5; x++) printf("%sn", list[x]); return 0; } int sort_function( const void *a, const void *b) { return( strcmp((char *)a,(char *)b) ); }
  • 8.
    stdarg.h #include <stdio.h> #include <stdarg.h> /*calculate sum of a 0 terminated list */ void sum(char *msg, ...) { int total = 0; va_list ap; int arg; va_start(ap, msg); while ((arg = va_arg(ap,int)) != 0) { total += arg; } printf(msg, total); va_end(ap); } int main(void) { sum("The total of 1+2+3+4 is %dn", 1,2,3,4,0); return 0; }