0%

C语言练习题

for循环打印等腰三角形

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>

int main(void)
{
int i = 0, j = 0;
int line = 0;

printf("line: ");
scanf("%d", &line);

for(i = 0; i < line; i++)
{
for(j = 0; j < line - 1 - i; j++)
printf(" ");
for(j = 'A' + i; j > 'A'; j--)
printf("%c ", j);
for(j = 'A'; j < 'A' + 1 + i; j++)
printf("%c ", j);
printf("\n");
}

return 0;
}

/*
line: 5
A
B A B
C B A B C
D C B A B C D
E D C B A B C D 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
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

#define M 3
#define N 4

void cre(int arr[][N], int arr_hang, int arr_lie)
{
int i = 0, j = 0;

srand(getpid());

for(i = 0; i < arr_hang; i++)
{
for(j = 0; j < arr_lie; j++)
arr[i][j] = rand() % 100;
}
}

void pri(int arr[][N], int arr_hang, int arr_lie)
{
int i = 0, j = 0;

for(i = 0; i < arr_hang; i++)
{
for(j = 0; j < arr_lie; j++)
printf("%2d ", arr[i][j]);
printf("\n");
}
}

void cmp_1(int arr[][N], int arr_hang, int arr_lie)
{
int i = 0, j = 0;
int max = 0, temp = 0;

for(i = 0; i < arr_hang; i++)
{
max = 0;
for(j = 0; j < arr_lie; j++)
{
max = arr[i][max] > arr[i][j] ? max : j;
}
if(max != j - 1)
{
temp = arr[i][max];
arr[i][max] = arr[i][j - 1];
arr[i][j - 1] = temp;
}
}
}

int main(void)
{
int arr[M][N] = {0};
int arr_hang = sizeof(arr) / sizeof(arr[0]);
int arr_lie = sizeof(arr[0]) / sizeof(arr[0][0]);
int arr_num = sizeof(arr) / sizeof(arr[0][0]);

printf("arr_hang = %d, arr_lie = %d, arr_num = %d\n", arr_hang, arr_lie, arr_num);

cre(arr, arr_hang, arr_lie);
pri(arr, arr_hang, arr_lie);
printf("************分割线1************\n");
cmp_1(arr, arr_hang, arr_lie);
pri(arr, arr_hang, arr_lie);
printf("************分割线2************\n");

return 0;
}

打印杨辉三角形

打印杨辉三角形_1

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>

#define N 17

int main(void)
{
int i = 0, j = 0, n = 0;
int arr[N][N] = {0};

printf("请输入杨辉三角形的行数:");
scanf("%d", &n);

for(i = 0; i < n; i++)
arr[i][0] = 1;

for(i = 1; i < n; i++)
for(j = 1; j <= i; j++)
arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];

for(i = 0; i < n; i++)
{
for(j = 0; j <= i; j++)
printf("%2d ", arr[i][j]);

printf("\n");
}

return 0;
}

/*
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
*/

打印杨辉三角形_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
#include <stdio.h>
void itob(int In, int arr[8]);
void itob(int In, int arr[8])
{
int i = 0, j = 0;

do
{
arr[i] = In % 2;
In = In / 2;
i++;
j++;
}while(In != 0);
for(j = i - 1; j >= 0; j--)
{
printf ("%d",arr[j]);
}
}
int main (void)
{
int In = 0;
int arr[8] = {0};
scanf ("%d",&In);

itob(In, arr);

return 0;
}

输出素数

例程1-输出1-1000内所有的素数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
int main (void)
{
int i = 0, j = 0;

for(i = 2; i < 1000; i++)
{
for(j = 2; j < i; j++)
{
if(i % j == 0)
break;
}
if(i == j)
printf("%d\n",i);
}
return 0;
}

例程2-输出最小值与最大值之间所有的素数

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 (void)
{
int i = 0, j = 0;
int In1 = 0, In2 = 0;
int min = 0, max = 0;

scanf ("%d%d",&In1,&In2);

min = In1 < In2 ? In1 : In2;
max = In1 > In2 ? In1 : In2;

for(i = min; i < max; i++)
{
for(j = 2; j < i; j++)
{
if(i % j == 0)
break;
}
if(i == j)
printf ("%d\n",i);
}
return 0;
}

重新实现 strcpy strcat strcmp strlen

重新实现 strcpy strcat strcmp strlen _1

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
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <stdio.h>

