avatar

第一次自己搭建博客,感受颇多,这第一篇博客我会用来记录自己大学生活的一部分——C语言课程作业。希望博客可以记录下我的大学生活,同时也方便我以后回来寻找作业思路。

不定期更新

ZY1

zy1.1

题目

编写一个程序,功能是:输入一个3位的正整数,逆序输出。如输入:345,则输出:543,输入:530,则输出:035。

答案代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>

int main() {
int x;
scanf("%d", &x);
int a;
int b;
int c;
a = x % 10;
b = x / 10 % 10;
c = x / 100;
printf("%d%d%d", a, b, c);
return 0;
}

zy1.2

题目

编写一个程序,功能是:输入一个字母,若是大写字母直接输出,若输入小写字母输出它对应的大写字母。如输入:B,则输出:B,输入:d,则输出:D。

答案代码

1
2
3
4
5
6
7
8
9
10
#include <stdio.h>

int main() {
char a;
char b;
a = getchar();
b = a > 96 ? a - 32 : a;
putchar(b);
return 0;
}

zy1.3

题目

编写一个程序,功能是:输入一个正整数(占4个字节),输出右边第2字节的值。如输入:255,则输出:0;输入:256,输出:1;输入:16666,输出:65。

答案代码

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>

int main() {
long a;
scanf("%ld", &a);
long b = 65280;
long c;
c = a & b;
printf("%ld", c >> 8 );
return 0;
}

ZY2

zy2.1

题目

编写一程序,功能是:输入一个百分制成绩(正整数),输出成绩等级A、B、C、D、E。其中90分以上为A、8089为B、7079为C、60~69为D、小于60分为E。用if语句实现。例如:输入:90,输出:A;输入68,输出:D;输出15,输出:E。

答案代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>

int main() {
int a;
scanf("%d", &a);
if (a >= 90) {
printf("A");
} else if (a >= 80 && a <= 90) {
printf("B");
} else if (a >= 70 && a <= 80) {
printf("C");
} else if (a >= 60 && a <= 70) {
printf("D");
} else {
printf("E");
}
return 0;
}

zy2.2

题目

编写一程序,功能是:输入一个百分制成绩(正整数),输出成绩等级A、B、C、D、E。其中90分以上为A、8089为B、7079为C、60~69为D、小于60分为E。用switch语句实现。例如:输入:90,输出:A;输入68,输出:D;输出15,输出:E。

答案代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>

int main() {
int a;
scanf("%d", &a);
switch (a) {
case 90 ... 100:
printf("A");
break;
case 80 ... 89:
printf("B");
break;
case 70 ... 79:
printf("C");
break;
case 60 ... 69:
printf("D");
break;
case 0 ... 59:
printf("E");
break;
}
return 0;
}

zy2.3

题目

编写一程序,功能是:输入4个整数,要求按从小到大的顺序输出这4个数。(输出数据以1个空格隔开)。例如:输入:3 1 6 4,输出:1 3 4 6;输入:67 100 31 67,输出:31 67 67 100。

答案代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <stdio.h>

int main() {
int a, b, c, d, t;
scanf("%d %d %d %d", &a, &b, &c, &d);
if ( a > b ) {
t = a;
a = b;
b = t;
}
if ( a > c ) {
t = a;
a = c;
c = t;
}
if ( a > d ) {
t = a;
a = d;
d = t;
}
if ( b > c ) {
t = b;
b = c;
c = t;
}
if ( b > d ) {
t = b;
b = d;
d = t;
}
if ( c > d ) {
t = c;
c = d;
d = t;
}
printf("%d %d %d %d", a, b, c, d);
return 0;
}

zy2.4

题目

编写一程序,功能是:求1~n中所有偶数之和,其中,n由键盘输入。例如:输入:10,输出:30;输入:50,输出:650;输入:100,输出:2550。

答案代码

1
2
3
4
5
6
7
8
9
#include <stdio.h>

