首页 > 编程语言 >C语言程序设计-[23] 数组应用(续)

C语言程序设计-[23] 数组应用(续)

时间:2024-08-19 21:22:31浏览次数:11  
标签:排序 name 23 int C语言 include 数组 程序设计 成绩

1、输入一行字符,统计其中有多少个单词。

根据以上分析,代码与结果如下:

#include "stdio.h"

int main ( )
{  
   char c,pre,str[81];
   int i, n=0;
   gets (str);
   pre= ' ';
   for (i=0; c=str[i]; i++)
   {
		if (c !=' ' && pre==' ')
	  	{     
	     	n++;
	  	}
      pre = c;
   }
   printf("There are %d words in the line. \n ", n);
   return 0;
}

2、从键盘输入5个学生三门课程的成绩,求每个学生各门课的平均分,并按平均分从高到低的顺序输出每个学生各门课程的成绩和平均成绩。

算法分析:

1) 定义数组 int  s[5][3]; 存储三门课程的成绩。

       数组 float aver[5]; 存储平均成绩。

2) for循环从键盘按行输入每个学生三门课的成绩。

3) for循环计算出平均成绩,并存入数组aver中。

4) 用选择排序法对平均成绩排序,交换时应整行交换。

5) 按要求输出。

根据上面分析,代码与结果如下:

#include "stdio.h"
#define N  5

int main ( )
{   
	int i,j,k,m,s[N][3];  
	float t, aver[N];   /*定义数组和变量*/
    printf (" Input 5 student's scores:\n");
    for (i=0; i<N; i++)                    /*输入成绩*/
        scanf("%d,%d,%d", &s[i][0],&s[i][1],&s[i][2]);
    for(i=0;i<N;i++) 
        aver[i]=(s[i][0]+s[i][1]+s[i][2])/3.0;    /*计算平均分*/
    for (i=0; i<N-1; i++)                        /*选择排序法*/
    {    
		for (j=i+1; j<N; j++)
		{
            if ( aver[i]<aver[j])        /*成绩高者交换到i号位置*/
            {    
                t= aver[i];      
				aver[i]= aver[j];      
				aver[j]=t; 
	       		for (k=0; k<3; k++)
                {     
					m= s[i][k];  
					s[i][k]= s[j][k];  
					s[j][k]=m;    
				} 
            }
		}
	} 
    printf (" the sorted numbers: \n");
    for (i=0; i<N; i++)             /*输出每个学生的成绩*/
        printf("%8d%8d%8d%8.1f\n",s[i][0],s[i][1],s[i][2],aver[i]);
    return 0;
}

为了减少交换次数,可以用变量k记录第i趟成绩最高者的下标,每趟最多交换一次;可将排序部分的程序改为:

for (i=0; i<N-1; i++)                        //选择排序法
{    
   k=i;                  //用k存储第i趟成绩最高者的下标
	for (j=i+1; j<N; j++)
	{
       if(aver[k]<aver[j])  k=j;  
	}
	if (k!=i)            //将第i趟成绩最高者交换到i行
   {    
      t= aver[i];      
		aver[i]= aver[k];      
		aver[k]=t; 
	    for (j=0; j<3; j++)
       {     
			m= s[i][j];  
			s[i][j]= s[k][j];  
			s[k][j]=m;    
		} 
   }
}

结果仍然如下:

3、用键盘输入N个学生的姓名,并按字典顺序排序输出。

分析这个问题如下:

  1. 定义一个二维字符数组来存储N个学生的姓名,定义一个一维数组来存储交换姓名;
  2. 姓名可能存储空格,可以使用gets()来输入输出;
  3. 整个程序包括输入、输出和排序部分,其中排序部分可以使用上述优化后的算法,姓名比较和交换可以使用字符串比较函数和复制函数。

根据以上分析,其代码与结果如下:

#include "stdio.h"
#include "string.h"
#define N  5

