C
语言几个简单的入门demo
if 与if
的配对规则( 在缺省{} )的时候:else
总是与他前面最近的 、且尚未与其他else
配对的if
配对;
c语言中的几个函数
exit() 终止整个程序
auto 存储类型
extern 存储类型
static 存储类型
register 存储类型
memset 函数赋值
memcpy 函数拷贝
字符串长度定义方式 1 2 3 4 5 6 7 8 9 10 11 char *fei = NULL ;fei = (char *) malloc (sizeof (char )); scanf ("%s" , fei);printf ("%s" , fei);printf ("\n\r ----------- \n\r" );char foo[] = "" ;scanf ("%s" , foo);printf ("%s" , foo);
数组 提示: C
语言中无法一次输出整个数组,只能循环输出数组中每个值
数组初始化
1 2 3 4 5 6 7 8 9 int a[10 ] = {0 , 1 , 2 , 3 , 4 };char str[ ] = {'a' , 'b' , 'c' , 'd' , 'e' };char str[10 ] = "abc_123" ; printf ("bar = %s " , str);char *name = "abc_123" ; printf ("bar = %s " , name);
C语言除了在定义数组变量时用初值列表对数组整体赋值以 外,无法再对数组变量进行整体赋值。
如果再想赋值,可以使用循环逐一赋值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 int i, b[5 ] = {99 , 60 , 75 , 86 , 92 };int n = 5 ;for (i = 2 ; i < n - 1 ; i++) { b[i] = b[i + 1 ]; } n = n - 1 ; for ( i = 0 ; i < n; i++) { printf ("%d " , b[i]); } printf ("%d " , b[4 ]);
1 2 3 4 5 6 7 8 9 10 11 12 13 int a[20 ];int j = 0 ;for (int i = 0 ; i <= 20 ; i++) { if (i % 7 == 0 ) { a[j++] = i; } } for (int i = 0 ; i < j; i++) { printf ("%d " , a[i]); }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 int a[6 ], s = 0 ;for (int i = 0 ; i < 6 ; i++) { scanf ("%d" , &a[i]); s += a[i]; } printf ("这几个数的平均值为%.1f \n" , s / 6.0 );printf ("小于平均值的是: " );for (int i = 0 ; i < 6 ; i++) { if (a[i] < s / 6.0 ) { printf ("%d " , a[i]); } }
二维数组
int a[2][3];
表示 2行3列 的二维数组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 int a[2 ][3 ]={ { 80 ,75 ,92 }, { 61 ,65 ,71 } };for (int i = 0 ; i < 3 ; i++) { for (int j = 0 ; j < 3 ; j++) { printf ("%d " , a[i][j]); } printf ("\n" ); } int a[2 ][3 ]={ 80 ,75 ,92 , 61 ,65 ,71 };int a[3 ][3 ]={ { 80 ,75 ,92 }, { 61 ,65 ,71 } };int a[][3 ]={ 1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 };int a[][3 ]={1 ,2 ,3 ,4 };int a[][3 ]={{1 }, {2 }, {3 } };int a[][3 ]={{1 ,6 }, {2 }, {3 } };
二维数组的应用demo
1 2 3 4 5 6 7 8 9 10 11 12 13 int a[2 ][3 ] = {61 , 65 , 71 , 80 , 75 , 92 };int max = a[0 ][0 ], row = 0 , colum = 0 ;for (int i = 0 ; i < 2 ; i++) { for (int j = 0 ; j < 3 ; j++) { if (a[i][j] > max) { max = a[i][j]; row = i; colum = j; } } } printf ("最大值max=%d 行号row=%d 列号colum=%d" , max, row, colum);
字符串数组
字符: 字符是用单引号括起来的单个字符,它在存储器中占1个字节。例如: ’A
字符串:
是用双引号括起来的一串字符,它在存储器中占n+1个字节,即字符 串的结束符’\0’也占1个字节的位置。例如, ”abc”
有效字符的个数称为字符串长度。 例如, ”abc”的长度为3,但占4 个字节 ( ’\0’一位)。
字符串是用字符型数组存放的
字符串的本质: 字符串是一种以 ‘\0’ 结尾的字符串数组 字符数组:
字符数组:
注意: 在用字符数组来存放某个字符串常量时,如果要指定字符数组的大小, 那么其大小要比字符串的长度大1(多定义一个单元用于存放 ‘\0’ )
demo:
使用%ns格式控制符 限制输入的字符个数1 2 3 4 > char str[6 ]; > scanf ("%5s" , str); > printf ("%s" , str); >
gets
scanf
输入的字符串中可包含空格字符
输入的字符串中不可包含空格字符
只能输入一个字符串
可连续输入多个字符串(使用%s%s…)
不可限定字符串的长度
可限定字符串的长度(使用%ns)
遇到回车符结束
遇到空格符或回车符结束
字符串长度
字符串长度:
1 2 3 4 > char str[ ]= "0123456789" ; > printf ("%d" , strlen (str)); > printf ("%d" , strlen (&str[5 ])); >
常见字符函数
字符串数组使用 1 2 3 4 5 6 char city[][10 ] = {"BeiJing" , "ShangHai" , "TianJin" , "GuangZhou" , "WuHan" };for (int i = 0 ; i < 5 ; i++) { printf ("%s" , city[i]); printf ("\n" ); }
函数 写在main()
函数之前
1 2 3 4 5 6 7 8 9 10 11 12 int funMax (int x, int y) { return x > y ? x : y; } int main () { int a = 3 , b = 5 , res; res = funMax(a, b); printf ("%d" , res); return 0 ; }
提前声明1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 int funMax (int x, int y) ;int main () { int a = 3 , b = 5 , res; res = funMax(a, b); printf ("%d" , res); return 0 ; } int funMax (int x, int y) { return x > y ? x : y; }
使用前声明1 2 3 4 5 6 7 8 9 10 11 12 13 int main () { int a = 3 , b = 5 , res; int funMax (int x, int y) ; res = funMax(a, b); printf ("%d" , res); return 0 ; } int funMax (int x, int y) { return x > y ? x : y; }
函数没有返回值的写 void
1 2 3 void funPrt () { printf ("我没有返回值,我只是打印" ); }
数组函数 数组函数不需要返回值即可改变数组值,(数组是引用传递)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 void funPrtArr (int arr2[]) { arr2[0 ] = 10 ; arr2[1 ] = 20 ; } int main () { int arr[2 ]={1 ,2 }; funPrtArr(arr); for (int i = 0 ; i < 2 ; i++) { printf ("%d " , arr[i]); } return 0 ; }
指针 1 2 3 4 5 6 7 int fei;int *p = &fei; *p = 20 ; fei++; printf ("fei=%d,*p=%d" , fei, *p);
1 2 3 4 5 6 7 int fei;int *p = &fei; *p = 20 ; (*p)++; printf ("fei=%d,*p=%d" , fei, *p);
1 2 char *name = "abc_123" ; printf ("bar = %s " , name);
数组的指针 1 2 3 4 5 6 7 8 9 10 11 12 13 14 int a[5 ];for (int i = 0 ; i < 5 ; i++) { a[i] = i; } int b[5 ];for (int j = 0 ; j < 5 ; j++) { *(b + j) = j; } for (int n = 0 ; n < 5 ; n++) { printf ("%d --- %d \n" , a[n], b[n]); }
利用数组指针,输出英文字母
1 2 3 4 5 6 7 8 9 10 11 12 13 14 char strA[5 ];for (int i = 0 ; i < 5 ; i++) { strA[i] = 'A' + i; } char strB[5 ];for (int j = 0 ; j < 5 ; j++) { *(strB + j) = 'A' + j; } for (int n = 0 ; n < 5 ; n++) { printf ("%c --- %c \n" , strA[n], strB[n]); }
指针作为函数的参数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 void funMax (int x) { x = 5 ; } int main () { int a = 3 ; funMax( a); printf ("%d" , a); return 0 ; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 void funMax (int *x) { *x = 5 ; } int main () { int a = 3 ; funMax( &a); printf ("%d" , a); return 0 ; }
结构体 结构体struct
第一种方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #include <stdio.h> #include <malloc.h> void Chinese () { system("chcp 65001" ); } struct book { char name[20 ]; char author[20 ]; int price; }; int main () { Chinese(); struct book foo = { "论语" , "孔子" , 100 }; printf ("书名:%s 作者:%s 价格:%d " , foo.name, foo.author, foo.price); return 0 ; }
第二种方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include <stdio.h> #include <malloc.h> void Chinese () { system("chcp 65001" ); } struct book { char name[20 ]; char author[20 ]; int price; } foo = { "论语" , "孔子" , 100 }; int main () { Chinese(); printf ("书名:%s 作者:%s 价格:%d " , foo.name, foo.author, foo.price); return 0 ; }
第三种方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #include <stdio.h> #include <malloc.h> void Chinese () { system("chcp 65001" ); } struct { char name[20 ]; char author[20 ]; int price; } foo = { "论语" , "孔子" , 100 }; int main () { Chinese(); printf ("书名:%s 作者:%s 价格:%d " , foo.name, foo.author, foo.price); return 0 ; }
结构体指针 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #include <stdio.h> #include <malloc.h> void Chinese () { system("chcp 65001" ); } struct { char name[20 ]; char author[20 ]; int price; char *nickname; } foo = { "论语" , "孔子" , 100 , "孔仲尼" }; int main () { Chinese(); printf ("书名:%s " , foo.name); printf ("作者:%s " , foo.author); printf ("价格:%d " , foo.price); printf ("别名:%s" , foo.nickname); return 0 ; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 #include <stdio.h> #include <malloc.h> void Chinese () { system("chcp 65001" ); } struct { char name[20 ]; char author[20 ]; int price; char *nickname; } book = { "论语" , "孔子" , 100 ,"孔仲尼" }, *pBook = &book; int main () { Chinese(); printf ("书名:%s " , (*pBook).name); printf ("作者:%s " , (*pBook).author); printf ("价格:%d " , (*pBook).price); printf ("别名:%s" , (*pBook).nickname); printf ("\n\r 通常采用后面的写法" ); printf ("书名:%s " , (pBook->name)); printf ("作者:%s " , (pBook->author)); printf ("价格:%d " , (pBook->price)); printf ("别名:%s" , (pBook->nickname)); return 0 ; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 #include <stdio.h> #include <malloc.h> void Chinese () { system("chcp 65001" ); } struct book { char name[20 ]; char author[20 ]; int price; char *nickname; } books[] = { {"论语" , "孔子" , 100 , "孔仲尼" }, {"史记" , "司马迁" , 200 , "子长" }, }, *pBook; int main () { Chinese(); int len2 = sizeof (books) / sizeof (struct book); for (pBook=books; pBook<books+len2; pBook++){ printf ("书名:%s " , (pBook->name)); printf ("作者:%s " , (pBook->author)); printf ("价格:%d " , (pBook->price)); printf ("别名:%s" , (pBook->nickname)); printf ("\n\r" ); } return 0 ; }
底部 没有了