int main() {
int a, n, h = 0;
scanf("%d", &n);
for (a = 0; a < n; a = a + 2, h = h + a);
printf("%d", h);
return 0;
}

ZY3

zy3.1

题目

编写一程序,功能是:从键盘输入一个小于1000的正数,输出它的自然对数(小数保留2位)。要求在输入数据后先对其进行检查是否为小于1000的正数。若不是,则重新输入,直到输入符合要求为止。例如:输入:99,输出:4.60;输入:555,输出:6.32;输入:999,输出:6.91。注:math.h头文件中的自然对数函数log。

答案代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
#include <math.h>

int main() {
float a, b;
for (;;) {
scanf("%f", &a);
if ( a < 1000 ) {
break;
}
}
b = log(a);
printf("%.2f", b);
return 0;
}

zy3.2

题目

编程一程序,功能是:求1到n之间能同时被3和7整除的整数之和。其中,n由键盘输入。例如:输入:100,输出:210;输入:500,输出:5796;输入:1000,输出:23688。

答案代码

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>

int main() {
int n, i, h = 0;
scanf("%d", &n);
for (i = 1; i < n; i++) {
if ( i % 3 == 0 && i % 7 == 0) {
h += i;
}
}
printf("%d", h);
return 0;
}

zy3.3

题目

编程一程序,功能是:求1!+2!+3!+…+n!的值。其中,n由键盘输入。例如:输入:3,输出:9;输入:5,输出:153;输入:8,输出:46233。

答案代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>

int main() {
int n, i, s = 0, x, y = 1;
scanf("%d", &n);
for (i = 1; i <= n; i++) {
y = 1;
for (x = 1; x <= i; x++) {
y *= x;
}
s += y;
}
printf("%d", s);
return 0;
}

ZY4

zy4-1

题目

编写一程序,功能是:输出所有的“水仙花数”,每个数间用一个空格隔开。所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身,例如,153是“水仙花数”,因为153=1^3+5^3+3^3。

答案代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>

int main() {
int i, a, b, c, y;
for (i = 100 ; i <= 999; i++) {
y = 0;
a = i / 100;
b = i / 10 % 10;
c = i % 10;
y = a * a * a + b * b * b + c * c * c;
if (i == y) {
printf("%d ", i);
}
}
return 0;
}

zy4-2

题目

编程一程序,功能是:输出如下图形。其中,行数n由键盘输入。例如:
输入:5
输出:
A
BAB
CBABC
DCBABCD
EDCBABCDE

答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>

int main() {
int n, count, s;
scanf("%d", &n);
char a = 64, b;
for (count = 1; count <= n; count++) {
for (s = 1; s <= n - count; s++) {
printf(" ");
}
for (a = 64, b = a + count; s <= n; b--, s++) {
putchar(b);
}
for (a = 65; s >= n && s <= n + count - 1 ; s++) {
a++;
putchar(a);
}
printf("\n");
}
return 0;
}

zy4-3

题目

编写一程序,功能是:输入n个数,输出它们的平均值(小数保留1位)。其中n由键盘输入。
例如:输入:5 1 2 3 4 5,输出:3.0,输入:3 5 5 6,输出:5.3。

答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#define N 10

int main() {
int x, n, h = 0;
int a[N] = {0};
float s;
scanf("%d", &n);
for (x = 0; x < n; x++) {
scanf("%d", &a[x]);
h = h + a[x];
}
s = h * 1.0 / n;
printf("%.1f", s);
return 0;
}

ZY5

zy5-1

题目

编写一程序,功能是:输入n个整数,按从小到大输出这n个整数(输出时数据之间用一个空格隔开)。其中,n由键盘输入。例如:(第一个数为个数,即n的值)
运行示例1
输入:5 8 9 1 4 3
输出:1 3 4 8 9
运行示例2
输入:10 4 9 77 12 45 23 34 2 10 55
输出:2 4 9 10 12 23 34 45 55 77

答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>
#define N 10

