C语言第二次实验报告

一.实验题目,设计思路,实现方法

1.实验题目

11-4 判断上三角矩阵(15 分)

上三角矩阵指主对角线以下的元素都为0的矩阵;主对角线为从矩阵的左上角至右下角的连线。

本题要求编写程序,判断一个给定的方阵是否上三角矩阵。

12-3 字符串逆序(15 分)

输入一个字符串,对该字符串进行逆序,输出逆序后的字符串。

13-6 数组循环右移(20 分)

本题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(>)个整数,将每个整数循环向右移m(≥)个位置,即将a中的数据由(a0​​a1​​an1​​)变换为(anm​​an1​​a0​​a1​​anm1​​)(最后m个数循环移至最前面的m个位置)。

14-5 指定位置输出字符串(20 分)

本题要求实现一个函数,对给定的一个字符串和两个字符,打印出给定字符串中从与第一个字符匹配的位置开始到与第二个字符匹配的位置之间的所有字符。

15-8 十进制转换二进制(15 分)

本题要求实现一个函数,将正整数n转换为二进制后输出。

2.设计思路:

11-4:判断上三角矩阵:

分两次循环,外层循环用来确定行数,内层循环用来查看所指的元素是否是0.从第0行开始算起,每一行的第i个元素前必须是0,当不是0时,即跳出循环。并判断这不是一个上三角矩阵。

12-3:字符串逆序:
从字符串末尾往前遍历,一个个输出字符。

13-6:数组循环右移:

通过直接的方法右移过于麻烦,所以选择新建一个数组,位移之后的数据位置是m%n,根据这个特性进行循环,将数据输入新的数组。

14-5:特定位置输出字符串:

设置一个处于s开头的指针,每当s!=ch1时,指针指向下一个元素。如果s==ch1,则到空或者ch2前,指针每移动一次,就计数一次。在程序的最后,指针减去计数的次数。

15.8:十进制转二进制:
通过不停/2,然后反向输出的原理,利用递归方法完成程序即可。

二.源程序

11-4:判断上三角矩阵:

#include<stdio.h>
#include<string.h>
int main()
{
    int t,n,count=0,c=0;
    int i,j,l;
    int a[20][20];
    char s[10][80];
    scanf("%d",&t);
    for(i=0;i<t;i++)
    {
        count=0;
        scanf("%d",&n);
        for(j=0;j<n;j++)
        {
            for(l=0;l<n;l++)
            scanf("%d",&a[j][l]);
        }
        for(j=1;j<n;j++)
        {
            for(l=0;l<j;l++)
            {
            if(a[j][l]!=0)
            count=1;
            }
        }
        if(count==0)
        strcpy(s[c], "YES");
        else
        strcpy(s[c], "NO");
        c++;
        
    }
    for(i=0;i<t;i++)
    printf("%s
",s[i]);
    return 0;
}

12-3:字符串逆序:

#include<stdio.h>
#include<string.h>
int main()
{
    int i=0,count=0;
    char a[81],ch;    
    gets(a);
    
    for(i=strlen(a)-1;i>=0;i--)
    {
        printf("%c",a[i]);
    }
    
    return 0;
}

13-6 数组循环右移:

int ArrayShift( int a[], int n, int m )
{
    int b[n],d,i,j=0;
    d=m%n;
    for(i=n-d;i<n;i++)
    {
        b[j]=a[i];
        j++;
    }
    for(i=0;i<n-d+1;i++)
    {
        b[j]=a[i];
        j++;
    }
    for(i=0;i<n;i++)
    {
        a[i]=b[i];
    }
    
}

14-5 指定位置输出字符串:

char *match( char *s, char ch1, char ch2 )
{
    int m=0;

    while(*s!=ch1&&*s!=0)
    s++;
    while(*s!=ch2&&*s!=0)
    {
        printf("%c",*s);
        s++;
        m++;
    }
    if(*s==ch2)
    printf("%c
",*s);
    else
    printf("
");
    s-=m;
    return s;
}

15.8:十进制转二进制:

void dectobin( int n )
{
    int i=n;
    if(n<2) printf("%d",n);
    else
    {
        if(n>=2)
        {
            dectobin(n/2);
            printf("%d",n%2);
        }
    }
}

三.遇到的问题及解决方法,心得体会


初次接触到指针和递归的时候有些理解不了其中的原理,看了书也是一知半解。只有在较为大量的程序编写的过程中,我才逐渐明白了其中的原理。编程是需要实际操作的学科,熟能生巧。

原文地址:https://www.cnblogs.com/3nodisnoable/p/8367439.html