利用数组处理批量数据之习题

cnblogs 2024-10-24 08:09:04 阅读 92

用筛选法求100以内的素数

<code>

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

#include <stdio.h>

int main_6__1(void)

{

int arr[101] = { 0 };

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

arr[i] = i;

arr[0] = arr[1] = -1;//挖掉

for (int i = 0; i < 100; i++)

{

if (-1 == arr[i])//被挖掉的就不进行下面的操作

continue;

for (int j = i + 1; j < 101; j++)

{

if (-1 == arr[j])//被挖掉的就不进行下面的操作

continue;

if (0 == (arr[j] % arr[i]))//挖掉

arr[j] = -1;

}

}

for (int i = 0; i < 101; i++)

{

if (-1 != arr[i])

printf("%d\t", arr[i]);

}

printf("\n");

return 0;

}

运行结果:

用选择法对10个整数排序

<code>

//用选择法对10个整数排序

#include <stdio.h>

int main(void)

{

int arr[10], iMin, z;

for (int i = 0; i < 10; i++)

{

printf("请输入arr[%d]的值\n", i);

scanf("%d", &arr[i]);

}

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

for (int i = 0; i < 10; i++)

printf("%d\t", arr[i]);

for (int i = 0; i < 9; i++)

{

iMin = arr[i];

z = i;

for (int j = i + 1; j < 10; j++)

{

if (arr[j] < arr[i])

{

if (arr[j] < iMin)

{

iMin = arr[j];

z = j;

}

}

}

arr[z] = arr[i];

arr[i] = iMin;

}

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

for (int i = 0; i < 10; i++)

printf("%d\t", arr[i]);

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)

运行结果:

求一个3 * 3 整型矩阵对角线元素之和

<code>

//求一个3 * 3 整型矩阵对角线元素之和

#include <stdio.h>

int main(void)

{

int arr[3][3] = { 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[i][j]);

}

}

printf("%d\n", arr[0][0] + arr[1][1] + arr[2][2] + arr[2][0] + arr[0][2]);

return 0;

}

运行结果:

有一个已排序好的数组,要求输入一个数后,按原来的排序规律将它插入数组中

<code>

//有一个已排序好的数组,要求输入一个数后,按原来的排序规律将它插入数组中

#include <stdio.h>

int main(void)

{

int arr[10] = { 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[i]);

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[i]);

continue;

}

if (temp > arr[i])

{

printf("%d\t", arr[i]);

continue;

}

printf("%d\t", temp);

i--;

isInsert = 1;

}

printf("\n");

return 0;

}

运行结果:

将一个数组的值按逆序重新存放。例如:8, 6, 5, 4, 1 -> 1, 4, 5, 6, 8

<code>

//将一个数组的值按逆序重新存放。例如: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[i]);

printf("\n\nswap arr\n");

for (int i = 4; i >= 0; i--)

printf("%d\t", arr[i]);

printf("\n");

return 0;

}

运行结果:

<code>

#include <stdio.h>

int main(void)

{

int arr[10][10] = { 0 };

for (int i = 0; i < 10; i++)

{

arr[i][0] = 1;

arr[i][i] = 1;

}

for (int i = 1; i < 9; i++)

{

for (int j = 1; j < i; j++)

arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];

}

for (int i = 0; i < 9; i++)

{

for (int j = 0; j < i + 1; j++)

printf("%-3d\t", arr[i][j]);

printf("\n");

}

return 0;

}

运行结果:

找出一个二维数组中的鞍点。即该位置上的元素在该行上最大、在该列上最小。也可能没有鞍点。

<code>

//找出一个二维数组中的鞍点。即该位置上的元素在该行上最大、在该列上最小。也可能没有鞍点。

#include <stdio.h>

int main(void)

{

int arr[4][5] = { 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[i][j]);

}

}

printf("arr:\n");

for (int i = 0; i < 4; i++)//打印数组

{

for (int j = 0; j < 5; j++)

printf("%d\t", arr[i][j]);

printf("\n");

}

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

for (int i = 0; i < 4; i++)