int main() {
int n, i, j, p, q, sum, a[N];
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
for (i = 0; i < n; i++) {
p = i;
q = a[i];
for (j = i + 1; j < n; j++) {
if (q > a[j]) {
p = j;
q = a[j];
}
}
if (i != p) {
sum = a[i];
a[i] = a[p];
a[p] = sum;
}
printf("%d ", a[i]);
}
return 0;
}

zy5-2

题目

编程一程序,功能是:输入4*4阶矩阵,输出下三角(含主对角线)的数之和。例如:
输入:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
输出:100

答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#define hang 4
#define lie 4

int main() {
int a[hang][lie], h, l, sum = 0;
for (h = 0; h < hang; h++) {
for (l = 0; l < lie; l++) {
scanf("%d", &a[h][l]);
}
}
for (h = 0; h < hang; h++) {
for (l = 0; l < lie; l++) {
if (h >= l) {
sum += a[h][l];
}
}
}
printf("%d", sum);
return 0;
}

ZY6

zy6-1

题目

编写一程序,功能是:输入一个字符串,统计其中数字和非数字字符各有多少个,输出的两个数字用1个空格隔开。例如:
输入:12abc34%6h*,输出:5 6
输入:123abc$,输出:3 4

答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>

int main() {
int i, s = 0, q = 0;
char a[1000];
scanf("%s", &a);
for (i = 0; i < 1000 && a[i] != '\0'; i++) {
if (a[i] >= '0' && a[i] <= '9') {
s++;
} else {
q++;
}
}
printf("%d %d", s, q);
return 0;
}

zy6-2

题目

编写一程序,功能是:输入一个字符串,判断其是否为回文,即对称字符串。例如:
输入:abcba,输出:YES
输入:abcda,输出:NO
输入:12321,输出:YES

答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <cstring>

int main() {
char a[10000];
int n = 0, i, k;
scanf("%s", &a);
i = strlen(a);
for (k = i - 1 - n; n < i; n++, k--) {
if (a[n] != a[k]) {
break;
}
}
if (n >= k) {
printf("YES");
} else {
printf("NO");
}
return 0;
}

zy6-3

题目

编程一程序,功能是:输入一个字符串,删除其中的数字字符。例如:
输入:abc12d45e,输出:abcde
输入:123ab$cd4,输出:ab$cd

答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>

int main() {
char a[10000];
char b[10000];
int i, j;
scanf("%s", &a);
for (i = 0, j = 0; i < 10000 && a[i] != '\0'; i++) {
if (a[i] < '0' || a[i] > '9') {
b[j] = a[i];
j++;
}
}
printf("%s", b);
return 0;
}

ZY7

zy7-1

题目

编写一程序,功能是:统计单词个数。从键盘上输入一行字符,统计其中有多少个单词,单词之间用空格隔开。例如:
输入:I am a student,输出:4
输入:C Program,输出:2

答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
#define N 1000

int main() {
char a[N];
int i, t = 0;
gets(a);
for (i = 0; a[i] != '\0'; i++) {
if (a[i] == ' ') {
t++;
}
}
printf("%d", t + 1);
return 0;
}

zy7-2

题目

编写一程序,功能是:输入n个国家名称,使用选择法排序从小到大排序后输出,输出时每个名称间用一个空格隔开。例如:
输入:China France Britain Russia America
输出:America Britain China France Russia

答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>
#include <string.h>
#define N 50

int main() {
int n, i, j;
char s[N][50], *p;
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%s", s[i]);
}
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - i - 1; j++) {
if (strcmp(s[j], s[j + 1]) > 0) {
strcpy(p, s[j]);
strcpy(s[j], s[j + 1]);
strcpy(s[j + 1], p);
}
}
}
for (i = 0; i < n; i++) {
printf("%s ", s[i]);
}
return 0;
}

ZY8

zy8-1

题目

编写两个函数comm_div和comm_mul,分别求两个整数的最大公约数和最小公倍数,在main函数中输入两个整数,调用这两个函数并输出两个整数的最大公约数和最小公倍数,输出时两数间用一个空格隔开。例如:
输入:48 64,输出:16 192
输入:45 88,输出:1 3960