int main ( )
{   
	int i, j, k;	
    char name[N][20], t[20];
	printf(" please input student names: \n");

	//输入部分代码
	for(i=0;i<N;i++)
		gets(name[i]);

    //排序部分代码 
    for (i=0; i<N-1; i++)                        //选择排序法
    {    
    	k=i;                  //用k存储第i趟姓名最高者的下标
		for (j=i+1; j<N; j++)
		{
            if(strcmp(name[k],name[j])>0)  k=j;  
		}
		if (k!=i)            //将第i趟姓名最高者交换到i行
        {    
            strcpy(t,name[k]);
			strcpy(name[k],name[i]);
			strcpy(name[i],t);
        }
	} 
    
    //输出部分代码
    printf (" the sorted student names: \n");
	for(i=0;i<N;i++)
		puts(name[i]);
    return 0;
}

标签:排序,name,23,int,C语言,include,数组,程序设计,成绩
From: https://blog.csdn.net/u013571432/article/details/141265644

相关文章

  • 单链表C语言版
        一、单链表的定义单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。 程序如下:#include<stdio.h>#include<stdlib.h>//定义链表节点结构体typedefstructNode{intdata;//数据域structNode*nex......
  • 浅谈数据类型(C语言)
            前言     本篇是我学术系列第一篇讲解,如有纰漏,还请多多指教。本篇将在C语言背景下,VS2019环境下,简要说明C语言数据类型。        数据类型的种类     干货直接上:C语言数据类型定义方式符号类型关键字内置类型有符号(signe......
  • C语言程序设计(初识C语言后部分)
    代码是一门艺术,键盘是我的画笔。3.递归和迭代(循环就是一种迭代,迭代不仅仅是循环)·求n!递归方式:n!--->1(n=1);  n*(n-1)!(n>=1)#include<stdio.h>//n!-->递归方式intfac(intn){ if(n<=1) return1; else returnn*fac(n-1);}intmain(){ int......
  • C语言:if&switch分支语句
    目录前言一、if语句1.1if1.2else1.3嵌套if1.4悬空else问题二、switch语句2.1 if语句和switch语句的对比2.2 switch语句中的default前言   C语⾔是结构化的程序设计语言,这里的结构指的是顺序结构、选择结构、循环结构,C语言是能够实现这三种结构的,其实我......
  • P10423题解
    P10423[蓝桥杯2024省B]填空问题先贴上答案#include<iostream>usingnamespacestd;intmain(){stringans[]={"1204","1100325199.77",};charT;cin>>T;cout<<ans[T-'A']......
  • CHC5223 Data Structures and Algorithms
    CHC5223DataStructuresandAlgorithms2023-2024-21of6AssignmentValue100%ofCourseworkResitIndividualworkBackgroundThesubwaysystemofacityisanetworkofundergroundorelevatedtrainsthatproviderapidtransitforpassengerswithint......
  • ctfshow-web入门-sql注入(web224-web230)文件类型注入、routines存储过程与函数状态、ha
    目录1、web2242、web2253、web2264、web2275、web2286、web2297、web2301、web224登录页面测了下没发现注入点存在robots.txt访问/pwdreset.php  ,是管理员密码重置的页面直接重置密码,这里以123456为例使用admin/123456登录 来到一个文件生成界......
  • 内存(动态开辟)———C语言
    内存管理: 1.C语言运行时的内存分配2.static关键字1.修饰变量局部变量:        <1>在编译的过程中,会在数据区为该变量开辟空间,如果代码中未对其进行初始化,则系统默认初始化为0。        <2>用static修饰的局部变量,会延长局部变量的生命周期#include<s......
  • 排序算法 基数排序 RadixSort --C语言实现
    基数排序基数排序(radixsort)属于“分配式排序”(distributionsort),又称“桶子法”(bucketsort)或binsort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O(nlog(r)m),其中r为所采取的基数,而m为堆数......
  • C语言--循环链表
    循环链表实现循环链表的最后一个节点指向头节点,形成一个环。#include<stdio.h>#include<stdlib.h>typedefstructNode{  intdata;  structNode*next;//指向下一个节点}Node;typedefstruct{  Node*head;//头指针}CircularLinkedList;......