zl程序教程

您现在的位置是:首页 >  后端

当前栏目

C语言/C++常见习题问答集锦(三十四)之双剑合璧

C++C语言 常见 习题 集锦 问答 三十四
2023-09-14 09:01:32 时间

C语言/C++常见习题问答集锦(三十四)之双剑合璧

程序之美

在这里插入图片描述

1、定义包含学号、姓名和成绩信息的学生类Student。在测试类中定义存放n个学生对象数组,使用匿名类来实现接口Comparator对学生的成绩进行降序排列,输出排序结果。

java版本:

import java.util.Scanner;
	public class Main
	{
		
		public static void main(String[] args) {
			Scanner sc=new Scanner(System.in);
			
			/*System.out.print("Enter the mark of Student1: ");
			String mark1=sc.next();
			System.out.print("Enter the name of Student1: ");
			String name1=sc.next();*/
			System.out.print("Enter the grade of Student1: ");
			double grade1=sc.nextDouble();
			
			/*System.out.print("Enter the mark of Student2: ");
			String mark2=sc.next();
			System.out.print("Enter the name of Student2: ");
			String name2=sc.next();*/
			System.out.print("Enter the grade of Student2: ");
			double grade2=sc.nextDouble();
			
			/*System.out.print("Enter the mark of Student3: ");
			String mark3=sc.next();
			System.out.print("Enter the name of Student3: ");
			String name3=sc.next();*/
			System.out.print("Enter the grade of Student3: ");
			double grade3=sc.nextDouble();
			
			/*System.out.print("Enter the mark of Student4: ");
			String mark4=sc.next();
			System.out.print("Enter the name of Student4: ");
			String name4=sc.next();*/
			System.out.print("Enter the grade of Student4: ");
			double grade4=sc.nextDouble();
			
			/*System.out.print("Enter the mark of Student5: ");
			String mark5=sc.next();
			System.out.print("Enter the name of Student5: ");
			String name5=sc.next();*/
			System.out.print("Enter the grade of Student5: ");
			double grade5=sc.nextDouble();							
            System.out.println();	
            
				ComparableStudent student1=new ComparableStudent(null, null, grade1);
				ComparableStudent student2=new ComparableStudent(null, null, grade2);
				ComparableStudent student3=new ComparableStudent(null, null, grade3);
				ComparableStudent student4=new ComparableStudent(null, null, grade4);
				ComparableStudent student5=new ComparableStudent(null, null, grade5);	
				
				ComparableStudent student6 = (ComparableStudent)Max.max(student1, student2);
				ComparableStudent student7 = (ComparableStudent)Max.max(student3, student4);
				ComparableStudent student8 = (ComparableStudent)Max.max(student6, student7);
				
				ComparableStudent student9 = (ComparableStudent)Max.max(student5, student8);
								
				System.out.println("The Student1's Grade is " + student1.getGrade());
				System.out.println("The Student2's Grade is " + student2.getGrade());
				System.out.println("The Student3's Grade is " + student3.getGrade());
				System.out.println("The Student4's Grade is " + student4.getGrade());
				System.out.println("The Student5's Grade is " + student5.getGrade());
				System.out.println();
				
				ComparableStudent[] students= {
						new ComparableStudent(null, null, grade1),
						new ComparableStudent(null, null, grade2),
						new ComparableStudent(null, null, grade3),
						new ComparableStudent(null,null, grade4),
						new ComparableStudent(null, null, grade5),
				};
				
				java.util.Arrays.sort(  students);
				
				for(Student student:students) 
				{
					System.out.println(student.getGrade());
				}
		}
	}

	class Student
	{
		String  mark;
		String  name;
		double  grade;
		Student()
		{
			
		}
			
		Student(String  mark,String name,double grade)
		{
			this.mark=mark;
			this.name=name;
			this.grade=grade;
		}
		
		void setMark(){
			this.mark=mark;			
		}
		public String getMark(String mark){
			return mark;
		}
		void setNamek(){
			this.name=name;			
		}
		public String getName(String name){
			return name;
		}
		void setGrade(){
			this.grade=grade;			
		}
		public double getGrade(){
			return grade;
		}
		
	}
	
	class ComparableStudent extends Student implements Comparable
	{
		
		public ComparableStudent(String  mark,String name,double grade)
		{
			super(mark, name, grade);
		}
		
		public int compareTo(Object  o)
		{
			if(getGrade()>((Student) o).getGrade())
			{	
				return 1;	
			}
			
			else if(getGrade()<((Student) o).getGrade())
			{	
				return -1;	
			}
			else
			{
				return 0;
			}

		}
		//@Override
		public String toString() 
		{
			return super.toString()+"mark: "+getMark(mark)+" name"+getName(name)+"grade:" +getGrade();
			/输出只有成绩,没有学号和姓名
		}
}
	class Max
	{
		public static ComparableStudent max(ComparableStudent o1, ComparableStudent o2)
		{
			if (o1.compareTo(o2) > 0)
				return o1;
			else
				return o2;
		}
		
	}	

