我是C编程新手,也是“编程”。到目前为止不到一个月。我做了一个小程序,打印出四个输入数字中最大和最小的整数。有没有使用基本c编程方法的最短路径?
#include <stdio.h>
main()
{
int a, b, c, d, y;
printf("Enter four integers (separate them with spaces): ");
scanf("%d %d %d %d", &a, &b, &c, &d);
if (a>b && a>c && a>d){
if (b<c && b<d){
y = b;
}
else if (c<b && c<d){
y = c;
}
else if (d<b && d<c){
y = d;
}
printf("Largest: %d\n", a);
printf("Smallest: %d", y);
}
else if (b>a && b>c && b>d) {
if (a<c && a<d){
y = a;
}
else if(c<a && c<d){
y = c;
}
else if(d<a && d<c){
y = d;
}
printf("Largest: %d\n", b);
printf("Smallest: %d", y);
}
else if (c>a && c>b && c>d)
{
if (a<b && a<d){
y = a;
}
else if(b<a && b<d){
y = b;
}
else if(d<a && d<b){
y = d;
}
printf("Largest: %d\n", c);
printf("Smallest: %d", y);
}
else if (d>a && d>b && d>c) {
if (a<b && a<c){
y = a;
}
else if(b<a && b<c){
y = b;
}
else if(c<a && c<b){
y = c;
}
printf("Largest: %d\n", d);
printf("Smallest: %d", y);
}
return 0;
}
答案 0 :(得分:3)
欢迎来到编程世界。你会喜欢这里:)
在逻辑思维中,你应该总是试着想出一个可以轻松扩展的通用解决方案。
最大值问题的一般方法是任意设置最大值,然后使用循环比较将所有其他值。
将数字放在数组中。
int array[] = {a,b,c,d};
将max和min值任意设置为数组的第一个元素
int max = array[0];
int min = array[0];
将循环运行到数组的长度,并将每个元素与max进行比较。如果它大于最大值,则更新最大值。同样地将每个元素与最小值进行比较,如果它小于最小值,则更新最小值。
int length = sizeof array / sizeof array[0];
for (int n = 0; n < length; n++)
{
if(array[n]>max)
{
max = array[i];
}
if(array[n]<min)
{
min = array[i];
}
}
printf("Maximum Number:\t%d\n",max);
printf("Minimum Number:\t%d\n",min);
使用这种方法,您可以轻松扩展到大量输入,而且非常简单。
答案 1 :(得分:2)
使用基本的c编程方法有没有最短的方法?
根据您的问题,for loop
将完成这项工作:
#include<stdio.h>
int main (void){
int array[] = {1,6,15,9};
int length = sizeof array / sizeof array[0];
int big, small;
big=small=array[0];
for (int i = 0; i < length; i++){
if(array[i]>big){
big=array[i];
}
if(array[i]<small){
small=array[i];
}
}
printf("The biggest Number is:\t%d\n",big);
printf("The smallest Number is:\t%d\n",small);
return 0;
}
输出:
The biggest Number is: 15
The smalles Number is: 1
我认为这是一个codereview.stackexchange.com问题,而不是SO。
答案 2 :(得分:2)
直接的方法如下
#include <stdio.h>
int main( void )
{
int a, b, c, d;
int largest, smallest;
printf( "Enter four integers (separate them with spaces): " );
scanf( "%d %d %d %d", &a, &b, &c, &d );
largest = smallest = a;
if ( largest < b )
{
largest = b;
}
else if ( b < smallest )
{
smallest = b;
}
if ( largest < c )
{
largest = c;
}
else if ( c < smallest )
{
smallest = c;
}
if ( largest < d )
{
largest = d;
}
else if ( d < smallest )
{
smallest = d;
}
printf( "\nLargest: %d\n", largest );
printf( "Smallest: %d", smallest );
return 0;
}
如果要输入例如
3 2 1 4
然后输出
Enter four integers (separate them with spaces): 3 2 1 4
Largest: 4
Smallest: 1
另一种方法是以下
#include <stdio.h>
int main( void )
{
int a, b, c, d;
printf( "Enter four integers (separate them with spaces): " );
scanf( "%d %d %d %d", &a, &b, &c, &d );
if ( !( a < b || a < c || a < d ) )
{
printf( "\nLargest: %d\n", a );
}
else if ( !( b < c || b < d ) )
{
printf( "\nLargest: %d\n", b );
}
else if ( !( c < d ) )
{
printf( "\nLargest: %d\n", c );
}
else
{
printf( "\nLargest: %d\n", d );
}
if ( !( b < a || c < a || d < a ) )
{
printf( "Smallest: %d", a );
}
else if ( !( c < b || d < b ) )
{
printf( "Smallest: %d", b );
}
else if ( !( d < c ) )
{
printf( "Smallest: %d", c );
}
else
{
printf( "Smallest: %d", d );
}
return 0;
}
同一输入的输出相同。
如果要使用整数数组,那么你可以写一个像这样的通用函数
struct minmax
{
int *min;
int *max;
}
struct minmax minmax_element( int *a, size_t n )
{
struct minmax m = { a, a };
for ( size_t i = 1; i < n; i++ )
{
if ( a[i] < *m.min ) m.min = a + i;
else if ( *m.max < a[i] ) m.max = a + i;
}
return m;
}
此功能甚至可以用于空序列。它返回指向数组中最大和最小元素的指针结构。
至于ypur方法,那么一般来说它是不正确的。它没有考虑到一些(甚至所有)数字可以彼此相等。
同样根据C标准函数main
,没有参数应声明为
int main( void )
答案 3 :(得分:0)
这种带有函数的方法更具动态性,可重用性和可读性:
int max(int* arr ,int n) {
if (n < 0)
return 0;
int ans = arr[0];
for (int i=1; i<n; i++) {
if (arr[i]>ans) {
ans = arr[i];
}
}
return ans;
}
int min(int* arr ,int n) {
if (n < 0)
return 0;
int ans = arr[0];
for (int i=1; i<n; i++) {
if (arr[i]<ans) {
ans = arr[i];
}
}
return ans;
}
int main()
{
int a, b, c, d;
printf("Enter four integers (separate them with spaces): ");
scanf("%d %d %d %d", &a, &b, &c, &d);
int arr[] = {a, b, c, d};
printf("Largest: %d\n", max(arr, 4));
printf("Smallest: %d", min(arr, 4));
return 0;
}
答案 4 :(得分:0)
以下代码包含错误检查,并且简单而简单地实现了功能,而无需进入新程序员难以理解的代码。
#include <stdio.h>
#include <stdlib.h> // exit(), EXIT_FAILURE
#include <limits.h> // INT_MAX, INT_MIN
#define MAX_INPUTS (4)
int main( void )
{
// declare array of MAX_INPUTS integers
int myInputs[ MAX_INPUTS];
// for flexibility, the printf() and scanf() could be in a loop
// so most any number (defined in MAX_INPUTS) could be used
// with out changing anything but the #define statement
printf("Enter four integers (separate them with spaces): ");
if( 4 != scanf("%d %d %d %d", &myInputs[0], &myInputs[1], &myInputs[2], &myInputs[3]) )
{ // then scanf failed
// output error message, including the system error message to stderr
perror( "scanf for 4 inputs failed" );
exit( EXIT_FAILURE );
}
// implied else, scanf successful
int minValue = INT_MAX;
int maxValue = INT_MIN;
for( size_t i=0; i< MAX_INPUTS; i++ )
{
if( myInputs[i] > maxValue) maxValue = myInputs[i];
if( myInputs[i] < minValue) minValue = myInputs[i];
}
printf("Largest: %d\n", maxValue);
printf("Smallest: %d\n", minValue);
return 0;
} // end function: main