当前位置:   article > 正文

大一作业习题

大一作业习题

第一题:答案:

  1. #include <stdio.h>
  2. void sort(int a[], int m) //将数组a的前m个元素(从小到大)排序
  3. {
  4. int i = 0;
  5. for (i = 0; i < m - 1; i++)
  6. {
  7. int j = 0;
  8. int flag = 1;
  9. for (j = 0; j < m - 1 - i; j++)
  10. {
  11. if (a[j] > a[j + 1])
  12. {
  13. int t = 0;
  14. t = a[j];
  15. a[j] = a[j + 1];
  16. a[j + 1] = t;
  17. flag = 0;
  18. }
  19. }
  20. if (flag == 1)
  21. {
  22. break;
  23. }
  24. }
  25. }
  26. void input(int a[], int m) //依次从键盘输入数组a的前m个元素
  27. {
  28. int i = 0;
  29. for (i = 0; i < m; i++)
  30. {
  31. scanf("%d", &a[i]);
  32. }
  33. }
  34. void print(int a[], int m) //依次输出数组a的前m个元素
  35. {
  36. int i = 0;
  37. for (i = 0; i < m; i++)
  38. {
  39. printf("%4d", a[i]);
  40. }
  41. printf("\n");
  42. }
  43. void insertSortedList(int a[], int m, int num) //将num插入到数组a中(数组a的前m个元素已经排序),使得数组a仍然升序。
  44. {
  45. a[m] = num;
  46. int i = 0;
  47. for(i=m;i>=0;i--)
  48. {
  49. if (a[i] < a[i-1])
  50. {
  51. int t = a[i-1];
  52. a[i-1] = a[i];
  53. a[i] = t;
  54. }
  55. else
  56. {
  57. break;
  58. }
  59. }
  60. }
  61. void main()
  62. {
  63. int m, k;
  64. scanf("%d", &m);
  65. int alist[1000];
  66. input(alist, m);
  67. sort(alist, m);
  68. print(alist, m);
  69. scanf("%d", &k);
  70. insertSortedList(alist, m, k);
  71. print(alist, m + 1);
  72. }

第二题:

答案:

  1. #include <stdio.h>
  2. int gcd(int a, int b); //计算并返回整数a,整数b的最大公约数.
  3. void add(int op1[], int op2[], int rst[]); //计算分数op1和op2的和,保存结果到rst.
  4. void sub(int op1[], int op2[], int rst[]); //计算分数op1和op2的差,保存结果到rst.
  5. void mul(int op1[], int op2[], int rst[]); //计算分数op1和op2的积,保存结果到rst.
  6. void div(int op1[], int op2[], int rst[]); //计算分数op1和op2的商,保存结果到rst.
  7. void main()
  8. {
  9. int a, b, c, d;
  10. int op1[2], op2[2], rst[2];
  11. scanf("%d%d", &op1[1], &op1[0]);
  12. scanf("%d%d", &op2[1], &op2[0]);
  13. add(op1, op2, rst);
  14. printf("%d/%d + %d/%d = %d/%d\n", op1[1], op1[0], op2[1], op2[0], rst[1], rst[0]);
  15. sub(op1, op2, rst);
  16. printf("%d/%d - %d/%d = %d/%d\n", op1[1], op1[0], op2[1], op2[0], rst[1], rst[0]);
  17. mul(op1, op2, rst);
  18. printf("%d/%d * %d/%d = %d/%d\n", op1[1], op1[0], op2[1], op2[0], rst[1], rst[0]);
  19. div(op1, op2, rst);
  20. printf("%d/%d / %d/%d = %d/%d\n", op1[1], op1[0], op2[1], op2[0], rst[1], rst[0]);
  21. }
  22. int gcd(int a, int b)//返回参数a,b的最大公约数
  23. {
  24. int r = a % b;
  25. while (r != 0)
  26. {
  27. a = b;
  28. b = r;
  29. r = a % b;
  30. }
  31. return b;
  32. }
  33. void add(int op1[], int op2[], int rst[]) //计算分数op1和op2的和,保存结果到rst.
  34. {
  35. int fm = op1[0] * op2[0]; //和的分母
  36. int fz = op1[1] * op2[0] + op2[1] * op1[0]; //和的分子
  37. int g = gcd(fm, fz);
  38. rst[0] = fm / g; //分子分母同时除以它们的最大公约数,实现约分
  39. rst[1] = fz / g;
  40. if (rst[0] < 0) //确保分母为正数
  41. {
  42. rst[0] = -rst[0];
  43. rst[1] = -rst[1];
  44. }
  45. }
  46. void sub(int op1[], int op2[], int rst[]) //计算分数op1和op2的差,保存结果到rst.
  47. {
  48. int fm = op1[0] * op2[0];
  49. int fz = op1[1] * op2[0] - op2[1] * op1[0];
  50. int g = gcd(fm, fz);
  51. rst[0] = fm / g;
  52. rst[1] = fz / g;
  53. if (rst[0] < 0) //确保分母为正数
  54. {
  55. rst[0] = -rst[0];
  56. rst[1] = -rst[1];
  57. }
  58. }
  59. void mul(int op1[], int op2[], int rst[]) //计算分数op1和op2的积,保存结果到rst.
  60. {
  61. int fm = op1[0] * op2[0];
  62. int fz = op1[1] * op2[1];
  63. int g = gcd(fm, fz);
  64. rst[0] = fm / g;
  65. rst[1] = fz / g;
  66. if (rst[0] < 0) //确保分母为正数
  67. {
  68. rst[0] = -rst[0];
  69. rst[1] = -rst[1];
  70. }
  71. }
  72. void div(int op1[], int op2[], int rst[]) //计算分数op1和op2的商,保存结果到rst.
  73. {
  74. int fm = op1[0] * op2[1];
  75. int fz = op1[1] * op2[0];
  76. int g = gcd(fm, fz);
  77. rst[0] = fm / g;
  78. rst[1] = fz / g;
  79. if (rst[0] < 0) //确保分母为正数
  80. {
  81. rst[0] = -rst[0];
  82. rst[1] = -rst[1];
  83. }
  84. }