{

for (int j = 0; j < 5; j++)

{

int iCheak = arr[i][j];//一个一个检查

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

for (int z = 0; z < 4; z++)//检查列

{

if (iCheak > arr[z][j])

{

isCol = 0;//不符合退出循环

break;

}

}

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

continue;

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

for (int z = 0; z < 5; z++)

{

if (iCheak < arr[i][z])

{

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;

}

运行结果:

有鞍点:

无鞍点:

有15个数按由小到大顺序放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出“无此数”

<code>

//有15个数按由小到大顺序放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。

//如果该数不在数组中,则输出“无此数”

#include <stdio.h>

int main(void)

{

int arr[15] = { 0 };

for (int i = 0; i < 15; i++)//输入数组

{

printf("请输入arr[%d]的值\n", i);

scanf("%d", &arr[i]);

}

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

for (int i = 0; i < 15; i++)//打印数组

printf("%d\t", arr[i]);

int iTemp;

printf("请输入待检查的值\n");//输出检查数

scanf("%d", &iTemp);

int iMinIndex = 0, iMaxIndex = 14;

while (iMinIndex < iMaxIndex)

{

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

if (arr[iIndex] == iTemp)//相等输出程序结束

{

printf("%d\n", iIndex);

return 0;

}

if (arr[iIndex] > iTemp)//小,找左边

iMaxIndex = iIndex - 1;

else//大,找右边

iMinIndex = iIndex + 1;

}

printf("无此数\n");

return 0;

}

运行结果:

有一篇文章,共3行文字,每行有80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符的个数

<code>

//有一篇文章,共3行文字,每行有80个字符。

//要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符的个数

#include <stdio.h>

int main(void)

{

char arr[3][80] = { 0 };

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

{

printf("请输入第%d行内容\n", i + 1);

gets(arr[i]);

}

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[i][j];

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[i]);

printf("\n");

printf("大写字母:%d\n小写字母:%d\n数字:%d\n空格:%d\n其他:%d\n",

iUpper, iLow, iDig, iSpace, iOther);

return 0;

}

运行结果:

<code>

#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;

}

运行结果:

即第1个字母变成第26个字母,第i个字母变成第(26-i+1)个字母,非字母字符不变。要求编程序将密码译回原文,并输出密码和原文

<code>

#include <stdio.h>

int main(void)

{

char str[1024] = { 0 }, strNew[1024] = { 0 };

printf("请输入密码\n");

gets_s(str);//vs在2015之后不可用gets,但是可以用gets_s代替

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

{

char ch = str[i];

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[i] = ch;

}

printf("\n\n密码:\n");

puts(str);

printf("原文:\n");

puts(strNew);

return 0;

}

运行结果:

编一程序,将两个字符串连接起来,不要用 strcat 函数

<code>

//编一程序,将两个字符串连接起来,不要用 strcat 函数

#include<stdio.h>

int main(void)

{

char str1[1024] = { 0 }, str2[1024] = { 0 }, str3[2048] = { 0 }, j = 0;

printf("请输入第一个字符串:\n");

gets_s(str1);//vs在2015之后不可用gets,但是可以用gets_s代替

printf("请输入第二个字符串:\n");

gets_s(str2);

for (int i = 0; i < sizeof(str1); i++, j++)

{

if ('\0' == str1[i])

break;

str3[j] = str1[i];

}

for (int i = 0; i < sizeof(str2); i++, j++)

{

if ('\0' == str2[i])

break;

str3[j] = str2[i];

}

puts(str3);

return 0;

}

运行结果:

编写一个程序,将两个字符串 s1 和 s2 比较,若 s1 > s2 输出一个正数;若 s1 = s2 输出0;若 s1 < s2 输出一个负数。不要用 strcpy 函数。两个字符串用 gets 函数读入。输出的正数或负数的绝对值应是相比较的两个字符串响应字符的ASCII码的差值。例如 ‘A’与 ‘C’相比,输出 -2 。

<code>

//编写一个程序,将两个字符串 s1 和 s2 比较,若 s1 > s2 输出一个正数;若 s1 = s2 输出0;若 s1 < s2 输出一个负数。不要用 strcpy 函数。

// 两个字符串用 gets 函数读入。输出的正数或负数的绝对值应是相比较的两个字符串响应字符的ASCII码的差值。例如 ‘A’与 ‘C’相比,输出-2 。

#include <stdio.h>

int main(void)

{

char str1[1024] = { 0 }, str2[1024] = { 0 };

int iRet;

printf("请输入第一个字符串\n");

gets_s(str1);//vs在2015之后不可用gets,但是可以用gets_s代替

printf("请输入第二个字符串\n");

gets_s(str2);

for (int i = 0; i < ((sizeof(str1) > sizeof(str2)) ? sizeof(str1) : sizeof(str2)); i++)

{

char ch1 = str1[i], ch2 = str2[i];

if ((ch1 == ch2) && (ch1 == '\0'))

{

printf("0\n");

return 0;

}

if (ch1 == ch2)

continue;

printf("%d\n", ch1 - ch2);

break;

}

return 0;

}

运行结果:

编写一个程序,将字符数组 s2 中的全部字符复制到字符数组 s1 中,不用 strcpy 函数。复制时,'\0'也要复制过去。'\0'后面的字符不复制。

<code>

//编写一个程序,将字符数组 s2 中的全部字符复制到字符数组 s1 中,不用 strcpy 函数。复制时,'\0'也要复制过去。'\0'后面的字符不复制。

#include <stdio.h>

int main(void)

{

char s1[1024] = { 0 }, s2[1024] = { 0 };

printf("请输入需要复制的字符串\n");

gets_s(s2);//vs在2015之后不可用gets,但是可以用gets_s代替

for (int i = 0; i < ((sizeof(s1) > sizeof(s2)) ? sizeof(s1) : sizeof(s2)); i++)

{

char ch = s2[i];

if ('\0' == ch)

{

s1[i] = ch;

break;

}

s1[i] = ch;

}

puts(s1);

return 0;

}

运行结果:



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。