第六次作业

设计一个函数,该函数用于求一个任意大小的二维double型数组的平均值。

该函数的名字叫做matrixAvg

请使用下面的main函数测试你设计的函数

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int N,M;

    scanf("%d %d",&M,&N);

    double A[M][N];

    for(int i=0;i<M;i++)
    {
        for(int j=0;j<N;j++)
        {
            scanf("%lf",&A[i][j]);
        }
    }
    double sum=0;

    for(int i=0;i<M;i++)
    {
        for(int j=0;j<N;j++)
        {
            sum=sum+A[i][j];
        }
    }
    int d=M*N;
    printf("%.2f",sum/d);

    return 0;
}

计一个函数,该函数用于实现一维数组的循环右移。

函数原型为:void arrayShiftRight(int a[ ],int n,int m);

该函数的功能是将长度为n的数组a循环右移m个位置。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int m,n;

    scanf("%d %d",&n,&m);

    int A[n];
    int B[n];

    for(int i=0;i<n;i++)
    {
        scanf("%d",&A[i]);
    }

    for(int i=0;i<m;i++)
    {
        for(int j=0;j<n;j++)
        {
            if(j==n-1)
            {
                B[0]=A[j];
            }
            else B[j+1]=A[j];
        }
        for(int j=0;j<n;j++)
        {
            A[j]=B[j];
        }
    }
    for(int i=0;i<n;i++)
    {
        printf("%d ",A[i]);
    }
    return 0;
}

本题要求实现一个对整数数组进行简单排序的函数。

函数原型为:void sort( int a[], int n );

其中a是待排序的数组,n是数组a中元素的个数。该函数用某种方法将数组a中的元素按升序排列,结果仍然在数组a中。

#include <stdio.h>
#include <stdlib.h>

void work(int ints[],int n)
{
    int t=0;
    while(t==0)
    {
        t=1;
        for(int i=0;i<n;i++)
        {
            if(ints[i]>ints[i+1])
            {
                int temp=ints[i];
                ints[i]=ints[i+1];
                ints[i+1]=temp;
                t=0;
            }
        }
    }
}
void Printf(int ints[],int n)
{
    printf("After sorted the array is: ");
    for(int i=0;i<n;i++)
    {
        printf("%d ",ints[i]);
    }

}
int main()
{
    int n;

    scanf("%d",&n);

    int ints[n];

    for(int i=0;i<n;i++)
    {
        scanf("%d",&ints[i]);
    }

    work(ints,n);

    Printf(ints,n);

    return 0;
}

本题要求实现一个求整数的逆序数的简单函数。

函数原型为:int reverse( int number );

其中函数reverse须返回用户传入的整型number的逆序数。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int reverse(int n)
{
    int N=1;
    int t=10;
    for(;abs(n)/1>=10;t=t*10)
    {
        if(abs(n)/t>0) N=N+1;
        else break;
    }

    int A[N];

    for(int i=0;i<N;i++)
    {
        t=t/10;
        A[i]=n/t;
        n=n-A[i]*t;
    }

    int B[N];

    for(int i=0;i<N;i++)
    {
        B[i]=A[N-1-i];
    }
    for(int i=0;i<N;i++)
    {
        A[i]=B[i];
    }

    int result=0;
    t=1;
    for(int i=N-1;i>=0;i--)
    {
        result=A[i]*t+result;
        t=t*10;
    }
    if(A[N-1]==0)
    result=result/10;

    return result;
}
int main()
{
    int n;

    scanf("%d",&n);

    printf("%d\n",reverse(n));

    return 0;
}

本题要求的程序功能是:首先在main函数中输入10个数,然后在被调函数ave中求出这10个数的平均值,最后在main函数中输出结果。要求写出函数ave。

函数原型为:double ave(double a[],int n);

其中an是由主调函数传入的参数。

#include <stdio.h>
#include <stdlib.h>

double ave(double x[],int N)
{
    double sum=0;
    double result;

    for(int i=0;i<N;i++)
    {
        sum=sum+x[i];
    }

    result=sum/N;

    return result;
}
int main()
{
    int N;

    scanf("%d",&N);

    double x[N];

    for(int i=0;i<N;i++)
    {
        scanf("%lf",&x[i]);
    }

    double p=ave(x,N);

    printf("ave=%.2f\n",p);

    return 0;
}

若两个复数分别为:c1=x1+y1i  和c2=x2+y2i,则它们的乘积为 c1×c2=(x1x2−y1y2)+(x1y2+x2y1)i。

本题要求实现一个函数计算两个复数之积。

#include <stdio.h>
#include<string.h>

double result_real, result_imag;
void complex_prod( double x1, double y1, double x2, double y2 )
{
    result_real=x1*x2-y1*y2;
    result_imag=x1*y2+x2*y1;
}

int main(void) {
    double imag1, imag2, real1, real2;

    scanf("%lf %lf", &real1, &imag1);
    scanf("%lf %lf", &real2, &imag2);
    complex_prod(real1, imag1, real2, imag2);
    printf("product of complex is (%f)+(%f)i\n", result_real, result_imag);    return 0;
}

