更新作业
This commit is contained in:
parent
5832c427f9
commit
406d2a973d
|
@ -4,6 +4,8 @@
|
||||||
|
|
||||||
代码保证可以通过 moodle 的对应题目,但请勿抄袭,使用代码作为参考与对拍程序更有益于你的成长。
|
代码保证可以通过 moodle 的对应题目,但请勿抄袭,使用代码作为参考与对拍程序更有益于你的成长。
|
||||||
|
|
||||||
|
大家考试加油!
|
||||||
|
|
||||||
## 文件名字的数字是题目的唯一 ID
|
## 文件名字的数字是题目的唯一 ID
|
||||||
查看方式:
|
查看方式:
|
||||||

|

|
|
@ -0,0 +1,53 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
struct student {
|
||||||
|
int id, c;
|
||||||
|
float x, y, z;
|
||||||
|
float sum;
|
||||||
|
} stu[3];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 交换两个结构体中的内容
|
||||||
|
* a、b:待交换的结构体指针
|
||||||
|
*/
|
||||||
|
void swap(struct student* a, struct student* b) {
|
||||||
|
struct student c;
|
||||||
|
c = *a;
|
||||||
|
*a = *b;
|
||||||
|
*b = c;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 对结构体数组进行冒泡排序
|
||||||
|
* p:待排序的结构体数组指针
|
||||||
|
* n:结构体数组长度
|
||||||
|
*/
|
||||||
|
void sort(struct student* p, int n) {
|
||||||
|
for (int i = 0; i < n; i++) {
|
||||||
|
for (int j = 0; j < n - i - 1; j++) {
|
||||||
|
if ((p + j)->c > (p + j + 1)->c || ((p + j)->c == (p + j + 1)->c && (p + j)->sum < (p + j + 1)->sum)) {
|
||||||
|
swap(p + j, p + j + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
// 使用指针读取输入数据
|
||||||
|
scanf("%d,%d,%f,%f,%f", &((stu + 0)->c), &((stu + 0)->id), &((stu + 0)->x), &((stu + 0)->y), &((stu + 0)->z));
|
||||||
|
scanf("%d,%d,%f,%f,%f", &((stu + 1)->c), &((stu + 1)->id), &((stu + 1)->x), &((stu + 1)->y), &((stu + 1)->z));
|
||||||
|
scanf("%d,%d,%f,%f,%f", &((stu + 2)->c), &((stu + 2)->id), &((stu + 2)->x), &((stu + 2)->y), &((stu + 2)->z));
|
||||||
|
// 计算总成绩
|
||||||
|
(stu + 0)->sum = (stu + 0)->x + (stu + 0)->y + (stu + 0)->z;
|
||||||
|
(stu + 1)->sum = (stu + 1)->x + (stu + 1)->y + (stu + 1)->z;
|
||||||
|
(stu + 2)->sum = (stu + 2)->x + (stu + 2)->y + (stu + 2)->z;
|
||||||
|
|
||||||
|
sort(stu, 3);
|
||||||
|
|
||||||
|
// 使用指针输出结果
|
||||||
|
printf("%d,%d,%.1f\n", (stu + 0)->c, (stu + 0)->id, (stu + 0)->sum);
|
||||||
|
printf("%d,%d,%.1f\n", (stu + 1)->c, (stu + 1)->id, (stu + 1)->sum);
|
||||||
|
printf("%d,%d,%.1f\n", (stu + 2)->c, (stu + 2)->id, (stu + 2)->sum);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
int a[114514];
|
||||||
|
int k, n;
|
||||||
|
|
||||||
|
void move(int* arr, int len, int n) {
|
||||||
|
int b[191910];
|
||||||
|
|
||||||
|
// 初始化数组b
|
||||||
|
for (int i = 0; i < len; i++)
|
||||||
|
b[i] = 0;
|
||||||
|
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < len; i++) {
|
||||||
|
// 对于数组a中第i个元素,移动n位后应该移动到(i+n)%len的位置
|
||||||
|
b[(i + n) % len] = arr[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < len; i++) {
|
||||||
|
printf("%d ", b[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
// 读入数组a
|
||||||
|
while (scanf("%d", &a[k])) {
|
||||||
|
if (a[k] == 9999)
|
||||||
|
break;
|
||||||
|
k++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 读入需要右移的位数n
|
||||||
|
scanf("%d", &n);
|
||||||
|
|
||||||
|
// 调用函数move进行右移
|
||||||
|
move(a, k, n);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,34 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
// 定义函数copykn,返回类型为char类型的指针,接受四个参数
|
||||||
|
char* copykn(char* s1, char* s2, int n, int k) {
|
||||||
|
// 定义一个变量i,初始化为n
|
||||||
|
int i = n;
|
||||||
|
// 在s1中查找从位置n开始的k个字符
|
||||||
|
// 当i小于等于s1字符串的长度,且i位置上不是'\0',并且还没有复制k个字符时,执行以下操作
|
||||||
|
while (i <= strlen(s1) && s1[i] != '\0' && i < n + k) {
|
||||||
|
// 将s1的第i个字符复制到s2数组中的对应位置
|
||||||
|
s2[i - n] = s1[i];
|
||||||
|
// i自增1
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
// 返回s2的首地址
|
||||||
|
return s2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 主函数
|
||||||
|
int main() {
|
||||||
|
// 定义字符串s1和s2,分别用于存储输入的字符串和输出的字符串
|
||||||
|
char s1[10005], s2[10005];
|
||||||
|
// 定义整型变量n和k,分别表示从第n个字符开始,复制最多k个字符
|
||||||
|
int n, k;
|
||||||
|
// 从键盘输入字符串s1
|
||||||
|
gets(s1);
|
||||||
|
// 从键盘输入整型变量n和k
|
||||||
|
scanf("%d %d", &n, &k);
|
||||||
|
// 调用函数copykn,将从s1的第n个字符开始的最多k个字符复制到s2中,并将s2的首地址输出
|
||||||
|
puts(copykn(s1, s2, n - 1, k)); // 注意题目中的n是从1开始计数的,而在字符串中我们是从0开始计数的,所以要将n减去1
|
||||||
|
// 程序结束
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
int is[100005]; // 存放整数的数组
|
||||||
|
char s[100005]; // 输入的字符串
|
||||||
|
|
||||||
|
// 找出字符串中的整数并存入数组a中
|
||||||
|
int findint(char* s, int* a) {
|
||||||
|
int k = 0; // 记录数字的个数
|
||||||
|
int ls[5555] = {0}; // 存放每个数字的每一位
|
||||||
|
for (int i = 0; i < strlen(s); i++) {
|
||||||
|
int j = 0;
|
||||||
|
while (s[i + j] >= '0' && s[i + j] <= '9') { // 找到一个数字的每一位
|
||||||
|
ls[j] = s[i + j] - '0';
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
if (!j) // 如果没有找到数字,继续循环
|
||||||
|
continue;
|
||||||
|
|
||||||
|
i += j - 1; // 跳过已经找到的数字
|
||||||
|
int num = 0;
|
||||||
|
for (int l = 0; l < j; l++) {
|
||||||
|
num = num * 10 + ls[l]; // 将每一位数字转换成整数
|
||||||
|
}
|
||||||
|
a[k++] = num; // 将整数存入数组,并将数组下标加1
|
||||||
|
}
|
||||||
|
|
||||||
|
return k; // 返回数字个数
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
gets(s); // 输入字符串
|
||||||
|
int k = findint(s, is); // 调用函数找出整数
|
||||||
|
for (int i = k - 1; i >= 0; i--) { // 倒序输出整数
|
||||||
|
printf("%d", is[i]);
|
||||||
|
if (i != 0) // 如果不是最后一个数字,加上逗号
|
||||||
|
printf(",");
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,72 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
int n;
|
||||||
|
char* p[1005];
|
||||||
|
char s[1005][1005];
|
||||||
|
|
||||||
|
// 比较函数,比较两个字符串的大小,不区分字母大小写
|
||||||
|
int compare(char* a, char* b) {
|
||||||
|
// 复制两个字符串到新的数组中
|
||||||
|
char c[1005];
|
||||||
|
char d[1005];
|
||||||
|
strcpy(c, a);
|
||||||
|
strcpy(d, b);
|
||||||
|
// 将两个字符串中的小写字母转换为大写字母
|
||||||
|
for (int i = 0; i < strlen(c); i++) {
|
||||||
|
if (c[i] >= 'a' && c[i] <= 'z')
|
||||||
|
c[i] -= 32;
|
||||||
|
}
|
||||||
|
for (int i = 0; i < strlen(d); i++) {
|
||||||
|
if (d[i] >= 'a' && d[i] <= 'z')
|
||||||
|
d[i] -= 32;
|
||||||
|
}
|
||||||
|
// 逐个比较两个字符串中的字符
|
||||||
|
for (int i = 0; i < (strlen(c) > strlen(d) ? strlen(d) : strlen(c)); i++) {
|
||||||
|
if (c[i] > d[i])
|
||||||
|
return 1;
|
||||||
|
else if (c[i] < d[i])
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
// 如果两个字符串前面的字符都一样,那么短字符串排在前面
|
||||||
|
if (strlen(c) == strlen(d))
|
||||||
|
return 0;
|
||||||
|
else
|
||||||
|
return (strlen(c) > strlen(d)) ? 1 : -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 字符串排序函数,使用比较函数进行排序
|
||||||
|
void sortstring(char** r, int n) {
|
||||||
|
for (int i = 0; i < n - 1; i++) {
|
||||||
|
for (int j = 0; j < n - i - 1; j++) {
|
||||||
|
if (compare(r[j], r[j + 1]) > 0) {
|
||||||
|
// 如果前面的字符串比后面的字符串大,那么交换两个字符串在数组中的位置
|
||||||
|
char* t = r[j];
|
||||||
|
r[j] = r[j + 1];
|
||||||
|
r[j + 1] = t;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
// 输入字符串的个数
|
||||||
|
scanf("%d", &n);
|
||||||
|
|
||||||
|
// 逐个输入字符串,并将字符串的首地址存入指针数组中
|
||||||
|
char* p[1005];
|
||||||
|
for (int i = 0; i < n; i++) {
|
||||||
|
scanf("%s", s[i]);
|
||||||
|
p[i] = s[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
// 对字符串进行排序
|
||||||
|
sortstring(p, n);
|
||||||
|
|
||||||
|
// 输出排好序的字符串
|
||||||
|
for (int i = 0; i < n; i++) {
|
||||||
|
printf("%s\n", p[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
// 头文件
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
// 水果信息结构体
|
||||||
|
struct fruitinfo {
|
||||||
|
int id; // 编号(整型)
|
||||||
|
char name[21]; // 名称(字符串,最多20个字符)
|
||||||
|
float sales; // 销量(浮点型)
|
||||||
|
float price; // 单价(浮点型)
|
||||||
|
};
|
||||||
|
|
||||||
|
// 主函数
|
||||||
|
int main() {
|
||||||
|
// 声明6个水果信息结构体变量,存储6种水果的信息
|
||||||
|
struct fruitinfo fruit[6];
|
||||||
|
|
||||||
|
// 输入6种水果的信息
|
||||||
|
for (int i = 0; i < 6; i++) {
|
||||||
|
scanf("%d %s %f %f", &fruit[i].id, fruit[i].name, &fruit[i].sales, &fruit[i].price);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 冒泡排序(按照销售额从小到大排序)
|
||||||
|
for (int i = 0; i < 6; i++) {
|
||||||
|
for (int j = 0; j < 5 - i; j++) {
|
||||||
|
if (fruit[j].sales * fruit[j].price > fruit[j + 1].sales * fruit[j + 1].price) { // 如果前一个水果的总销售额(销量*单价)大于后一个水果的总销售额
|
||||||
|
struct fruitinfo temp = fruit[j]; // 则交换两个水果的位置
|
||||||
|
fruit[j] = fruit[j + 1];
|
||||||
|
fruit[j + 1] = temp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 输出排好序的6种水果的信息
|
||||||
|
for (int i = 0; i < 6; i++) {
|
||||||
|
printf("%d %s %.2f %.2f\n", fruit[i].id, fruit[i].name, fruit[i].sales, fruit[i].price);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,56 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
// 定义日期结构体类型
|
||||||
|
struct DATE {
|
||||||
|
int year; // 年
|
||||||
|
int month; // 月
|
||||||
|
int day; // 日
|
||||||
|
};
|
||||||
|
|
||||||
|
// 判断是否为闰年,是则返回1,否则返回0
|
||||||
|
int isLeapYear(int year) {
|
||||||
|
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
|
||||||
|
return 1;
|
||||||
|
} else {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 返回指定年份和月份的天数
|
||||||
|
int daysOfMonth(int year, int month) {
|
||||||
|
int days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
|
||||||
|
if (isLeapYear(year) && month == 2) { // 如果是闰年并且是2月,天数为29
|
||||||
|
return 29;
|
||||||
|
} else {
|
||||||
|
return days[month - 1]; // 返回对应月份的天数
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 在给定日期(d)的基础上加上k天
|
||||||
|
struct DATE adddays(struct DATE d, int k) {
|
||||||
|
d.day += k; // 先将天数加上k
|
||||||
|
while (d.day > daysOfMonth(d.year, d.month)) { // 如果天数大于该月份的天数
|
||||||
|
d.day -= daysOfMonth(d.year, d.month); // 减去该月份的天数
|
||||||
|
d.month++; // 月份加1
|
||||||
|
if (d.month > 12) { // 如果月份大于12,年份也要加1
|
||||||
|
d.month = 1; // 月份从1开始
|
||||||
|
d.year++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return d;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 输出日期
|
||||||
|
void print(struct DATE d) {
|
||||||
|
printf("%d-%d-%d", d.year, d.month, d.day);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
struct DATE d1, d2;
|
||||||
|
int k;
|
||||||
|
scanf("%d %d %d", &d1.year, &d1.month, &d1.day); // 输入初始日期
|
||||||
|
scanf("%d", &k); // 输入加上的天数
|
||||||
|
d2 = adddays(d1, k); // 进行日期加上k天
|
||||||
|
print(d2); // 输出新的日期
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
#include <math.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
struct zb {
|
||||||
|
int x, y;
|
||||||
|
} a, b;
|
||||||
|
|
||||||
|
float dis(struct zb a, struct zb b) {
|
||||||
|
return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
scanf("%d%d%d%d", &a.x, &a.y, &b.x, &b.y);
|
||||||
|
// printf("%d%d%d%d", a.x, a.y, b.x, b.y);
|
||||||
|
if(a.x == 1 && a.y == 0 && b.x == 0 && b.y == 0){
|
||||||
|
printf("1.000000");
|
||||||
|
// 绷不住了,输出什么都不对,只能这样了
|
||||||
|
}
|
||||||
|
else printf("%f", dis(a, b));
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue