当前位置: 首页 > news >正文

第八周作业

这次作业属于哪个课程C语言程序设计ll
这个作业要求在哪里(https://www.cnblogs.com/pengchen511/p/10564067.html)
我在这个课程的目标是掌握常用字符串函数以及使用指针操作字符串的方法,掌握动态内存分配
这个作业在哪个具体方面帮助我实现目标字符串函数以及使用指针操作字符串的方法
参考文献(http://c.biancheng.net/view/2031.html)

基础作业(函数题)

6-1 函数实现字符串逆序 (15 分)

本题要求实现一个字符串逆序的简单函数。

函数接口定义:
void f( char *p );
函数f对p指向的字符串进行逆序操作。要求函数f中不能定义任何数组,不能调用任何字符串处理函数。

裁判测试程序样例:

#include <stdio.h>
#define MAXS 20

void f( char *p );
void ReadString( char *s ); /* 由裁判实现,略去不表 */

int main()
{
    char s[MAXS];

    ReadString(s);
    f(s);
    printf("%s\n", s);

    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

Hello World!

输出样例:

!dlroW olleH

1.实验代码

void f( char *p ){
    int i=0,j;
   while(p[i]!='\0')  //确定字符串的长度
   i++; 
   j=i-1;                    
    for(i=0;i<=j;i++,j--)  
    {    
        char c=p[i];      //逆序输出
        p[i]=p[j];    
        p[j]=c;    
    }                          
    return ;
}

2.实验设计思路:

流程图:
1579902-20190418162721186-329355016.png

设计思路:

因为题目已经输入字符串了,所以我们要先确定字符串的长度
然后用for循环来调换位置 逆序输出

3.本题遇到的问题及解决办法:

错误截图:

1579902-20190418161648673-188381559.png
1579902-20190418161702679-2127201844.png

解决办法:我把j=i-1写到外面了 ,开始是写在for循环内
注意事项:
1.要求函数f中不能定义任何数组,不能调用任何字符串处理函数
2.结尾不要写成return 0;

4.运行结果截图:

1579902-20190418090301776-878768523.png

6-3 字符串的连接 (15 分)

本题要求实现一个函数,将两个字符串连接起来。

函数接口定义:

char *str_cat( char *s, char *t );

函数str_cat应将字符串t复制到字符串s的末端,并且返回字符串s的首地址。

裁判测试程序样例:

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

#define MAXS 10

char *str_cat( char *s, char *t );

int main()
{
    char *p;
    char str1[MAXS+MAXS] = {'\0'}, str2[MAXS] = {'\0'};

    scanf("%s%s", str1, str2);
    p = str_cat(str1, str2);
    printf("%s\n%s\n", p, str1);

    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

abc
def

输出样例:

abcdef
abcdef

1.实验代码:

char *str_cat(char *s, char *t){
    int len,i;
    len = strlen(s);
    for (i = 0; *(t + i) != '\0'; i++)  //字符串t\0结尾
    {
        *(s + i + len) = *(t + i);  //字符串t复制到字符串s的末端
    }
    return s;
}

2.实验设计思路:

流程图:
1579902-20190418163615031-2145728007.png

设计思路:

自定义函数,先用strlen得到s的长度,在用for循环把字符串t复制到字符串s的末端
且以字符串t\0为结束条件

3.本题遇到的问题及解决办法:

注意一下return s;就可以啦

4.运行结果截图:

1579902-20190418090624378-417080523.png

基础作业(编程题)

7-1 输出学生成绩 (20 分)

本题要求编写程序,根据输入学生的成绩,统计并输出学生的平均成绩、最高成绩和最低成绩。建议使用动态内存分配来实现。

输入格式:
输入第一行首先给出一个正整数N,表示学生的个数。接下来一行给出N个学生的成绩,数字间以空格分隔。

输出格式:
按照以下格式输出:

average = 平均成绩
max = 最高成绩
min = 最低成绩

结果均保留两位小数。

输入样例:

3
85 90 95

输出样例:

average = 90.00
max = 95.00
min = 85.00

1.实验代码:

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int n,i,*p;
    double max,min,average,sum=0; //题目要求保留两位小数
    scanf("%d",&n);
    //为数组P动态分配n个整数类型大小的空间
    if ((p=(int * )calloc(n,sizeof(int))) == NULL){
        printf ("Not able to allocate memory.\n");
        exit(1);
    }
    for (i=0;i<n;i++){
    scanf("%d",p+i);
    }
    for (i=0;i<n;i++){  //累加求和
     sum=sum+*(p+i);
    }
     printf("average = %.2f\n",sum/n);
     max=*p;     //给最大最小值赋初值
     min=*p;
     for(i=1;i<n;i++){  //求最大最小值
     if( max <*(p+i)){  
       max = *(p+i);
    }
     if(min >*(p+i)){
       min = *(p+i);
    }
     }
    printf ("max = %.2f\nmin = %.2f",max,min);
    free(p);    //释放动态分配的空间
    return 0;
}

2.实验设计思路:

流程图:

1579902-20190418170010373-173778409.png

设计思路:

先为数组P动态分配n个整数类型大小的空间,然后输入数字
再用for循环求和除以N就是平均值,然后用前后比较法比较最大最小值
最后释放动态分配的空间

3.本题遇到的问题及解决办法:

错误截图:
1579902-20190418090931242-688044571.png

解决办法:我开始把sum定义成整形,一直显示答案错误,改成double sum;

4.运行结果截图:

1579902-20190418090954012-1941656015.png

7-4 字符串排序 (20 分)

本题要求编写程序,读入5个字符串,按由小到大的顺序输出。

输入格式:
输入为由空格分隔的5个非空字符串,每个字符串不包括空格、制表符、换行符等空白字符,长度小于80。

输出格式:
按照以下格式输出排序后的结果:

After sorted:
每行一个字符串

输入样例:

red yellow blue green white

输出样例:

After sorted:
blue
green
red
white
yellow

1.实验代码:

#include<stdio.h>
#include<string.h>
int main(){
    int i,j;
    char str[5][85],temp[85];
    for(i=0;i<5;i++){
        scanf("%s",str[i]); //将字符串输入数组
    }
    for(i=0;i<4;i++){
        for(j=0;j<4-i;j++){
            if(strcmp(str[j],str[j+1])>0){    //字符串的比较
                strcpy(temp,str[j]);          //字符串的复制
                strcpy(str[j],str[j+1]);
                strcpy(str[j+1],temp);
            }
        }
    } 
    printf("After sorted:\n");
    for(i=0;i<5;i++){
        printf("%s\n",str[i]);
    }
    return 0;
} 

2.实验设计思路:

流程图:
1579902-20190418171008046-719845462.png

设计思路:
将字符串输入数组然后 比较字符串的大小,按由小到大的顺序输出
最后循环打印输出

3.本题遇到的问题及解决办法:

要注意一下头文件#include<string.h>,还有定义字符串时候的数组空间

4.运行结果截图:

1579902-20190418091534629-15439319.png

第八周预习作业

7-3 计算平均成绩 (15 分)

给定N个学生的基本信息,包括学号(由5个数字组成的字符串)、姓名(长度小于10的不包含空白字符的非空字符串)和成绩([0,100]区间内的整数),要求计算他们的平均成绩,并顺序输出平均线以下的学生名单。

输入格式:
输入在一行中给出正整数N(≤10)。随后N行,每行给出一位学生的信息,格式为“学号 姓名 成绩”,中间以空格分隔。

输出格式:
首先在一行中输出平均成绩,保留2位小数。然后按照输入顺序,每行输出一位平均线以下的学生的姓名和学号,间隔一个空格。

输入样例:

5
00001 zhang 70
00002 wang 80
00003 qian 90
10001 li 100
21987 chen 60

输出样例:

80.00
zhang 00001
chen 21987

1.实验代码:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct student {   //用结构体来构架学生基本信息
    char num[10];
    char name[10];
    double score;
};
int main (void)
{
    struct student students[10];
    int i,n;
    double average = 0;
    scanf("%d",&n);
    for(i=0;i<n;i++){  //循环打印学生信息
    scanf("%s %s %lf",&students[i].num,&students[i].name,&students[i].score);
    }
    for(i=0;i<n;i++){
    average += students[i].score;
    }
    average = average / n;
    printf("%.2f\n",average);  //输出平均值
    for(i=0;i<n;i++){
    if(students[i].score < average){    //判断输出平均线以下的学生
      printf("%s %s\n",students[i].name,students[i].num);
    }                       
  }
    return 0;
}

2.实验设计思路:

设计思路:

先用结构体来构架学生基本信息,然后定义十个数组空间用来存放10个学生
循环打印学生信息,接着输出平均值 ,最后判断输出平均线以下的学生

3.本题遇到的问题及解决办法:

错误截图:
1579902-20190418092044426-751355662.png

解决办法:我在Dvc++上面调试好了,查阅了百度有关结构体的知识

4.运行结果截图:

1579902-20190418092036967-156072576.png

二、学习进度条

周/日期这周所花的时间代码行学到的知识点简介目前比较迷惑的题目
3/4-3/96小时89新建文件进行读写二位数组子数组的最大值的求和
3/10-3/158小时156二维数组的运用二位数组子数组的最大值的求和
3/16-3/2210小时120用二维数组求最大值和鞍点冒泡法排序
3/23-3/296小时56进一步了解一维数组以及字符串的一些简单用法求二维数组的最大子数组是矩形的
3/30-4/55小时65指针的定义及其运用
4/6-4/126小时125更深的理解了指针、数组和地址之间的关系
4/13-4/1914小时116掌握常用字符串函数以及使用指针操作字符串的方法,掌握动态内存分配挑战作业

1579902-20190418172445476-370355198.png

三、学习感悟:

掌握常用字符串函数以及使用指针操作字符串的方法,掌握动态内存分配,
也了解了结构体的使用方法,
这次作业感觉挺好的,布置比较合理 而且复习了前面的一些知识点

四:结对编程:

这次的结对编程感觉自己能认真的去和别人互相教学,一起进步
在一些不懂的问题上两个人之间可以相互交流、讨论

转载于:https://www.cnblogs.com/lyx1314/p/10727594.html

相关文章:

  • CentOS7编译安装php7.1
  • 新版mysqlroot不能登录,mysql无密码访问后设置新密码
  • 西安白领平均月薪6758元,金融行业最高
  • js原型继承
  • DB2jcc 有jdk限制
  • 中小企业如何在网络营销中胜出?
  • 大气环境监测系统,网格化大气环境监测,纵横智控
  • 基于NET Framework使用阿里云AMQP
  • vim的基础操作
  • Apache访问日志记录用户的每一个请求
  • LVS负载均衡机制之LVS-DR模式工作原理以及简单配置
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • axios 或 ajax 请求文件
  • 重磅课程|《CNCF x Alibaba 云原生技术公开课》正式开讲!
  • proxy
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • 11111111
  • 2017 年终总结 —— 在路上
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • JavaScript异步流程控制的前世今生
  • maven工程打包jar以及java jar命令的classpath使用
  • PHP 的 SAPI 是个什么东西
  • Python_OOP
  • vagrant 添加本地 box 安装 laravel homestead
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 分享几个不错的工具
  • 构建二叉树进行数值数组的去重及优化
  • 使用agvtool更改app version/build
  • 数据可视化之 Sankey 桑基图的实现
  • 通过几道题目学习二叉搜索树
  • 翻译 | The Principles of OOD 面向对象设计原则
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • ​油烟净化器电源安全,保障健康餐饮生活
  • (2)nginx 安装、启停
  • (C#)获取字符编码的类
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (Python第六天)文件处理
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (转)德国人的记事本
  • *2 echo、printf、mkdir命令的应用
  • .Net - 类的介绍
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题
  • .NET连接MongoDB数据库实例教程
  • .NET实现之(自动更新)
  • [Angular] 笔记 6:ngStyle
  • [BZOJ3211]:花神游历各国(小清新线段树)
  • [C# 基础知识系列]专题十六:Linq介绍
  • [C++] new和delete