C語言第二次實驗報告


一.實驗題目,設計思路,實現方法。

*實驗題目:

11-6 方陣循環左移

本題要求編寫程序,將給定n×n方陣中的每個元素循環向右移m個位置,即將第0、1、⋯、n1列變換為第nm、nm+1、⋯、n1、0、1、⋯、nm1列。

輸入格式:

輸入第一行給出兩個正整數m和n(1)。接下來一共n行,每行n個整數,表示一個n階的方陣。

輸出格式:

按照輸入格式輸出移動后的方陣:即輸出n行,每行n個整數,每個整數后輸出一個空格。

輸入樣例:

2 3 1 2 3 4 5 6 7 8 9

 

 

 

 

輸出樣例:

2 3 1

5 6 4

8 9 7

 

 

 

 

 

設計思路、實現方法

   首先定義兩個數組a[100][100],b[100][100],先輸入一個n*n的數組儲存在a中,欲使每個元素右移m個位置,即行數i不變,列數變為就取(m+j)%n為其新列數循環到前面去。

 

 

 

 

12-4 字符串字母大小寫轉換

本題要求編寫程序,對一個以“#”結束的字符串,將其小寫字母全部轉換成大寫字母,把大寫字母全部轉換成小寫字母,其他字符不變輸出。

輸入格式:

輸入為一個以“#”結束的字符串(不超過30個字符)。

輸出格式:

在一行中輸出大小寫轉換后的結果字符串。

輸入樣例:

Hello World! 123#

 

 

輸出樣例:

hELLO wORLD! 123

 

 

 

設計思路、實現方法

這道題就是利用ASCII碼表的順序,如果是a~z,則減去32就能得到A~Z,如果是A~Z,則加上32就能得到a~z

 

 

 

13-5 判斷回文字符串

本題要求編寫函數,判斷給定的一串字符是否為“回文”。所謂“回文”是指順讀和倒讀都一樣的字符串。如“XYZYX”和“xyzzyx”都是回文。

函數接口定義:

bool palindrome( char *s );

函數palindrome判斷輸入字符串char *s是否為回文。若是則返回true,否則返回false

裁判測試程序樣例:

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

#define MAXN 20
typedef enum {false, true} bool;

bool palindrome( char *s );

int main()
{
    char s[MAXN];

    scanf("%s", s);
    if ( palindrome(s)==true )
        printf("Yes\n");
    else
        printf("No\n");
    printf("%s\n", s);

    return 0;
}

/* 你的代碼將被嵌在這里 */

輸入樣例1:

thisistrueurtsisiht

 

 

輸出樣例1:

Yes thisistrueurtsisiht

 

 

 

輸入樣例2:

thisisnottrue

 

 

輸出樣例2:

No thisisnottrue

 

 

 

 

設計思路、實現方法

從開始處與最后面的地方進行比較,發現不一樣就返回false,循環次數也只需要n/2次就好了

 

 

 

14-8 字符串排序

本題要求編寫程序,讀入5個字符串,按由小到大的順序輸出。

輸入格式:

輸入為由空格分隔的5個非空字符串,每個字符串不包括空格、制表符、換行符等空白字符,長度小於80。

輸出格式:

按照以下格式輸出排序后的結果:

After sorted:
每行一個字符串

輸入樣例:

red yellow blue green white

 

 

輸出樣例:

After sorted:
blue
green
red
white
yellow

 

 

 

 

 

 

設計思路、實現方法

定義兩個二維數組a[102][81],b[102][81],利用strcmp函數進行字符串之間的比較,用的是冒泡排序,再使用strcpy進行字符串交換

 

 

 

15-6 按等級統計學生成績

本題要求實現一個根據學生成績設置其等級,並統計不及格人數的簡單函數。

函數接口定義:

int set_grade( struct student *p, int n );

其中p是指向學生信息的結構體數組的指針,該結構體的定義為:

struct student{
    int num;
    char name[20];
    int score;
    char grade;
};

n是數組元素個數。學號num、姓名name和成績score均是已經存儲好的。set_grade函數需要根據學生的成績score設置其等級grade。等級設置:85-100為A,70-84為B,60-69為C,0-59為D。同時,set_grade還需要返回不及格的人數。

裁判測試程序樣例:

#include <stdio.h>
#define MAXN 10

