所以我一直在研究这些程序。他们是我正在学习的课程。我一直在研究这些问题,现在我被困住了。对于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
我将非常感谢您提供的任何帮助。 :)
答案 0 :(得分:0)
我会给你第二个问题的一些指示,但不会为你解决整个事情。
您应该将程序分解为函数。一个用于从输入读取集合的函数,一个用于打印集合,一个用于生成两个集合的集合,另一个用于生成交集等...
关于typedef,给出的提示很有用。您应该输入letters
类型。这将是boolean类型为26的数组。
typedef boolean letters[26];
您可以使用此类型将集合传递给函数。
关于子集函数,算法就是这样的。
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;
}
}
}