本题要求实现一个函数,统计给定区间内的三位数中有两位数字相同的完全平方数(如144、676)的个数。

函数原型为:int search( int n );

其中传入的参数int n是一个三位数的正整数(最高位数字非0)。函数search返回[101, n]区间内所有满足条件的数的个数。

#include<stdio.h>
int search( int n )
{
    int i,j,a=0,b,c,e;
    for(i=101;i<=n;i++)
    {
        e=i/100;
        b=(i-e*100)/10;
        c=(i-e*100-b*10);
        if(e==b||b==c||e==c)
        {
            for(j=2;j<32;j++)
          {
               if(i%j==0)
                if(i/j==j)
                {
                    a++;
                    continue;
                }
          }
        }
    }
    return(a);
}
void main()
{
    int number;
    scanf("%d",&number);
    printf("count=%d\n",search(number));
}

本题要求实现求Fabonacci数列项的函数。Fabonacci数列的定义如下:

f(n)=f(n−2)+f(n−1) (n≥2),其中f(0)=0,f(1)=1。

函数原型如下:int f( int n );

函数f应返回第n个Fabonacci数。

#include<stdio.h>
int f( int n )
{
 int a[n],i;
 a[0]=1;a[1]=1;
 for(i=2;i<n;i++)
  a[i]=a[i-2]+a[i-1];
  return(a[n-1]);
}
void main()
{
    int n;
    scanf("%d", &n);
    printf("%d\n", f(n));}

本题引用自PTA,原作者:浙江大学陈越
本题要求实现一个计算非负整数阶乘的简单函数。函数原型为:int Factorial( const int N );

其中N是用户传入的参数,其值不超过12。如果N是非负整数,则该函数必须返回N的阶乘,否则返回0。

#include<stdio.h>
int Factorial(int N)
{
    int a,i;
    if(N<=0)
    a=0;
    else
    for(a=1;N>0;N--)
    {
        a=a*N;
    }
    return(a);
}
void main()
{
    int N, NF;
    scanf("%d", &N);
    NF = Factorial(N);
    if (NF)  printf("%d! = %d\n", N, NF);
    else printf("Invalid input\n");
}

判断奇偶性

#include<stdio.h>
#include<string.h>
int even(int n)
{
    if((n%2)==0)
        return 1;
    else
        return 0;
}
int main()
{    
    int n;
    scanf("%d", &n);
    if (even(n))    
        {
            printf("%d is even.\n", n);
        }
    else
    {
        printf("%d is odd.\n", n);
    }
}

判断回文串

#include<stdio.h>
#include<string.h>
int whetheriscopy ( char a[10] )
{
    char p[10];
    int i,j;
    j=strlen(a);
    j--;
    for(i=0;i<j&&a[i]==a[j];i++,j--);
     if(i>=j)
        {
            return 1;
        }
    else
        {
            return 0;
        }
}
int main()
{
    char s[100];
    gets(s);
    if(whetheriscopy(s))
        printf("Yes");
    else
        printf("No");

}

本题目要求计算下列分段函数f(x)的值:

#include<stdio.h>

int main()
{
    float a,sum;
    scanf("%f",&a);
    if(a>=5)
        {
        sum=a*a+4*a-2;
        printf("f(%.1f) = %.1f",a,sum);
        }
    else if(a>=0&&a<5)
        {
        sum=3*a+2;
        printf("%.1f",sum);
        }
    else if(a<0)
        {
        sum=0;
        printf("%.1f",sum);
        }

}

       函数求值

    求子串定位函数无答案

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
xjtu计组第六章作业主要涉及计算机组成原理的相关概念和知识点。这一章节主要包括存储器的层次结构、存储器的组织和管理、存储器的屏蔽、存储器的操作和传输等内容。 首先,存储器的层次结构是计算机中非常重要的一个组成部分。它包括寄存器、高速缓存、主存和辅助存储器等。每一层的存储器容量和速度不同,寄存器最小而速度最快,辅助存储器容量最大但速度最慢。 其次,存储器的组织和管理也是我们需要了解的内容。存储器的组织有两种方式,分别是按地址方式和按内容方式组织。在存储器的管理中,我们需要学习如何管理地址空间、如何进行地址转换和管理内存映射等。 另外,存储器的屏蔽是实现存储器的一种方式。比如,在32位计算机中,通过屏蔽将地址划分为子地址、块地址和字地址,以实现对存储器的访问。 最后,我们还需要了解存储器的操作和传输。存储器的操作包括读取数据和写入数据两个过程,而存储器的传输是指数据在存储器之间的传输。我们需要学习存储器的读写操作的过程、存储器传输的方式以及优化存储器传输的方法。 总的来说,xjtu计组第六章作业涵盖的内容较为广泛,包括存储器的层次结构、组织和管理、屏蔽以及操作和传输等方面。通过完成这份作业,我们可以更好地理解和掌握计算机组成原理这门课程的核心概念和知识。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值