我们的老师在C语言中进行了一次练习。我们必须创建一个程序,该程序接受三个整数,如果它们是奇数或什至不使用数组,则将其输出,只能使用循环和条件语句。 我只允许使用scanf(),printf(),循环和条件语句。我一定不能有多个变量,例如,奇数1,奇数2,奇数3,偶数1,偶数2,偶数3。而且我不能做scanf(“%d%d%d”,),所以我必须运行scanf(“%d”)3次我想不出任何能精确打印出预期输出相同格式的想法。我希望有人可以帮助我
#include <stdio.h>
int main() {
int i, num;
printf("Enter three integers: ");
for(i=1;i<=3;i++)
{
scanf("%d", &num);
if(!(num%2))
{
printf("\nEven: %d", num);
}
if(num%2)
{
printf("\nOdd: %d\n", num);
}
}
}
我希望这样的事情……
输入:
1 2 3
输出:
Odd: 1 3
Even: 2
输入:
2 4 6
输出:
Odd:
Even: 2 4 6
...但是我唯一能做的就是这个
输入:
1 2 3
输出:
Odd: 1
Even: 2
Odd: 3
输入:
1 3 5
输出:
Odd: 1
Odd: 3
Odd: 5
答案 0 :(得分:4)
为了获胜而进行递归(变相循环)(如果您不介意将偶数取反)。
#include <stdio.h>
#include <stdlib.h>
void separate(int m, int n) {
if (m == n) printf("Odd:");
if (n == 0) { printf("\nEven:"); return; }
int i;
if (scanf("%d", &i) != 1) exit(EXIT_FAILURE);
// print odd numbers before recursing; even numbers after recursing
if (i % 2 == 1) printf(" %d", i);
separate(m, n - 1);
if (i % 2 == 0) printf(" %d", i);
if (m == n) printf("\n\n");
}
请参见https://ideone.com/GpE7rC,其中包括调用和输入
separate(3, 3); // for 3 numbers
答案 1 :(得分:0)
一种说法是
int odd1, odd2, odd3, numOdd = 0;
/* Code as above */
scanf("%d", &num);
if (num%2)
{
if (numOdd == 0)
{
odd1 = num;
numOdd++;
}
else if (numOdd == 1)
{
odd2 = num;
numOdd++;
}
/* And continue */
}
else
{
/* Repeat with even1, even2, even3 and numEven */
}
/* Print out numOdd oddn's */
/* Print out numEven evenn's */
这似乎是愚蠢的练习,但是至少您会得到很多练习来编写if
语句...
我还认为:
scanf("%d", &num1);
scanf("%d", &num2);
scanf("%d", &num3);
可能更短,但是除非您需要执行以下操作,否则您不需要for循环:
printf("Odd: ");
for (i = 0; i < 3; i++)
{
int thisNum;
if (i == 0) thisNum = num1;
else if (i == 1) thisNum = num2;
/* etc */
if (thisNum % 2) printf("%d ", thisNum);
}
答案 2 :(得分:0)
问题在于您不能使用数组。因此,您不得使用字符串(即数组)。允许使用scanf
和printf
是您的老师故意设置的陷阱-在不求助于使用数组(显式或隐式)的情况下,无法以有用的方式使用它们。
因此,您必须执行以下操作:
#include <stdio.h>
#include <ctype.h>
void print_number(int n)
{
if (n < 0) {
putchar('-');
n = -n;
}
if (n == 0)
putchar('0');
if (n / 10)
print_number(n / 10);
putchar(n % 10 + '0');
}
int main(void) {
putchar('E');
putchar('n');
putchar('t');
putchar('e');
putchar('r');
putchar(' ');
putchar('t');
putchar('h');
putchar('r');
putchar('e');
putchar('e');
putchar(' ');
putchar('i');
putchar('n');
putchar('t');
putchar('e');
putchar('g');
putchar('e');
putchar('r');
putchar('s');
putchar(':');
putchar(' ');
fflush(stdout);
int odd1, odd2, odd3, odd_count = 0;
int even1, even2, even3, even_count = 0;
for(int i = 0; i < 3; i++)
{
int number = 0;
int c;
while (1) {
c = getchar();
if (isspace(c)) {
if (c == '\n')
break;
while ((c = getchar()) == ' ');
ungetc(c, stdin);
break;
}
else if (isdigit(c)) {
number = number * 10 + c - '0';
}
}
if (number % 2) {
switch (odd_count) {
case 0: odd1 = number; break;
case 1: odd2 = number; break;
case 2: odd3 = number; break;
}
odd_count ++;
}
else {
switch (even_count) {
case 0: even1 = number; break;
case 1: even2 = number; break;
case 2: even3 = number; break;
}
even_count ++;
}
}
putchar('O');
putchar('d');
putchar('d');
putchar(':');
putchar(' ');
if (odd_count >= 1) {
print_number(odd1);
}
if (odd_count >= 2) {
putchar(' ');
print_number(odd2);
}
if (odd_count >= 3) {
putchar(' ');
print_number(odd3);
}
putchar('\n');
putchar('E');
putchar('v');
putchar('e');
putchar('n');
putchar(':');
putchar(' ');
if (even_count >= 1) {
print_number(even1);
}
if (even_count >= 2) {
putchar(' ');
print_number(even2);
}
if (even_count >= 3) {
putchar(' ');
print_number(even3);
}
putchar('\n');
}
此代码不使用任何数组。
如果您不能定义任何函数(显然不是main
),则必须在6个位置内联print_number
,以将递归转换为迭代。祝你好运!
但是,如果教师在不允许使用数组的任务中接受字符串的使用,则可以将其视为无视它们设置的所有愚蠢限制的许可。
答案 3 :(得分:-3)
鉴于您正在学习C,也许您的老师想教您一些指针算法,而不是像下面的代码中那样使用数组:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i = 0;
int *odd = (int*)malloc(3 * sizeof(int));
int odd_count = 0;
int *even = (int*)malloc(3 * sizeof(int));
int even_count = 0;
printf("Enter three integers: ");
for(i=0; i<3; i++)
{
int num = 0;
scanf("%d", &num);
if(!(num%2))
{
*even++ = num;
even_count++;
}
if(num%2)
{
*odd++ = num;
odd_count++;
}
}
even -= even_count;
odd -= odd_count;
printf("\nEven: ");
for(i=0; i<even_count; i++)
{
printf("%d ", *even++);
}
printf("\nOdd: ");
for(i=0; i<odd_count; i++)
{
printf("%d ", *odd++);
}
free(odd);
free(even);
return 0;
}