博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
大一下第2次作业(markdown改)
阅读量:5085 次
发布时间:2019-06-13

本文共 4757 字,大约阅读时间需要 15 分钟。

一、作业

6-7 删除字符串中数字字符

1.设计思路

(1)主要描述题目算法

第一步:用for循环和if语句,一个一个字符判断,找到数字字符就跳过去判断下一个,否则使指针指向不是(已判断过的)数字字符的字符(替换它)。

第二步:添加结束字符。

2.实验代码

void delnum(char *s){    int i=0,j=0;        for(i=0;*(s+i)!='\0';i++)    {        if(*(s+i)>='0'&&*(s+i)<='9')        {           continue;        }        else         {            *(s+j)=*(s+i);            j++;        }    }    *(s+j)='\0';}

(2)本题调试过程碰到问题及解决办法

错误:

1238340-20180407220842897-1353251234.jpg
原因:未加*(s+j)='\0',字符串是以\0为结束标志,找不到\0会越界访问,结果未知。

6-8 统计子串在母串出现的次数

1.设计思路

(1)主要描述题目算法

第一步:用外循环控制趟数,再用for循环,令j=i,k=0,退出内循环的条件为子串中的字符不为母串中的字符。

第二步:在内循环中,用if语句判断子串下一个是否为结束符,如果是,说明已经判断完一次,次数加1,跳出内循环。
第三步:从母串的下一个字符重新判断

2.实验代码

int fun(char *str,char *substr){    int i=0,j=0,k=0,count=0;    for(i=0;*(str+i)!='\0';i++)    {        for(j=i,k=0;*(str+j)==*(substr+k);j++,k++)        {                    if(*(substr+k+1)=='\0')            {                count++;                break;            }        }    }        return count;}

(2)本题调试过程碰到问题及解决办法

无。

3.流程图

1238340-20180407221058815-188678248.jpg

1238340-20180408112237926-1141462092.png

6-9 字符串中除首尾字符外的其余字符按降序排列

1.设计思路

(1)主要描述题目算法

第一步:用外循环控制趟数,num个数组字符选num-1趟(首尾字符不比较)。

第二步:再用for循环和if语句判断下一个字符的ASCII码是否大于前一个字符的ASCII码,如果是就交换。

2.实验代码

int fun(char *s,int num){    int i,j;    char t;    for(i=1;i
*(s+j)) { t=*(s+j); *(s+j)=*(s+i); *(s+i)=t; } } } }

(2)本题调试过程碰到问题及解决办法

无。

7-1 输出学生成绩

1.设计思路

(1)主要描述题目算法

第一步:输入学生人数,使用动态分配。

第二步:用for循环输入学生成绩,并把它们相加。
第三步:令max、min等于数组的第一个元素。
第四步:用for循环,如果下一个数组元素大于max,就交换max。如果小于min,就交换min。

2.实验代码

#include
#include
int main(){ int *a,n,i; double max,min,sum=0; scanf("%d",&n); if((a=(int *)malloc(n*sizeof(int)))==NULL) exit(1); for(i=0;i
max) max=*(a+i); } printf("average = %.2f\nmax = %.2f\nmin = %.2f",sum/n,max,min); free(a); return 0;}

(2)本题调试过程碰到问题及解决办法

错误:输入样例按回车程序崩溃。

1238340-20180407221306656-20847498.jpg
原因:未使用动态内存分配语句。

C高级第二次作业(1)PTA作业提交列表:

1238340-20180407221340434-1300709044.jpg

7-2 计算职工工资

1.设计思路

(1)主要描述题目算法

第一步:定义结构体。

第二步:用for循环输入n个员工的姓名 基本工资 浮动工资 支出。
第三步:计算并输出。

2.实验代码

