钜形不锈钢水箱 发表于 2024-10-23 21:59:02

利用数组处置惩罚批量数据之习题

用筛选法求100以内的素数
//用筛选法求100以内的素数

#include <stdio.h>

int main_6__1(void)
{
        int arr = { 0 };

        for (int i = 0; i < 101; i++)//赋值
                arr = i;

        arr = arr = -1;//挖掉

        for (int i = 0; i < 100; i++)
        {
                if (-1 == arr)//被挖掉的就不进行下面的操作
                        continue;

                for (int j = i + 1; j < 101; j++)
                {
                        if (-1 == arr)//被挖掉的就不进行下面的操作
                                continue;

                        if (0 == (arr % arr))//挖掉
                                arr = -1;
                }
        }

        for (int i = 0; i < 101; i++)
        {
                if (-1 != arr)
                        printf("%d\t", arr);
        }

        printf("\n");

        return 0;
}运行效果:
https://img2024.cnblogs.com/blog/3512406/202410/3512406-20241023105813018-898822732.png
用选择法对10个整数排序
//用选择法对10个整数排序

#include <stdio.h>

int main(void)
{
        int arr, iMin, z;

        for (int i = 0; i < 10; i++)
        {
                printf("请输入arr[%d]的值\n", i);
                scanf("%d", &arr);
        }

        printf("排序前:\n");

        for (int i = 0; i < 10; i++)
                printf("%d\t", arr);
       
        for (int i = 0; i < 9; i++)
        {
                iMin = arr;
                z = i;

                for (int j = i + 1; j < 10; j++)
                {
                        if (arr < arr)
                        {
                                if (arr < iMin)
                                {
                                        iMin = arr;
                                        z = j;
                                }
                        }
                }

                arr = arr;
                arr = iMin;
        }

        printf("\n\n排序后:\n");

        for (int i = 0; i < 10; i++)
                printf("%d\t", arr);

        return 0;
}在VS编译器内会报C4996错误,办理见下文:(下同)
C4996 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. - EricsT - 博客园 (cnblogs.com)
运行效果:
https://img2024.cnblogs.com/blog/3512406/202410/3512406-20241023110953305-153414570.png 
求一个3 * 3 整型矩阵对角线元素之和
 
//求一个3 * 3 整型矩阵对角线元素之和

#include <stdio.h>

int main(void)
{
        int arr = { 0 };

        for (int i = 0; i < 3; i++)
        {
                for (int j = 0; j < 3; j++)
                {
                        printf("请输入arr[%d][%d]\n", i, j);
                        scanf("%d", &arr);
                }
        }

        printf("%d\n", arr + arr + arr + arr + arr);
       
        return 0;
}运行效果:
https://img2024.cnblogs.com/blog/3512406/202410/3512406-20241023111815415-1076235240.png
有一个已排序好的数组,要求输入一个数后,按原来的排序规律将它插入数组中
//有一个已排序好的数组,要求输入一个数后,按原来的排序规律将它插入数组中

#include <stdio.h>

int main(void)
{
        int arr = { 1, 4, 6, 9, 13, 16, 19, 28, 40, 100 }, temp;

        printf("old arr\n");
       
        for (int i = 0; i < 10; i++)
                printf("%d\t", arr);

        printf("\n\n请输入需要插入的数\n");
        scanf("%d", &temp);
        printf("\nnew arr\n");

        char isInsert = 0;

        for (int i = 0; i < 10; i++)
        {
                if (isInsert)
                {
                        printf("%d\t", arr);
                        continue;
                }

                if (temp > arr)
                {
                        printf("%d\t", arr);
                        continue;
                }

                printf("%d\t", temp);
                i--;
                isInsert = 1;
        }

        printf("\n");

        return 0;
}运行效果:
https://img2024.cnblogs.com/blog/3512406/202410/3512406-20241023114802071-1591387276.png
将一个数组的值按逆序重新存放。比方:8, 6, 5, 4, 1 -> 1, 4, 5, 6, 8
//将一个数组的值按逆序重新存放。例如:8, 6, 5, 4, 1 -> 1, 4, 5, 6, 8

