我不知道如何獲取代碼以列印出可被 3 整除的元素并列印出這些元素的總和,有人可以幫我做嗎,謝謝您的時間!
代碼:
#include <stdio.h>
int sum(int arr[]){
int n = sizeof(arr) / sizeof(arr[0]);
int sum = 0;
for (int y=0;y<n;y ){
sum = arr[y];
printf("%d",sum);
}
}
int main() {
int F[5] = {1,3,5,9,8};
int s = 0;
for (int i=0;i<5;i ){
if (F[i]%3 == 0) {
int diviz[] = {F[i]};
printf("%d\n",diviz[0]);
sum(diviz);
}
}
return 0;
}
預期輸出:
3
9
12
實際輸出:
3
349
910
想知道如何解決這個問題
uj5u.com熱心網友回復:
這個函式宣告
int sum(int arr[]){
由編譯器調整為宣告
int sum(int *arr){
也就是說,在函式內,變數arr具有指標型別int *。
因此使用 sizeof 運算式的宣告
int n = sizeof(arr) / sizeof(arr[0]);
相當于
int n = sizeof( int * ) / sizeof( int );
并根據指標的大小產生 2 或 1。
另一方面,這個函式的呼叫
int diviz[] = {F[i]};
printf("%d\n",diviz[0]);
sum(diviz);
在任何情況下都沒有多大意義,因為不是傳遞原始陣列,而是傳遞一個只包含一個元素的陣列。main 中的 for 回圈是多余的。
您需要明確傳遞陣列中的元素數量。
所以函式看起來像
long long int sum( const int arr[], size_t n, int divisor )
{
long long int sum = 0;
for ( size_t i = 0; i < n; i )
{
if ( arr[i] % divisor == 0 ) sum = arr[i];
}
return sum;
}
該函式可以像這樣呼叫
int arr[] = {1,3,5,9,8};
const size_t N = sizeof( arr ) / sizeof( *arr );
int divisor = 3;
printf( "The sum of elements divisible by %d = %lld\n", divisor, sum( arr, N, divisor ) );
divisor如果添加檢查是否通過等于0例如,該功能將更加安全
long long int sum( const int arr[], size_t n, int divisor )
{
long long int sum = 0;
if ( divisor != 0 )
{
for ( size_t i = 0; i < n; i )
{
if ( arr[i] % divisor == 0 ) sum = arr[i];
}
}
return sum;
}
uj5u.com熱心網友回復:
int main() {
int F[5] = {1,3,5,9,8};
int s = 0;
for (int i=0;i<5;i ){
if (F[i]%3 == 0) {
s = s F[i];
printf("%d",F[i]);
}
}
printf("%d",s); //print sum total
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/514909.html
標籤:数组C指针大小函数定义
上一篇:如何從陣列創建命名物件?
下一篇:C 試圖創建二維點(陣列)的佇列