答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <stdio.h>

int comm_div(int a, int b) {
int i, t = 1;
for (i = 1; i < a && i < b; i++) {
if (a % i == 0 && b % i == 0) {
t = i;
}
}
return t;
}

int comm_mul(int a, int b) {
int i, t = 1;
for (i = 1;; i++) {
if (i % a == 0 && i % b == 0) {
t = i;
break;
}
}
return t;
}

int main() {
int a, b, d, m;
scanf("%d %d", &a, &b);
d = comm_div(a, b);
m = comm_mul(a, b);
printf("%d %d", d, m);
return 0;
}

zy8-2

题目

编写一个从小到大排序(选择法)的函数sort(int x[],int n),其中n为整数个数。在main函数中输入n的值和一n个整数,调用排序函数sort后,输出排序后的n个整数,每个数间用一个空格隔开。例如:
输入:5
7 2 1 8 4
输出:1 2 4 7 8

输入:10
67 56 45 89 34 21 87 32 89 12
输出:12 21 32 34 45 56 67 87 89 89

答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdio.h>
#define N 10000

int sort(int x[], int n) {
int i, s = 0, p, q, j;
for (i = 0; i < n; i++) {
scanf("%d", &x[i]);
}
for (i = 0; i < n; i++) {
p = i;
q = x[i];
for (j = i + 1; j < n; j++) {
if (q > x[j]) {
p = j;
q = x[j];
}
}
if (i != p) {
s = x[i];
x[i] = x[p];
x[p] = s;
}
printf("%d ", x[i]);
}
}

int main() {
int n, x[N];
scanf("%d", &n);
sort(x, n);
return 0;
}

zy8-3

题目

编写一函数str_reverse(char c[]),功能是将一个字符串逆序存放,在main函数中输入一个字符串,调用str_reverse函数后,输出该字符串。例如:
输入:abcd,输出:dcba
输入:12345,输出:54321

答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <string.h>
#define N 10000

void str_reverse(char c[]) {
int i, t, p;
char k;
t = strlen(c);
for (p = t - 1, i = 0; i < p; i++, p--) {
k = c[i];
c[i] = c[p];
c[p] = k;
}
}

int main() {
char c[N];
int a;
scanf("%s", c);
str_reverse(c);
printf("%s", c);
return 0;
}

ZY9

zy9-1

题目

编写一个函数int add(int n),使用递归算法求1+2+3+…+n,在main函数中输入n,调用add函数后并输出计算结果。例如:
输入:10,输出:55
输出:100,输出:5050

答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>

int add(int n) {
int t;
if (n == 1) {
t = 1;
} else {
t = add(n - 1) + n;
}
return t;
}

int main() {
int n, t = 0;
scanf("%d", &n);
t = add(n);
printf("%d", t);
return 0;
}

zy9-2

题目

编写一个函数void string_copy(char *f,char *t),功能是将f字符串得到t中,在main函数中定义两个字符数组char x[100], y[100],输入x字符串,调用string_copy函数将x字符串复制到y中,输出y字符串。例如:
输入:12345,输出:12345
输入:abcde,输出:abcde

答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>

void string_copy(char *f, char *t) {
int i;
for (i = 0; t[i] != '\0'; i++) {
f[i] = t[i];
}
f[i] = '\0';
}

int main() {
char x[1000], y[1000];
scanf("%s", x);
string_copy(y, x);
printf("%s", y);
return 0;
}

zy9-3

题目

编写一个从小到大排序(选择法)函数void sort(char (*p)[10],int n),其中n为整数个数。在main函数中输入n并输入n个国家英文名称,调用排序函数后输出。例如:
输入:5 China France Britain Russia America
输出:America Britain China France Russia

答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <stdio.h>
#include <string.h>

