赞
踩
第一题:
答案:
- #include <stdio.h>
- void sort(int a[], int m) //将数组a的前m个元素(从小到大)排序
- {
- int i = 0;
- for (i = 0; i < m - 1; i++)
- {
- int j = 0;
- int flag = 1;
- for (j = 0; j < m - 1 - i; j++)
- {
- if (a[j] > a[j + 1])
- {
- int t = 0;
- t = a[j];
- a[j] = a[j + 1];
- a[j + 1] = t;
- flag = 0;
- }
- }
- if (flag == 1)
- {
- break;
- }
- }
- }
- void input(int a[], int m) //依次从键盘输入数组a的前m个元素
- {
- int i = 0;
- for (i = 0; i < m; i++)
- {
- scanf("%d", &a[i]);
- }
- }
- void print(int a[], int m) //依次输出数组a的前m个元素
- {
- int i = 0;
- for (i = 0; i < m; i++)
- {
- printf("%4d", a[i]);
- }
- printf("\n");
- }
- void insertSortedList(int a[], int m, int num) //将num插入到数组a中(数组a的前m个元素已经排序),使得数组a仍然升序。
- {
- a[m] = num;
- int i = 0;
- for(i=m;i>=0;i--)
- {
- if (a[i] < a[i-1])
- {
- int t = a[i-1];
- a[i-1] = a[i];
- a[i] = t;
- }
- else
- {
- break;
- }
- }
- }
- void main()
- {
- int m, k;
- scanf("%d", &m);
- int alist[1000];
- input(alist, m);
- sort(alist, m);
- print(alist, m);
- scanf("%d", &k);
- insertSortedList(alist, m, k);
- print(alist, m + 1);
- }

第二题:
答案:
- #include <stdio.h>
- int gcd(int a, int b); //计算并返回整数a,整数b的最大公约数.
- void add(int op1[], int op2[], int rst[]); //计算分数op1和op2的和,保存结果到rst.
- void sub(int op1[], int op2[], int rst[]); //计算分数op1和op2的差,保存结果到rst.
- void mul(int op1[], int op2[], int rst[]); //计算分数op1和op2的积,保存结果到rst.
- void div(int op1[], int op2[], int rst[]); //计算分数op1和op2的商,保存结果到rst.
-
-
- void main()
- {
- int a, b, c, d;
- int op1[2], op2[2], rst[2];
- scanf("%d%d", &op1[1], &op1[0]);
- scanf("%d%d", &op2[1], &op2[0]);
- add(op1, op2, rst);
- printf("%d/%d + %d/%d = %d/%d\n", op1[1], op1[0], op2[1], op2[0], rst[1], rst[0]);
- sub(op1, op2, rst);
- printf("%d/%d - %d/%d = %d/%d\n", op1[1], op1[0], op2[1], op2[0], rst[1], rst[0]);
- mul(op1, op2, rst);
- printf("%d/%d * %d/%d = %d/%d\n", op1[1], op1[0], op2[1], op2[0], rst[1], rst[0]);
- div(op1, op2, rst);
- printf("%d/%d / %d/%d = %d/%d\n", op1[1], op1[0], op2[1], op2[0], rst[1], rst[0]);
- }
-
- int gcd(int a, int b)//返回参数a,b的最大公约数
- {
- int r = a % b;
- while (r != 0)
- {
- a = b;
- b = r;
- r = a % b;
- }
- return b;
- }
- void add(int op1[], int op2[], int rst[]) //计算分数op1和op2的和,保存结果到rst.
- {
- int fm = op1[0] * op2[0]; //和的分母
- int fz = op1[1] * op2[0] + op2[1] * op1[0]; //和的分子
- int g = gcd(fm, fz);
- rst[0] = fm / g; //分子分母同时除以它们的最大公约数,实现约分
- rst[1] = fz / g;
- if (rst[0] < 0) //确保分母为正数
- {
- rst[0] = -rst[0];
- rst[1] = -rst[1];
- }
- }
- void sub(int op1[], int op2[], int rst[]) //计算分数op1和op2的差,保存结果到rst.
- {
- int fm = op1[0] * op2[0];
- int fz = op1[1] * op2[0] - op2[1] * op1[0];
- int g = gcd(fm, fz);
- rst[0] = fm / g;
- rst[1] = fz / g;
- if (rst[0] < 0) //确保分母为正数
- {
- rst[0] = -rst[0];
- rst[1] = -rst[1];
- }
- }
- void mul(int op1[], int op2[], int rst[]) //计算分数op1和op2的积,保存结果到rst.
- {
- int fm = op1[0] * op2[0];
- int fz = op1[1] * op2[1];
- int g = gcd(fm, fz);
- rst[0] = fm / g;
- rst[1] = fz / g;
- if (rst[0] < 0) //确保分母为正数
- {
- rst[0] = -rst[0];
- rst[1] = -rst[1];
- }
- }
- void div(int op1[], int op2[], int rst[]) //计算分数op1和op2的商,保存结果到rst.
- {
- int fm = op1[0] * op2[1];
- int fz = op1[1] * op2[0];
- int g = gcd(fm, fz);
- rst[0] = fm / g;
- rst[1] = fz / g;
- if (rst[0] < 0) //确保分母为正数
- {
- rst[0] = -rst[0];
- rst[1] = -rst[1];
- }
- }