#include <stdio.h>

int main(void)
{
        int arr[] = { 8, 6, 5, 4, 1 };

        printf("arr\n");

        for (int i = 0; i < 5; i++)
                printf("%d\t", arr);
       
        printf("\n\nswap arr\n");

        for (int i = 4; i >= 0; i--)
                printf("%d\t", arr);

        printf("\n");

        return 0;
}运行效果:
https://img2024.cnblogs.com/blog/3512406/202410/3512406-20241023115656037-643470559.png
https://img2024.cnblogs.com/blog/3512406/202410/3512406-20241023114900479-178189691.png
#include <stdio.h>

int main(void)
{
        int arr = { 0 };

        for (int i = 0; i < 10; i++)
        {
                arr = 1;
                arr = 1;
        }

        for (int i = 1; i < 9; i++)
        {
                for (int j = 1; j < i; j++)
                        arr = arr + arr;
        }

        for (int i = 0; i < 9; i++)
        {
                for (int j = 0; j < i + 1; j++)
                        printf("%-3d\t", arr);

                printf("\n");
        }

        return 0;
}运行效果:
https://img2024.cnblogs.com/blog/3512406/202410/3512406-20241023140748429-674588568.png
找出一个二维数组中的鞍点。即该位置上的元素在该行上最大、在该列上最小。也可能没有鞍点。
//找出一个二维数组中的鞍点。即该位置上的元素在该行上最大、在该列上最小。也可能没有鞍点。

#include <stdio.h>

int main(void)
{
        int arr = { 0 };

        for (int i = 0; i < 4; i++)//输入数组
        {
                for (int j = 0; j < 5; j++)
                {
                        printf("请输入arr[%d][%d]的值\n", i, j);
                        scanf("%d", &arr);
                }
        }

        printf("arr:\n");

        for (int i = 0; i < 4; i++)//打印数组
        {
                for (int j = 0; j < 5; j++)
                        printf("%d\t", arr);

                printf("\n");
        }

        char isSaddlePoint = 0;//默认无鞍点

        for (int i = 0; i < 4; i++)
        {
                for (int j = 0; j < 5; j++)
                {
                        int iCheak = arr;//一个一个检查

                        char isCol = 1;//默认列符合条件

                        for (int z = 0; z < 4; z++)//检查列
                        {
                                if (iCheak > arr)
                                {
                                        isCol = 0;//不符合退出循环
                                        break;
                                }
                        }

                        if (!isCol)//列不符合条件,跳出检查继续检查下一个
                                continue;

                        char isRow = 1;//默认行符合条件

                        for (int z = 0; z < 5; z++)
                        {
                                if (iCheak < arr)
                                {
                                        isRow = 0;//不符合退出循环
                                        break;
                                }
                        }

                        if (!isRow)//行不符合条件,跳出检查继续检查下一个
                                continue;

                        //符合条件,打印鞍点,并使鞍点数量+1
                        isSaddlePoint++;
                        printf("Saddle Point:%d\n", iCheak);
                }
        }

        if (!isSaddlePoint)//无鞍点,提示
                printf("not exist\n");
        else
                printf("\n");

        return 0;
}运行效果:
有鞍点:https://img2024.cnblogs.com/blog/3512406/202410/3512406-20241023143911533-1790948331.png  无鞍点:https://img2024.cnblogs.com/blog/3512406/202410/3512406-20241023143922550-1154149708.png
有15个数按由小到大顺序放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出“无此数”
//有15个数按由小到大顺序放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。
//如果该数不在数组中,则输出“无此数”

#include <stdio.h>

