需要一些帮助分配

时间:2015-12-24 06:36:49

标签: c arrays recursion char typedef

所以我一直在研究这些程序。他们是我正在学习的课程。我一直在研究这些问题,现在我被困住了。对于C来说,我有点像菜鸟,我并不期待任何太难(我在多维数组,字符串和递归以及所有有趣的东西)。以下是我目前正在努力解决的两个问题。任何帮助都非常值得感谢。 (如果我的英语不好,我也道歉,这不是我的第一语言)

第一个计划:

使用递归函数编写程序,该函数将整数n作为参数,并返回以下序列中前n个元素的总和,½+ 2/3 +¾.... + n / n + 1

该函数的名称应为sum。将结果打印在main中。

这个程序差不多完成了,我只需要弄清楚如何使它递归。我在这篇文章末尾的pastebin进展情况。我真的想不出让它递归的方法。

#include <stdio.h>

int sum (int n);

//**************************************************************
// NAME:      main
// PURPOSE:   get n's value and call sum function, print result
// PASSED:    none
// RETURNED:  none
//**************************************************************
int main () {
    int n, add;
    printf("Enter a number: ");
    scanf("%d", &n);
    add=sum(n);
    printf("The result is %d.", add);
}

//*************************************************
// NAME:      sum
// PURPOSE:   calculate the sum of n/n+1 until n=0
// PASSED:    int n
// RETURNED:  none
//*************************************************
int sum (int n) {
    int i, total=0;
    for (i=0; i<n; i++) {
        total+=n/(n+1);
        n--;
    }
}

第二个节目(我真的非常需要帮助):我制作了一张带有屏幕截图的imgur专辑,这不会让我太长,这就是我需要做的事:http://imgur.com/a/q5Ein

总的来说,集合理论令人困惑,我在这方面取得了一些进展。我现在的问题是我不知道从哪里开始A是B(等)部分的子集,我不知道我将如何输出真则和法词作为字符。我正在考虑制作另一个巨大的“for”循环并检查索引以输出一个字母,但这似乎有些不切实际。我也没有CLUE,因为typedef可以用于所有这些。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "simpio.h"
#include "strlib.h"

char C;
//char array1[26] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
//char array2[26] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};

bool array1[26] = {false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false};
bool array2[26] = {false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false};
bool union_array[26];
bool intersect_array[26];

char A[26];
char B[26];

bool unions (bool array1[26], bool array2[26]);
bool intersection (bool array1[26], bool array2[26]);
void contain(char A[], char B[]);