char *mystrcpy(char *a, const char *b);
size_t mystrcmp(const char *a, const char *b);
char *mystrcat(char *a, const char *b);
size_t mystrlen(char *a);

int main (void)
{
char a[10] = "good";
char *b = "nice";
//printf ("%s\n",a);
//printf ("%s\n",b);
//mystrcpy(a,b);
//printf ("%s\n",a);
//printf ("%s\n",strcat(a,b));
printf ("%ld\n",mystrcmp(a,b));
//printf ("%ld\n",strlen(a));

return 0;
}

size_t mystrlen(char *a)
{
int i = 0;

for(i = 0; a[i] != '\0'; i++);

return i;
}

size_t mystrcmp(const char *a, const char *b)
{
int i = 0;

for(i = 0; a[i] == b[i] && a[i] != '\0'; i++);

//printf ("%d",a[i]-b[i]);

return a[i] - b[i];
}

char *mystrcat(char *a, const char *b)
{
int i = 0, j = 0;
for(i = 0; a[i] != '\0'; i++);
for(j = 0; b[j] != '\0'; i++, j++)
a[i] = b[j];
a[i] = b[j];

return a;
}

char *mystrcpy(char *a,const char *b)
{
int i = 0;

for(i = 0; b[i] != '\0'; i++)
a[i] = b[i];
a[i] = b[i];

return a;
}

重新实现 strcpy strcat strcmp strlen _2

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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include <stdio.h>

char *mystrcpy(char *a, const char *b);
size_t mystrcmp(const char *a, const char *b);
char *mystrcat(char *a, const char *b);
size_t mystrlen(char *a);

int main(void)
{
char a[10] = "good";
char *b = "nice";

printf("a = %s\nb = %s\n", a, b);
printf("mystrlen(a): %ld\n", mystrlen(a));
printf("mystrlen(b): %ld\n", mystrlen(b));
printf("mystrcmp(a, b): %ld\n", mystrcmp(a, b));
printf("mystrcat(a, b): %s\n", mystrcat(a, b));
printf("a = %s\nb = %s\n", a, b);
printf("mystrlen(a): %ld\n", mystrlen(a));
printf("mystrlen(b): %ld\n", mystrlen(b));

printf("\n");

printf("mystrcpy(a, b): %s\n", mystrcpy(a, b));
printf("a = %s\nb = %s\n", a, b);
printf("mystrlen(a): %ld\n", mystrlen(a));
printf("mystrlen(b): %ld\n", mystrlen(b));
printf("mystrcmp(a, b): %ld\n", mystrcmp(a, b));

return 0;
}
size_t mystrlen(char *a)
{
int i = 0;

for(i = 0; a[i] != '\0'; i++);

return i;
}

size_t mystrcmp(const char *a, const char *b)
{
int i = 0;

for(i = 0; a[i] == b[i] && a[i] != '\0'; i++);

return a[i] - b[i];
}

char *mystrcat(char *a, const char *b)
{
int i = 0, j = 0;
for(i = 0; a[i] != '\0'; i++);
for(j = 0; b[j] != '\0'; i++, j++)
a[i] = b[j];

a[i] = b[j];

return a;
}

char *mystrcpy(char *a, const char *b)
{
int i = 0;
for(i = 0; b[i] != '\0'; i++)
a[i] = b[i];
a[i] = b[i];

return a;
}

/*
a = good
b = nice
mystrlen(a): 4
mystrlen(b): 4
mystrcmp(a, b): -7
mystrcat(a, b): goodnice
a = goodnice
b = nice
mystrlen(a): 8
mystrlen(b): 4

mystrcpy(a, b): nice
a = nice
b = nice
mystrlen(a): 4
mystrlen(b): 4
mystrcmp(a, b): 0
*/

函数指针操作实例

第一种用法

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

void (*pfun)(int data);
void myfun(int data)
{
printf("get data:%d\n",data);
}
int main(int argc,char *argv[])
{
pfun = myfun;
(*pfun)(100);
return 0;
}

第二种用法

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

typedef void (*pfun)(int data);
/*typedef的功能是定义新的类型。第一句就是定义了一种 pfun 的类型,并定义这种类型为指向某种函数的指针,这种函数以一个 int 为参数并返回 void 类型。*/
void myfun(int data)
{
printf("get data:%d\n",data);
}
int main(int argc,char *argv[])
{
pfun p= myfun; //函数指针指向执行函数的地址
p(100);
return 0;
}