void sort(char (*p)[10], int n) {
int i, j;
char *t;
char u[10];
t = u;
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - i - 1; j++) {
if (strcmp(p[j], p[j + 1]) > 0) {
strcpy(t, p[j]);
strcpy(p[j], p[j + 1]);
strcpy(p[j + 1], t);
}
}
}
for (i = 0; i < n; i++) {
printf("%s ", p[i]);
}
}

int main() {
int n;
char (*p)[10];
scanf("%d", &n);
char x[50][10];
int i, j;
for (i = 0; i < n; i++) {
scanf("%s", x[i]);
}
for (i = 0; i < n; i++) {
p = x;
}
sort(p, n);
return 0;
}

ZY10

zy10-1

题目

有n个整数,使前面各数顺序向后移m个位置,最后m个数变成最前面m个数。如有n=10个整数:
1 2 3 4 5 6 7 8 9 10
若m=4,则后面4个数移到前面,如下:
7 8 9 10 1 2 3 4 5 6
试编写一函数void move(int a[],int n,int m)实现以上功能,在main函数中输入n个数和m的值,调用move函数后,输出调整后的n个数,每个数间用一个空格隔开。例如:
输入:
10
1 2 3 4 5 6 7 8 9 10
4
输出:
7 8 9 10 1 2 3 4 5 6

答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <stdio.h>

int x[1000];

void move(int a[], int n, int m) {
int p, i;
p = n - m;
for (i = 0; p < n; i++, p++) {
x[i] = a[p];
}
for (p = 0; i < n; i++, p++) {
x[i] = a[p];
}
}

int main() {
int a[1000];
int m, n, i;
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
scanf("%d", &m);
move(a, n, m);
for (i = 0; i < n; i++) {
printf("%d ", x[i]);
}
return 0;
}

zy10-2

题目

试编写一个摆花函数void flower(char f[][N],int n),函数的功能描述:同学们弄来了不多于26种花,每种花有多盆。为使有限的鲜花摆放得更美观,同学们决定把花摆成正方形图案,现在告诉你正方形的边长N(每盆花的直径为一个单位长,1<=N<=99,N为奇数),请你编程输出花所排成正方形图案(用大写字母代表花)。我们把图案的中心称为第1圈,中心向外依次是第2圈、第3圈……。中心是字母A,第2圈是字母B,第3圈是字母C,……,第26圈是字母Z,第27圈又是字母A,第28圈又是字母B,……Z,A,B……。在main函数中,输入n,调用flower函数后,输出图案,提醒:输出时每个字母前有一个空格。
例如
输入:15
则输出以下图案(输出时每个字母前留一个空格):
H H H H H H H H H H H H H H H
H G G G G G G G G G G G G G H
H G F F F F F F F F F F F G H
H G F E E E E E E E E E F G H
H G F E D D D D D D D E F G H
H G F E D C C C C C D E F G H
H G F E D C B B B C D E F G H
H G F E D C B A B C D E F G H
H G F E D C B B B C D E F G H
H G F E D C C C C C D E F G H
H G F E D D D D D D D E F G H
H G F E E E E E E E E E F G H
H G F F F F F F F F F F F G H
H G G G G G G G G G G G G G H
H H H H H H H H H H H H H H H

答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <stdio.h>
#define N 99

void flower(char f[][N], int n) {
int k = 1;
int i, j, t, b, c, d;
t = (n + 1) / 2;
b = t;
c = n;
d = n;
while (k <= t) {
for (i = k - 1; i <= n - k; i++) {
for (j = k - 1; j <= n - k; j++) {
d = n - 2 * (k - 1);
if (d >= 52) {
for (; d > 52;) {
d = d % 52;
}
t = (d + 1) / 2;
if ( k == 0) {
f[i][j] = 65 + t - k;
} else {
f[i][j] = 65 + t - 1;
}
} else {
f[i][j] = 65 + t - k;
}
}
}
k++;
t = b;
}
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
if (j < n - 1)
printf("%c ", f[i][j]);
else
printf("%c", f[i][j]);
}
printf("\n");
}
}

int main() {
int n;
char a[N][N];
scanf("%d", &n);
flower(a, n);
return 0;
}

