• 学习c语言第24天(练习)


    编程题

    第一题        最大公约数最小公倍数求和

    1. //求最大公约数和最小公倍数之和
    2. //暴力求解
    3. //int main()
    4. //{
    5. // int n = 0;
    6. // int m = 0;
    7. // while (scanf("%d %d", &n, &m)==2)
    8. // {
    9. // int min = n < m ? n : m;
    10. // int max = n > m ? n : m;
    11. // int i = min;
    12. // int j = max;
    13. // while (1)
    14. // {
    15. // if (n % i == 0 && m % i == 0)
    16. // {
    17. // break;
    18. // }
    19. // i--;
    20. // }
    21. // //i是最大公约数
    22. // while (1)
    23. // {
    24. // if (j % n == 0 && j % m == 0)
    25. // {
    26. // break;
    27. // }
    28. // j++;
    29. // }
    30. // //j最小公倍数
    31. // printf("%d",i+j);
    32. // }
    33. // return 0;
    34. //}
    35. //辗转相除法
    36. int main()
    37. {
    38. int n = 0;
    39. int m = 0;
    40. scanf("%d %d",&n,&m);
    41. int i = n;
    42. int j = m;
    43. int r = 0;
    44. while (r = i % j)
    45. {
    46. i = j;
    47. j = r;
    48. }
    49. //j为最大公约数
    50. printf("%d", m * n / j+j);
    51. return 0;
    52. }

    第二题        空心正方形

    1. //空心正方形
    2. int main()
    3. {
    4. int n = 0;
    5. scanf("%d",&n);
    6. int i = 0;
    7. int j = 0;
    8. for (i = 0; i < n; i++)
    9. {
    10. for (j = 0; j < n; j++)
    11. {
    12. if (i == 0 || i == n - 1 || j == 0 || j == n - 1)
    13. printf("* ");
    14. else
    15. printf(" ");
    16. }
    17. printf("\n");
    18. }
    19. return 0;
    20. }

    第三题        offsetof

    1. offsetof
    2. offsetof(type,member )
    3. 该函数求结构体变量相对于首地址的偏移量
    4. struct S
    5. {
    6. char c1;
    7. int i;
    8. char c2;
    9. };
    10. int main()
    11. {
    12. struct S s = { 0 };
    13. printf("%d\n",offsetof(struct S ,c1));
    14. return 0;
    15. }
    1. struct S
    2. {
    3. char c1;
    4. int i;
    5. char c2;
    6. };
    7. #define OFFSETOF(type,m_name) (int)&(((type *)0)->m_name)//把0强制转换成结构体地址
    8. int main()
    9. {
    10. struct S s = { 0 };
    11. printf("%d\n", OFFSETOF(struct S, c1));
    12. printf("%d\n", OFFSETOF(struct S, i));
    13. printf("%d\n", OFFSETOF(struct S, c2));
    14. return 0;
    15. }

    第四题        箭形图案

    1. int main()
    2. {
    3. int n = 0;
    4. scanf("%d",&n);
    5. //上n行
    6. int i = 0;
    7. for (i = 0; i < n; i++)
    8. {
    9. int j = 0;
    10. for (j = 0; j < n-i; j++)
    11. {
    12. printf(" ");
    13. }
    14. for (j = 0; j <= i; j++)
    15. {
    16. printf("*");
    17. }
    18. printf("\n");
    19. }
    20. for (i = 0; i < n+1; i++)
    21. {
    22. int j = 0;
    23. for (j = 0; j < i; j++)
    24. {
    25. printf(" ");
    26. }
    27. for (j = 0; j 1-i; j++)
    28. {
    29. printf("*");
    30. }
    31. printf("\n");
    32. }
    33. //上n+1行
    34. return 0;
    35. }

    第五题        公务员面试

    1. int main()
    2. {
    3. int score = 0;
    4. int n = 0;
    5. int max = 0;
    6. int min = 100;
    7. int sum = 0;
    8. while (scanf("%d", &score) == 1)
    9. {
    10. n++;
    11. if (score > max)
    12. max = score;
    13. if (score < min)
    14. min = score;
    15. sum += score;
    16. if (n == 7)
    17. {
    18. printf("%.2lf\n",(sum - max - min) / 5.0);
    19. max = 0;
    20. min = 100;
    21. sum = 0;
    22. }
    23. }
    24. return 0;
    25. }

    第六题        改造通讯录2

    1. //通讯录相关的测试
    2. //动态版本
    3. //通讯录默认存放三个人信息
    4. //不够的话 每次增加两个人信息
    5. #include "contact.h"
    6. void menu()
    7. {
    8. printf("**************************\n");
    9. printf("*****1.add****************\n");
    10. printf("*****2.del****************\n");
    11. printf("*****3.search*************\n");
    12. printf("*****4.modify*************\n");
    13. printf("*****5.show***************\n");
    14. printf("*****6.sort***************\n");
    15. printf("*****0.exit***************\n");
    16. printf("**************************\n");
    17. }
    18. int main()
    19. {
    20. int input = 0;
    21. contact con;//通讯录
    22. //初始化通讯录
    23. initcontact(&con);
    24. do
    25. {
    26. menu();
    27. printf("请选择:>");
    28. scanf("%d", &input);
    29. switch (input)
    30. {
    31. case 1:
    32. addcontact(&con);
    33. break;
    34. case 2:
    35. delcontact(&con);
    36. break;
    37. case 3:
    38. searchcontact(&con);
    39. break;
    40. case 4:
    41. modifycontact(&con);
    42. break;
    43. case 5:
    44. showcontact(&con);
    45. break;
    46. case 6:
    47. sortcontact(&con);
    48. break;
    49. case 0:
    50. destroycontact(&con);
    51. printf("退出通讯录\n");
    52. break;
    53. default:
    54. printf("选择错误\n");
    55. break;
    56. }
    57. } while (input);
    58. return 0;
    59. }
    1. //通讯录相关声明
    2. #pragma once
    3. #define _CRT_SECURE_NO_WARNINGS
    4. #include
    5. #include
    6. #include
    7. #include
    8. #define DEFAULT_SZ 3
    9. #define INC_SZ 2
    10. #define MAX 100
    11. #define MAX_NAME 20
    12. #define MAX_SEX 10
    13. #define MAX_TELE 12
    14. #define MAX_ADDR 30
    15. //类型的声明
    16. //人的信息
    17. typedef struct people
    18. {
    19. char name[MAX_NAME];
    20. int age;
    21. char sex[MAX_SEX];
    22. char tele[MAX_TELE];
    23. char addr[MAX_ADDR];
    24. }people;
    25. //通讯录
    26. //静态版本
    27. //typedef struct contact
    28. //{
    29. // people data[MAX];
    30. // int count;
    31. //}contact;
    32. //动态版本
    33. typedef struct contact
    34. {
    35. people * data;
    36. int count;
    37. int capacity;//当前通讯录的容量
    38. }contact;
    39. //初始化通讯录
    40. void initcontact(contact* pc);
    41. //销毁通讯录
    42. void destroycontact(contact*pc);
    43. //添加联系人
    44. void addcontact(contact* pc);
    45. //删除联系人
    46. void delcontact(contact* pc);
    47. //查找联系人
    48. void searchcontact(const contact* pc);
    49. //修改联系人
    50. void modifycontact(contact* pc);
    51. //打印通讯录的信息
    52. void showcontact(const contact* pc);
    53. //排序通讯录得内容
    54. void sortcontact(contact* pc);
    1. //通讯录相关的实现
    2. #include "contact.h"
    3. //通讯录初始化
    4. //静态版本
    5. //void initcontact(contact* pc)
    6. //{
    7. // assert(pc);
    8. // pc->count = 0;
    9. // memset(pc->data, 0, sizeof(pc->data));
    10. //}
    11. //动态版本
    12. void initcontact(contact* pc)
    13. {
    14. assert(pc);
    15. pc->count = 0;
    16. pc->data = (people*)calloc(DEFAULT_SZ,sizeof(people));
    17. if (pc->data == NULL)
    18. {
    19. printf("initcontact:%s\n",strerror(errno));
    20. }
    21. pc->capacity = DEFAULT_SZ;
    22. }
    23. //销毁通讯录
    24. void destroycontact(contact* pc)
    25. {
    26. assert(pc);
    27. free(pc->data);
    28. pc->data = NULL;
    29. }
    30. //增加联系人
    31. //静态版本
    32. //void addcontact(contact* pc)
    33. //{
    34. // assert(pc);
    35. // if (pc->count == MAX)
    36. // {
    37. // printf("通讯录已满,无法添加");
    38. // return;
    39. // }
    40. // //
    41. // printf("请输入名字");
    42. // scanf("%s", pc->data[pc->count].name);
    43. // printf("请输入年龄");
    44. // scanf("%d", &(pc->data[pc->count].age));
    45. // printf("请输入性别");
    46. // scanf("%s", pc->data[pc->count].sex);
    47. // printf("请输入电话");
    48. // scanf("%s", pc->data[pc->count].tele);
    49. // printf("请输入地址");
    50. // scanf("%s", pc->data[pc->count].addr);
    51. // pc->count++;
    52. // printf("增加成功\n");
    53. //}
    54. //动态版本
    55. void checkcapacity(contact* pc)
    56. {
    57. if (pc->count == pc->capacity)
    58. {
    59. people* ptr = (people*)realloc(pc->data, (pc->capacity + INC_SZ) * sizeof(people));
    60. if (ptr == NULL)
    61. {
    62. printf("addcontact:%s\n", strerror(errno));
    63. }
    64. else
    65. {
    66. pc->data = ptr;
    67. pc->capacity += INC_SZ;
    68. printf("增容成功\n");
    69. }
    70. }
    71. }
    72. void addcontact(contact* pc)
    73. {
    74. assert(pc);
    75. //增容
    76. checkcapacity(pc);
    77. //
    78. printf("请输入名字");
    79. scanf("%s", pc->data[pc->count].name);
    80. printf("请输入年龄");
    81. scanf("%d", &(pc->data[pc->count].age));
    82. printf("请输入性别");
    83. scanf("%s", pc->data[pc->count].sex);
    84. printf("请输入电话");
    85. scanf("%s", pc->data[pc->count].tele);
    86. printf("请输入地址");
    87. scanf("%s", pc->data[pc->count].addr);
    88. pc->count++;
    89. printf("增加成功\n");
    90. }
    91. //删除联系人
    92. static int findbyname(contact* pc, char name[])
    93. {
    94. assert(pc);
    95. int i = 0;
    96. for (i = 0; i < pc->count; i++)
    97. {
    98. if (strcmp(pc->data[i].name, name) == 0)
    99. return i;
    100. }
    101. return -1;
    102. }
    103. void delcontact(contact* pc)
    104. {
    105. assert(pc);
    106. int i = 0;
    107. if (pc->count == 0)
    108. {
    109. printf("通讯录为空,没有信息可以删除\n");
    110. return;
    111. }
    112. char name[MAX_NAME] = { 0 };
    113. printf("请输入要删除人的名字");
    114. scanf("%s", name);
    115. //删除
    116. //1.查找
    117. int pos = findbyname(pc, name);
    118. if (pos == -1)
    119. {
    120. printf("要删除的人不存在");
    121. return;
    122. }
    123. //2.删除
    124. for (i = pos; i < pc->count - 1; i++)
    125. {
    126. pc->data[i] = pc->data[i + 1];
    127. }
    128. pc->count--;
    129. printf("删除成功");
    130. }
    131. //查找联系人
    132. void searchcontact(const contact* pc)
    133. {
    134. assert(pc);
    135. char name[MAX_NAME] = { 0 };
    136. printf("请输入要查找人的名字");
    137. scanf("%s", name);
    138. //1.查找
    139. int pos = findbyname(pc, name);
    140. if (pos == -1)
    141. {
    142. printf("要查找的人不存在\n");
    143. return;
    144. }
    145. else
    146. {
    147. printf("%-20s\t%-5s\t%-5s\t%-12s\t%-30s\n", "名字", "年龄", "性别", "电话", "地址");
    148. printf("%-20s\t%-5d\t%-5s\t%-12s\t%-30s\n",
    149. pc->data[pos].name,
    150. pc->data[pos].age,
    151. pc->data[pos].sex,
    152. pc->data[pos].tele,
    153. pc->data[pos].addr);
    154. }
    155. }
    156. //修改联系人
    157. void modifycontact(contact* pc)
    158. {
    159. assert(pc);
    160. char name[MAX_NAME] = { 0 };
    161. printf("请输入要修改人的名字");
    162. scanf("%s", name);
    163. //1.查找
    164. int pos = findbyname(pc, name);
    165. if (pos == -1)
    166. {
    167. printf("要查找的人不存在\n");
    168. return;
    169. }
    170. //修改
    171. printf("请输入名字");
    172. scanf("%s", pc->data[pos].name);
    173. printf("请输入年龄");
    174. scanf("%d", &(pc->data[pos].age));
    175. printf("请输入性别");
    176. scanf("%s", pc->data[pos].sex);
    177. printf("请输入电话");
    178. scanf("%s", pc->data[pos].tele);
    179. printf("请输入地址");
    180. scanf("%s", pc->data[pos].addr);
    181. printf("修改成功\n");
    182. }
    183. //显示通讯录
    184. void showcontact(const contact* pc)
    185. {
    186. assert(pc);
    187. int i = 0;
    188. printf("%-20s\t%-5s\t%-5s\t%-12s\t%-30s\n", "名字", "年龄", "性别", "电话", "地址");
    189. for (i = 0; i < pc->count; i++)
    190. {
    191. printf("%-20s\t%-5d\t%-5s\t%-12s\t%-30s\n",
    192. pc->data[i].name,
    193. pc->data[i].age,
    194. pc->data[i].sex,
    195. pc->data[i].tele,
    196. pc->data[i].addr);
    197. }
    198. }
    199. //排序
    200. int cmp_peo_by_name(const void* e1, const void* e2)
    201. {
    202. return strcmp(((people*)e1)->name, ((people*)e2)->name);
    203. }
    204. void sortcontact(contact* pc)
    205. {
    206. assert(pc);
    207. qsort(pc->data, pc->count, sizeof(people), cmp_peo_by_name);
    208. printf("排序成功\n");
    209. }

    第七题        找单身狗

    1. //找单身狗
    2. int find_single_num(int arr[], int sz, int* pd1, int* pd2)
    3. {
    4. int i = 0;
    5. int ret = 0;
    6. //1.异或
    7. for (i = 0; i < sz; i++)
    8. {
    9. ret ^= arr[i];
    10. }
    11. //2.计算ret中最右边第几位是1
    12. int pos = 0;
    13. for (pos; pos < 32; pos++)
    14. {
    15. if (((ret >> pos) & 1) == 1)
    16. {
    17. break;
    18. }
    19. }
    20. for (i = 0; i < sz; i++)
    21. {
    22. if (((arr[i] >> pos) & 1) == 1)
    23. {
    24. *pd1 ^= arr[i];
    25. }
    26. else
    27. {
    28. *pd2 ^= arr[i];
    29. }
    30. }
    31. }
    32. int main()
    33. {
    34. int arr[] = {1,2,3,4,5,1,2,3,4,6};
    35. int sz = sizeof(arr) / sizeof(arr[0]);
    36. int dog1 = 0;
    37. int dog2 = 0;
    38. find_single_num(arr, sz, &dog1, &dog2);
    39. printf("%d %d\n",dog1,dog2);
    40. return 0;
    41. //5^6 101 110-->011 把最低位为0的分成一组,把最低位为1的分成一组
    42. //分组
    43. //1.所有数字异或
    44. //2.找出异或的结果数字中哪一位为1--n
    45. //3.以第n位为0放一组,以第n位为1放一组
    46. }

    第八题        模拟实现atoi

    1. atoi
    2. int atoi (const char*str);
    1. //模拟实现atoi
    2. //1.空指针
    3. //2.空字符串
    4. //3.空格
    5. //4.+-
    6. //5.越界
    7. //6.非数字字符
    8. enum Status
    9. {
    10. VALID,//0
    11. INVALID//1
    12. }sta=INVALID;
    13. int my_atoi(const char* str)
    14. {
    15. int flag = 1;
    16. assert(str);
    17. if (*str == '\n')
    18. {
    19. return 0;
    20. }
    21. //跳过空白字符
    22. while (isspace(*str))
    23. {
    24. str++;
    25. }
    26. //+-
    27. if (*str == '+')
    28. {
    29. flag = 1;
    30. str++;
    31. }
    32. else if (*str == '-')
    33. {
    34. flag = -1;
    35. str++;
    36. }
    37. //
    38. long long ret = 0;
    39. while (*str)
    40. {
    41. if (isdigit(*str))
    42. {
    43. ret = ret * 10 + flag * (*str - '0');
    44. if (ret > INT_MAX || ret < INT_MIN)
    45. {
    46. return 0;
    47. }
    48. }
    49. else
    50. {
    51. return ret;
    52. }
    53. str++;
    54. }
    55. if (*str == '\0')
    56. {
    57. sta = VALID;
    58. }
    59. return (int)ret;
    60. }
    61. int main()
    62. {
    63. char arr[20] = "-123abc";
    64. int ret =my_atoi(arr);
    65. if (sta == INVALID)
    66. {
    67. printf("非法返回:%d\n",ret);
    68. }
    69. else if (sta == VALID)
    70. {
    71. printf("合法转换:%d\n",ret);
    72. }
    73. return 0;
    74. }

    第九题        改造通讯录3

    1. //通讯录相关的测试
    2. //动态版本
    3. //通讯录默认存放三个人信息
    4. //不够的话 每次增加两个人信息
    5. #include "contact.h"
    6. void menu()
    7. {
    8. printf("**************************\n");
    9. printf("*****1.add****************\n");
    10. printf("*****2.del****************\n");
    11. printf("*****3.search*************\n");
    12. printf("*****4.modify*************\n");
    13. printf("*****5.show***************\n");
    14. printf("*****6.sort***************\n");
    15. printf("*****0.exit***************\n");
    16. printf("**************************\n");
    17. }
    18. int main()
    19. {
    20. int input = 0;
    21. contact con;//通讯录
    22. //初始化通讯录
    23. initcontact(&con);
    24. do
    25. {
    26. menu();
    27. printf("请选择:>");
    28. scanf("%d", &input);
    29. switch (input)
    30. {
    31. case 1:
    32. addcontact(&con);
    33. break;
    34. case 2:
    35. delcontact(&con);
    36. break;
    37. case 3:
    38. searchcontact(&con);
    39. break;
    40. case 4:
    41. modifycontact(&con);
    42. break;
    43. case 5:
    44. showcontact(&con);
    45. break;
    46. case 6:
    47. sortcontact(&con);
    48. break;
    49. case 0:
    50. savecontact( &con);
    51. destroycontact(&con);
    52. printf("退出通讯录\n");
    53. break;
    54. default:
    55. printf("选择错误\n");
    56. break;
    57. }
    58. } while (input);
    59. return 0;
    60. }
    1. //通讯录相关声明
    2. #pragma once
    3. #define _CRT_SECURE_NO_WARNINGS
    4. #include
    5. #include
    6. #include
    7. #include
    8. #define DEFAULT_SZ 3
    9. #define INC_SZ 2
    10. #define MAX 100
    11. #define MAX_NAME 20
    12. #define MAX_SEX 10
    13. #define MAX_TELE 12
    14. #define MAX_ADDR 30
    15. //类型的声明
    16. //人的信息
    17. typedef struct people
    18. {
    19. char name[MAX_NAME];
    20. int age;
    21. char sex[MAX_SEX];
    22. char tele[MAX_TELE];
    23. char addr[MAX_ADDR];
    24. }people;
    25. //通讯录
    26. //静态版本
    27. //typedef struct contact
    28. //{
    29. // people data[MAX];
    30. // int count;
    31. //}contact;
    32. //动态版本
    33. typedef struct contact
    34. {
    35. people* data;
    36. int count;
    37. int capacity;//当前通讯录的容量
    38. }contact;
    39. //初始化通讯录
    40. void initcontact(contact* pc);
    41. //销毁通讯录
    42. void destroycontact(contact* pc);
    43. //添加联系人
    44. void addcontact(contact* pc);
    45. //删除联系人
    46. void delcontact(contact* pc);
    47. //查找联系人
    48. void searchcontact(const contact* pc);
    49. //修改联系人
    50. void modifycontact(contact* pc);
    51. //打印通讯录的信息
    52. void showcontact(const contact* pc);
    53. //排序通讯录得内容
    54. void sortcontact(contact* pc);
    55. //保存通讯录的信息到文件
    56. void savecontact(const contact* pc);
    57. //加载文件信息到通讯录
    58. void loadcontact(contact*pc);
    1. //通讯录相关的实现
    2. #include "contact.h"
    3. //通讯录初始化
    4. //静态版本
    5. //void initcontact(contact* pc)
    6. //{
    7. // assert(pc);
    8. // pc->count = 0;
    9. // memset(pc->data, 0, sizeof(pc->data));
    10. //}
    11. void checkcapacity(contact* pc)
    12. {
    13. if (pc->count == pc->capacity)
    14. {
    15. people* ptr = (people*)realloc(pc->data, (pc->capacity + INC_SZ) * sizeof(people));
    16. if (ptr == NULL)
    17. {
    18. printf("addcontact:%s\n", strerror(errno));
    19. }
    20. else
    21. {
    22. pc->data = ptr;
    23. pc->capacity += INC_SZ;
    24. printf("增容成功\n");
    25. }
    26. }
    27. }
    28. void loadcontact(contact* pc)
    29. {
    30. FILE* pfread = fopen("contact.txt","rb");
    31. if (pfread == NULL)
    32. {
    33. perror("loadcontact");
    34. return;
    35. }
    36. people tmp = { 0 };
    37. while (fread(&tmp, sizeof(people), 1, pfread))
    38. {
    39. checkcapacity(pc);
    40. pc->data[pc->count] = tmp;
    41. pc->count++;
    42. }
    43. fclose(pfread);
    44. pfread = NULL;
    45. }
    46. //动态版本
    47. void initcontact(contact* pc)
    48. {
    49. assert(pc);
    50. pc->count = 0;
    51. pc->data = (people*)calloc(DEFAULT_SZ, sizeof(people));
    52. if (pc->data == NULL)
    53. {
    54. printf("initcontact:%s\n", strerror(errno));
    55. }
    56. pc->capacity = DEFAULT_SZ;
    57. //加载文件的信息到通讯录中
    58. loadcontact(pc);
    59. }
    60. //销毁通讯录
    61. void destroycontact(contact* pc)
    62. {
    63. assert(pc);
    64. free(pc->data);
    65. pc->data = NULL;
    66. }
    67. //增加联系人
    68. //静态版本
    69. //void addcontact(contact* pc)
    70. //{
    71. // assert(pc);
    72. // if (pc->count == MAX)
    73. // {
    74. // printf("通讯录已满,无法添加");
    75. // return;
    76. // }
    77. // //
    78. // printf("请输入名字");
    79. // scanf("%s", pc->data[pc->count].name);
    80. // printf("请输入年龄");
    81. // scanf("%d", &(pc->data[pc->count].age));
    82. // printf("请输入性别");
    83. // scanf("%s", pc->data[pc->count].sex);
    84. // printf("请输入电话");
    85. // scanf("%s", pc->data[pc->count].tele);
    86. // printf("请输入地址");
    87. // scanf("%s", pc->data[pc->count].addr);
    88. // pc->count++;
    89. // printf("增加成功\n");
    90. //}
    91. //动态版本
    92. void addcontact(contact* pc)
    93. {
    94. assert(pc);
    95. //增容
    96. checkcapacity(pc);
    97. //
    98. printf("请输入名字");
    99. scanf("%s", pc->data[pc->count].name);
    100. printf("请输入年龄");
    101. scanf("%d", &(pc->data[pc->count].age));
    102. printf("请输入性别");
    103. scanf("%s", pc->data[pc->count].sex);
    104. printf("请输入电话");
    105. scanf("%s", pc->data[pc->count].tele);
    106. printf("请输入地址");
    107. scanf("%s", pc->data[pc->count].addr);
    108. pc->count++;
    109. printf("增加成功\n");
    110. }
    111. //删除联系人
    112. static int findbyname(contact* pc, char name[])
    113. {
    114. assert(pc);
    115. int i = 0;
    116. for (i = 0; i < pc->count; i++)
    117. {
    118. if (strcmp(pc->data[i].name, name) == 0)
    119. return i;
    120. }
    121. return -1;
    122. }
    123. void delcontact(contact* pc)
    124. {
    125. assert(pc);
    126. int i = 0;
    127. if (pc->count == 0)
    128. {
    129. printf("通讯录为空,没有信息可以删除\n");
    130. return;
    131. }
    132. char name[MAX_NAME] = { 0 };
    133. printf("请输入要删除人的名字");
    134. scanf("%s", name);
    135. //删除
    136. //1.查找
    137. int pos = findbyname(pc, name);
    138. if (pos == -1)
    139. {
    140. printf("要删除的人不存在");
    141. return;
    142. }
    143. //2.删除
    144. for (i = pos; i < pc->count - 1; i++)
    145. {
    146. pc->data[i] = pc->data[i + 1];
    147. }
    148. pc->count--;
    149. printf("删除成功");
    150. }
    151. //查找联系人
    152. void searchcontact(const contact* pc)
    153. {
    154. assert(pc);
    155. char name[MAX_NAME] = { 0 };
    156. printf("请输入要查找人的名字");
    157. scanf("%s", name);
    158. //1.查找
    159. int pos = findbyname(pc, name);
    160. if (pos == -1)
    161. {
    162. printf("要查找的人不存在\n");
    163. return;
    164. }
    165. else
    166. {
    167. printf("%-20s\t%-5s\t%-5s\t%-12s\t%-30s\n", "名字", "年龄", "性别", "电话", "地址");
    168. printf("%-20s\t%-5d\t%-5s\t%-12s\t%-30s\n",
    169. pc->data[pos].name,
    170. pc->data[pos].age,
    171. pc->data[pos].sex,
    172. pc->data[pos].tele,
    173. pc->data[pos].addr);
    174. }
    175. }
    176. //修改联系人
    177. void modifycontact(contact* pc)
    178. {
    179. assert(pc);
    180. char name[MAX_NAME] = { 0 };
    181. printf("请输入要修改人的名字");
    182. scanf("%s", name);
    183. //1.查找
    184. int pos = findbyname(pc, name);
    185. if (pos == -1)
    186. {
    187. printf("要查找的人不存在\n");
    188. return;
    189. }
    190. //修改
    191. printf("请输入名字");
    192. scanf("%s", pc->data[pos].name);
    193. printf("请输入年龄");
    194. scanf("%d", &(pc->data[pos].age));
    195. printf("请输入性别");
    196. scanf("%s", pc->data[pos].sex);
    197. printf("请输入电话");
    198. scanf("%s", pc->data[pos].tele);
    199. printf("请输入地址");
    200. scanf("%s", pc->data[pos].addr);
    201. printf("修改成功\n");
    202. }
    203. //显示通讯录
    204. void showcontact(const contact* pc)
    205. {
    206. assert(pc);
    207. int i = 0;
    208. printf("%-20s\t%-5s\t%-5s\t%-12s\t%-30s\n", "名字", "年龄", "性别", "电话", "地址");
    209. for (i = 0; i < pc->count; i++)
    210. {
    211. printf("%-20s\t%-5d\t%-5s\t%-12s\t%-30s\n",
    212. pc->data[i].name,
    213. pc->data[i].age,
    214. pc->data[i].sex,
    215. pc->data[i].tele,
    216. pc->data[i].addr);
    217. }
    218. }
    219. //排序
    220. int cmp_peo_by_name(const void* e1, const void* e2)
    221. {
    222. return strcmp(((people*)e1)->name, ((people*)e2)->name);
    223. }
    224. void sortcontact(contact* pc)
    225. {
    226. assert(pc);
    227. qsort(pc->data, pc->count, sizeof(people), cmp_peo_by_name);
    228. printf("排序成功\n");
    229. }
    230. //保存通讯录到文件
    231. void savecontact(const contact* pc)
    232. {
    233. assert(pc);
    234. FILE* pfwrite = fopen("contact.txt", "wb");
    235. if (pfwrite==NULL)
    236. {
    237. perror("savecontact");
    238. return;
    239. }
    240. //写文件-二进制形式
    241. int i = 0;
    242. for (i = 0; i < pc->count; i++)
    243. {
    244. fwrite(pc->data+i,sizeof(people),1,pfwrite);
    245. }
    246. fclose(pfwrite);
    247. pfwrite = NULL;
    248. }

    第十题        交换奇偶位

    1. //写一个宏,将整数二进制位的奇数位和偶数位交换
    2. 把所有偶数位提出来(&10101010101010101010101010101010,就是0xaaaaaaaa)
    3. 然后右移1,就到了偶数位
    4. 奇数位换到偶数位,也一样
    5. #define SWAP_BIT(n) (((n&0x55555555)<<1)+((n&0xaaaaaaaa)>>1))
    6. int main()
    7. {
    8. int a = 0;
    9. scanf("%d",&a);
    10. SWAP_BIT(a);
    11. printf("%d", SWAP_BIT(a));
    12. return 0;
    13. }

    选择题

    第一题        16  12

    第二题        12 12 16

    第三题        D

    第四题        02 29 00 00

    第五题        C

    第六题        16

    第七题        38 39

    第八题         D

    第九题        1 257

    第十题        D

    第十一题        B

    第十二题        A

    第十三题        A

    第十四题        C

    第十五题        C

    第十六题        C

    第十七题        B

    第十八题        B

    第十九题        B

    第二十题        D

    第二十一题        D

    第二十二题        D

    第二十三题        A

    第二十四题        C

    第二十五题        b

    第二十六题        A

    第二十七题        A

    第二十八题        D        

    第二十九题        B

    第三十题        C

    第三十一题        B

    第三十二题        D        

  • 相关阅读:
    智引未来,利尔达成功入选首批“5G应用解决方案供应商推荐名录”名单
    Springboot+mybatis-plus+dynamic-datasource 切换数据源失败问题总结
    表、栈和队列及其C语言实现
    一键启停脚本
    prerender-spa-plugin报错处理,prerender-spa-plugin-next长江后浪
    PX4入门指南
    软件开发介绍
    java基础篇(1)
    【每周Java技术】2022.06.27 周一 ~ 07.03 周日(StarRocks | 注解 | Maven包冲突)
    前端周刊第十五期
  • 原文地址:https://blog.csdn.net/2301_79600945/article/details/140965759