C语言版本:

#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
 
#define MAX 50
 
typedef struct {
    char stuId[10];
    char name[20];
    int score;
}Student;
 
void input(Student students[MAX], int n)
{
    int i;
 
    for (i = 0; i < n; i++) {
        scanf("%s", students[i].stuId);
        scanf("%s", students[i].name);
        scanf("%d", &students[i].score);
    }
}
 
void Comparator(Student students[MAX], int n)
{
    int i, j;
 
    Student temp;
 
    for (i = 0; i < n - 1; i++) {
        for (j = 0; j < n - i - 1; j++) {
            if (students[j].score < students[j + 1].score) {
                memcpy(&temp, &students[j], sizeof(Student));
                memcpy(&students[j], &students[j + 1], sizeof(Student));
                memcpy(&students[j + 1], &temp, sizeof(Student));
            }
        }
    }
}
 
void print(Student students[MAX], int n)
{
    int i;
 
    for (i = 0; i < n; i++) {
        printf("%s %s %d\n", students[i].stuId, students[i].name, students[i].score);
    }
}
 
 
 
int main()
{
    Student students[MAX];
 
    int n;
 
    scanf("%d", &n);
 
    input(students, n);
 
    Comparator(students, n);
 
    printf("输出:\n");
 
    print(students, n);
 
    system("pause");
    return 0;
}

在这里插入图片描述

**写一函数,实现两个字符串的比较,即自己写一个strcmp函数,函数原型为
int strcmp(char p1,char p2);
设p1指向字符串s1,p2指向字符串s2。要求当s1=s2时,返回值为0,若s1!=s2返回 他们二者第一个不同字符的ASCII码差值(如“BOY”与“BAD”,第二个字母不同,“O”与“A”之差为79-65=14)。如果s1>s2,则输出正值,如果s1<s2,则输出负值。

C++版本:

#include <iostream>
using namespace std;
int main()
{int strcmp(char *p1,char *p2);
 int m;
 char str1[20],str2[20],*p1,*p2;
 cout<<"input two strings:"<<endl;
 cin>>str1;
 cin>>str2;
 p1=&str1[0];
 p2=&str2[0];
 m=strcmp(p1,p2);
 cout<<"result:"<<m<<endl;
 return 0;
}

int strcmp(char *p1,char *p2)         //自已定义字符串比较函数
{int i;
 i=0;
 while(*(p1+i)==*(p2+i))
   if (*(p1+i++)=='\0') return(0);     //全部字符相同时返回结果0
 return(*(p1+i)-*(p2+i));     //不相同时返回结果为第一对不相同字符的ASCII码的差值
}

C语言版本:

#include<stdio.h>
#include<string.h>
int strcmp(char *s1,char *s2)
{
    int a,i,j;
    for(i=0;s1[i]!='\0'&&s2[i]!='\0';i++)
    {
        if(s1[i]!=s2[i])
        {
            return s1[i]-s2[i];
        }
    }
    return 0;   //当真点睛之笔
}
int main()
{
    char s1[20],s2[20];
    int x;
    gets(s1);
    gets(s2);
    x=strcmp(s1,s2);
    printf("%d\n",x);
    return 0;
}