动态数据利用malloc进行分配即可,是不是数字,则必须保证输入为数字,否则程序会崩溃,或者把接收输入的变量改为字符串类型,再做判断是否是数字。代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int isDigital(char *a)
{
for(int i = 0; i < strlen(a); i++)
{
if(isdigit(a[i])!=1)
{
return 0;
}
}
return 1;
}
int main()
{
int n,i;
char temp[512] = {0};
int max = 0;
printf("请输入字符串长度:");
scanf("%d",&n);
int *pa = NULL;
pa=(int *) malloc(n*sizeof(int));
if(pa==NULL)
{
printf("内存分配失败!!!");
}
//getchar();
for (i=0;i<n;i++)
{
printf("请输入数字:");
//scanf("%c", &pa[i]);
scanf("%s", temp);
if(isDigital(temp))
{
pa[i] = atoi(temp);
}
else
{
i--;
printf("输入的非数字,请重新输入,");
continue;
}
memset(temp, 0, sizeof(temp));
if(pa[i] > max)
{
max = pa[i];
}
}
printf("max = %d", max);
free(pa);
return 0;
}
运行情况:
int a[10];
这个修改为
int n;
printf("请输入数组大小");
scanf("%d", &n);
int * a = (int *)malloc(n * sizeof(n));
如果对您有帮助,别忘了关注博主~
包含内容:选择结构,循环结构,数组,函数,结构体,共用体
目录
2.从键盘输入一个字符,如果是小写字母将其转换成大写字母输出,其他字符原样输出。
6.编写程序,从键盘输入三个数,计算以这三个数为边长的三角形的面积。
8.输入一个职工的月薪salary,输出应交的个人所得税tax(保留2位小数)。
9.某个电力公司对其用户的收费规定如下,编写程序,对于一个输入的用电数量,计算用户的缴费额。(if...else...if语句实现)
23.若口袋里放12个球,3个红球,3个白球,6个黑球,从中任取8个,编写程序列出所有可能的取法。
24.已知鸡兔若干只,共有98个头,386只脚,请问鸡兔各多少只?
25.我国古代数学家张丘建在《算经》一书中提出的数学问题: 鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。 百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?
26.我国古代数学家张丘建在《算经》一书中提出的数学问题: 鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。 百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?
根据问题描述和参考资料,可以基于C语言编写一个程序,实现输入任意数组并找出其中的极大峰值。以下是具体的解决方案步骤:
首先,创建一个函数来判断输入是否为数字。可以使用C语言提供的库函数isdigit()
来判断字符是否为数字。该函数的原型是int isdigit(int c)
,当参数c
是一个数字字符(0-9)时,函数返回非零值;否则,函数返回0。根据isdigit()
函数的返回值,可以判断输入是否为数字,如果不是数字则输出错误提示。
创建一个数组来存储输入的数字,长度可以根据需要动态分配。可以使用动态内存分配函数malloc()
来分配数组内存空间。
在主函数中,首先根据用户输入的数组长度使用malloc()
函数动态分配数组内存空间。然后,使用循环依次读取用户输入的数字,直到读取完所有数字为止。在循环中,使用isdigit()
函数判断输入是否为数字。如果不是数字,则输出错误提示。
接下来,遍历整个数组,判断每个元素是否为极大峰值。首先,需要判断数组的边界情况,即第一个元素和最后一个元素。对于数组中的其他元素,可以通过与其前后相邻元素进行比较来判断是否为极大峰值。如果一个元素比前后相邻元素都大,则该元素为极大峰值。
最后,输出找到的极大峰值。
下面是具体的代码实现:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int isNumeric(char input) {
return isdigit(input);
}
int main() {
int length;
printf("请输入数组的长度:");
scanf("%d", &length);
int* array = (int*)malloc(sizeof(int) * length);
printf("请输入数组元素:\n");
for (int i = 0; i < length; i++) {
printf("请输入第 %d 个元素:", i+1);
char input[20];
scanf("%s", input);
if (!isNumeric(input[0])) {
printf("输入错误,请输入数字!\n");
return 0;
}
array[i] = atoi(input);
}
printf("输入的数组为:");
for (int i = 0; i < length; i++) {
printf("%d ", array[i]);
}
printf("\n");
printf("极大峰值为:");
if (array[0] > array[1]) {
printf("%d ", array[0]);
}
for (int i = 1; i < length - 1; i++) {
if (array[i] > array[i-1] && array[i] > array[i+1]) {
printf("%d ", array[i]);
}
}
if (array[length-1] > array[length-2]) {
printf("%d ", array[length-1]);
}
free(array);
return 0;
}
这样,就编写了一个根据用户输入任意数组并找出其中的极大峰值的C语言程序。程序将首先提示用户输入数组的长度,然后依次读取用户输入的数组元素。如果输入不是数字,则会输出错误提示。最后,程序会输出找到的极大峰值。
希望这个解决方案对你有帮助!如果你有任何问题,请随时提问。