#include
struct person{ char name[100]; float w; float w1; float account;}person1;int main(){ int n,i; float pay; scanf("%d",&n); for(i=0;i

(2)本题调试过程碰到问题及解决办法

错误:1238340-20180407221432960-695389740.jpg

在编译器运行时结果跟输出样例一样,但是PTA判断我答案错误。
原因:在我仔细的审过题目后,我发现我漏掉了这一点1238340-20180407221509809-1081285288.jpg 把定义的变量类型改为float后答案正确。

3.流程图

1238340-20180408111045432-1603982849.png

7-3 计算平均成绩

1.设计思路

(1)主要描述题目算法

第一步:定义结构体。

第二步:用for循环输入学号 姓名 成绩,并将成绩相加。
第三步:计算平均值,并输出。
第四步:用for循环和if语句判断每个人的成绩是否小于平均值,是就输出学生的姓名和学号。

2.实验代码

#include
struct student{ char num[6]; char name[10]; int grade;}student1[10];int main(){ int n,i; double aver=0,sum=0; scanf("%d",&n); for(i=0;i

(2)本题调试过程碰到问题及解决办法

错误:1238340-20180407221604374-492097643.jpg

原因:定义char类型的学号数组(由5个数字组成的字符串)的字符个数大于数组长度,没有结束字符,找不到\0会越界访问,结果未知。
将char num[5]改为char num[6]即可。

C高级第二次作业(2)PTA作业提交列表:

1238340-20180407221723625-1212310784.jpg

8-1 按等级统计学生成绩

1.设计思路

(1)主要描述题目算法

第一步:用for循环再用if语句判断学生成绩的等级,如果学生成绩小于60分,count的值加1。

第二步:返回count的值到主函数。

2.实验代码

int set_grade( struct student *p, int n ){    int k,count=0;    for(k=0;k
=85&&p[k].score<=100) p[k].grade='A'; else if(p[k].score>=70&&p[k].score<=84) p[k].grade='B'; else if(p[k].score>=60&&p[k].score<=69) p[k].grade='C'; else { p[k].grade='D'; count++; } } return count;}

(2)本题调试过程碰到问题及解决办法

错误:输出乱码。

1238340-20180407221803001-873417553.jpg
原因:将return count语句写进了for循环里,改正后答案正确。

3.流程图

1238340-20180408111122977-948051865.png

8-2 结构体数组按总分排序

1.设计思路

(1)主要描述题目算法

第一步:用两个for循环,外循环为第i个人的成绩总值,内循环为计算第i个人的成绩总值。

第二步:用冒泡法排序,按总分从大到小交换。

2.实验代码

void calc(struct student *p,int n){    int i,j;    p->sum=0;    for(i=0;i
sum=p->sum+p->score[j]; } }} void sort(struct student *p,int n){ int i,j; struct student t; for(i=0;i
sum<(p+j+1)->sum) { t=*(p+j+1); *(p+j+1)=*(p+j); *(p+j)=t; } } }}

(2)本题调试过程碰到问题及解决办法

错误:将t定义为int类型,编译器报错。

原因:t是作为交换p指针所指的结构体数组的学生数据的“空瓶子”,定义类型要与结构体数组一样。

C高级第二次作业(3)PTA作业提交列表:

1238340-20180407221957952-1928299399.jpg

总结

1、总结两周里所学的知识点有哪些学会了?

1.本周新学习了结构的概念和定义、结构数组和结构指针,学会了两种结构体变量的定义方法

(1) 先声明结构体类型再定义结构体变量名 例如

#include
struct Student//声明结构体类型Student{int num;char name[20];char sex;int age;float score;char addr[30];}int main(){struct Student student1;//定义变量名}

(2)在声明结构体类型的同时定义结构体变量名 例如

#include
struct Student//声明结构体类型Student{int num;char name[20];char sex;int age;float score;char addr[30];}student1;//定义变量名

(3)学会了如何使用结构指针 (p=Student)

  1. (*p).num
  2. p->num

第2种在*p上加上小括号的原因是因为在默认情况下 . 运算符的优先级是比 *运算符的优先级要高的,要提升 *p 的运算优先级。

(4)学会了如何使用指针指向结构体数组 要先使p=Student

1.(p+i)->num p+i表示结构体数组Student第i个元素的地址

2.若指针p指向数组的某一个元素,则p++就指向其后面元素。
3.指针p指向数组Student,p[i]表示结构体数组Student的第i个元素 Student[i]等同于p[i] 可这样使用p[i].num

2、没有学会的 动态内存分配

一开始不明白为什么要使用动态内存分配(像7-1 输出学生成绩中要使用)但是我没有使用然后在编译器中运行,程序就奔溃。在网上搜索看了这篇 不光解释了为什么需要动态内存分配,也解释了中 对我在讨论组给出的回答的疑问。

2、Git

1238340-20180407225234710-2057503963.jpg

3、点评3个同学的本周作业:

学习进度表格和折线图

1238340-20180408180026860-27113447.png

1238340-20180408180035898-73291575.png

转载于:https://www.cnblogs.com/fengzx/p/8735254.html

你可能感兴趣的文章
【hihocoder 1312】搜索三·启发式搜索(普通广搜做法)
查看>>
JavaFX中ObservableValue类型
查看>>
杭电 1097 A hard puzzle
查看>>
[转载]INFORMIX锁机制及如何剖析其锁申辩(第二部门)
查看>>
Andriod-项目stymqjlb-学习笔记2-原型
查看>>
Web AppDomain
查看>>
JQuery创建规范插件
查看>>
AD 域服务简介(三)- Java 对 AD 域用户的增删改查操作
查看>>
Unity中Text渐变色,和Text间距
查看>>
P4932 浏览器
查看>>
Concurrency Kit 0.2.13 发布,并发工具包
查看>>
SQL Relay 0.50 发布,数据库负载均衡器
查看>>
Infinispan 5.3.0.Alpha1 发布
查看>>
设计模式学习笔记——原型模式(Prototype)
查看>>
算法普林斯顿
查看>>
Struts2之类范围拦截器和方法拦截器
查看>>
模型层(练习)
查看>>
XML解析技术研究(一)
查看>>
Qt 学习之路 :使用 QJson 处理 JSON
查看>>
NPOI操作Excel导入导出
查看>>