我正在阅读这本书" Cracking the Coding Interview"其中包含C中几个算法的例子。我希望制作实现这些算法的程序,并在我继续运行时运行它们。
一种这样的算法是" Min和Max 1" (来自" Big O"章节):
int min = Integer.MAX_VALUE;
int max = Integer.MIN_VALUE;
for (int x : array) {
if (x < min) min = x;
if (x > max) max = x;
}
我试图围绕这个&#39;编写一个程序。如下:
#include<stdio.h>
int array[5] = [1, 3, 2, 5, 4];
int min = Integer.MAX_VALUE;
int max = Integer.MIN_VALUE;
int main(void):
{
for (int x : array) {
if (x < min) min = x;
if (x > max) max = x;
}
printf("The minimum is %i", min)
printf("The maximum is %i", max)
}
但是,如果我尝试编译并运行它,我会得到error: expected identifier before numeric constant int array[5] = [1, 3, 2, 5, 4];
。如何为此示例输入数组正确实现此算法?
答案 0 :(得分:4)
您的意思是以下
#include <stdio.h>
#include <limits.h>
#define N 5
int main( void )
{
int array[N] = { 1, 3, 2, 5, 4 };
int min = INT_MAX;
int max = INT_MIN;
for ( size_t i = 0; i < N; i++ )
{
if ( array[i] < min ) min = array[i];
if ( max < array[i] ) max = array[i];
}
printf( "The minimum is %i\n", min );
printf( "The maximum is %i\n", max );
return 0;
}
程序输出
The minimum is 1
The maximum is 5
对于你的程序,它根据C语法包含无效的结构。
在C ++中,循环看起来与你展示的一样。
#include <iostream>
#include <limits>
int main()
{
const size_t N = 5;
int array[N] = { 1, 3, 2, 5, 4 };
int min = std::numeric_limits<int>::max();
int max = std::numeric_limits<int>::min();
for ( int x : array )
{
if ( x < min ) min = x;
if ( max < x ) max = x;
}
std::cout << "The minimum is " << min << std::endl;
std::cout << "The maximum is " << max << std::endl;
return 0;
}
考虑到将数组声明为全局是没有意义的。
对于C中的数组定义,您可以将其定义为
int array[5] = { 1, 3, 2, 5, 4 };
(或使用一些命名常量而不是数字5)
或喜欢
int array[] = { 1, 3, 2, 5, 4 };
在最后一种情况下,元素的数量等于初始化器的数量。或者甚至可以使用以下初始化
int array[] = { [0] = 1, [1] = 3, [2] = 2, [3] = 5, [4] = 4 };
答案 1 :(得分:1)
一些问题:
int array[5] = [1, 3, 2, 5, 4];
需要int array[] = {1, 3, 2, 5, 4};
C中不存在短格式for
循环。(您是否使用C ++ 11编译器编译C代码?如果是,则使用{{1}保存源文件扩展可能是一种将其置于C模式的简单方法。)改为使用.c
等,并通过索引for (size_t i = 0;
访问数组元素。
不鼓励使用i
和min
作为变量名称,因为它们经常显示为宏定义。
答案 2 :(得分:1)
使用C语法在C。
中实现它{}
而不是[]
来定义数组的初始值。INT_MIN
中的INT_MAX
和limits.h
来使用int
的最小值和最大值。int main(void)
。使用其中一种受支持的循环形式。以下是C99中的实现:
for (int x : array)
答案 3 :(得分:1)
数组在{}而不是[]
内初始化看起来你是从错误的地方复制它,或者你是一个java程序员。
#include<stdio.h>
int a[5] = {1, 3, 2, 5, 4};
int min = Integer.MAX_VALUE;
int max = Integer.MIN_VALUE;
int main(void):
{
for (int x : array) {
if (x < min) min = x;
if (x > max) max = x;
}
printf("The minimum is %i", min)
printf("The maximum is %i", max)
}
如果你想我可以解决它,这仍然会给你错误。我把它留下来,以便你可以自己学习。