Lab3 and Lab4

Lab 3: Loops and Arrays

我没有写过多的注释,前两题如果过不了你就改改%5d,改成%4d,%6d,%7d```试试,因为给的格式不明显,我是按我看到的空格数写的,其他代码没问题

Question1: Sum Integers: 0.5 Marks

题目要求按一定的格式和输出1-K的和,k是从120的,用循环语句就可以,注意输出去格式就行了。

 代码:sum_integers.c

#include<stdio.h>
int main(void)
{
    int k,i,sum;
    printf(" k  sum\n\n");//注意调节空格保证格式和给出的一模一样
    for(k=1;k<=20;k++)
    {
        sum=0;//每次累加之后要重新赋值为0
        for(i=1;i<=k;i++)
        {
            sum+=i;
        }
        printf("%2d%5d\n",k,sum);//注意格式
    }
    return 0;
}

Lab3 and Lab4_第1张图片


Question2: Sum Cubes: 0.5 Marks

 

         题目跟第一题差不多,只是输出的是和的平方。

 代码:sum_cubes.c

#include<stdio.h>
int main(void)
{
    int k,i,sum;
    printf(" k  cubes\n\n");//注意调节空格换行保证格式和给出的一模一样
    for(k=1;k<=20;k++)
    {
        sum=0;//每次累加之后要重新赋值为0
        for(i=1;i<=k;i++)
        {
            sum+=i;
        }
        printf("%2d%7d\n",k,sum*sum);//换为sum的平方就行
    }
    return 0;
}


Question3: Perfect Numbers: 0.5 Marks

         理解题意中完美数,代码关键在于怎么找一个数的因数。

代码:perfect.c

#include<stdio.h>
int main(void)
{
    int number;
    printf("Enter number: ");
    scanf("%d",&number);
    printf("The factors of %d are:\n",number);
    int i,j,sum=0;
    for(i=1;i<=number;i++)
    {
        for(j=number;j>=1;j--)
        {
            if(i*j==number)
            {
                printf("%d\n",i);
                sum+=i;
            }
        }
    }
    printf("Sum of factors = %d\n",sum);
    if(sum==2*number)
    {
        printf("%d is a perfect number\n",number);
    }else
    {
        printf("%d is not a perfect number\n",number);
    }
    return 0;
}

Lab3 and Lab4_第2张图片

Question4: Block Diagram: 0.5 Marks

         只需要for循环数组中的每个元素就可以,考察循环嵌套


代码:block.c

#include<stdio.h>
int main(void)
{
    int a[10],i,j;
    printf("Enter ten numbers:\n");
    for(i=0;i<10;i++)
    {
        scanf("%d",&a[i]);
    }
    for(i=0;i<10;i++)
    {
       for(j=0;j<a[i];j++)
       {
           printf("*");
       }
       printf("\n");
    }
    return 0;
}



Lab 4: Functions and 2D Arrays

Question 1: Write ttt Program part 1: 1Mark

       暂且把它称之为画圈打叉游戏,确定圈圈还是叉叉赢了。

就是用二维数组判断每个元素所在位置是叉叉还是圈圈。由于数组大小事给定

的,所以难度不大。利用题目给出的ttt.c代码改写就行。

       给出的代码中注意#define 0,1,2所代表的意思

 

Question 2: Finding a Winner: 1 Mark

       在上面问题的基础上添加getWinner()函数,只要行,列,或者对角线相同就

 

可获胜,要求代码判断any SIZE都能判断出来。

 

代码如下:ttt.c

#include <stdio.h>

#define TRUE     1
#define FALSE    0

//将SIZE改成4并添加#

#define SIZE     3//第一题改成4
#define NONE    -1
#define NOUGHTS  0
#define CROSSES  1
#define EMPTY    2
#define SHARP    3

void  scanBoard( int board[SIZE][SIZE] );
void printBoard( int board[SIZE][SIZE] );
int getWinner( int board[SIZE][SIZE] );

int main( void )
{
  int board[SIZE][SIZE];
  int winner;

  printf("Please enter the board:\n");
  scanBoard( board );

  printf("Here is the board:\n");
  printBoard( board );

  // INSERT CODE HERE
  getWinner( board );

  return 0;
}

// INSERT CODE FOR  scanBoard()
void  scanBoard( int board[SIZE][SIZE] )
{
    int i,j;
    for(i=0;i<SIZE;i++)
    {
        for(j=0;j<SIZE;j++)
        {
            scanf("%d",&board[i][j]);
        }
    }
}


// INSERT CODE FOR printBoard()
void printBoard( int board[SIZE][SIZE] )
{
    int i,j;
    printf("\n");
    for(i=0;i<SIZE;i++)
    {
        for(j=0;j<SIZE;j++)
        {
            if(board[i][j]==0)
                printf("0 ");
            if(board[i][j]==1)
                printf("X ");
            if(board[i][j]==2)
                printf(". ");
            //添加#号
            if(board[i][j]==3)
                printf("# ");
        }
        printf("\n");
    }
}

// INSERT CODE FOR getWinner()
int getWinner( int board[SIZE][SIZE] )
{
    int i,j,count,winner=2;
    /*判断行是否相同:基本思想是循环遍历数组的时候,每一行如果有一个不同那就不是了,
    直接判断下一行,所以使用计数器count,如果count初始值没变化那说明有一行相同,判断相同的是
    叉叉还是圈圈就可以了
    */
    for(i=0;i<SIZE;i++)
    {
        j=0;
        count=SIZE;
        while(j<SIZE-1)
        {
            if(board[i][j]!=board[i][j+1])
            {
                count=0;
            }
            j++;
        }
        if(count==SIZE)
        {
            winner=board[i][0];
        }
    }
    //判断列是否相同:与行相同类似
    for(j=0;j<SIZE;j++)
    {
        i=0;
        count=SIZE;
        while(i<SIZE-1)
        {
            if(board[i][j]!=board[i+1][j])
            {
                count=0;
            }
            i++;
        }
        if(count==SIZE)
        {
            winner=board[0][j];
        }
    }
    //判断对角线是否相同:画图从中看对角线元素所在位置的关系(总共两条对角线都要判断)
    for(i=0;i<SIZE;i++)
    {
        j=0;
        count=SIZE;
        while(j<SIZE-1&&i<SIZE-1)
        {
            if(board[i][j]!=board[i+1][j+1])
            {
                count=0;
            }
            i++;
            j++;
        }
        if(count==SIZE)
        {
            winner=board[i][j];
        }
    }
    for(i=SIZE-1;i>=0;i--)
    {
        j=0;
        count=SIZE;
        while(j<SIZE-1&&i-1>=0)
        {
            if(board[i][j]!=board[i-1][j+1])
            {
                count=0;
            }
            j++;
            i--;
        }
        if(count==SIZE)
        {
            winner=board[i][j];
        }
    }
    //判断是叉叉还是圈圈赢


        switch(winner)
        {
        case 0:
            printf("\nNoughts win");
            return NOUGHTS;
        case 1:
            printf("\nCrosses win");
            return CROSSES;
        case 2:
            printf("\nThere are no winners");
            return NONE;
        }

}


Lab3 and Lab4_第3张图片


 

你可能感兴趣的:(Lab3 and Lab4)