c语言 数组排序 字符串排序 函数实现
- 格式:doc
- 大小:29.00 KB
- 文档页数:2
1、使用选择法、冒泡法对10个数进行排序,并输出排序前后的数列。
nk=0; mt=0; //用于记录出列顺序while(t<n){if(num[i]==0) k++;if(k==m){t++;num[i]=t;k=0;}i++;if(i==n)i=0; //或者 i=i%n,构成循环}for(i=0;i<n;i++)printf("%4d",i+1);printf("\n");for(i=0;i<n;i++)printf("%4d",num[i]);printf("\n");}4、编程打印直角杨辉三角形前六行。
#include <>#include <>void main(){int i,j,a[6][6];for(i=0;i<=5;i++){a[i][i]=1;a[i][0]=1;}for(i=2;i<=5;i++){for(j=1;j<=i-1;j++){a[i][j]=a[i-1][j]+a[i-1][j-1];}}for(i=0;i<=5;i++){for(j=0;j<=i;j++){printf("%4d",a[i][j]);}printf("\n");}}5、编写程序,把下面的数据输入一个二维数组中。
25 36 78 1312 26 88 9375 18 22 3256 44 36 58然后执行以下操作:①输出矩阵两个对角线上的数;②分别输出各行和各列的和;③交换第一行和第三行的位置;④交换第二列和第四列的位置;⑤输出处理后的数组。
#include<>#define SIZE 4void main(){inta[SIZE][SIZE]={{25,36,78,13},{12,26,88,93},{75,18,22,32},{56,44,36,58}};int i,j,t,sum;//输出二维数组printf("二维数组:\n");for(i=0;i<SIZE;i++){for(j=0;j<SIZE;j++){printf("%5d",a[i][j]);}printf("\n");}printf("\n");printf("主对角线上的数:");for(i=0;i<SIZE;i++){printf("%4d",a[i][i]);}printf("\n");printf("副对角线上的数:");for(i=0;i<SIZE;i++){printf("%4d",a[i][SIZE-1-i]);}printf("\n\n");//各列的和for(i=0;i<SIZE;i++){sum=0;for(j=0;j<SIZE;j++){sum+=a[i][j];}printf("第%d行的和=%d\n",i+1,sum);}printf("\n");//各列的和for(j=0;j<SIZE;j++){sum=0;for(i=0;i<SIZE;i++){sum+=a[i][j];}printf("第%d列的和=%d\n",j+1,sum);}printf("\n");//交换第一行和第三行的位置for(j=0;j<SIZE;j++){t=a[0][j];a[0][j]=a[2][j];a[2][j]=t;}//输出二维数组printf("交换第一行和第三行后的二维数组:\n"); for(i=0;i<SIZE;i++){for(j=0;j<SIZE;j++){printf("%5d",a[i][j]);}printf("\n");}printf("\n");//交换第二列和第四列的位置for(i=0;i<SIZE;i++){t=a[i][1];a[i][1]=a[i][3];a[i][3]=t;}//输出二维数组printf("交换第2列和第4列后的二维数组:\n"); for(i=0;i<SIZE;i++){for(j=0;j<SIZE;j++){printf("%5d",a[i][j]);}printf("\n");}} 6、求一个5×5矩阵中的马鞍数,输出它的位置,所谓马鞍数是指在行上最小而在列上最大的数。
c语言程序设计基础期中复习题c语言程序设计是计算机科学与技术专业中非常重要的基础课程之一。
它不仅教会我们如何使用计算机语言编写程序,还培养了我们解决问题的逻辑思维能力。
下面是一些c语言程序设计基础的期中复习题,供同学们复习参考。
# 一、选择题1. 以下哪个选项是C语言中的关键字?- A. class- B. int- C. function- D. include2. C语言中,用于定义变量的关键字是:- A. define- B. declare- C. var- D. let3. 以下哪个是合法的C语言标识符?- A. 2variable- B. for- C. variable2- D. int4. 在C语言中,用于表示逻辑“与”的运算符是:- A. &&- B. ||- C. !- D. &5. C语言中,用于实现条件判断的语句是:- A. if- B. switch- C. case- D. default# 二、填空题1. 在C语言中,基本数据类型包括整型(int)、字符型(char)、______(请填写浮点型)等。
2. C语言中,字符常量可以用单引号括起来,例如'A',而字符串常量则需要用双引号括起来,例如"______"。
3. C语言中,一个完整的程序由______和函数组成。
4. 在C语言中,使用______语句可以实现循环控制。
5. C语言中,函数的返回类型是放在函数名之前的,例如int main()表示函数返回类型为______。
# 三、简答题1. 请简述C语言的基本数据类型有哪些,并简要说明它们的特点。
2. 请解释C语言中数组的定义和使用方式。
3. 描述C语言中函数的声明和调用过程。
4. 请说明C语言中指针的概念及其基本操作。
5. 解释C语言中结构体(struct)的作用和定义方式。
# 四、编程题1. 编写一个C语言程序,实现输入两个整数,输出它们的和。
实习五答案1、用指针实现排序/* exer 5-1 由键盘输入10个整数,将它们按由小到大顺序排列*/ 用指针实现:由键盘输入10个整数,将他们按由小到大的顺序排列。
输入:键盘输入的10个整数。
输出:按由小到大的顺序排列。
输入样例:1 5 4 3 2 9 23 11 5 7输出样例:1 2 3 4 5 5 7 9 11 23#include<stdio.h>void main(void){int a[10],*p = NULL; /* 说明数组和指针*/int i, j, temp;for(p = a; p < a + 10; p++) /* 指针从数组首到尾*/ {scanf("%d", p); /* 利用指针依次输入*/ }p = a;for(i = 0; i < 9; i++) /* 利用指针依次比较*/{for(j = i + 1; j < 10; j++)if(*(p + i) > *(p + j)){temp = *(p + i);*(p + i) = *(p + j);*(p + j) = temp;}}for(p=a; p < a + 9; p++)printf("%d ", *p);printf("%d\n", *p);}2、用指针实现字符串排序/*exer 5-2 将10个长度小于20的字符串排序*/用指针实现:将10个字符串(设其长度小于20)从小到大排序。
输入:10个字符串。
输出:排序后的10个字符串。
输入样例:ijkjkldefghidefcdehijdefefgfgh输出样例:cdedefdefdefefgfghghihijijkjkl提示:①定义二维字符数组和指向该数组的指针数组;②用循环使指针数组的元素指向二维字符数组各行首;③用循环为指针数组元素赋字符串为值;④用strcmp函数比较两个指针数组元素的值、用strcpy函数交换两个指针数组元素的值。
C语言常用经典代码小学生算数、数组合并问题、选择删除X元素、数组元素排序/*小学生算数第二种方法*/#include <stdio.h>#include <stdlib.h>#include <time.h>int question_get1();int question_get2();int type;void main( void ){int answer,Lever;srand( (unsigned)time( NULL ) );out:printf("1.一位数运算!2.两位数运算!\n");scanf("%d",&Lever);printf( "请选择要测试的题目种类:" );printf( "\n1.加法\n2.减法\n3.乘法\n4.除法\n" );scanf( "%d", &type );while( 1 )//实现系统循环{int temp;char flag;while(Lever==1){answer = question_get1();//调用一位数运算函数printf( "请给出你的答案:\n" );break;//要跳出此次while循环}while(Lever==2){answer = question_get2();//调用二位数运算的函数printf( "请给出你的答案:\n" );break;//要跳出此次while循环}fflush( stdin );scanf( "%d", &temp );//储存测试者输入的结果while( temp!=answer )//判断结果的对错错误时实现循环运算{printf( "\n笨蛋,you are wrong! again!\n" );fflush( stdin );//继续运算scanf( "%d", &temp );}printf( "\n天才!you are rigth! Very good!\n" );printf( "press 1 to go on,press 2 to exit,press 0 to end!\n" );//选择菜单fflush( stdin );scanf( "%c", &flag );while( flag!='1' && flag!='2'&&flag!='0' )//选择菜单判断{printf( "press 1 to go on,press 2 to exit,press 0 to end!\nelse no working!\n" );fflush( stdin );scanf( "%c", &flag );}if ( flag=='2' )goto out;//回到out实现整个系统的循环else if(flag=='0')break;//结束本程序}}int question_get1()//子函数一位数运算{int a,b,c;if( type==1 ){a=rand()%10;//在10以内产生随机数b=rand()%10;//在10以内产生随机数printf( "%d + %d = ?", a, b );return(a+b);}else if( type==2 ){b=rand()%10;//在10以内产生随机数c=rand()%10;//在10以内产生随机数printf( "%d - %d = ?", b+c, b );return(c);}else if( type==3 ){a=rand()%10;//在10以内产生随机数b=rand()%10;//在10以内产生随机数printf( "%d * %d = ?", a, b );return(a*b);}else{b=rand()%10;c=rand()%9+1;printf( "%d / %d = ?", b*c, b );return(c);}}int question_get2()//子函数二位数运算{int a,b,c;if( type==1 ){a=rand()%100;//在100以内产生随机数b=rand()%100;//在100以内产生随机数printf( "%d + %d = ?", a, b );return(a+b);}else if( type==2 ){b=rand()%100;//在100以内产生随机数c=rand()%100;//在100以内产生随机数printf( "%d - %d = ?", b+c, b );return(c);}else if( type==3 ){a=rand()%100;//在100以内产生随机数b=rand()%100;//在100以内产生随机数printf( "%d * %d = ?", a, b );return(a*b);}else{b=rand()%10;c=rand()%10+1;printf( "%d / %d = ? ", b*c , c );return(b);}}//数组合并问题/*本程序可实现将随机产生的两个数m<10,n<100;\n将n插入随机产生的一个10元素一维数组第m个位置上*/#include "stdio.h"#include "stdlib.h"#include "time.h"int main(){int A[11];int i,m,n,c;srand( (unsigned)time( NULL ) );printf("*本程序可实现将随机产生的两个数m<10,n<100;\n将n插入随机产生的一个10元素一维数组第m个位置上\n");while(1){printf("\n*.按1 运行本程序\n*.按其他任意键退出退出系统\n");scanf("%d",&c);if(c==1){for(i=0;i<10;i++){A[i]=rand()%100;}printf("随机产生的数组为:\n");for(i=0;i<10;i++)printf("%3d",A[i]);printf("\n");m=rand()%10;n=rand()%100;printf("随机产生的m=%d\n",m);printf("随机产生的n=%d\n",n);for(i=0;i<10;i++){if(i==m-1){for(i=11;i>=m;i--){A[i]=A[i-1];}A[i]=n;}}printf("插入后的数组为:\n");for(i=0;i<=10;i++)printf("%3d",A[i]);printf("\n");}elsebreak;}return 0;}//选择删除X元素#include <stdio.h>void main(){int i,n,k,m;int a[10] = {4,21,13,34,13,6,7,10,9,10};printf("删除前的数组为:\n");for(i=0;i<10;i++){printf("%d ",a[i]);}printf("\n");printf("请输入要删除的数字:\n");scanf("%d",&n);printf("删除后的数组为:\n");m=10;for(i=0;i<10;i++){if(a[i] == n){m--;for(k=i;k<10;k++){a[k] = a[k+1];}}}for(i=0;i<m;i++)printf("%d ",a[i]);printf("\n");}//输入一个字符组,将其逆置输出#include "stdio.h"void main(){int i=0,k,temp;char str[100]; /* */printf("输入一个字符串:\n");while((str[i]=getchar())!='\n')i++;str[i]='\0';k=i-1;for(i=0;i<k;i++){temp=str[i];str[i]=str[k];str[k]=temp;k--;}for(i=0;str[i]!='\0';i++)putchar(str[i]);printf("\n");}//矩阵任意两行或两列交换#include "stdio.h"int main(){int i,j,m,n,t;int A[4][5]={{1,2,3,4,5},{6,7,8,9,10,},{11,12,13,14,15},{16,17,18,19,20}};int B[4][5]={0};printf("交换前的矩阵为:\n");for(i=0;i<4;i++){for(j=0;j<5;j++)printf("%5d",A[i][j]);printf("\n");}while(1){printf("请选择行交换还是列交换\n*.按1 列交换\n*.按2 行交换\n*.其他任意数退出系统!\n");scanf("%d",&t);if(t==1){printf("请输入要交换的两列:\n");scanf("%d",&m);scanf("%d",&n);for(i=0;i<4;i++){B[i][m-1]=A[i][m-1];A[i][m-1]=A[i][n-1];A[i][n-1]=B[i][m-1];}}else if(t==2){printf("请输入要交换的两行:");scanf("%d",&m);scanf("%d",&n);for(j=0;j<5;j++){B[m-1][j]=A[m-1][j];A[m-1][j]=A[n-1][j];A[n-1][j]=B[m-1][j];}}elsebreak;printf("交换后的数组为:\n");for(i=0;i<4;i++){for(j=0;j<5;j++)printf("%5d",A[i][j]);printf("\n");}}return 0;}/*礼炮问题*/#include"stdio.h"int main(){int t,count;for(t=0,count=0;t<=140;t++)if(t%3==0&&t<=60||t%5==0&&t<=100||t%7==0) count++;printf("所听到的炮声是:%d\n",count);return 0;}//数据结构//增加或删除学生信息#include "stdio.h"struct student{int ID;char name[20];struct{int year,month,day;}birthday;float scores[3];char address[100];};void stud_out(struct student *a,int n);int stud_ins(struct student *a,int n);void stud_del(struct student *a,int *n,int j);int main(){struct student stu[50]={{1001,"李天骄",1990,12,3,87.5,93.6,79.5,"北京联合大学信息学院97号"},{1002,"张璍萸",1991,2,13,97.5,83.6,89.5,"北京联合大学信息学院97号"},{1003,"陈自逸",1989,10,31,77.5,88.6,79.5,"北京联合大学信息学院97号"}};int num=3;int n,k;stud_out(stu,num);while(1){printf("请选择操作内容:1.增加学生;2.删除学生;0.退出系统!\n");if(k==1){num=stud_ins(stu,num);stud_out(stu,num);}else if(k==2){printf("请选择删除第几个学生\n");scanf("%d",&n);stud_del(stu,&num,n);printf("删除第%d个学生后\n",n);stud_out(stu,num);}else{break;}}return 0;}int stud_ins(struct student *a,int n){int i;struct student tmp;printf("输入学号\n");scanf("%d",&tmp.ID);printf("输入姓名\n");fflush(stdin);printf("输入生日(年月日)\n");scanf("%d",&tmp.birthday.year);scanf("%d",&tmp.birthday.month);scanf("%d",&tmp.birthday.day);printf("请输入C实验、C语言理论、C笔试成绩\n");for(i=0;i<3;i++)scanf("%f",&tmp.scores[i]);printf("请输入地址\n");fflush(stdin);scanf("%s",&tmp.address);a[n]=tmp;return n+1;}void stud_del(struct student *a,int *n,int j){int i;for(i=j-1;i<*n-1;i++)a[i]=a[i+1];(*n)--;}void stud_out(struct student *a,int n){int i,k;printf(" 学号姓名生日C实验C理论C笔试地址\n");for(i=0;i<n;i++){printf("%5d",a[i].ID);printf("%7s",a[i].name);printf("%5d",a[i].birthday.year);printf("%3d",a[i].birthday.month);printf("%3d",a[i].birthday.day);for(k=0;k<3;k++)printf("%7.1f",a[i].scores[k]);printf("\t%s",a[i].address);printf("\n");}}//数组元素排序#include"iostream"using namespace std;void sort(int *p,int n);int main(){int a[10]={21,3,45,6,76,9,10,23,22,34};int *p,i;p=a; //将数组a的首地址赋予指针p sort(p,10); //调用排序函数对数组排序for(i=0,p=a;i<10;i++)cout<<*(p++)<<" "; //输出排列后数组cout<<endl;return 0;}void sort(int *p,int n){int i,j,k,t;for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if(*(p+j)<*(p+k))k=j;if(k!=i){t=*(p+i);*(p+i)=*(p+k);*(p+k)=t;}}}。
【导言】在C语言中,我们经常需要处理字符串,其中获取字符串的函数是非常基础和常用的操作。
本文将讨论如何在C语言中实现一个获取字符串的函数,涵盖了函数的定义、参数、返回值以及实际应用等内容。
【一、函数的定义】1.1 函数名: 获取字符串的函数可以命名为get_string。
1.2 函数类型: 由于C语言中没有内置的字符串类型,因此可以使用字符数组来表示字符串。
因此get_string函数的返回值类型应为char数组指针类型,即char*。
1.3 参数:get_string函数不需要任何参数,其目的是获取用户输入的字符串。
因此函数的参数列表为空。
【二、函数的实现】2.1 利用动态内存分配:在实现get_string函数时,可以先动态分配一个足够大的字符数组,然后逐个读取用户输入的字符,并将其存储在该数组中。
2.2 判断输入长度:在读取字符时,需要不断判断输入的字符是否为换行符或者达到了数组的最大长度,以便及时结束输入并返回获取到的字符串。
【三、代码示例】以下是一个简单的C语言程序,演示了如何实现get_string函数:```c#include <stdio.h>#include <stdlib.h>char* get_string() {char* str = (char*)malloc(100 * sizeof(char)); // 动态分配100个字符的空间if (str == NULL) {printf("内存分配失败\n");exit(1);}char c;int i = 0;while ((c = getchar()) != '\n' i < 99) { // 逐个读取字符str[i] = c;i++;}str[i] = '\0'; // 在字符串末尾加上结束符return str; // 返回输入的字符串}int m本人n() {printf("请输入一个字符串:");char* input = get_string(); // 调用get_string函数获取字符串 printf("您输入的字符串是:s\n", input);free(input); // 释放动态分配的内存return 0;}```【四、使用示例】4.1 在上述代码示例中,我们在m本人n函数中调用了get_string函数,并将获取到的字符串存储在input变量中。
文章内容:c语言字符串排序(利用字符串函数)随着计算机科学的发展和应用,C语言作为一种功能丰富、灵活性强的程序设计语言,一直以来都备受程序员的喜爱。
在C语言中,对字符串的排序是一个基本且常见的操作。
本文将从简到繁,由浅入深地讨论如何利用C语言中的字符串函数进行字符串排序,以便读者能更加深入地理解这一过程。
1. 字符串排序的基本概念在进行字符串排序时,我们需要首先理解什么是字符串。
字符串是由一系列字符组成的,而字符又是按照ASCII码或Unicode编码进行排序的。
当我们排序字符串时,实际上是对字符串中的字符进行排序。
C 语言中,我们可以利用字符串函数来实现这一操作。
2. 利用C语言字符串函数进行排序在C语言中,有许多内置的字符串函数可以帮助我们对字符串进行排序。
其中比较常用的包括strlen()、strcpy()和strcmp()等函数。
通过这些函数,我们可以轻松地对字符串进行长度、拷贝和比较操作。
下面,让我们逐一介绍如何利用这些函数进行字符串排序。
2.1 使用strlen()函数获取字符串长度我们可以利用strlen()函数获取字符串的长度。
这样,我们就可以知道每个字符串的长度,从而为后续的排序操作做好准备。
我们可以编写如下代码来获取字符串的长度:```cint len = strlen(str);```其中,str为待排序的字符串。
2.2 使用strcpy()函数进行字符串拷贝我们可以利用strcpy()函数实现字符串的拷贝。
这样,我们就可以在排序过程中保留原始数据,以便在排序结束后进行对比。
下面是一个使用strcpy()函数的示例:```cchar temp[100];strcpy(temp, str[i]);```其中,temp为用于存储拷贝后字符串的数组,str[i]为待排序的字符串。
2.3 使用strcmp()函数进行字符串比较我们可以利用strcmp()函数对字符串进行比较。
这样,我们就可以按照一定的规则将字符串进行排序。
C语言不等长字符串排序#include<stdio.h>#include<string.h>#define M 20 //定义最长字符串长度#define N 10 //定义最大字符串个数void SortString(char str[][M],int n) //字符串排序函数{inti,j;char t[M]; //定义中间字符数组for(i=0;i<n-1;i++){for(j=i;j<n;j++){if(strlen(str[i])>strlen(str[j]))//冒泡法排序选取字符串长度较小的前排{strcpy(t,str[i]); //字符串赋值语句strcpy(str[i],str[j]);strcpy(str[j],t);}}}}void main(){int n=10,i; //明确字符串个数n=10char str[N][M]; //定义字符串二维数组char *pStr[N]; //定义字符指针数组for(i=0;i<n;i++) //利用循环结构,输入字符串{printf("Input Str(%d):",i+1);pStr[i]=str[i]; //让pStr[i]指向二维字符数组str 的第i行scanf("%s",&str[i]);}SortString(str,n); //字符串按长度由小到大排序printf("按照字符长度排序如下:\n");for(i=0;i<n;i++){printf("%s\n",pStr[i]); //输出排序后的10个字符串}}五、结果分析与总结:字符串按照长度从小到大依次排列,符合了实验要求,达到目的所在。
string排序方法
字符串排序是对一组字符串按照一定的顺序进行排列的过程。
在计算机编程中,常见的字符串排序方法有以下几种:
1. 字典序排序,字典序排序是最常见的字符串排序方法,也称
为按照ASCII码值排序。
按照字母表顺序对字符串进行排序,比较
字符串中每个字符的ASCII码值来确定顺序。
在大多数编程语言中,可以使用内置的排序函数或方法来实现字典序排序。
2. 长度排序,有时候需要按照字符串的长度进行排序,可以先
计算字符串的长度,然后按照长度进行排序。
可以使用自定义的比
较函数来实现长度排序。
3. 自定义排序,除了以上两种方法,还可以根据特定的需求自
定义排序方法。
例如,可以根据字符串中某个字符出现的次数、特
定的子串等进行排序。
在实际编程中,可以根据具体的需求选择合适的排序方法。
在
使用内置的排序函数或方法时,需要注意不同编程语言的实现方式
和函数调用方法。
另外,对于较大规模的字符串排序,还需要考虑
排序算法的效率和性能。
总之,字符串排序是编程中常见的操作,根据具体情况选择合适的排序方法可以提高程序的效率和性能。
希望以上信息能够帮助你更好地理解字符串排序方法。
结构体排序1. 什么是结构体?在C语言中,结构体是一种自定义的数据类型,它允许我们将不同类型的数据组合在一起,形成一个新的复合数据类型。
结构体由一组不同类型的成员变量组成,每个成员变量可以是任意的合法数据类型,包括基本类型(如int、float等)和其他结构体类型。
结构体的定义使用关键字struct,后面跟上结构体的名称,然后是一对大括号{},在大括号内部定义结构体的成员变量。
例如:struct Student {char name[20];int age;float score;};上面的代码定义了一个名为Student的结构体,它有三个成员变量:一个字符数组name,一个整型变量age,一个浮点型变量score。
2. 结构体排序的概念结构体排序是指对结构体数组中的元素按照某种规则进行排序的过程。
排序的规则可以是按照结构体的某个成员变量进行升序或降序排列,也可以是根据多个成员变量进行排序。
在排序过程中,我们需要比较结构体数组中的元素,并按照一定的规则进行交换位置,以达到排序的目的。
3. 结构体排序的方法在C语言中,结构体排序可以使用多种方法实现,下面介绍三种常见的排序方法:冒泡排序、选择排序和插入排序。
3.1 冒泡排序冒泡排序是一种简单直观的排序方法,它的基本思想是通过相邻元素的比较和交换,使得较大(或较小)的元素逐渐“浮”到数组的一端。
具体实现冒泡排序的步骤如下:1.从数组的第一个元素开始,依次比较相邻的两个元素,如果前一个元素大于(或小于)后一个元素,则交换它们的位置。
2.继续比较下一个相邻的两个元素,重复上述步骤,直到最后一个元素。
3.重复上述步骤,直到所有元素都排好序。
下面是使用冒泡排序对结构体数组按照成绩从高到低进行排序的示例代码:#include <stdio.h>struct Student {char name[20];float score;};void bubbleSort(struct Student arr[], int n) {int i, j;struct Student temp;for (i = 0; i < n-1; i++) {for (j = 0; j < n-i-1; j++) {if (arr[j].score < arr[j+1].score) {temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}}int main() {struct Student students[5] = {{"Tom", 85.5},{"Jerry", 78.2},{"Alice", 92.0},{"Bob", 69.8},{"John", 76.5}};int i;bubbleSort(students, 5);printf("按照成绩从高到低排序后的学生信息:\n");for (i = 0; i < 5; i++) {printf("姓名:%s,成绩:%f\n", students[i].name, students[i].score); }return 0;}上述代码中,我们定义了一个名为Student的结构体,它有两个成员变量:一个字符数组name表示学生姓名,一个浮点型变量score表示学生成绩。