目录
一、C编写代码知识点
二、运算符优先级
三、命名规范(参考华为编码规范和范例)
四、代码练习
一、C编写代码知识点
1.#define中的 #与##
#define GPEBLT_FUNCNAME(basename) (SCODE (GPE::*)(struct GPEBltParms*))&GPE::##basename
在#define中,标准只定义了#和##两种操作。#用来把参数转换成字符串,##则用来连接两个前后两个参数,把它们变成一个字符串。
#include
#define paster( n ) printf( "token " #n" = %dn ", token##n )
int main()
{
int token9=10;
paster(9);
return 0;
}
输出为
[leshy@leshy src]$ ./a.out
token 9 = 10
2.使用typedef给一个还未完全声明的类型tagNode起了一个新别名
格式顺序:
struct tagNode
{
char *pItem;
struct tagNode *pNext;
};
typedef struct tagNode *pNode;
3.rand() % 100 伪随机数 随机种子,没有真正的随机
eg:srand((unsighed)time(NULL));
a = rand % 100;
4.??引用相当于 '=' eg:char a[] = "hello" , a和hello 引用的对象同一个??
二、运算符优先级
15级别运算符优先级 图表格式
转载自:C语言符号的优先级_xiaoxiaoyu-CSDN博客_c语言优先级
转载自:C语言运算符优先级(超详细)_良师,益友-CSDN博客_c语言运算符的优先级顺序
三、命名规范(参考华为编码规范和范例)
四、代码练习
1.约瑟夫环 #includeint main() { int a[100] = {0}; int k = -1; int n; int i; printf("Input a number: n"); scanf("%d",&n); for (i = 0; i < n; i++) { a[i] = i + 1; } printf("n"); while(a[1] != 0) { k = (k + 3) % n; printf("%4d|",a[k]); for (i = k; i < n; i++) { a[i] = a[i + 1]; } k = k - 1; n = n - 1; } printf("n%dn",a[0]); return 0; } 2.排序(待补充) #include #include #include #define len 10 void print_sort(int a[]) { int i; for (i = 0; i < len; i++) { printf("%3d",a[i]); } printf("n"); } void sort_bubbling(int a[]) { int i,j,temp; for (i = 0; i < len - 1; i++) { int s = 1; for(j = 0; j < len - i - 1; j++) { if(a[j] > a[j + 1]) { temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; s = 0; } } if (s) { break; } } } int * create_rand() { int i; int * a = (int *)malloc(sizeof(int)*len); srand((unsigned)time(NULL)); if (!a) { printf("create_rand failed!n"); return a; } for (i = 0; i < len; i++) { a[i] = rand() % 100; } return a; } void cost_time(int *a,void (*p)(int a[]) ) { clock_t start = clock(); p(a); clock_t end = clock(); printf("%.8fn",((double)(end - start))/CLOCKS_PER_SEC); } void f_sort(int a[], int start, int end) { int s_start = start; int s_end = end; int base = a[start]; while(s_start < s_end) { while(s_start < s_end && base < a[s_end]) { s_end--; } if(s_start < s_end) { a[s_start] = a[s_end]; s_start++; } while(s_start < s_end && base > a[s_start]) { s_start++; } if(s_start < s_end) { a[s_end] = a[s_start]; s_end--; } } a[s_start] = base; if (start != s_start) { f_sort(a,start,s_start - 1); } if (end != s_end) { f_sort(a,s_end + 1,end); } } int main() { int * a = create_rand(); print_sort(a); return 0; } 3.二维数组按每行最小值排序 #include #include #include #define N 5 int main() { int i,j; int arr[N][N]; int min[N] = {0}; int tmp; int k; srand((unsigned)time(NULL)); for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { arr[i][j] = rand() % 100; printf("%4d",arr[i][j]); } printf("n"); } printf("***********************n"); for (i = 0; i < N; i++) { min[i] = arr[i][0]; for (j = 1; j < N; j++) { if (min[i] > arr[i][j]) { min[i] = arr[i][j]; } } } for (i = 0; i < N - 1; i++) { k = i; for (j = i + 1; j < N; j++) { if (min[k] > min[j]) { k = j; } } if (k != i) { tmp = min[i]; min[i] = min[k]; min[k] = tmp; for (j = 0; j < N; j++) { tmp = arr[i][j]; arr[i][j] = arr[k][j]; arr[k][j] = tmp; } } } for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { printf("%4d",arr[i][j]); } printf("n"); } return 0; }