zy10-3

题目

输入以下代码,分析程序,写出运行结果,为什么?如何改进宏定义避免出现歧义。请完善程序,输出没有歧义的数据。
输出:S=314.15900
注意:宏预处理只是简单的替换。

1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
#define M 2
#define N M+3
#define R M*N
#define PI 3.14159
#define S(r) PI*r*r
int main()
{
printf("S=%.5f\n",S(R));
}

答案

原运行结果: S = 27.56636。
改进方法:将 M+3 用()框起来,防止宏定义出现歧义。

ZY11

zy11-1

题目

有n个学生,每个学生的数据包括姓名(10个字符)、出生日期(年-月-日),编写程序,功能是在main函数中输入n个学生信息,调用void sort(struct student stu[],int n)函数(按姓名从小到大排序)排序以后仍在main()中输出排序后的n个学生信息。输出时姓名和出生日期间用一个空格隔开,出生日期的输入输出格式为:yyyy-mm-dd。例如:
输入:2
zhangsan
2004-2-10
lisi
2003-11-20
输出:
lisi 2003-11-20
zhangsan 2004-2-10

答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <stdio.h>
#include <string.h>

struct student {
char name[20];
int y, m, d;
} stu[5000];

void sort(struct student stu[], int n) {
int i, j;
int q, w, e;
char a[20];
char *t;
t = a;
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - i - 1; j++) {
if (strcmp(stu[j].name, stu[j + 1].name) > 0) {
strcpy(t, stu[j].name);
strcpy(stu[j].name, stu[j + 1].name);
strcpy(stu[j + 1].name, t);
q = stu[j].y;
stu[j].y = stu[j + 1].y;
stu[j + 1].y = q;
w = stu[j].m;
stu[j].m = stu[j + 1].m;
stu[j + 1].m = w;
e = stu[j].d;
stu[j].d = stu[j + 1].d;
stu[j + 1].d = e;
}
}
}
}

int main() {
int n, i;
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%s %d-%d-%d", &stu[i].name, &stu[i].y, &stu[i].m, &stu[i].d);
}
sort(stu, n);
for (i = 0; i < n; i++) {
printf("%s %d-%d-%d\n", stu[i].name, stu[i].y, stu[i].m, stu[i].d);
}
return 0;
}

zy11-2

题目

编写一程序,功能是使用尾插法创建一个带有头结点的链表并输出。要求:先定义一个结构体,每个结点包含书号(10个字符)、书名(20个字符,不含空格)和价格(float型)等信息;然后编写一函数struct book *CreateLink()用于创建指定个数(个数n由键盘输入)的链表和函数void PrintLink(struct book *h)用于输出链表信息;最后在main中调用CreateLink和PrintLink函数。输入输出时每个数据间用一个空格隔开,价格的小数保留2位。例如:
输入:
2
00001 yuwen 18.20
00002 shuxue 21.59
输出:
00001 yuwen 18.20
00002 shuxue 21.59

答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <stdio.h>
#include <stdlib.h>

int n;

typedef struct book {
char num[20];
char name[10];
float value;
struct book *next;
} BOOK;

BOOK *CreateLink() {
BOOK *h, *p, *r;
int i;
h = (BOOK *)malloc(sizeof(BOOK));
h -> next = NULL;
r = h;
for (i = 0; i < n; i++) {
p = (BOOK *)malloc(sizeof(BOOK));
scanf("%s", p -> num);
scanf("%s", p -> name);
scanf("%f", &(p -> value));
r -> next = p;
p -> next = NULL;
r = p;
getchar();
}
return h;
}

void PrintLink( BOOK *h ) {
BOOK *p = h -> next;
for (; p != NULL;) {
printf("%s %s %.2f\n", p -> num, p -> name, p -> value);
p = p -> next;
}
}

int main() {
BOOK *h = NULL, *p;
int i;
scanf("%d", &n);
h = CreateLink();
PrintLink(h);
return 0;
}