标签:
学习了这么久的C语言,相信大家对数组并不陌生了,在这里写些数组应用,望采纳.
1 #include <stdio.h> 2 3 //定义一个由整数组成的数组,求出其中奇数的个数和偶数的个数,并打印 4 5 int main(){ 6 int a[]={1,2,3,4,5,6,8}; 7 int i,odd=0,even=0; 8 int len=sizeof(a)/sizeof(int); 9 printf("数组元素为:\n"); 10 for(i=0;i<len;i++) 11 { 12 if(a[i]%2==0) even++; 13 else odd++; 14 printf("%d ",a[i]); 15 } 16 printf("\n"); 17 printf("奇数的个数:%d\n",odd); 18 printf("偶数的个数:%d\n",even); 19 return 0; 20 }
1 #include <stdio.h> 2 3 /*从键盘输入序列{48,62,35,77,55,14,35,98,22,40}, 4 用冒泡排序法由低到高排序并输出排序结果*/ 5 6 int main(){ 7 int i,j,change=1; 8 int a[10]={48,62,35,77,55,14,35,98,22,40}; 9 for(i=0;i<10&&change;i++)/* 如果比较一趟没有发生交换,这说明已经有序 */ 10 { 11 change=0; 12 for(j=0;j<10-i-1;j++) 13 if(a[j]>a[j+1]) 14 { 15 a[j]^=a[j+1]; 16 a[j+1]^=a[j]; 17 a[j]^=a[j+1]; 18 change=1; 19 } 20 } 21 printf("排序后:\n"); 22 for(i=0;i<10;i++) printf("%d ",a[i]); 23 return 0; 24 }
1 #include <stdio.h> 2 3 //二维数组计算两个矩阵MA和MB之差,将结果存储在MA中 4 5 int main(){ 6 int i,j; 7 int a[3][3]={5,6,7,4,3,8,2,9,1,10}; 8 int b[3][3]={1,5,4,6,9,8,7,3,2,10}; 9 printf("矩阵1:\n");/* 输出矩阵MA */ 10 for(i=0;i<3;i++){ 11 for(j=0;j<3;j++){ 12 printf("%4d",a[i][j]); 13 } 14 printf("\n"); 15 } 16 printf("矩阵2:\n");/* 输出矩阵MB */ 17 for(i=0;i<3;i++){ 18 for(j=0;j<3;j++){ 19 printf("%4d",b[i][j]); 20 } 21 printf("\n"); 22 } 23 printf("2个矩阵之差:\n");/* 输出矩阵MA-MB的结果 */ 24 for(i=0;i<3;i++){ 25 for(j=0;j<3;j++){ 26 a[i][j]-=b[i][j]; 27 printf("%4d",a[i][j]); 28 } 29 printf("\n"); 30 } 31 return 0; 32 }
1 #include <stdio.h> 2 3 //从键盘输入一个2行3列的矩阵,并将其转置(行和列元素互换)并存到二维数组中 4 5 int main(){ 6 int c[2][3]; 7 int d[3][2]; 8 int i,j; 9 printf("Input matix c[2][3]:\n"); 10 for(i=0;i<2;i++){ 11 for(j=0;j<3;j++) 12 scanf("%d",&c[i][j]); 13 } 14 printf("matix c[2][3]:\n"); 15 for(i=0;i<2;i++){ 16 for(j=0;j<3;j++){ 17 printf("%4d",c[i][j]); 18 d[j][i]=c[i][j]; 19 } 20 printf("\n"); 21 } 22 printf("matix d[3][2]:\n"); 23 for(j=0;j<3;j++){ 24 for(i=0;i<2;i++) 25 printf("%4d",d[j][i]); 26 printf("\n"); 27 } 28 return 0; 29 }
1 #include <stdio.h> 2 3 //从键盘输入4个学生语文和数学课程的成绩,求每个学生两门课的总分,并按总分从高到低的顺序输出每个学生两门课程的成绩和总分 4 5 //方法一:两次循环,外层循环只找总最大值的一行和首行交换,和总分放在另一个数组,两个数组分别交换值 6 7 int main(){ 8 int i,j,k,t,score[4][2],sum[4];/* 定义数组和变量 */ 9 printf("Input 4 student`s scores(Chinese and Math):\n"); 10 for(i=0;i<4;i++){ 11 scanf("%d,%d",&score[i][0],&score[i][1]);/* 输入成绩 */ 12 sum[i]=score[i][0]+score[i][1]; 13 } 14 for(i=0;i<4;i++){ 15 k=i;/* 用k存储第一趟总分最高者的下标 */ 16 for(j=i+1;j<4;j++) 17 if(sum[j]>sum[k]) k=j; 18 if(k!=i) 19 { 20 for(j=0;j<2;j++) 21 { 22 t=score[i][j];/* 变量t用来作交换值的中间值 */ 23 score[i][j]=score[k][j]; 24 score[k][j]=t; 25 } 26 t=sum[i];/* 变量t用来作交换值的中间值 */ 27 sum[i]=sum[k]; 28 sum[k]=t; 29 } 30 } 31 printf("The sorted scores:\n"); 32 printf("%6s%6s%6s:\n","chinese","math","sum"); 33 for(i=0;i<4;i++)/* 输出每个学生的成绩和总分 */ 34 printf("%6d%6d%6d\n",score[i][0],score[i][1],sum[i]); 35 return 0; 36 } 37 38 //方法二:用到了三重循环(数组冒泡排序),并且将总分分别加入每个一维数组中 39 40 int main2(){ 41 int i,j,k,t,score[4][3];/* 定义数组和变量 */ 42 printf("Input 4 student`s scores(Chinese and Math):\n"); 43 for(i=0;i<4;i++){ 44 scanf("%d,%d",&score[i][0],&score[i][1]);/* 输入成绩 */ 45 score[i][2]=score[i][0]+score[i][1]; 46 } 47 for(i=0;i<3;i++){/* 控制前一行 */ 48 for(k=i+1;k<4;k++){/* 控制后一行 */ 49 if(score[i][2]<score[k][2]){/* 如果前一行的总分比后一行的小 */ 50 for(j=0;j<3;j++){/* 交换两行的每一列 */ 51 t=score[i][j]; 52 score[i][j]=score[k][j]; 53 score[k][j]=t; 54 } 55 } 56 } 57 } 58 printf("The sorted scores:\n"); 59 printf("%6s%6s%6s:\n","chinese","math","sum"); 60 for(i=0;i<4;i++)/* 输出每个学生的成绩和总分 */ 61 printf("%6d%6d%6d\n",score[i][0],score[i][1],score[i][2]); 62 return 0; 63 }
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 //用格式符%c逐个输入字符到字符数组,然后逐个字符输出 5 6 int main(){ 7 char d[20];int i; 8 printf("please input 10 char:\n"); 9 for(i=0;i<10;i++) 10 scanf("%c",&d[i]);/* 必须输入10个字符,不会自动加结束符‘\0‘ */ 11 d[i]=‘\0‘;/* 在末尾加上结束符‘\0‘ */ 12 for(i=0;i<10;i++) 13 printf("%c",d[i]); 14 printf("\n"); 15 printf("%s",d);/* 因为在末尾加了结束符,所以可以整体输出 */ 16 return 0; 17 } 18 19 7.10 用格式符%c逐个输入字符到字符数组,然后逐个字符输出
1 #include <stdio.h> 2 #include <string.h>/* 字符串处理函数 */ 3 4 //字符串长度函数 strlen(字符串) 5 //字符串整行输入函数 gets(字符串) 6 //字符串整体输出函数 puts(字符串) 7 //字符串比较函数 strcmp(字符串1,字符串2) 8 //字符串复制函数 stecpy(字符串数组1,字符串2) 9 //字符串连接函数 strcat(字符串数组1,字符串2) 10 11 //上述6个字符串处理函数应用举例 12 13 int main(){ 14 char str1[30]="Happy birthday",str2[30]="2014"; 15 puts(strcat(str1,str2)); 16 printf("%d %d\n",strlen(str1),strcmp(str1,str2)); 17 gets(str1); 18 printf("%d %d\n",strlen(str1),strcmp(str1,str2)); 19 puts(strcpy(str1,str2)); 20 printf("%d %d\n",strlen(str1),strcmp(str1,str2)); 21 gets(str1); 22 puts(strcat(str1,str2)); 23 return 0; 24 }
1 #include<stdio.h> 2 #include<malloc.h> 3 int insert(int s[],int n) 4 { 5 int i,j,t; 6 for(i=1;i<n;i++) 7 { 8 t=s[i]; 9 j=i-1; 10 while((j>=0)&&(t<s[j])) 11 { 12 s[j+1]=s[j]; 13 j--; 14 } 15 s[j+1]=t; 16 } 17 } 18 int main() 19 { 20 int i,n; 21 scanf("%d",&n); 22 int *arr=(int *)malloc(sizeof(int)*n); 23 for(i=0;i<n;i++) 24 scanf("%d",&arr[i]); 25 insert(arr,n); 26 for(i=0;i<n;i++) 27 printf("%d ",arr[i]); 28 }
1 #include <stdio.h> 2 3 //用字符型数组名和字符指针变量两种方法整体输入与输出字符串 4 5 int main(){ 6 char str[62]="good moring!",*p=str;/* 定义ps为指向字符串的首字符的指针变量 */ 7 char *nstr="nice to meet you"; 8 printf("%s\n",str);/* 用字符型数组整体输出字符串 */ 9 printf("%s\n",nstr);/* 用字符指针整体输出字符串 */ 10 gets(str);/* 用字符型数组整体输入带空格的字符串 */ 11 printf("%s\n",str); 12 gets(p);/* 用字符指针整体输入带空格的字符串 */ 13 printf("%s\n",str);/* 与printf("%s\n",p); 等价 */ 14 return 0; 15 }
1 #include <stdio.h> 2 3 /*利用指向分数组的指针变量,输入多个字符串, 4 将它们按行存储在二维字符数组中,然后输出全部字符串*/ 5 6 int main(){ 7 char a[4][20]; 8 char (*p)[20];/* p是指向分数组的指针变量 */ 9 printf("Input srtings:\n"); 10 for(p=a;p<a+4;p++) 11 gets(*p); 12 printf("Output srtings:\n"); 13 for(p=a;p<a+4;p++) 14 printf("%s ",*p); 15 return 0; 16 }
1 #include <stdio.h> 2 #include <malloc.h> 3 #include <stdlib.h> 4 5 //用动态数组实现一维数组的创建和使用 6 7 int main(){ 8 int *array = NULL,num,i; 9 printf("please input the number of element:"); 10 scanf("%d",&num);/* 申请动态数组使用的内存块 */ 11 array=(int *)malloc(sizeof(int)*num); 12 if(array==NULL){ 13 printf("out of memory,press any key to quit...\n"); 14 exit(0); 15 } 16 /* 提示输入num个数据 */ 17 printf("please input %d elements: ",num); 18 for(i=0;i<num;i++) 19 scanf("%d",&array[i]); 20 /* 输出刚输入的num个数据 */ 21 printf("%d elements are: \n",num); 22 for(i=0;i<num;i++) 23 printf("%d,",array[i]); 24 free(array);/* 释放又malloc函数申请的内存块 */ 25 return 0; 26 }
1 #include <stdio.h> 2 3 //用动态数组实现二维数组的创建和使用 4 5 int main(){ 6 int n1,n2; 7 int **array,i,j; 8 puts("输入一维长度:"); 9 scanf("%d",&n1); 10 puts("输入二维长度:"); 11 scanf("%d",&n2); 12 /* 先遵循从外层到里层,逐层申请的原则: */ 13 /* 第一维,开辟元素为n1的指针型数组,用来存放二维数组每行首地址 */ 14 array=(int**)malloc(n1*sizeof(int*)); 15 if(array==NULL){/* 内存申请失败,提示退出 */ 16 printf("out of memory,press any key to quit...\n"); 17 exit(0);/* 终止程序运行,返回操作系统 */ 18 } 19 for(i=0;i<n1;i++){ 20 array[i]=(int*)malloc(n2* sizeof(int)); 21 if(array==NULL){/* 内存申请失败,提示退出 */ 22 printf("out of memory,press any key to quit...\n"); 23 exit(0);/* 终止程序运行,返回操作系统 */ 24 } 25 for(j=0;j<n2;j++){ 26 array[i][j]=i+j+1; 27 printf("%d\t",array[i][j]); 28 } 29 puts(""); 30 } 31 /* 最后不要忘了释放这些内存,这要遵循释放的时候从里层到外层,逐层释放的原则 */ 32 for(i=0;i<n1;i++) 33 free(array[i]); 34 free(array); 35 return 0; 36 }
标签:
原文地址:http://www.cnblogs.com/purplec/p/5547217.html