zoukankan      html  css  js  c++  java
  • 第2次作业

    PTA

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

    1.实验代码

    void delnum(char *s)
    {
    	int i=0,j=0;
    	for(;s[i]!='';i++)
    	{
    		if(s[i]>'9'||s[i]<'0')
    		{
    	    *(s+j++)=*(s+i);
            }
    	}
    	*(s+j)='';
    }
    

    2.设计思路
    第一步:设置循环,查看字符串中元素,判断字符是否为数字。
    第二步:将不是数字的元素留下。
    第三步:将''赋给最后字符串的最后一项。
    3.流程图

    4.本题调试过程碰到问题及解决办法
    错误信息:
    错误原因:将''写成'/0'。
    改正方法:改了过来,写成''。

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

    1.实验代码

    int fun(char *str,char *substr)
    {
    	int num=0,i;
    	for(i=0;*(str+i)!='';i++)
    	{
    		if((str[i]==substr[0])&&(str[i+1]==substr[1])&&(str[i+2]==substr[2])){
    			num++;
    		}
    	}
    	return (num);	
    } 
    

    2.设计思路
    第一步:设置一个循环体,查看字符串。
    第二步:设置if语句,当遇到第一个字符匹配时,判断第二个字符和第三个字符是否相等。如果满足if条件,计数器num+1。
    3.本题调试过程碰到问题及解决办法

    错误原因:设置循环体的条件时出错,导致运行超时。
    改正方法:将循环体条件改成str[i]!=''或*(str+i)!=''。

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

    1.实验代码

    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;
    	}
        }
    	}
    }
    

    2.设计思路
    第一步:首尾字符要排外,所以下标要从1开始循环。
    第二步:依次取得数组元素,如果后一个元素大于前一个元素,则进行交换。
    3.本题调试过程碰到问题及解决办法
    无问题。

    7-1 输出学生成绩

    1.实验代码

    #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
    max = %.2f
    min = %.2f",average,max,min);
        return 0;
    }
    
    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);
    }
    

    2.设计思路
    第一步:编写主函数,定义所需要的变量。
    1.设flag=1;
    2.把第一个输入的数赋给max和min,flag-1。只进行一次对max和min的初始化。
    3.使用max_a函数,将max_a函数的返回值赋给max;使用min_a函数,将min_a函数的返回值赋给min。
    4.计算平均值。
    5.输出各值。
    第二步:编写max_a函数。设置if-else语句,比较两个数的大小。将较大的数赋给变量z并返回。
    第三步:和第二步相同,编写min_a函数,比较两个数的大小。将较小的数赋给变量z并返回。
    3.本题调试过程碰到问题及解决办法
    错误原因:定义类型错误。
    改正方法:将每次输入的数字D改为整形。

    7-1 计算职工工资

    1.实验代码

    #include<stdio.h>
    struct{
    	char name[10];
    	double basic;
    	double flow;
    	double pay;
    }p;
    int main()
    {
    	int N,i=0;
    	float fact;
    	scanf("%d",&N);
    	for(;i<N;i++){
    		scanf("%s %lf %lf %lf",&p.name,&p.basic,&p.flow,&p.pay);
    		fact=(p.basic+p.flow-p.pay)*1.00;
        printf ("%s %.2f
    ", p.name, fact);
    	}
    	return 0;
    }
    

    2.设计思路
    第一步:定义struct类型。
    第二步:输入N;设置循环,输入职工的姓名、基本工资、浮动工资和支出.
    第三步:定义实发工资。
    第四步:输出各员工的姓名和实发工资。
    3.流程图

    4.本题调试过程碰到问题及解决办法
    这道题pta上显示我的代码没有任何问题,但我总觉得不太好。

    7-2 计算平均成绩

    1.实验代码

    #include<stdio.h>
    struct _student{
    	char num[6];
    	char name[11];
    	int grade;
    };
    int main()
    {
    	int N,i=0,sum=0;
    	double average;
    	scanf("%d",&N);
    	struct _student stu[N];
    	for(;i<N;i++){
    		scanf("%s %s %d",stu[i].num,stu[i].name,&stu[i].grade);
    		sum=sum+stu[i].grade;
    	}
    	average=(sum*1.00)/N;
    	printf("%.2f
    ",average);
    	for(i=0;i<N;i++){
    		if(stu[i].grade<average){
    		printf("%s %s
    ",stu[i].name,stu[i].num);}
    	}
    	return 0;
    }
    

    2.设计思路
    第一步:定义struct _student类型
    第二步:设置循环,计算总分。
    第三步:计算平均成绩。
    第四步:输出平均线以下的学生的姓名和学号。
    3.本题调试过程碰到问题及解决办法
    错误原因:在第二次循环时没有对计数器i进行初始化,导致第二个循环没有进行。
    改正方法:将i初始化。

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

    1.实验代码

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

    2.设计思路
    第一步:根据题目要求,设置多个if,判断每名同学的等级。
    第二步:当分数在0~59时,计数器count++。
    第三步:返回不及格人数的计数器count。
    3.流程图

    4.本题调试过程碰到问题及解决办法

    学习总结和进度

    学习总结:学习了定义结构,加深了对指针的理解。

  • 相关阅读:
    利用SVN进行个人代码管理
    ECEF坐标系
    地理坐标系、大地坐标系、投影坐标系
    让VS能够识别我的DLL运行库
    cannot convert parameter 1 from 'const char *' to 'LPCWSTR' 修改
    创建文件目录C++ windows
    GDAL获取遥感图像基本信息
    全球经纬度划分
    遥感影像度与米的转换
    C++ assert用法
  • 原文地址:https://www.cnblogs.com/kimhae/p/8659720.html
Copyright © 2011-2022 走看看