XJTU大学计算机编程作业题 第12周

这是一个关于C语言编程的作业,涵盖了多种算法实现。第一题要求用冒泡法对学生成绩排序,第二题涉及奇数个整数的特殊排序,第三题需要编写折半查找函数,第四题包括冒泡和选择排序,第五题要求处理数字字符串,第六题是优化冒泡排序,第七题涉及在已排序数组中插入元素并保持有序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一题

题目描述:
定义包含学号、姓名和成绩的学生信息结构类型,完成以下功能:

(1)键盘输入n个学生信息数据(n从键盘输入);
(2)使用“冒泡法”对学生成绩由高到低排序;
(3)输出排序后学生信息。

输入输出样例

输入样例:
3
100001 wang-li 91

100002 chen-da-wei 95

100003 guo-tao 93
输出样例:

100002 chen-da-wei 95

100003 guo-tao 93

100001 wang-li 91

样例输入:

2
111111 wang 78
222222 liu 100 

样例输出:

222222 liu 100
111111 wang 78

参考代码

#include<stdio.h>
struct student
{
   
       int num;
       char name[20];
       float score;
}stu[100];
void sort(struct student stu[], int n)
{
   
       int i, j;
       struct student t;//再声明一个
       for (i = 0; i < n - 1; i++)//标准冒泡排序
       {
   
              for (j = i + 1; j < n; j++)
              {
   
                      if (stu[i].score<stu[j].score)
                      {
   
                             t = stu[i];
                             stu[i] = stu[j];
                             stu[j] = t;
                      }
                      else if (stu[i].score == stu[j].score)//当成绩一样的时候
                      {
   
                             if (stu[i].num < stu[j].num)
                             {
   
                                    t = stu[i];
                                    stu[i] = stu[j];
                                    stu[j] = t;
                             }
                      }
              }
       }
}
int main()
{
   
       int n;
       int i;
       scanf("%d", &n);
       for (i = 0; i < n; i++)
       {
   
              scanf("%d", &stu[i].num);
              scanf("%s", &stu[i].name);
              scanf("%f", &stu[i].score);
       }
       sort(stu, n);
       for (i = 0; i < n; i++)
              printf("%d %s %1.0f\n", stu[i].num, stu[i].name, stu[i].score);//为什么要加1.0?
       return 0;
}

第二题

题目描述:
从键盘输入奇数个整型数(大于3),对该整数序列按如下规则排序:最大值排在中间,最小值排在最左,中值排在最右,其它值清为0。

定义排序函数原型为:void booble(int *array,int n);

运行样例如下所示:

输入

5

1 2 3 4 5

输出

1 0 5 0 3

样例输入:

7
10 1 1 100 0 0 5

样例输出:

0 0 0 100 0 0 1

参考代码

#include<stdio.h>
#include<stdlib.h>
void booble(int*array, int n)
{
   
	int temp;
	for (int i = 0; i < n - 1; i++)   //冒泡排序
		for (int j = 0; j < n - 1; j++)
		{
   
			if (*(array + j) > *(array + j 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值