数组 b 等于数组元素 a 的数字之和
Array b are equal to the sum the digit of the array element a
我需要帮助解决这个问题,如果有人有类似的问题会帮助我。
任务是:编写一个程序,加载n
个自然数的数组a
,然后形成一个数组b
,这样数组 b
等于数组元素 a
.
的数字之和
Example:
n=5
a[0]=1
a[1]=2
a[2]=3
a[3]=32
a[4]=54
Array b is:
b[0]=1
b[1]=2
b[2]=3
b[3]=5
b[4]=9
我喜欢这个:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAX 100
void form(int [], int [], int);
int sum_digit(int);
void print (int [], int);
int main() {
int n;
printf("Enter n:");
scanf("%d", &n);
while (n < 1 || n > MAX) {
int n;
printf("Enter n:");
scanf("%d", &n);
}
int a[MAX], b[MAX];
printf("Enter element of array a:\n");
for (int i = 0; i < n; i++) {
printf("%d. element:",i + 1);
scanf("%d", &a[i]);
}
form(a, b, n);
print(b, n);
return 0;
}
void form(int a[MAX], int b[MAX], int n) {
for (int i = 0; i < n; i++) {
while (a[i] > 0) {
int pom = a[i] % 10;
b[i] = sum_digit(pom);
a[i] = a[i] / 10;
}
}
}
int sum_digit(int s) {
int sum = 0;
sum = sum + s;
return sum;
}
void print(int b[MAX], int n) {
for (int i = 0; i < n; i++) {
printf("%d ", b[i]);
}
}
多位数组元素出现问题。
每次调用 sum_digit
函数时,总和都设置为零。
因此,例如对于元素 32
,我无法得到 5,因为我无法添加 2
和 3
。如果有人知道如何解决这个问题,我将不胜感激。
sum_digit()
应该计算所有数字的总和,而不仅仅是一个数字。所以你需要将循环从 form()
移动到 sum_digit()
.
void form(int a[MAX],int b[MAX],int n)
{
for(int i=0;i<n;i++)
{
b[i]=sum_digit(a[i]);
}
}
int sum_digit(int s)
{
int sum=0;
while (s > 0) {
sum += s % 10;
s /= 10;
}
return sum;
}
由于赋值说明数组包含自然数,您还可以将所有 int
声明更改为 unsigned
。
您的代码中存在多个问题:
您没有测试 scanf()
的 return 值,因此任何无效或缺失的输入都将导致未定义的行为,因为目标变量将不会更新。
在while
循环中定义了一个新变量n
,所以外层作用域中的原始变量永远不会被scanf()
修改。
form
和 sum_digit
都不正确:您应该使用循环计算 sum_digit()
中的总和,并将所有总和存储在 [=15 中的循环中=].
这是修改后的版本:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAX 100
void form(int [], int [], int);
int sum_digits(int);
void print (int [], int);
int main() {
int n;
for (;;) {
printf("Enter n:");
if (scanf("%d", &n) != 1)
return 1;
if (n >= 1 && n <= MAX)
break;
printf("Incorrect value: %d\n", n);
}
int a[MAX], b[MAX];
printf("Enter elements of array a:\n");
for (int i = 0; i < n; i++) {
printf("%d. element:", i + 1);
if (scanf("%d", &a[i]) != 1)
return 1;
}
form(a, b, n);
print(b, n);
return 0;
}
void form(int a[MAX], int b[MAX], int n) {
for (int i = 0; i < n; i++) {
b[i] = sum_digits(a[i]);
}
}
int sum_digits(int s) {
int sum = 0;
/* this loop handles positive and negative numbers alike */
while (s != 0) {
sum = sum + s % 10;
s = s / 10;
}
/* return the positive sum of digits */
return abs(sum);
}
void print(int b[MAX], int n) {
for (int i = 0; i < n; i++) {
printf("%d ", b[i]);
}
printf("\n");
}
初学者要注意,因为数组a的元素类型是int
,所以表示用户可以在数组中输入负数。但是位数之和应该是非负值。
并且数组a
不应该改变。任务只是组成数组 b
.
你来了。
void form( const int a[], int b[], int n )
{
for ( int i = 0; i < n; i++ )
{
b[i] = sum_digit( a[i] );
}
}
和
int sum_digit( int num )
{
enum { Base = 10 };
int sum = 0;
do
{
int digit = num % Base;
if ( digit < 0 ) digit = -digit;
sum += digit;
} while ( num /= Base );
return sum;
}
这是一个演示程序。
#include <stdio.h>
int sum_digit( int );
void form( const int a[], int b[], int n )
{
for (int i = 0; i < n; i++)
{
b[i] = sum_digit( a[i] );
}
}
int sum_digit( int num )
{
enum { Base = 10 };
int sum = 0;
do
{
int digit = num % Base;
if (digit < 0) digit = -digit;
sum += digit;
} while (num /= Base);
return sum;
}
void print( const int a[], int n )
{
for (int i = 0; i < n; i++)
{
printf( "%d ", a[i] );
}
putchar( '\n' );
}
int main( void )
{
enum { MAX = 5 };
int a[MAX] = { 1, -22, 333, -4444, 55555 };
int b[MAX];
print( a, MAX );
form( a, b, MAX );
print( b, MAX );
}
程序输出为
1 -22 333 -4444 55555
1 4 9 16 25
我需要帮助解决这个问题,如果有人有类似的问题会帮助我。
任务是:编写一个程序,加载n
个自然数的数组a
,然后形成一个数组b
,这样数组 b
等于数组元素 a
.
Example:
n=5
a[0]=1
a[1]=2
a[2]=3
a[3]=32
a[4]=54
Array b is:
b[0]=1
b[1]=2
b[2]=3
b[3]=5
b[4]=9
我喜欢这个:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAX 100
void form(int [], int [], int);
int sum_digit(int);
void print (int [], int);
int main() {
int n;
printf("Enter n:");
scanf("%d", &n);
while (n < 1 || n > MAX) {
int n;
printf("Enter n:");
scanf("%d", &n);
}
int a[MAX], b[MAX];
printf("Enter element of array a:\n");
for (int i = 0; i < n; i++) {
printf("%d. element:",i + 1);
scanf("%d", &a[i]);
}
form(a, b, n);
print(b, n);
return 0;
}
void form(int a[MAX], int b[MAX], int n) {
for (int i = 0; i < n; i++) {
while (a[i] > 0) {
int pom = a[i] % 10;
b[i] = sum_digit(pom);
a[i] = a[i] / 10;
}
}
}
int sum_digit(int s) {
int sum = 0;
sum = sum + s;
return sum;
}
void print(int b[MAX], int n) {
for (int i = 0; i < n; i++) {
printf("%d ", b[i]);
}
}
多位数组元素出现问题。
每次调用 sum_digit
函数时,总和都设置为零。
因此,例如对于元素 32
,我无法得到 5,因为我无法添加 2
和 3
。如果有人知道如何解决这个问题,我将不胜感激。
sum_digit()
应该计算所有数字的总和,而不仅仅是一个数字。所以你需要将循环从 form()
移动到 sum_digit()
.
void form(int a[MAX],int b[MAX],int n)
{
for(int i=0;i<n;i++)
{
b[i]=sum_digit(a[i]);
}
}
int sum_digit(int s)
{
int sum=0;
while (s > 0) {
sum += s % 10;
s /= 10;
}
return sum;
}
由于赋值说明数组包含自然数,您还可以将所有 int
声明更改为 unsigned
。
您的代码中存在多个问题:
您没有测试
scanf()
的 return 值,因此任何无效或缺失的输入都将导致未定义的行为,因为目标变量将不会更新。在
while
循环中定义了一个新变量n
,所以外层作用域中的原始变量永远不会被scanf()
修改。form
和sum_digit
都不正确:您应该使用循环计算sum_digit()
中的总和,并将所有总和存储在 [=15 中的循环中=].
这是修改后的版本:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAX 100
void form(int [], int [], int);
int sum_digits(int);
void print (int [], int);
int main() {
int n;
for (;;) {
printf("Enter n:");
if (scanf("%d", &n) != 1)
return 1;
if (n >= 1 && n <= MAX)
break;
printf("Incorrect value: %d\n", n);
}
int a[MAX], b[MAX];
printf("Enter elements of array a:\n");
for (int i = 0; i < n; i++) {
printf("%d. element:", i + 1);
if (scanf("%d", &a[i]) != 1)
return 1;
}
form(a, b, n);
print(b, n);
return 0;
}
void form(int a[MAX], int b[MAX], int n) {
for (int i = 0; i < n; i++) {
b[i] = sum_digits(a[i]);
}
}
int sum_digits(int s) {
int sum = 0;
/* this loop handles positive and negative numbers alike */
while (s != 0) {
sum = sum + s % 10;
s = s / 10;
}
/* return the positive sum of digits */
return abs(sum);
}
void print(int b[MAX], int n) {
for (int i = 0; i < n; i++) {
printf("%d ", b[i]);
}
printf("\n");
}
初学者要注意,因为数组a的元素类型是int
,所以表示用户可以在数组中输入负数。但是位数之和应该是非负值。
并且数组a
不应该改变。任务只是组成数组 b
.
你来了。
void form( const int a[], int b[], int n )
{
for ( int i = 0; i < n; i++ )
{
b[i] = sum_digit( a[i] );
}
}
和
int sum_digit( int num )
{
enum { Base = 10 };
int sum = 0;
do
{
int digit = num % Base;
if ( digit < 0 ) digit = -digit;
sum += digit;
} while ( num /= Base );
return sum;
}
这是一个演示程序。
#include <stdio.h>
int sum_digit( int );
void form( const int a[], int b[], int n )
{
for (int i = 0; i < n; i++)
{
b[i] = sum_digit( a[i] );
}
}
int sum_digit( int num )
{
enum { Base = 10 };
int sum = 0;
do
{
int digit = num % Base;
if (digit < 0) digit = -digit;
sum += digit;
} while (num /= Base);
return sum;
}
void print( const int a[], int n )
{
for (int i = 0; i < n; i++)
{
printf( "%d ", a[i] );
}
putchar( '\n' );
}
int main( void )
{
enum { MAX = 5 };
int a[MAX] = { 1, -22, 333, -4444, 55555 };
int b[MAX];
print( a, MAX );
form( a, b, MAX );
print( b, MAX );
}
程序输出为
1 -22 333 -4444 55555
1 4 9 16 25