C语言第二次实验报告

PTA实验作业

题目一:11-7 找鞍点

一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。

本题要求编写程序,求一个给定的n阶方阵的鞍点。

1、设计思路

  • 第一步:定义二维数组
  • 第二步:判断用户给定矩阵大小
  • 第三步:找行最大值
  • 第四步:判断行最大值是否为列最小值
  • 第五步:输出结果

实验代码

int a[6][6];
    int n;
    scanf("%d",&n);
    int i,j;
    for(i=0; i<n; i++)
        for(j=0; j<n; j++)
        {
            scanf("%d",&a[i][j]);
        }
    int k=0,y=0,flag=1,p=0;
    if(n==1)
        printf("0 0");//只有一个点时,一定是鞍点
    else
    {
        for(i=0; i<n; i++)
        {
            y=i;
            for(p=0; p<n; p++) //找行最大值
            {
                if(a[i][k]<=a[i][p])//数组元素之间比较,若比a[i][k]大,则将数组列标赋给k
                {
                    k=p;
                }
            }
            for(j=0; j<n; j++)//判断是否为列最小值
            {
                if(a[y][k]>a[j][k])
                {
                    y=j;
                    break;
                }
            }
            if(i==y)
            {
                flag=0;
                break;
            }
        }
        if(flag==0)
            printf("%d %d",i,k);
        else printf("NONE");
    } 

3·遇到的问题及解决方法:

  • 答案错误:当最后一个点为鞍点时,测试不通过

    解决方法:定义y变量观察行最大值是否为列最小值

  • 答案错误:没有考虑到仅有一个点时,该点即为鞍点

    解决方法:if(n==1) printf("0 0");

题目二:12-6 字符串转换成十进制整数

输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果在第一个十六进制字符之前存在字符“-”,则代表该数是负数。

1、设计思路

  • 第一步:定义字符数组并读入
  • 第二步:判断各字符是否为16进制
  • 第三步:进行16进制数的计算
  • 第四步:判断有无负号
  • 第五步:输出答案

    2、实验代码:

    int a[80]={0};
    char c[80];
    gets(c);
    int m,i,j;
    int n=1, k;
    long int sum;
    m=strlen(c);
    j=0;
    for(i=0;i<m;i++)
    {
        if(c[i]>=‘0‘&&c[i]<=‘9‘)
        {
            a[j]=c[i]-48;
            j++;
        }
        if((c[i]>=‘a‘&&c[i]<=‘f‘)||(c[i]>=‘A‘&&c[i]<=‘F‘))
        {
            if(c[i]==‘a‘||c[i]==‘A‘)
                a[j]=10;
            else if(c[i]==‘b‘||c[i]==‘B‘)
                a[j]=11;
            else if(c[i]==‘c‘||c[i]==‘C‘)
                a[j]=12;
            else if(c[i]==‘d‘||c[i]==‘D‘)
                a[j]=13;
            else if(c[i]==‘e‘||c[i]==‘E‘)
                a[j]=14;
            else
                a[j]=15;
            j++;
        }
        if(c[i]==‘-‘&&j==0)
            n=0;
    }
    sum=k=0;
    for(i=j-1;i>=0;i--)
    {
        sum=sum+a[i]*(long int)pow(16,k);
        k++;
    }
    if(sum==0)
        printf("0\n");
    else
    {
    if(n==0)
        printf("-%ld\n",sum);
    else
        printf("%ld\n",sum);
    }  

    3、遇到的问题及解决方法:

  • 编译错误:long 的输出格式错误

    解决方法:printf("%ld\n",sum);

  • 部分正确:-0时仍输出负号

    解决方法:if(sum==0) printf("0\n");

题目三:14-5 指定位置输出字符串(函数题)

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

