第二次作业(代码片段)

朝久 朝久     2022-11-01     583

关键词:

第二次作业

提交列表

第一题

设计思路

1.因为要删除所有数字,那么在输出字符时,当数组内的元素等于数字时,数组输出零
2.用循环,把输出出来的新数组整合,就能得到想要的结果

流程图

代码

void delnum(char *s)

	int i=0,j=0;
	for(;s[i]!=\'\\0\';i++)
	
		if(s[i]>\'9\'||s[i]<\'0\')
		
	    *(s+j++)=*(s+i);
        
	
	*(s+j)=\'\\0\';

调试

对或跟且运用不是很熟悉

第二题

设计思路

1.设计个循环控制数组输出
2.当数组连续三次都相等时让num+1,最后输出num,即为出现的次数

代码

int fun(char *str,char *substr)

	int num=0,i;
	for(i=0;str[i]!=\'\\0\';i++)
	
		if((str[i]==substr[0])&&(str[i+1]==substr[1])&&(str[i+2]==substr[2]))
			num++;
		
	
	return (num);	
 

调试


改正方法:‘\\0\'忘记加,字符串是以\\0为结束标志,找不到\\0会越界访问。

第三题

设计思路

1.设计两个循环形成循环嵌套,然后控制字符串排序
2.借用冒泡排序法的思路,完成代码

代码

int fun(char*s,int num)

    char t;
    int i,j;
    for(i=1;i<num-2;i++)
    for(j=i+1;j<num-1;j++)
    if(s[i]<s[j])
    
	t=s[i];
    s[i]=s[j];
    s[j]=t;
	
    
	

调试

无错误

第四题

设计思路

1.输入学生人数,动态分配,用for循环相加成绩
2.令max,min,等于数组第一个元素,比较大小,并用for循环交换

代码

#include<stdio.h>
float max_a(float x,float y);
float min_a(float x,float y);
int main()

	int N,flag=1,D;
	float average,max,min,sum=0.0;
	scanf("%d",&N);
	int i=0;
	for(;i<N;i++)
		scanf("%d",&D);
		sum=sum+D;
	if (flag==1)
    
    max=D;
    min=D;
    flag--;
   
    max=max_a(max,D);
    min=min_a(min,D);
   
    average=sum/N;
    printf("average = %.2f\\nmax = %.2f\\nmin = %.2f",average,max,min);
    


float max_a(float x,float y)

 float z;
 if(x>y)
 z=x;
 else
 z=y;
 return(z);

float min_a(float x,float y)

 float z;
 if(x<y)
 z=x;
 else
 z=y;
 return(z);

调试

原因:缺少函数定义 float *p=(float *)malloc(n);
方法:通过与同学交流并查询书籍得知

第五题

设计思路

1.定义结构体。
2.用for循环输入n个员工的姓名 基本工资 浮动工资 支出。
3.计算并输出。

流程图

代码

#include<stdio.h>
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<n;i++)
    
        scanf("%s %f %f %f",&person1.name,&person1.w,&person1.w1,&person1.account);
        pay=person1.w+person1.w1-person1.account;
        printf("%s %.2f\\n",person1.name,pay);
    
    return 0;

调试


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

第六题

设计思路

1.使用结构体类型进行结构体变量的引用,且根据题意后面应为s1[10]。
2.输入N的值,遍历数组,输入s1[i].number,s1[i].name,s1[i].score并将它们储存起来,计算出sum的值。
3.在for循环中,判断s1[i].score与avg的大小,最后按要求输出元素

流程图

代码

#include <stdio.h>
struct score 
    char number[6];
    char name[10];
    int score;
 s1[10];
int main ()

    
    int N,i,sum=0;
    float avg;
    scanf("%d",&N);
    for(i=0;i<N;i++) 
        scanf("%s %s %d",s1[i].number,s1[i].name,&s1[i].score);
        sum = sum + s1[i].score;
    
    avg = sum/N;
    printf("%.2f\\n",avg);
    for(i=0;i<N;i++) 
        if(s1[i].score<avg) 
            printf("%s %s\\n",s1[i].name,s1[i].number);
        
    
    return 0;


问题:输出时将s1[i].number的%s写成%d。
解决:在单步调试后知道错误的代码行,重新观察后找出问题所在

第七题

设计思路

1.定义一个结构体,并在其中定义学号num,姓名name,分数score,成绩等级grade。
2.主函数中:引用结构体,并输入学生个数n,用一个for语句进行数据录入,引用函数进行计算,最后进行输出。
3.函数中:用for语句进行遍历,并用if语句进行等级的区分,其中如果在D等级则不及格人数count加一。最后返回count值

代码

#include <stdio.h>
#define MAXN 10
int set_grade( struct student *p, int n )

	int j=0,result=0;
	for(j=0;j<n;j++)
	
		if(p[j].score<60)
		
			result++;
		
	
	for(j=0;j<n;j++)
	
		if(((p+j)->score)>=85&&((p+j)->score)<=100)
		
			((p+j)->grade)=\'A\';
		else if(((p+j)->score)>=70&&((p+j)->score)<=84)
		
			((p+j)->grade)=\'B\';
		else if(((p+j)->score)>=60&&((p+j)->score)<=69)
		
			((p+j)->grade)=\'C\';
		else if(((p+j)->score)>=0&&((p+j)->score)<=59)
		
			((p+j)->grade)=\'D\';
		
	
	return result;
  

调试

问题:最开始没有看到返回不及格人数的条件,导致前两个点出现错误

第八题

设计思路

1.先定义函数,引入变量
2.在for循环中通过if语句进行多层判断,将学生成绩分出等级,然后使小于60分的单独计算出其数目,最后返回其值(count)即可

代码

#include <stdio.h>
void calc(struct student *p,int n)

	int k=0;
	for(k=0;k<n;k++)
	
		(p+k)->sum=(p+k)->score[0]+(p+k)->score[1]+(p+k)->score[2];
		

void sort(struct student *p,int n)

	int k=0,l=0;
	struct student swap;
	for(k=0;k<n;k++)
	
		for(l=k+1;l<n;l++)
		
			if(p[k].sum<p[l].sum)
			
				swap=p[k];p[k]=p[l];p[l]=swap;
			
		
	
	

点评

黄国戎
金海宽
金海东

学习总结和进度

1.本周学习的结构,但是运用还不是很纯熟,需要多加练习

学习曲线

第二次作业(代码片段)

第二次作业(3)6-1按等级统计学生成绩1.设计思路(1)题目算法第一步:找到需要调用的函数,及明确函数目的第二步:用if将grade进行分类第三步:当等级为D时,将不及格人数+1,以此类推第四步:返回不及格人数第五步:进... 查看详情

第二次作业(代码片段)

第二次作业提交列表第一题设计思路1.因为要删除所有数字,那么在输出字符时,当数组内的元素等于数字时,数组输出零2.用循环,把输出出来的新数组整合,就能得到想要的结果流程图代码voiddelnum(char*s)inti=0,j=0;for(;s[i]!=‘\0... 查看详情

第二次作业(代码片段)

6-7删除字符串中数字字符(1)第一步:读懂题意第二步:在草纸上模拟草图第三步:整理步骤并编译(2)实现代码#include"stdio.h"voiddelnum(char*s);intmain()charitem[80];gets(item);delnum(item);printf("%s\n",item);return0;delnum(char*s)chara[80]=0;intm= 查看详情

第二次作业(代码片段)

...一步:阅读题目要求及所给部分。     第二步:根据题意补全相应函数。(2)流程图:2.实验代码:#include"stdio.h"voiddelnum(char*s);intmain()charitem[80];gets(item);delnum(item);printf("%s\n",item); 查看详情

第二次作业(代码片段)

...串中数字字符1.设计思路(1)第一步:了解指针的用法;第二步:根据题意编写函数;第三步:用两个指针,遇到数字字符不动,遇到非数字字符存入。(2)流程图无2.实验代码#include"stdio.h"voiddelnum(char*s);intmain()charitem[80];gets(ite... 查看详情

第二次作业(代码片段)

一、开发软件选择之前安装过这次题目要求的VS和Eclipse,本次作业选择了使用不太熟练的Eclipse。下面截图为该软件图标二、编写一个Java程序1.建立项目:具体步骤:File->New->javaProject->Projectname->Next->Finish。2.导入Junit:... 查看详情

第二次作业(代码片段)

...中数字字符设计思路:第一步:审题,读懂题中参数意义第二步:理清思路,将函数补全流程图:实验代码:#include"stdio.h"voiddelnum(char*s);intmain()charitem[80];gets(item);delnum(item);printf("%s\n",item);return0;voiddelnum(char*s)inti,j;for(i= 查看详情

第二次作业(代码片段)

...步:观察题意了解各个参数与所需函数在题目中的意义;第二步:设计算法编写函数,让函数的功能实现题目中所需的功能;第三步:运行程序检测是否错误。(2)流程图无2.实验代码...include"stdio.h"voiddelnum(chars);intmain()charitem[80... 查看详情

第二次作业(代码片段)

...程序,了解题中各个参数的意义。     第二步:设计函数,执行题中所需功能。     第三步:运行,检查程序对错,加以补充。(2)流程图:2.实验代码#include"stdio.h"voiddelnum(char*s);intm 查看详情

第二次pta作业(代码片段)

...中数字字符设计思路:第一步:审题,读懂题中参数意义第二步:理清思路,将函数补全流程图:实验代码:#include"stdio.h"voiddelnum(char*s);intmain()charitem[80];gets(item);delnum(item);printf("%s\n",item);return0;voiddelnum(char*s)inti,j; 查看详情

第二次作业(代码片段)

...步:观察题意了解各个参数与所需函数在题目中的意义;第二步:设计算法编写函数,让函数的功能实现题目中所需的功能;第三步:运行程序检测是否错误。(2)流程图无2.实验代码#include<stdio.h>voidsplitfloat(floatx,int*intpart,... 查看详情

第二次作业(代码片段)

...步:观察题意了解各个参数与所需函数在题目中的意义;第二步:设计算法编写函数,让函数的功能实现题目中所需的功能;第三步:运行程序检测是否错误。(2)流程图无2.实验代码#include<stdio.h>voidsplitfloat(floatx,int*intpart,... 查看详情

第二次作业(代码片段)

...步:观察题意了解各个参数与所需函数在题目中的意义;第二步:设计算法编写函数,让函数的功能实现题目中所需的功能;第三步:运行程序检测是否错误。(2)流程图无2.实验代码#include<stdio.h>voidsplitfloat(floatx,int*intpart,... 查看详情

第二次作业(代码片段)

...步:观察题意了解各个参数与所需函数在题目中的意义;第二步:设计算法编写函数,让函数的功能实现题目中所需的功能;第三步:运行程序检测是否错误。(2)流程图无2.实验代码#include<stdio.h>voidsplitfloat(floatx,int*intpart,... 查看详情

第二次作业(代码片段)

...步:观察题意了解各个参数与所需函数在题目中的意义;第二步:设计算法编写函数,让函数的功能实现题目中所需的功能;第三步:运行程序检测是否错误。(2)流程图无2.实验代码#include<stdio.h>voidsplitfloat(floatx,int*intpart,... 查看详情

第二次作业(代码片段)

...步:观察题意了解各个参数与所需函数在题目中的意义;第二步:设计算法编写函数,让函数的功能实现题目中所需的功能;第三步:运行程序检测是否错误。(2)流程图无2.实验代码#include<stdio.h>voidsplitfloat(floatx,int*intpart,... 查看详情

第二次作业(代码片段)

...第一步:定义一个新的字符数组a等于要修改的字符数组s第二步:修改字符数组s,把a中不是数字的元素赋给s,完成字符串的删除。(2).流程图无2.实验代码voiddelnum(char*s)inti;char*a=s;for(i=0;*(a+i)!=‘\0‘;i++)if((*(a+ 查看详情

软件工程第二次作业(代码片段)

软件工程第二次作业一、选择开发工具因为我对java比较感兴趣,所以我选择了Eclipse,刚开始安装时忘记截图了,之后快装完时才想起来截图。二、使用Eclipse1.运行Eclipse2.需要测试的java类packagecaculator;publicclasscaculatorpublicintadd(inta... 查看详情