第五个和其他奇数个值都是乱码(关键词-数组)


#include
using namespace std;
int main()
{
    int i,n,k=0;
    int a[100],t[100];
    cout<<"please input numbers:";
    for(i=0;i<100;i++){
        cin>>a[i];
        k++; 
        if(a[i]==0)
        break;
    }
    for(i=0,t[i]=0;i1){
                if(a[i]%2==0)
                     a[i]=a[i]/2;
            
                else 
                    a[i]=(a[i]*3+1)/2; 
           
        t[i]++;
        }cout<0;
 }

请问为什么除了第一个值是正常的之外,之后的第三个,第五个和其他奇数个值都是乱码?是不能用数组吗?

因为你第7行没初始化,第15行只对i=0,t[i]=t[0]=0初始化了,访问并输出无意义的内容 所以乱码。
在第7行的两个数组后都加上 ={0} 即可。

这个问题出现的原因可能是由于在计算的过程中,当a[i]是偶数时,可以正常执行a[i]/2,但是当a[i]是奇数时,执行(a[i]*3+1)/2的结果可能是带有小数的浮点数,但是数组t只能存储整型数值,因此导致了乱码的问题。

要解决这个问题,可以将数组t的元素类型改为浮点型,即将int t[100]改为float t[100]。同时,在计算(a[i]*3+1)/2时,可以使用强制类型转换,将结果转换为整数类型,即int((a[i]*3+1)/2)。

#include<iostream>
using namespace std;
int main()
{
    int i,n,k=0;
    int a[100];
    float t[100];
    cout<<"please input numbers:";
    for(i=0;i<100;i++){
        cin>>a[i];
        k++; 
        if(a[i]==0)
        break;
    }
    for(i=0,t[i]=0;i<k;i++){
        while(a[i]!=1){
            if(a[i]%2==0)
                a[i]=a[i]/2;
            else 
                a[i]=int((a[i]*3+1)/2); 
            t[i]++;
        }
        cout<<t[i]<<endl;
    }
    return 0;
}