int main () {
    int x=0;
    printf("\nEnter the values of A. Enter a \".\" when done:\n");
    do {
        scanf(" %c", &A[x]);
        if (A[x]=='.') {
            A[x]='\0';
            break;
        }
        x++;
    } while (A[x]!='.' && x!=26);
    x=0;
    printf("\nEnter the values of B. Enter a \".\" when done:\n");
    do {
        scanf(" %c", &B[x]);
        if (B[x]=='.') {
            B[x]='\0';
            break;
        }
        x++;
    } while (B[x]!='.' && x!=26);


    for (x=0;x<26;x++) {
        if (A[x]=='a') {array1[0]=true;}
        if (A[x]=='b') {array1[1]=true;}
        if (A[x]=='c') {array1[2]=true;}
        if (A[x]=='d') {array1[3]=true;}
        if (A[x]=='e') {array1[4]=true;}
        if (A[x]=='f') {array1[5]=true;}
        if (A[x]=='g') {array1[6]=true;}
        if (A[x]=='h') {array1[7]=true;}
        if (A[x]=='i') {array1[8]=true;}
        if (A[x]=='j') {array1[9]=true;}
        if (A[x]=='k') {array1[10]=true;}
        if (A[x]=='l') {array1[11]=true;}
        if (A[x]=='m') {array1[12]=true;}
        if (A[x]=='n') {array1[13]=true;}
        if (A[x]=='o') {array1[14]=true;}
        if (A[x]=='p') {array1[15]=true;}
        if (A[x]=='q') {array1[16]=true;}
        if (A[x]=='r') {array1[17]=true;}
        if (A[x]=='s') {array1[18]=true;}
        if (A[x]=='t') {array1[19]=true;}
        if (A[x]=='u') {array1[20]=true;}
        if (A[x]=='v') {array1[21]=true;}
        if (A[x]=='w') {array1[22]=true;}
        if (A[x]=='x') {array1[23]=true;}
        if (A[x]=='y') {array1[24]=true;}
        if (A[x]=='z') {array1[25]=true;}
    }

    for (x=0;x<26;x++) {
        if (B[x]=='a') {array2[0]=true;}
        if (B[x]=='b') {array2[1]=true;}
        if (B[x]=='c') {array2[2]=true;}
        if (B[x]=='d') {array2[3]=true;}
        if (B[x]=='e') {array2[4]=true;}
        if (B[x]=='f') {array2[5]=true;}
        if (B[x]=='g') {array2[6]=true;}
        if (B[x]=='h') {array2[7]=true;}
        if (B[x]=='i') {array2[8]=true;}
        if (B[x]=='j') {array2[9]=true;}
        if (B[x]=='k') {array2[10]=true;}
        if (B[x]=='l') {array2[11]=true;}
        if (B[x]=='m') {array2[12]=true;}
        if (B[x]=='n') {array2[13]=true;}
        if (B[x]=='o') {array2[14]=true;}
        if (B[x]=='p') {array2[15]=true;}
        if (B[x]=='q') {array2[16]=true;}
        if (B[x]=='r') {array2[17]=true;}
        if (B[x]=='s') {array2[18]=true;}
        if (B[x]=='t') {array2[19]=true;}
        if (B[x]=='u') {array2[20]=true;}
        if (B[x]=='v') {array2[21]=true;}
        if (B[x]=='w') {array2[22]=true;}
        if (B[x]=='x') {array2[23]=true;}
        if (B[x]=='y') {array2[24]=true;}
        if (B[x]=='z') {array2[25]=true;}
    }


    printf("\nFor the sets: \n");

    printf("A = {");
    for (x=0; x<sizeof(A); x++) {
        if (A[x]=='\0') {break;}
        printf("%c, ", A[x]);
    }
    printf("\b\b}\n");

    printf("B = {");
    for (x=0; x<sizeof(B); x++) {
        if (B[x]=='\0') {break;}
        printf("%c, ", B[x]);
    }
    printf("\b\b}\n");

    unions(array1, array2);
    intersection(array1, array2);
}

bool unions (bool array1[26], bool array2[26]) {
    int x=0;
    for (x=0;x<26;x++) {
        if (array1[x]==true || array2[x]==true) {union_array[x]=true;}
    }
    printf("A Union B = {");
    for (x=0; x<26; x++) {
        if (union_array[x]==true) {printf("T, ");}
        if (union_array[x]==false) {printf("F, ");}
    }
    printf("\b\b}\n\n");
}

bool intersection (bool array1[26], bool array2[26]) {
    int x=0;
    for (x=0;x<26;x++) {
        if (array1[x]==true && array2[x]==true) {intersect_array[x]=true;}
    }
    printf("A Intersect B = {");
    for (x=0; x<26; x++) {
        if (intersect_array[x]==true) {printf("T, ");}
        if (intersect_array[x]==false) {printf("F, ");}
    }
    printf("\b\b}\n");
}

以下是我的代码的文本转储:http://pastebin.com/nZugygkJ

我将非常感谢您提供的任何帮助。 :)

1 个答案:

答案 0 :(得分:0)

我会给你第二个问题的一些指示,但不会为你解决整个事情。

  1. 您应该将程序分解为函数。一个用于从输入读取集合的函数,一个用于打印集合,一个用于生成两个集合的集合,另一个用于生成交集等...

  2. 关于typedef,给出的提示很有用。您应该输入letters类型。这将是boolean类型为26的数组。

    typedef boolean letters[26];
    

    您可以使用此类型将集合传递给函数。

  3. 关于子集函数,算法就是这样的。

    Subset = 1;  // Subset is 1 if arr1 is a subset of arr2
    for  (i=0; i<26; i++)
    {
        if (arr[i] == 'T')
        {
           if (arr2[i] != 'T')
           {
              Subset = 0;
           }
        }
    }