c语言第二次实验报告

时间:2022-01-19 12:58:16

1.实验题目

11-8 螺旋方阵

12-7 输出大写英文字母

13-6 数组循环右移

14-2 删除字符

15-7 递归求Fabonacci数列

2.设计思路、实现方法

11-8 运用二维数组经过多次循环得到螺旋矩阵

12-7 用条件判断大写字母然后写入数组接着再判断数组中的重复字母,将后面数组前移

13-6 将数组a[i]中的i加上右移几位余数组长度得到右移后位置

14-2 对数组一一进行判断若出现题目删除字母则将右侧数组左移

15-7 通过题目给出函数规律得出运算出答案

二、源程序

11-8 螺旋方阵

#include<stdio.h>
int main()
{
    int n,a=2,b=1,z[10][10],c=0,i,j,d;
    scanf("%d",&n);
    d=n;
    z[1][1]=1;
        for(j=2;j<=d;j++){
            z[1][j]=z[1][j-1]+1;
        }
        do{
            for(i=a;i<=d;i++){
            z[i][d]=z[i-1][d]+1;
            c++;
        }
        for(j=d-1;j>=b;j--){
            z[d][j]=z[d][j+1]+1;
            c++;
        }
        for(i=d-1;i>=a;i--){
            z[i][b]=z[i+1][b]+1;
            c++;
        }
        for(j=a;j<=d-1;j++){
            z[a][j]=z[a][j-1]+1;
            c++;
        }
        a++;
        b++;
        d--;
        }while(c!=n*n-n);
        for(i=1;i<=n;i++){
            for(j=1;j<=n;j++){
                printf("%3d",z[i][j]);
            }
            printf("\n");
        }
    return 0;
 } 

12-7 输出大写英文字母

#include<stdio.h>
#include<string.h>
#include<math.h>
int main(){
    char a[100],b[100];
    int m,i,j,k,l,c=0;
    gets(a);
    m=strlen(a);
    for(i=0;i<m;i++){
        if(a[i]>='A'&&a[i]<='Z') b[k++]=a[i];
        else c++;
    }
    for(i=0;i<=k-1;i++){
        for(j=i+1;j<=k-1;j++){
            if(b[i]==b[j]){
                for(l=j+1;l<=k;l++){
                    b[l-1]=b[l];
                }
                k--;
                i--;
            }
        }
    }
    if(c==m) printf("Not Found");
    else{
    for(i=0;i<=k-1;i++){
        printf("%c",b[i]);
    }    
    }
    return 0;
}

13-6 数组循环右移

#include <stdio.h>
#define MAXN 10

int ArrayShift( int a[], int n, int m );

int main()
{
    int a[MAXN], n, m;
    int i;

    scanf("%d %d", &n, &m);
    for ( i = 0; i < n; i++ ) scanf("%d", &a[i]);

    ArrayShift(a, n, m);

    for ( i = 0; i < n; i++ ) {
        if (i != 0) printf(" ");
        printf("%d", a[i]);
    }
    printf("\n");

    return 0;
}

/* 你的代码将被嵌在这里 */
int ArrayShift( int a[], int n, int m ){
    int i,b[100];
    for(i=0;i<n;i++){
        *(b+(i+m)%n)=*(a+i);
    }
    for(i=0;i<n;i++){
        a[i]=b[i];
    }
    return *a;
}

14-2 删除字符

#include <stdio.h>
#define MAXN 20

void delchar( char *str, char c );
void ReadString( char s[] ); /* 由裁判实现,略去不表 */

int main()
{
    char str[MAXN], c;

    scanf("%c\n", &c);
    ReadString(str);
    delchar(str, c);
    printf("%s\n", str);

    return 0;
}

/* 你的代码将被嵌在这里 */
void delchar( char *str, char c ){
     int len=0,i;
     while(*(str+len)!='\0'){
         len++;
     }
     for(i=0;i<len;i++){
         if(*(str+i)!=c){
         printf("%c",str+i);
         } 
     }
     printf("\0");
}

15-7 递归求Fabonacci数列

#include <stdio.h>

int f( int n );

int main()
{
    int n;

    scanf("%d", &n);
    printf("%d\n", f(n));

    return 0;
}

/* 你的代码将被嵌在这里 */
int f( int n ){
    int y[n],i;
    y[0]=0;
    y[1]=1;
    for(i=2;i<=n;i++){
        y[i]=y[i-1]+y[i-2];
    }
    return y[n];
}

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

写螺旋矩阵代码时要注意什么时候改变行列,不然很容易出错,需要通过打草稿计算每次输入几组数值再转换方向;

数组右移的时候会超过数组本身长度所以要重新定义其位置;

心得体会:在打代码的时候能够发现自己很多不足,有时候一些代码往往可以用更简单的算法运算出来,因此我应该多多深入学习相关知识