第三题:

答案:

  1. #include <stdio.h>
  2. int myisdigital(char ch); //数字字符判断函数,如果ch是数字字符,则返回1,否则返回0;
  3. int myisalpha(char ch); //字母字符判断函数,如果ch是大小写字母字符, 则返回1,否则返回0
  4. int mystrlen(char str[]); // 返回指定字符串str的长度 (不计\0字符)
  5. void mystrcat(char str1[], char str2[]); // 连接的两个字符串, 将str2连接到str1后面
  6. int mystrcmp(char str1[], char str2[]); //比较两个字符串,如果str1大,则返回1;如果str2则返回-1;如果相等,返回0
  7. void mystrcpy(char str1[], char str2[]); //复制字符串str2到字符串str1
  8. void main()
  9. {
  10. char str1[1000], str2[100], tmp[100]; int m;
  11. int num_alpha = 0; //str1中的字母字符的个数
  12. int num = 0; //str2中的数组字符构成的整数
  13. int i;
  14. scanf("%s%s%d", str1, str2, &m);
  15. printf("%d,", mystrlen(str1) + mystrlen(str2));
  16. for (i = 0; i < mystrlen(str1); i++)
  17. if (myisalpha(str1[i]))
  18. num_alpha++;
  19. for (i = 0; i < mystrlen(str2); i++)
  20. if (myisdigital(str2[i]))
  21. num = num * 10 + str2[i] - '0'; //找到一个新数符,将原来的数字左移一位,然后在末位添加新数符
  22. printf("%d,%d,", num_alpha, num);
  23. if (mystrcmp(str1, str2) > 0) // str1比较大,则交换
  24. {
  25. mystrcpy(tmp, str1);
  26. mystrcpy(str1, str2);
  27. mystrcpy(str2, tmp);
  28. }
  29. for (i = 1; i <= m; i++)
  30. mystrcat(str1, str2);
  31. printf("%s", str1);
  32. }
  33. int myisdigital(char ch)
  34. {
  35. if (ch >= '0' && ch <= '9')
  36. return 1;
  37. else
  38. return 0;
  39. }
  40. void mystrcat(char str1[], char str2[])
  41. {
  42. int i = 0, j = 0;
  43. while (str1[i] != '\0')
  44. i++;
  45. while (str2[j] != '\0')
  46. {
  47. str1[i] = str2[j];
  48. i++;
  49. j++;
  50. }
  51. str1[i] = '\0'; //给str1最后赋值一个结束字符,这里不可遗漏!!!
  52. }
  53. int myisalpha(char ch) //字母字符判断函数,如果ch是大小写字母字符, 则返回1,否则返回0
  54. {
  55. if ((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z'))
  56. return 1;
  57. else
  58. return 0;
  59. }
  60. int mystrlen(char str[]) // 返回指定字符串str的长度 (不计\0字符)
  61. {
  62. int i = 0;
  63. while (str[i] != '\0')
  64. {
  65. i++;
  66. }
  67. return i;
  68. }
  69. int mystrcmp(char str1[], char str2[]) //比较两个字符串,如果str1大,则返回1;如果str2则返回-1;如果相等,返回0
  70. {
  71. int i = 0, j = 0;
  72. if (mystrlen(str1) < mystrlen(str2))
  73. {
  74. for (i = 0; i <= mystrlen(str1); i++)
  75. {
  76. if (str1[i] > str2[i])
  77. return 1;
  78. if ((str1[i] < str2[i])|| (str1[i] == str2[i]) && i == mystrlen(str1))
  79. return -1;
  80. }
  81. }
  82. if (mystrlen(str1) > mystrlen(str2))
  83. {
  84. for (i = 0; i <= mystrlen(str2); i++)
  85. {
  86. if (str1[i] > str2[i] || ((str1[i] == str2[i]) && i == mystrlen(str2)))
  87. return 1;
  88. if (str1[i] < str2[i])
  89. return -1;
  90. }
  91. }
  92. if (mystrlen(str1) == mystrlen(str2))
  93. {
  94. for (i = 0; i <= mystrlen(str2); i++)
  95. {
  96. if (str1[i] > str2[i])
  97. return 1;
  98. if (str1[i] < str2[i])
  99. return -1;
  100. if ((str1[i] == str2[i]) && i == mystrlen(str2))
  101. return 0;
  102. }
  103. }
  104. }
  105. void mystrcpy(char str1[], char str2[]) //复制字符串str2到字符串str1
  106. {
  107. int i = 0;
  108. for (i = 0; i < mystrlen(str2); i++)
  109. {
  110. str1[i] = str2[i];
  111. }
  112. str1[i] = '\0';
  113. }

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/article/detail/30163
推荐阅读
相关标签
  

闽ICP备14008679号