/*\n * File: main.c\n * Author: matthewmpp\n *\n * Created on November 7, 2010, 2:16 PM\n */\n\n#include <stdio.h>\n#include <string.h>\n#include <stdlib.h>\n#include <math.h>\n\n/*\nprime numbers.\nversion4\nshould tell whether a number is prime or not prime.\nby using other prime numbers.\n */\n\nint input_func() {\n char line[100];\n int n_input;\n\n while (1) {\n printf("Please enter a whole number.\\n");\n fgets(line, sizeof (line), stdin);\n sscanf(line, "%d", &n_input);\n\n if (n_input >= 0)\n break;\n\n return (n_input);\n }\n}\n\nint ifstatements_func(n_ifstate)\nint n_ifstate;\n{\n if (n_ifstate == 0) {\n printf("The number, %d, is not prime and has no factors.\\n", n_ifstate);\n exit(1);\n }\n\n if (n_ifstate == 1) {\n printf("The number, %d, is not prime.\\n", n_ifstate);\n printf("The factors of %d, is %d.\\n", n_ifstate, n_ifstate);\n exit(1);\n }\n\n if (n_ifstate == 2) {\n printf("The number, %d, is a prime.\\n", n_ifstate);\n printf("The factors of %d, are 1 and %d.\\n", n_ifstate, n_ifstate);\n exit(1);\n }\n if (n_ifstate == 3) {\n printf("The number, %d, is a prime.\\n", n_ifstate);\n printf("The factors of %d, are 1 and %d.\\n", n_ifstate, n_ifstate);\n exit(1);\n }\n return (n_ifstate);\n}\n\nint square_root_func(n_prmfnc)\nint n_prmfnc;\n{\n int i; //counter\n\n float sq_root_f;\n int sq_root_i;\n\n int primes[100];\n int length_primes;\n\n primes[0] = 2; /*first prime is 2.*/\n primes[1] = 3; /*second prime is 3.*/\n length_primes = sizeof (primes);\n\n //printf ("before.sq_root.value of n_prmfnc=%d\\n", n_prmfnc);\n sq_root_f = sqrt(n_prmfnc);\n sq_root_i = sq_root_f;\n //printf ("prmfnc.after.sq_root\\n");\n //printf ("value of sq_root=%.3f\\n", sq_root_f);\n //printf ("value of sq_root=%d\\n", sq_root_i);\n\n return (sq_root_i);\n}\n\nint prime_func(sq_root_pf, n_pf)\nint sq_root_pf;\nint n_pf;\n{\n //printf ("in.pf.beginning.of.func.sq_root_pf=%d\\n", sq_root_pf);\n //printf ("in.pf.beginning.of.func.n_pf=%d\\n", n_pf);\n\n int factor_counter = 0;\n int factor_temp;\n int prime_counter = 0;\n int prime_flag = 0;\n\n int primes_pf[100];\n int length_primes_pf = 0; //counter\n int i; //counter\n\n primes_pf[0] = 2;\n primes_pf[1] = 3;\n primes_pf[2] = 5;\n\n length_primes_pf = 3;\n //printf("length_primes_pf=%d\\n", length_primes_pf);\n\n //printf ("before.for.in.pf\\n");\n for (i = 0; i <= length_primes_pf; ++i) {\n //printf ("after.for.in.pf\\n");\n if (primes_pf[i] == 0)\n printf("primes_pf=0");\n else {\n if (primes_pf[i] <= sq_root_pf) {\n //printf("primes_pf.i=%d, sq_root_pf=%d\\n", primes_pf[i], sq_root_pf);\n //printf("before.modulus.in.pf\\n");\n factor_temp = n_pf % primes_pf[i];\n //printf("after.modulus.in.pf\\n");\n //printf("value.of.factor_temp=%d\\n", factor_temp);\n if (factor_temp == 0) {\n ++factor_counter;\n //printf("value.factor_counter=%d\\n", factor_counter);\n } else\n ++prime_counter;\n\n if (factor_counter == 0 && prime_counter > 0) {\n prime_flag = 1; /*yes, number is prime.*/\n primes_pf[length_primes_pf + 1] = n_pf;\n //printf("length_primes_pf=%d\\n", length_primes_pf);\n }\n }\n\n }\n }\n\n if (prime_flag == 1) {\n printf("The number, %d, is prime.\\n", n_pf);\n printf("The factors of %d, is 1 and %d.\\n", n_pf, n_pf);\n exit(0);\n } else\n printf("The number, %d, is not prime.\\n", n_pf);\n\n if (prime_flag == 0)\n pfactorization (primes_pf, length_primes_pf, n_pf);\n\n return (prime_flag);\n}\n\nint pfactorization(primes_fac, length_primes_fac, n_fac)\nint primes_fac[];\nint length_primes_fac;\nint n_fac;\n{\n int i;\n int j;\n\n int result;\n int n_temp;\n\n int z_array;\n int length_z_array=0;\n\n for (i=0; i<=length_primes_fac; ++i) {\n result = n_fac%primes_fac[i];\n if (result == 0) {\n n_temp = n_fac/primes_fac[i];\n z_array[length_z_array]=primes_fac[i];\n ++length_z_array;\n }\n }\n\n printf ("The prime factorization is:");\n for (j = 0; j < length_z_array; ++j)\n printf("%d\\n", z_array[j]);\n}\n\nint factors_func(n_ff)\nint n_ff;\n{\n int i;\n int j;\n\n int result;\n\n int factors[100];\n int length_factors = 0;\n\n for (i = 2; i < n_ff; ++i) {\n result = n_ff % i;\n if (result == 0) {\n factors[length_factors] = i;\n ++length_factors;\n }\n }\n\n printf("The factors for %d are:\\n", n_ff);\n printf("1\\n");\n\n for (j = 0; j < length_factors; ++j)\n printf("%d\\n", factors[j]);\n\n printf("%d\\n", n_ff);\n\n return (EXIT_SUCCESS);\n}\n\nint main() {\n int n_main1; //number from input\n int n_main2; //number after if statements\n int sq_root_main; //square root of number from function\n int prime_flag_main; //value of 1 if it is a prime\n\n n_main1 = input_func();\n //printf("main.after.input.function=%d.\\n", n_main1);\n\n n_main2 = ifstatements_func(n_main1);\n //printf("main.after.ifstatments.function=%d\\n", n_main2);\n\n sq_root_main = square_root_func(n_main2);\n //printf("main.after.square_root_func_func=%d\\n", sq_root_main);\n\n prime_flag_main = prime_func(sq_root_main, n_main2);\n //printf("main.after.prime_func=%d\\n", prime_flag_main);\n\n factors_func(n_main2);\n\n\n\n return (EXIT_SUCCESS);\n}\nRun Code Online (Sandbox Code Playgroud)\n\n输出:
\n\nmatthewmpp@annrogers:~/Programming/C.progs/Personal$ vim prime6.c\nmatthewmpp@annrogers:~/Programming/C.progs/Personal$ cc -c prime6.c\nprime6.c: In function \xe2\x80\x98pfactorization\xe2\x80\x99:\nprime6.c:171: error: subscripted value is neither array nor pointer\nprime6.c:178: error: subscripted value is neither array nor pointer\nRun Code Online (Sandbox Code Playgroud)\n\n语句;\n函数:pfactorization 应该找到数字的素因数分解。\n它在函数 prime_func 的底部调用。\n数据正在从 prime_func 传递到 pfactorization。\n在我添加此函数之前,代码工作正常。
\n\n问题:\n我不明白此错误消息。\n它是什么意思以及我应该如何解决它?
\n\n已解决:\nint z_array[100];\n谢谢。
\n| 归档时间: |
|
| 查看次数: |
80876 次 |
| 最近记录: |