diff --git a/Cprogramming/2dim_array.c b/Cprogramming/2dim_array.c new file mode 100644 index 00000000..0d4170a6 --- /dev/null +++ b/Cprogramming/2dim_array.c @@ -0,0 +1,14 @@ +#include + +int main() { + //in c programming language, 2dim arrary is in row + // ini + //int a[5][3] = {{},{},{}} 分段赋值 + //int a[5][3] = {} 按行连续赋值 + //如果对全部元素赋值,第一维的长度可以不给出 如下 + int a[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; + int b[][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; + + + return 0; +} \ No newline at end of file diff --git a/Cprogramming/2dim_array_pointer b/Cprogramming/2dim_array_pointer new file mode 100755 index 00000000..e0fb699b Binary files /dev/null and b/Cprogramming/2dim_array_pointer differ diff --git a/Cprogramming/2dim_array_pointer.c b/Cprogramming/2dim_array_pointer.c new file mode 100644 index 00000000..4fea39c2 --- /dev/null +++ b/Cprogramming/2dim_array_pointer.c @@ -0,0 +1,16 @@ +#include + +int main() { + int a[3][4] = {{0,1,2,3}, {4, 5, 6, 7}, {8, 9, 10, 11}}; + int(*p)[4] = a; +//一个指向数组的指针p,数组的类型为int[4] + printf("%d\n", sizeof(*(p+1))); // 16 that is because 4 * 4 = 16 + + /** + * *(p+1)单独使用表示第一行数据,放在表达式里就代表第一行数据的首地址 + * *(p+1)+1 代表第一行数据的第1个元素的地址 + * *(*(p+1)+1) 代表第一行数据的第一个元素 + */ + + return 0; +} \ No newline at end of file diff --git a/Cprogramming/a.out b/Cprogramming/a.out new file mode 100755 index 00000000..547ff1ce Binary files /dev/null and b/Cprogramming/a.out differ diff --git a/Cprogramming/array_ini.c b/Cprogramming/array_ini.c new file mode 100644 index 00000000..cc482107 --- /dev/null +++ b/Cprogramming/array_ini.c @@ -0,0 +1,13 @@ +#include + +int main() { + + int a[4] = {20, 1, 2, 3}; // directly + int a[10] = {1, 2, 3, 4, 5}; //partly + + int a[] = {1, 3, 4, 5, 6}; // == int a[5] = {1, 3, 4, 5, 6} + + + + return 0; +} \ No newline at end of file diff --git a/Cprogramming/ball b/Cprogramming/ball new file mode 100755 index 00000000..a379443b Binary files /dev/null and b/Cprogramming/ball differ diff --git a/Cprogramming/ballGame b/Cprogramming/ballGame new file mode 100755 index 00000000..0ca88b9f Binary files /dev/null and b/Cprogramming/ballGame differ diff --git a/Cprogramming/ballGame.c b/Cprogramming/ballGame.c new file mode 100644 index 00000000..212cdda3 --- /dev/null +++ b/Cprogramming/ballGame.c @@ -0,0 +1,96 @@ +#include +#include +#include + +/** + * 1. 尝试不用usleep函数 利用循环语句使小球变慢 + * 2. 尝试用printf("\a") 实现触边界响铃效果 + * 3. 尝试绘制边框 + * + * 参考答案链接:https://blog.csdn.net/weixin_72939806/article/details/129221682 +*/ + +int main() { + + + // 静止小球的位置 + int i, j; + int x = 2; //坐标 + int y = 2; + + int velocity_x = 1; + int velocity_y = 1; + int left = 0; + int right = 20; + int top = 0; + int bottom = 10; + //长10 宽20 + + + + //int height = 20; + //int velocity = 1; + // printf "\033c" 清屏 + // 小球下落: 让小球的x坐标增加 + // 上下弹跳的小球:小球新位置 = 旧位置x + 速度velocity,当判断小球到达上下边界时改变方向,即改变velocity符号 + // 斜着弹跳的小球:增加x,y两个方向的速度 + + + while(1){ + x+=velocity_x; + y+=velocity_y; + + system("clear"); + + for(j=0;j<=right;j++) printf("_"); printf("\n"); + for(i=1;i + +int main() { + //字符数组实际上就是一系列字符的集合也就是字符串 + char str[30] = {"asdasdasdasdasdasd"}; + char str[20] = "asdasdasasfs"; + + char str[] = "fefegfef"; + + //字符数组只有在定义的时候可以一整个字符串一次性赋值给他,一旦定义完了,就只能一个字符一个字符地赋值了 + + + + return 0; +} \ No newline at end of file diff --git a/Cprogramming/end_of_string b/Cprogramming/end_of_string new file mode 100755 index 00000000..556abb78 Binary files /dev/null and b/Cprogramming/end_of_string differ diff --git a/Cprogramming/end_of_string.c b/Cprogramming/end_of_string.c new file mode 100644 index 00000000..828979e8 --- /dev/null +++ b/Cprogramming/end_of_string.c @@ -0,0 +1,17 @@ +#include +//局部变量的初始值不一定全是0 + +int main() { + char str[30]; + char c; + int i; + for (c = 65, i = 0; c <= 90; c++, i++) { + str[i] = c; + } + str[i] = 0; //也可以写作str[i] = '\0'手动结束字符串 + //更专业的做法是 将str初始就全为0 str = {0}; + + + printf("%s\n", str); + return 0; +} \ No newline at end of file diff --git a/Cprogramming/func_pointer b/Cprogramming/func_pointer new file mode 100755 index 00000000..ff9a0101 Binary files /dev/null and b/Cprogramming/func_pointer differ diff --git a/Cprogramming/func_pointer.c b/Cprogramming/func_pointer.c new file mode 100644 index 00000000..be6afea5 --- /dev/null +++ b/Cprogramming/func_pointer.c @@ -0,0 +1,20 @@ +#include + +int max(int a, int b) { + return a>b ? a : b; +} + +int main() { + int x, y, maxval; + + int (*pmax)(int, int) = max; + //函数指针 + + printf("input two numbers:"); + scanf("%d %d", &x, &y); + maxval = (*pmax)(x,y); + printf("Max value: %d\n", maxval); + + + return 0; +} \ No newline at end of file diff --git a/Cprogramming/gets_scanf.c b/Cprogramming/gets_scanf.c new file mode 100644 index 00000000..cd6db9fb --- /dev/null +++ b/Cprogramming/gets_scanf.c @@ -0,0 +1,10 @@ +#include + +int main() { + //gets 可以接受带空格的字符串 + //scanf 不行,but 不是完全不行 + + + + return 0; +} \ No newline at end of file diff --git a/Cprogramming/hello_world.c b/Cprogramming/hello_world.c new file mode 100644 index 00000000..38759a0d --- /dev/null +++ b/Cprogramming/hello_world.c @@ -0,0 +1,8 @@ +#include + +int main() { + + printf("Hello world"); + + return 0; +} \ No newline at end of file diff --git a/Cprogramming/last_skill_pointer.c b/Cprogramming/last_skill_pointer.c new file mode 100644 index 00000000..e2ca44e5 --- /dev/null +++ b/Cprogramming/last_skill_pointer.c @@ -0,0 +1,19 @@ +#include + +int main() { + /** + * int *p1[6]; 指针数组 + * int *(p2[6]); 指针数组 + * int (*p3)[6]; 二维数组指针 + * int (*p4)(int, int); 函数指针 + * + */ + + //c语言标准规定,对于一个符号的定义,编译器总是从**它的名字**开始读,然后按照优先级顺序依次解析 + //优先级顺序: 定义中被括号()扩起的, + // 后缀操作:()表示这是一个函数,[] 表示这是一个数组 + // 前缀操作: * 表示指向xxx的指针 + + + return 0; +} \ No newline at end of file diff --git a/Cprogramming/main_advanced b/Cprogramming/main_advanced new file mode 100755 index 00000000..74e27b86 Binary files /dev/null and b/Cprogramming/main_advanced differ diff --git a/Cprogramming/main_advanced.c b/Cprogramming/main_advanced.c new file mode 100644 index 00000000..98d8f6a2 --- /dev/null +++ b/Cprogramming/main_advanced.c @@ -0,0 +1,14 @@ +#include + + +int main(int argc, char *argv[]) { + //argc表示传递的字符串的数目,argv是一个指针数组,每一个指针指向一个字符串 + + int i; + printf("The program receives %d parameters:\n", argc); + for (i=0; i +#include + +int main() { + while(1) { + malloc(1024); // allocate 1024bytes + } + + return 0; +} \ No newline at end of file diff --git a/Cprogramming/non-blockingListen b/Cprogramming/non-blockingListen new file mode 100755 index 00000000..ebc99930 Binary files /dev/null and b/Cprogramming/non-blockingListen differ diff --git a/Cprogramming/non-blockingListen.c b/Cprogramming/non-blockingListen.c new file mode 100644 index 00000000..e69de29b diff --git a/Cprogramming/passw b/Cprogramming/passw new file mode 100755 index 00000000..7b848dc0 Binary files /dev/null and b/Cprogramming/passw differ diff --git a/Cprogramming/passw.c b/Cprogramming/passw.c new file mode 100644 index 00000000..cad76189 --- /dev/null +++ b/Cprogramming/passw.c @@ -0,0 +1,48 @@ +#include +#include +#include +#define PWDLEN 20 + +void getpwd(char *pwd, int pwdlen); + +int main() +{ + char pwd[PWDLEN + 1]; + printf("Input password: "); + getpwd(pwd, PWDLEN); + system("stty echo"); + printf("The password is: %s\n", pwd); + + return 0; +} + +/** + * get the password by users + * @param pwd char* 保存密码的内存的首地址 + * @param pwdlen int 密码的最大长度 +*/ + +void getpwd(char *pwd, int pwdlen) { + char ch = 0; + int i = 0; + system("stty -echo");//取消回显 + while (i < pwdlen) { //循环输入密码 + ch = getchar(); + if (ch == '\n') { //unix敲入回车结束 + //printf("\n"); + break; + } + + if (ch == '\b' && i > 0) {//删除键回退之后覆盖 + i--; + //printf("\b \b"); + } else if (isprint(ch)) { + pwd[i] = ch; + //printf("*"); + i++; + } + } + pwd[i] = 0; //最后结束 + printf("\n"); + //system("stty echo"); +} \ No newline at end of file diff --git a/Cprogramming/pointer.c b/Cprogramming/pointer.c new file mode 100644 index 00000000..9130b6b5 --- /dev/null +++ b/Cprogramming/pointer.c @@ -0,0 +1,29 @@ +/** + * Notes on Pointer Full + * 1. 定义指针变量: + * datatype *name 指针变量所指向的数据类型 指针变量的名字 + * + * 2.关于*和&的谜题: + * int a; pa是指向它的指针 + * 2.1 *&a是什么意思? + * attempt:*(&a) == a + * 2.2 &*pa是什么意思? + * attempt: == pa + * + * 3.数组指针 + * 3.1 *p++ = *(p++) + * 3.2 *++p = *(++p) + * + * + * 4.数组和指针不等价 + * +*/ + +#include + +int main() { + + + + return 0; +} \ No newline at end of file diff --git a/Cprogramming/problem_pointer b/Cprogramming/problem_pointer new file mode 100755 index 00000000..2735e0e0 Binary files /dev/null and b/Cprogramming/problem_pointer differ diff --git a/Cprogramming/problem_pointer.c b/Cprogramming/problem_pointer.c new file mode 100644 index 00000000..915ddf8b --- /dev/null +++ b/Cprogramming/problem_pointer.c @@ -0,0 +1,46 @@ +#include + +int main() { + char *lines[5]= { + "COSC1283/1284", + "Programming", + "Techniques", + "is", + "great fun" + }; + /** + * 实际上上述的字符串数组等同于: + * char *string0 = "C0SC1283/1284" + * char *string1 = "Programming" + * char *string2 = "Techniques" + * char *string3 = "is" + * char *string4 = "great fun" + * + * char *lines[5]; + * lines[0] = string0; + * lines[1] = string1; + * .... + * + *  char* lines[5] 定义了一个指针数组 + */ + + char *str1 = lines[1]; + //attempt: str1存放着"COSC1283/1284"的首地址 + char *str2 = *(lines + 3); + //att: str2存放着“is”的首地址 + char c1 = *(*(lines + 4) + 6); + //att: c1 = 'f' + char c2 = (*lines + 5)[5]; + //att: c2 = + char c3 = *lines[0] + 2; + //att: c3 = 'C' + + printf("str1 = %s\n", str1); + printf("str2 = %s\n", str2); + printf(" c1=%c\n",c1); + printf(" c2=%c\n",c2); + printf(" c3=%c\n",c3); + + return 0; + +} \ No newline at end of file diff --git a/Cprogramming/scanf_advanceUsage.c b/Cprogramming/scanf_advanceUsage.c new file mode 100644 index 00000000..e69de29b diff --git a/conio.h b/conio.h new file mode 160000 index 00000000..70935b61 --- /dev/null +++ b/conio.h @@ -0,0 +1 @@ +Subproject commit 70935b61efce6da9042f3543add106e7dc52e3ca