struct student{
    int num;
    char name[20];
    int score;
    char grade;
};

int set_grade( struct student *p, int n );

int main()
{   struct student stu[MAXN], *ptr;
    int n, i, count;

    ptr = stu;
    scanf("%d\n", &n);
    for(i = 0; i < n; i++){
       scanf("%d%s%d", &stu[i].num, stu[i].name, &stu[i].score);
    } 
   count = set_grade(ptr, n);
   printf("The count for failed (<60): %d\n", count);
   printf("The grades:\n"); 
   for(i = 0; i < n; i++)
       printf("%d %s %c\n", stu[i].num, stu[i].name, stu[i].grade);
    return 0;
}

/* 你的代碼將被嵌在這里 */

 

輸入樣例:

10
31001 annie 85
31002 bonny 75
31003 carol 70
31004 dan 84
31005 susan 90
31006 paul 69
31007 pam 60
31008 apple 50
31009 nancy 100
31010 bob 78

 

 

 

 

 

 

 

 

輸出樣例:

The count for failed (<60): 1
The grades:
31001 annie A
31002 bonny B
31003 carol B
31004 dan B
31005 susan A
31006 paul C
31007 pam C
31008 apple D
31009 nancy A
31010 bob B

 

 

 

 

 

 

 

 

 

 

設計思路、實現方法

這道題考的是結構體,定義了一個student類型的指針p,再用p去訪問其中的成員變量,至於等級那些就使用if判斷了,由於是指針p,所以需要用->。

 

 

 

二.源程序

11-6方陣循環左移

#include<stdio.h>
int main()
{
    int i,j,m,n;
    int a[100][100],b[100][100];
    scanf("%d %d",&m,&n);
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            b[i][(j+m)%n]=a[i][j];
        }
    }
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            printf("%d",b[i][j]);
        }
    }
    return 0;
}

 

12-4 字符串字母大小寫轉換

#include<stdio.h>
int main()
{
    int i;
    char str[81];
    i=0;
    while((str[i]=getchar())!='#')
    {
        i++;
    }
    str[i]='\0';
    for(i=0;str[i]!='\0';i++)
    {
        if(str[i]>='a'&&str[i]<='z')
        {
            str[i]-=32;
        }
        else if(str[i]>='A'&&str[i]<='Z')
        {
            str[i]+=32;
        }
        printf("%c",str[i]);
    }
    return 0;
}

13-5 判斷回文字符串

bool palindrome( char *s )
{
    int i,n;
    n=strlen(s);
    for(i=0;i<n/2;i++)
        if(s[i]!=s[n-i-1])
        {
             return false;
        }
     return true;
}

14-8 字符串排序

#include<stdio.h>
#include<string.h>
int main()
{
    int i,j;
    char a[102][81],b[102][81];
    for(i=0;i<5;i++)
        scanf("%s",&a[i]);
    for(i=0;i<4;i++)
    {
        for(j=i+1;j<5;j++)
            if(strcmp(a[i],a[j])>0)
            {
                strcpy(b[j],a[j]);
          strcpy(a[j],a[i]);
          strcpy(a[i],b[j]);
            }
    }
    printf("After sorted:\n"); 
    for(i=0;i<5;i++)
        printf("%s\n",a[i]);
    return 0;
} 

15-6 按等級統計學生成績

int set_grade( struct student *p, int n ){
    int count = 0, i;
    for(i = 0;i<n;i++,p++){
        if(p->score<60){
            p->grade = 'D';
            count++;
        }
        else if((p->score<70)&&(p->score>=60)){
            p->grade = 'C';
        }
        else if((p->score<85)&&(p->score>=70)){
            p->grade = 'B';
        }
        else{
            p->grade = 'A';
        }
    }
    return count;
}

 

 

三.遇到的問題及解決方法,心得體會

第11-15次的實驗難度明顯比之前的大,因此做起來比較吃力,特別是14、15兩次的實驗,碰到指針方面的知識點就比較吃力,不知道從何下手,但是又必須踏過這個坎,因此我就去看視頻,找別人教我,把指針基本的使用方法弄懂了,

比如實驗15的那道題,定義一個結構體指針的時候,剛開始以為還是用.去訪問成員變量,之后發現是用->訪問的

C語言就是要多打代碼才能熟練,通過這幾次的實驗我覺得我收獲特別多


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM