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语言就是要多打代码才能熟练,通过这几次的实验我觉得我收获特别多

转载于:https://www.cnblogs.com/pengjiani/p/8350654.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个C语言实验报告的模板,供您参考: # 实验名称:C语言栈的实现 ## 实验目的: 1. 理解栈的基本概念和特点。 2. 掌握栈的基本操作:push和pop。 3. 熟悉栈的应用场景。 ## 实验环境: - 操作系统:Windows 10 - 编程语言:C语言 - 开发工具:Visual Studio Code ## 实验内容: ### 1. 栈的定义 栈是一种后进先出(Last In First Out,LIFO)的数据结构,它只允许在表的一端进行插入和删除运算。根据栈的定义,可以使用数组来实现栈。 ### 2. 栈的基本操作 栈的基本操作包括push和pop。push操作将元素插入栈顶,pop操作将栈顶元素删除。 以下是栈的基本操作的伪代码: ``` push(S, x): if stack is full: error "stack overflow" else: top ← top + 1 stack[top] ← x pop(S): if stack is empty: error "stack underflow" else: top ← top - 1 return stack[top + 1] ``` ### 3. 栈的应用场景 栈广泛应用于编程语言的解析、函数调用、表达式求值等场景中。例如,在编程语言的解析过程中,可以使用栈来判断括号是否匹配。 ## 实验结果: 在实验过程中,我们成功实现了一个基于数组的栈,并完成了push和pop操作。通过实验,我们深入理解了栈的基本概念和特点,并掌握了栈的基本操作。同时,我们也熟悉了栈的应用场景,为以后的编程工作打下了基础。 ## 总结: 本次实验让我们掌握了栈的基本操作和应用场景,这对我们以后的编程工作非常有帮助。通过实验,我们也发现了栈的局限性,例如栈的存储空间有限,只能在栈顶进行插入和删除操作等。因此,在实际应用中,我们还需要结合具体场景选择合适的数据结构。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值