第三题:

答案:
- #include <stdio.h>
- int myisdigital(char ch); //数字字符判断函数,如果ch是数字字符,则返回1,否则返回0;
- int myisalpha(char ch); //字母字符判断函数,如果ch是大小写字母字符, 则返回1,否则返回0;
- int mystrlen(char str[]); // 返回指定字符串str的长度 (不计\0字符)
- void mystrcat(char str1[], char str2[]); // 连接的两个字符串, 将str2连接到str1后面
- int mystrcmp(char str1[], char str2[]); //比较两个字符串,如果str1大,则返回1;如果str2则返回-1;如果相等,返回0;
- void mystrcpy(char str1[], char str2[]); //复制字符串str2到字符串str1中
-
- void main()
- {
- char str1[1000], str2[100], tmp[100]; int m;
- int num_alpha = 0; //str1中的字母字符的个数
- int num = 0; //str2中的数组字符构成的整数
- int i;
- scanf("%s%s%d", str1, str2, &m);
- printf("%d,", mystrlen(str1) + mystrlen(str2));
- for (i = 0; i < mystrlen(str1); i++)
- if (myisalpha(str1[i]))
- num_alpha++;
- for (i = 0; i < mystrlen(str2); i++)
- if (myisdigital(str2[i]))
- num = num * 10 + str2[i] - '0'; //找到一个新数符,将原来的数字左移一位,然后在末位添加新数符
- printf("%d,%d,", num_alpha, num);
- if (mystrcmp(str1, str2) > 0) // str1比较大,则交换
- {
- mystrcpy(tmp, str1);
- mystrcpy(str1, str2);
- mystrcpy(str2, tmp);
- }
- for (i = 1; i <= m; i++)
- mystrcat(str1, str2);
- printf("%s", str1);
- }
-
- int myisdigital(char ch)
- {
- if (ch >= '0' && ch <= '9')
- return 1;
- else
- return 0;
- }
-
-
- void mystrcat(char str1[], char str2[])
- {
- int i = 0, j = 0;
- while (str1[i] != '\0')
- i++;
- while (str2[j] != '\0')
- {
- str1[i] = str2[j];
- i++;
- j++;
- }
- str1[i] = '\0'; //给str1最后赋值一个结束字符,这里不可遗漏!!!
- }
-
- int myisalpha(char ch) //字母字符判断函数,如果ch是大小写字母字符, 则返回1,否则返回0;
- {
- if ((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z'))
- return 1;
- else
- return 0;
- }
-
- int mystrlen(char str[]) // 返回指定字符串str的长度 (不计\0字符)
- {
- int i = 0;
- while (str[i] != '\0')
- {
- i++;
- }
- return i;
- }
-
- int mystrcmp(char str1[], char str2[]) //比较两个字符串,如果str1大,则返回1;如果str2则返回-1;如果相等,返回0;
- {
- int i = 0, j = 0;
- if (mystrlen(str1) < mystrlen(str2))
- {
- for (i = 0; i <= mystrlen(str1); i++)
- {
- if (str1[i] > str2[i])
- return 1;
- if ((str1[i] < str2[i])|| (str1[i] == str2[i]) && i == mystrlen(str1))
- return -1;
- }
- }
- if (mystrlen(str1) > mystrlen(str2))
- {
- for (i = 0; i <= mystrlen(str2); i++)
- {
- if (str1[i] > str2[i] || ((str1[i] == str2[i]) && i == mystrlen(str2)))
- return 1;
- if (str1[i] < str2[i])
- return -1;
- }
- }
- if (mystrlen(str1) == mystrlen(str2))
- {
- for (i = 0; i <= mystrlen(str2); i++)
- {
- if (str1[i] > str2[i])
- return 1;
- if (str1[i] < str2[i])
- return -1;
- if ((str1[i] == str2[i]) && i == mystrlen(str2))
- return 0;
- }
- }
- }
-
- void mystrcpy(char str1[], char str2[]) //复制字符串str2到字符串str1中
- {
- int i = 0;
- for (i = 0; i < mystrlen(str2); i++)
- {
- str1[i] = str2[i];
- }
- str1[i] = '\0';
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。