1、设计思路

  • 第一步:找到第一个目标字符,并记录地址
  • 第二步:逐个输出两个字符间的字符
  • 第三步:找到第二个字符输出并跳出字符串

    2、实验代码

    char *match( char *s, char ch1, char ch2 ){
    int i=0,j=0,k;
    char *p=NULL,*q=s;
      while(q[i++])
    ;
    i--;
    for(j=0;j<i;j++){
        if(s[j]==ch1){
            p=&s[j];
            for(k=j;k<i;k++){
                if(s[k]!=ch2){
                    printf("%c", s[k]);
                }
                if(s[k]==ch2){
                    printf("%c\n", s[k]);
                    return p;
                  }
              }
              printf("\n");
              return p;
          }
      }
      printf("\n");
      return q+i;
    } 

    3、遇到的问题及解决方法:

  • 段错误:数组越界

    解决方法:定义数组指针,指向字符串s

  • 答案错误:ch1找不到, ch2找到 时无法通过

    解决方法:定义*q指向s ,最后返回 q+s

题目四、通讯录的录入与显示

通讯录中的一条记录包含下述基本信息:朋友的姓名、出生日期、性别、固定电话号码、移动电话号码。 本题要求编写程序,录入N条记录,并且根据要求显示任意某条记录。

1、设计思路

  • 第一步:定义结构变量
  • 第二步:用户输入通讯录信息
  • 第三步:读入查询个数和编号
  • 第四步:输出查询结果

    2、实验代码

    struct list{
    char numbe[20];
    char phone[25];
    char name[15];
    char sex[2];
    char bri[15];
    }f[10];
    int main(){
    int i,j,k,n,number;
    scanf("%d",&n);
    for(i=0;i<n;i++){
        scanf("%s %s %c %s %s\n",&f[i].name,&f[i].bri,&f[i].sex,&f[i].numbe,&f[i].phone);
    }
    scanf("%d",&k);
    for(i=0;i<k;i++){
        scanf("%d",&number);
        if(number>=0&&number<n){
            printf("%s %s %s %s %s\n",f[number].name,f[number].numbe,f[number].phone,f[number].sex,f[number].bri);
        }else{
            printf("Not Found\n");
        }
    }

    3、遇到的问题及解决方法

  • 段错误:电话号码输出越界

    解决方法:将电话号码改为字符数组

  • 答案错误:将结构变量名定义为 friend(友元函数)

    解决方案:更改变量名为 list

题目五:15-8 十进制转换二进制(函数题)

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

1、设计思路

  • 第一步:定义变量判断实参是否为0
  • 第二步:判断形参不等0时调用自身
  • 第三步:循环调用本函数
  • 第四步:当n为0时开逐级返回函数

    2、实验代码

    void dectobin( int n ){
      int a=n/2;
      static int count=0;
      int out=n%2;
      if(!n&&!count){
    printf("0");
    return ;
      }else{
    if(!n){
      return ;
    }
    count++;
    dectobin(a);
    printf("%d",out);
      }
    }

    3、遇到的问题及解决方法

  • 答案错误:没有判断是否一开始的形参为0

    解决方法:设置观察量count

心得体会

  • 使用数组时应注意数组范围
  • 定义变量时应考虑其本身是否为C语言的关键字
  • 不懂就问,独学而无友,则孤陋而寡闻

原文地址:https://www.cnblogs.com/Lclkris/p/8341358.html

时间: 2024-08-28 09:22:27

C语言第二次实验报告的相关文章

2019春第二次实验报告

2019春第二次实验报告 一.实验项目名称 空战游戏 二.实验项目功能描述 在第一次实验基础上增加多台敌机,在一定的得分后发散导弹 三.项目模块结构介绍 四.实现界面展示 五.代码托管链接 https://gitee.com/wenyizhang999/ZWY/blob/master/空战游戏.cpp 六.实验总结 问题:创造无限循环模式 解决方法:编代码,未完成 总结:游戏规模越来越大,玩法越来越多,无限的空间待开发,觉得自己能完成一个游戏的开发太不容易,团队很重要. 原文地址:https:/

java程序设计第二次实验报告

北京电子科技学院(BESTI) 实验报告 课程:数据结构    班级:1352    姓名:何伟钦     学号:20135223 成绩:            指导教师:娄嘉鹏      实验日期: 2015.5.6 实验密级:         预习程度:             实验时间:5:30-10:00 仪器组次:23   必修/选修:必修       实验序号:02 实验名称:Java面向对象程序设计 实验目的与要求:1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.

java第二次实验报告20135231

Java实验报告二:Java面向对象程序设计 20135231 何佳 实验要求: 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计模式 实验内容: (一)单元测试 (二)面向对象三要素 (三)设计模式初步 (四)练习 实验步骤: (一)单元测试     (1) 三种代码 编程是智力活动,不是打字,编程前要把干什么.如何干想清楚才能把程序写对.写好.与目前不少同学一说编程就打开编辑器写代码不

20135239益西拉姆第二次实验报告

实验二   java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计模式 实验步骤 (一)单元测试 (1) 三种代码 编程是智力活动,不是打字,编程前要把干什么.如何干想清楚才能把程序写对.写好.与目前不少同学一说编程就打开编辑器写代码不同,我希望同学们养成一个习惯,当你们想用程序解决问题时,要会写三种码: 伪代码 产品代码 测试代码 我们通过一个例子说明如何写

java第二次实验报告

课程:Java实验   班级:201352     姓名:黄坤  学号:2015226 成绩:           指导教师:娄佳鹏     实验日期:15.05.05 实验密级:         预习程度:       实验时间: 仪器组次:         必修/选修:选修    实验序号:2 实验名称:java面向对象程序设计 实验目的与要求: 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5.

软件工程综合实践的第二次实验报告

队伍:阙定1757127,李铮达1759118 这次是软件工程综合实践的第二次实验,本次任务是结对编程,就是找一个小伙伴一起写代码,一人写代码一人复审代码,这样可以更快的找出代码的错误,然后立即更改,提高开发效率. 下面是老师发布的任务截图 讨论分析 拿到任务后,我们先考虑用哪种编程语言来写,直接用较为基础的C或C++编写即可,因为逻辑较为简单,且不需要涉及面向对象的问题.然后开始分析用什么方法来实现,以及如何实现.讨论持续了一整天,因为白天有课,所以我们都是用零星的时间来讨论的. 下面是周二中

第二次实验报告:使用Packet Tracer分析应用层

姓名:雷坛春 学号:201821121030 班级:计算1811 1 实验目的 熟练使用Packet Tracer工具.分析抓到的应用层协议数据包,深入理解应用层协议,包括语法.语义.时序. 2 实验内容 使用Packet Tracer,正确配置网络参数,抓取应用层协议的数据包并分析,协议包含DNS.FTP, DHCP, stmp, pop3.步骤包含: 建立网络拓扑结构 配置参数 抓包 分析数据包 3. 实验报告 3.1 DNS 3.1.1 参数配置 3.1.2 抓包以及分析 请求报文: 响应

python第二次实验报告

安徽工程大学 Python程序设计 实验报告 班级 物流191      姓名   李自强   学号 3190505112  成绩 日期 2020年3月22日       指导教师   修宇 实验二 顺序结构程序设计(验证性实验) [实验目的] (1)掌握数据的输入输出的方法: (2)熟悉顺序结构程序中语句的执行过程: (3)掌握顺序结构程序的设计方法. [实验内容] 1.完成三个编程题.( python123) (1)计算圆面积的计算 S 问题描述: 根据圆的半径计算圆面积,半径为25.请编写

C语言的第二次实验报告

课程名称:高级语言程序设计 班级:网络1714 实验成绩: 指导教师:贺冰琰 姓名:穆浩然   实验项目名称: 学号:201721123120 实验时间: 一.实验内容与设计思路 题目一: 设计思路:设置一个flag并令其值为1,在输入二维数组后利用for语句的循环对每一个数字进行判断,若数字不为0则flag值赋为0,从而判断是否为上三角矩阵. 题目二: 设计思路:利用指针对字符串进行逆序,运用变量i的变化将字符串从最后一位不为\0的字符开始输出. 题目三: 设计思路:设两个数组,通过计算m.n