0%

题目:将一个数组逆序输出。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
void Reverse(char* ch,int sz)
{
    int i,j=0;
    char temp[sz];
    for (i=sz-1; i>=0; i--)//先把逆序的数组保存到一个新的临时数组中
    {
        temp[j] = ch[i];
        j++;
    }
    for (i=0; i<sz; i++) //把新的临时数组内容赋值给原数组
    {
        ch[i] = temp[i];
    }
}
int main() {
    char ch[] = "abcdefghijsdfwdfasdfewfdqxsaefw";
    int sz = sizeof(ch)/sizeof(ch[0])-1;
    Reverse(ch,sz);
    printf("%s",ch);
    return 0;
}

题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。

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
#include <stdio.h>
void Insert(int* arr, int input)
{
    int i=0;
    if (arr[8]>input) {
        for (i=0; i<10; i++)
        {
            if (arr[i]>input)
            {
                int j;
                for (j=9; j>i; j--)
                {
                    arr[j] = arr[j-1];
                }
                arr[i] = input;
                break;
            }
        }
    }
    else
    {
        arr[9] = input;
    }
}

int main()
{
    int arr[10] = {111,222,333,444,555,666,777,888,999};
    int input;
    printf("请输入要插入的数字:->");
    scanf("%d",&input);
    Insert(arr,input);
    int i;
    for (i=0; i<10; i++)
    {
        printf("%d ",arr[i]);
    }
    return 0;
}

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
#include <stdio.h>
#define ARR_LENGTH 10
void Insert(int* arr, int input)
{
    int i=0;
    if (arr[ARR_LENGTH-2]>input) {
        for (i=0; i<ARR_LENGTH; i++)
        {
            if (arr[i]>input)
            {
                int j;
                for (j=ARR_LENGTH-1; j>i; j--)
                {
                    arr[j] = arr[j-1];
                }
                arr[i] = input;
                break;
            }
        }
    }
    else
    {
        arr[ARR_LENGTH-1] = input;
    }
}
int main()
{
    int arr[ARR_LENGTH] = {111,222,333,444,555,666,777,888,999};
    int input;
    printf("请输入要插入的数字:->");
    scanf("%d",&input);
    Insert(arr,input);
    int i;
    for (i=0; i<ARR_LENGTH; i++)
    {
        printf("%d ",arr[i]);
    }
    return 0;
}

题目:求一个3*3矩阵对角线元素之和

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 Cal_Matrix(int arr[3][3])
{
    int i,j;
    int sum = 0;
    for (i=0,j=0; i<3,j<3; i++,j++)
    {
        sum = arr[i][j] + sum;
    }
    return sum;
}
int main() {
    int arr[3][3] = {0};
    int i,j;
    for (i=0; i<=2; i++)//往二维数组里添加数据
    {
        for (j=0; j<=2; j++)
        {
            scanf("%d",&arr[i][j]);
        }
    }
    printf("%d",Cal_Matrix(arr));
    return 0;
}

题目:字符串反转,如将字符串“Hello World”反转为”dlroW olleH”

代码一:

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>
void Char_Reverse(char* ch)
{
    int i = 0;
    while (ch[i] != '\0')
    {
        i++;
    }
    char temp[i];
    int j = 0;
    int x = i;
    for (j=0; j<i; j++)
    {
        temp[j] = ch[x-1];
        x--;
    }
    for (j=0; j<i; j++)
    {
        ch[j] = temp[j];
    }
}
int main()
{
    char ch[50];
    scanf("%s",ch);
    Char_Reverse(ch);
    printf("%s",ch);
    return 0;
}

但是这段代码无法反转带空格的字符串,原因是scanf遇到空格就停止读取了。
解决这个问题,使用%[^\n],表示读取除了换行符 \n 以外的所有字符,这样可以读取整行文本。


代码二:

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>
void Char_Reverse(char* ch)
{
    int i = 0;
    while (ch[i] != '\0') {
        i++;
    }
    char temp[i];
    int j = 0;
    int x = i;
    for (j=0; j<i; j++)
    {
        temp[j] = ch[x-1];
        x--;
    }
    for (j=0; j<i; j++) {
        ch[j] = temp[j];
    }
}
int main()
{
    char ch[50];
    scanf("%[^\n]",ch);
    Char_Reverse(ch);
    printf("%s",ch);
    return 0;
}

这里改进了scanf不能读取空格之后的问题。
输入Hello World
输出为dlroW olleH

题目:判断一个数字是否为质数。
程序分析:质数(prime number)又称素数,有无限个。一个大于1的自然数,除了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
#include <stdio.h>
int Prime_Number(int input)
{
    int i;
    for (i=2; i<input; i++)
    {
        if (input%i==0)
        {
            return 1;
        }
    }
    return 0;
}
int main() {
    int input;
    scanf("%d",&input);
    if (Prime_Number(input) == 1)
    {
        printf("不是素数");
    }
    else
    {
        printf("是素数");
    }
    return 0;
}

题目:删除一个字符串中的指定字母,如:字符串“aca”,删除其中的a字母。

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
#include <stdio.h>
void Check(char* arr,char input)
{
    int i = 0;//i就是输入的字符串的长度
    int j = 0;
    while (arr[i] != '\0')
    {
        i++;
    }
    for (j=0; j<i; j++)
    {
        if (arr[j] == input)
        {
            while (arr[j] != '\0')
            {
                arr[j] = arr[j+1];
                j++;
            }
            j = 0;
        }
    }
}

int main()
{
    char arr[20] = {0};
    char input;
    int sz;
    printf("输入字符串:->");
    scanf("%s",arr);
    while (getchar()!='\n')
    {
        ;
    }
    printf("输入要删除的字符:->");
    scanf("%c",&input);
    Check(arr,input);
    printf("%s\n",arr);
    return 0;
}

题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母。
monday tuesday wednesday thursday friday saturday sunday

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
#include <stdio.h>
int main()
{
    char i;
    char j;
    i = getchar();
    switch (i) {
        case 'm':
            printf("Monday");
            break;
        case 't':
            while (getchar() != '\n')
            {
                ;
            }
            printf("在输入一个字母:->");
            j = getchar();
            if (j == 'u') {
                printf("Tuesday");
            }else
            {
                printf("Thursday");
            }
            break;
        case 'w':
            printf("Wednesday");
            break;
        case 'f':
            printf("Friday");
            break;
        case 's':
            while (getchar() != '\n')
            {
                ;
            }
            printf("在输入一个字母:->");
            j = getchar();
            if (j == 'a') {
                printf("Saturday");
            }else
            {
                printf("Sunday");
            }
            break;
        default:
            break;
    }
    return 0;
}

题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。

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
#include <stdio.h>
int Judge(int input)
{
    if (input/10000 == input %10 || ((input/100)%10 == (input/10)%10 ))
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

int main() {
    int input;
    scanf("%d",&input);
    if (Judge(input) == 1)
    {
        printf("是回文数");
    }
    else
    {
        printf("不是回文数");
    }
    return 0;
}

题目:给一个不低于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

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 Cal_Digit(int input)
{
    int digit = 0;
    while (input>0)
    {
        input = input / 10;//每次除10,digit+1,直到input等于0为止
        digit++;
    }
    return digit;
}
void Reverse_Print(int input,int digit)
{
    printf("逆序后:");
    for (; digit>0; digit--)
    {
        int Last_Nun = input%10;//找到最后一位数
        printf("%d",Last_Nun);
        input = input / 10;//除以10,舍弃最后一位数,得到新的数
    }
    printf("\n");
}

int main() {
    int input;
    scanf("%d",&input);
    int digit = Cal_Digit(input);//计算数字的位数
    printf("这个数字是 %d 位数\n",digit);
    Reverse_Print(input,digit);//逆序打印
    return 0;
}

题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。
问第4个人岁数,他说比第3个人大2岁。
问第三个人,又说比第2人大两岁。
问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。
请问第五个人多大?
程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
int Cal_Age(int age,int i)
{
    if (i==5)
    {
        return age;
    }else
    {
        return Cal_Age(age+2,++i);
    }
}
int main()
{
    int i = 1;
    int First_Age = 10;
    int Fifth_Age = Cal_Age(First_Age,i);
    printf("%d\n",Fifth_Age);
    return 0;
}