int main(void)
{
        int arr = { 0 };

        for (int i = 0; i < 15; i++)//输入数组
        {
                printf("请输入arr[%d]的值\n", i);
                scanf("%d", &arr);
        }

        printf("\n\narr:\n");
       
        for (int i = 0; i < 15; i++)//打印数组
                printf("%d\t", arr);

        int iTemp;
        printf("请输入待检查的值\n");//输出检查数
        scanf("%d", &iTemp);

        int iMinIndex = 0, iMaxIndex = 14;

        while (iMinIndex < iMaxIndex)
        {
                int iIndex = (iMinIndex + iMaxIndex) / 2;//中间数

                if (arr == iTemp)//相等输出程序结束
                {
                        printf("%d\n", iIndex);
                        return 0;
                }

                if (arr > iTemp)//小,找左边
                        iMaxIndex = iIndex - 1;
                else//大,找右边
                        iMinIndex = iIndex + 1;
        }
       
        printf("无此数\n");

        return 0;
}运行效果:
https://img2024.cnblogs.com/blog/3512406/202410/3512406-20241023174309459-1932336444.png
有一篇文章,共3行文字,每行有80个字符。要求分别统计出此中英文大写字母、小写字母、数字、空格以及其他字符的个数
//有一篇文章,共3行文字,每行有80个字符。
//要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符的个数

#include <stdio.h>

int main(void)
{
        char arr = { 0 };

        for (int i = 0; i < 3; i++)
        {
                printf("请输入第%d行内容\n", i + 1);
                gets(arr);
        }

        int iUpper = 0, iLow = 0, iDig = 0, iSpace = 0, iOther = 0;

        for (int i = 0; i < 3; i++)
        {
                for (int j = 0; j < 80; j++)
                {
                        char ch = arr;

                        if ('\0' == ch)
                                break;

                        if ((ch >= 'A') && (ch <= 'Z'))
                                iUpper++;
                        else if ((ch >= 'a') && (ch <= 'z'))
                                iLow++;
                        else if ((ch >= '0') && (ch <= '9'))
                                iDig++;
                        else if (' ' == ch)
                                iSpace++;
                        else
                                iOther++;
                }
        }

        printf("\n\narr\n");

        for (int i = 0; i < 3; i++)
                puts(arr);

        printf("\n");
        printf("大写字母:%d\n小写字母:%d\n数字:%d\n空格:%d\n其他:%d\n",
                iUpper, iLow, iDig, iSpace, iOther);

        return 0;
}运行效果:
https://img2024.cnblogs.com/blog/3512406/202410/3512406-20241023183108008-1728227269.png
https://img2024.cnblogs.com/blog/3512406/202410/3512406-20241023214649200-208805256.png
即第1个字母变成第26个字母,第i个字母变成第(26-i+1)个字母,非字母字符稳固。要求编步伐将暗码译回原文,并输出暗码和原文
#include <stdio.h>

int main(void)
{
        for (int i = 0; i < 5; i++)
        {
                for (int j = 0; j < 9; j++)
                {
                        if (j < i)
                                printf(" \t");
                        else if (j > i + 4)
                                printf(" \t");
                        else
                                printf("*\t");
                }

                printf("\n");
        }

        return 0;
}运行效果:
https://img2024.cnblogs.com/blog/3512406/202410/3512406-20241023225750241-1782557660.png
编写一个步伐,将字符数组 s2 中的全部字符复制到字符数组 s1 中,不消 strcpy 函数。复制时,'\0'也要复制过去。'\0'后面的字符不复制。
#include <stdio.h>

int main(void)
{
        char str = { 0 }, strNew = { 0 };

        printf("请输入密码\n");
        gets_s(str);//vs在2015之后不可用gets,但是可以用gets_s代替

        for (int i = 0; i < sizeof(str); i++)
        {
                char ch = str;

                if ('0' == ch)
                        break;

                if ((ch >= 'A') && (ch <= 'Z'))
                        ch = 26 - (ch - 'A' + 1) + 1 + 'A' - 1;
                else if ((ch >= 'a') && (ch <= 'z'))
                        ch = 26 - (ch - 'a' + 1) + 1 + 'a' - 1;

                strNew = ch;
        }

        printf("\n\n密码:\n");
        puts(str);
        printf("原文:\n");
        puts(strNew);

        return 0;
}运行效果:
https://img2024.cnblogs.com/blog/3512406/202410/3512406-20241023230800173-1837870141.png

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 利用数组处置惩罚批量数据之习题