如何实现输入多行数字,每行代表一个数组呢,每行输入用什么作为结束标志呢?
查了下这原来好像是python的题,但是用C语言该如何实现输入呢?🤔
用个换行符回车也行:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int cmp(const void *a, const void *b) {
return *(int *)a - *(int *)b;
}
int main() {
char input[1000];
while (fgets(input, 1000, stdin) != NULL) {
int a[100000] = {0};
int j = 0;
char *token = strtok(input, " \r\n");
while (token != NULL) {
a[j++] = atoi(token);
token = strtok(NULL, " \r\n");
}
qsort(a, j, sizeof(a[0]), cmp);
int p = 1;
for (int m = 1; m < j; m++) {
if (a[m] * 2 != a[m - 1] + a[m + 1]) {
p = 0;
break;
}
}
if (p)
printf("True\n");
else
printf("False\n");
}
return 0;
}
C语言的话也是可以的逻辑一样的就是用的方法可能不同 可以一起讨论一下
(1)在C语言中,数组一旦被定义后,占用的内存空间就是固定的,容量就是不可改变的,既不能在任何位置插入元素,也不能在任何位置删除元素,只能读取和修改元素,我们将这样的数组称为静态数组。反过来说,如果数组在定义后可以改变容量,允许在任意位置插入或者删除元素,那么这样的数组称为动态数组。
1、PHP、JavaScript 等解释型的脚本语言一般都支持动态数组,而 C、C++ 等编译型的语言一般不支持动态数组。
2、总之,C语言中的数组是静态的,一旦定义后长度就不能改变了,不要尝试去插入或删除元素。
(2)C语言中的数组不能存放不同类型的数据,这种特性是由计算机的存储机制与读取决定的。
详细的具体实现内容如下:
以32位系统为例,一个整数的存储大小为4字节,C语言定义一个数组a,数组中都是整数,则每个整数的存储占据计算机内存的4个字节。假如第一个整数的开始存储位置是100,则第二个整数的开始存储位置是104,以此类推。当读取数组a的第三个整数时,a[2],此时计算机计算存储位置是数组a开始的100位,100+4*2=108,读取108存储位置的4字节数据。同理,相同的浮点数也可以这样读取。
问题分析:题目要求输入多行数字,每行代表一个数组,但没有说明具体的输入格式,需要我们自行设计。同时,需要考虑每行输入的结束标志应该是什么。
解决方案:一个常用的方法是使用EOF作为每行输入的结束标志,即输入完一行之后按下Ctrl+Z(在Windows系统下)或Ctrl+D(在Linux系统下)。我们可以使用while和scanf语句来实现多次输入,并通过动态数组和二维数组的方式来存储这些数字。
示例代码如下:
```c
int main() { int row = 0, col = 0, i, j; int arr = NULL; // 动态数组的指针 while (scanf("%d", &col) != EOF) { // 每行输入以EOF结束 if (arr == NULL) { // 第一次输入时需要为动态数组分配空间 arr = (int ) malloc(sizeof(int )); } else { // 后续输入需要重新分配空间 arr = (int ) realloc(arr, sizeof(int ) * (row+1)); } arr[row] = (int *) malloc(sizeof(int) * col); // 为每一行分配空间 for (i = 0; i < col; i++) { scanf("%d", &arr[row][i]); // 读取每一个数字 } row++; // 行数自增 }
// 输出二维