数组习题及答案
一维数组练习题
键盘录入一组数列,利用冒泡排序将数据由大到小排序
从键盘输入年、月、日,计算并输出该日是该年第几天
#include <stdio.h>int main(){int year,month,day;int months[12] = {31,28,31,30,31,30,31,31,30,31,30,31};printf("请输入年月日(yyyy-mm-dd):");scanf("%d-%d-%d",&year,&month,&day);if(year %4 == 0&&year %100 !=0 ||year%400 == 0) months[1] = 29;int sum = day;for(int i=0;i<month-1;i++) sum += months[i];printf("%d月%d日是%d年的第%d天\n",month,day,year,sum);return 0;}
键盘录入一组数列,求最大数、最小数、均值
#include <stdio.h>int main(){int n,temp;int sum = 0;printf("需要输入多少数据:"); scanf("%d",&n);int a[n];printf("输入数列:");for(int i = 0;i < n;i++) scanf("%d",&a[i]);printf("输入的数列:");for(int i = 0;i < n;i++){for(int j = 0;j < i;j++){if(a[j+1]<a[j]) //升序排序 {temp = a[j];a[j] = a[j+1];a[j+1] = temp; }}}for(int i = 0;i < n;i++){sum += a[i];}int max = a [n-1];int min = a[0];double x = (double)sum/(double)n;printf("最大数%d,最小数%d,均值%d",max,min,x);return 0;}
从键盘录入一组数列,判断是否是回文,举例:12321,abba,121
//方法一 #include <stdio.h> int main(){int n;int b = 0;int c = 0;int d = 1;while(d){int b = 0;int c = 0;printf("请输入数列的长度:");scanf("%d",&n);char a[n];printf("请输入数列:");for(int i=0;i<n;i++) scanf("%s",&a[i] );printf("数列为:");for(int i=0;i<n;i++) printf(" %c",a[i]);printf("\n");for(int i=0;i<n;i++){if(a[0+i]==a[n-1-i]) b++;} if(b == n) c = 1;if(c){while(1){for(int i=0;i<n;i++) printf("%c",a[i]);printf("是回文数\n");break;} }else{for(int i=0;i<n;i++) printf("%c",a[i]);printf("不是回文数\n");}printf("是否退出(1继续/0退出):");scanf("%d",&d);}return 0;}//方法二#include <stdio.h>int main(){int d = 1;int b,c;int n;while(d){b = 0;c = 0;printf("请输入将要输入的字符长度:");scanf("%d",&n);char a[n] ;printf("请输入数列:");scanf("%s",&a);printf("数列为:");printf("%s\n",a);int len =sizeof(a) / sizeof(a[0]);printf("数列长度为:%d\n",len);for(int i=0;i<len;i++){if(a[0+i]==a[len-1-i]) b++;} if(b == len) c = 1;if(c){while(1){printf("%s",a);printf("是回文数\n");break;} }else{printf("%s",a);printf("不是回文数\n");}printf("是否退出(1继续/0退出):");scanf("%d",&d); }return 0;} //方法三 #include <stdio.h>// #include <string.h> memset(a,0, sizeof(a)); 将所有元素变为0达到清空效果 int main(){int d = 1;int b,c;int len = 0;int i = 0;char a[100] = {};while(d){b = 0;c = 0;len = 0;i = 0;char a[100] = {}; printf("请输入数列:");scanf("%s",a);printf("数列为:");printf("%s\n",a);while(a[i]!='\0'){i++;len++;}printf("数列长度为:%d\n",len);for(int i=0;i<len;i++){if(a[0+i]==a[len-1-i]) b++;} if(b == len) c = 1;if(c){while(1){printf("%s",a);printf("是回文数\n");break;} }else{printf("%s",a);printf("不是回文数\n");}printf("是否退出(1继续/0退出):");scanf("%d",&d); }return 0;}
用数组存储10个整型数,通过键盘输入一个数,找出该数在数组中的下标值
#include <stdio.h>int main(){int a[10],b; //b为输入数 int c = 1; // 用于判断输入是否非法的循环 int d = 1; // 用于循环利用while(d){int c = 1; // 用于判断输入是否非法的循环 printf("输入10个的整型数:");for(int i = 0;i < 10;i++) scanf("%d",&a[i]);printf("输入整型数为:");for(int i = 0;i < 10;i++) printf("%4d",a[i]);printf("\n");printf("输入要查找的数:");scanf("%d",&b);for(int i = 0;i < 10;i++){if(b==a[i]){printf("%d的在数组中的下标值为%d\n",b,i);c = 0; }}while(c){printf("%d为非法数据\n",b);break; }// 清空输入缓冲区所有字符while (getchar() != '\n');printf("是否继续判断(继续:1/结束:0):");scanf("%d",&d);} printf("判断结束");return 0;}
通过键盘输入 10 个学员成绩: 1)输出不及格学员的成绩和下标。 2)求最高分的下标值 3)求最低成绩的下标值 4)求总成绩及平均成绩
#include <stdio.h>int main(){int a[10],temp; //a为成绩数组,temp为中转值 int b[10]; //b用于备份a数组的数据,让其不影响原数组 int d = 1; // 用于循环利用int flag = 0; // 用于判断是否排序 while(d){printf("输入10个成绩:");for(int i = 0;i < 10;i++) scanf("%d",&a[i]);printf("输入成绩为:");for(int i = 0;i < 10;i++) printf("%4d",a[i]);printf("\n");for(int i = 0;i < 10;i++){if(a[i] < 60) printf("%d不及格,下标为%d\n",a[i],i); }for(int i = 0;i < 10;i++) b[i] = a[i] ; //备份,利用for(int i = 0;i < 9;i++){for(int j = 0;j < 9-i;j++){if(b[j+1]<b[j]) //升序排序 {temp = b[j];b[j] = b[j+1];b[j+1] = temp;flag = 1; }}}for(int i = 0;i < 10;i++){if(a[i]==b[9]) printf("%d为最大成绩,下标为%d\n",b[9],i);if(a[i]==b[0]) printf("%d为最小成绩,下标为%d\n",b[0],i);} // 清空输入缓冲区所有字符while (getchar() != '\n');printf("是否继续判断(继续:1/结束:0):");scanf("%d",&d);} printf("判断结束");return 0;}
二维数组练习题
一个二维数组赋了初值,用户输入一个数,在该二维数组中查找。找到则返回行列位置,没找到则提示。
#include <stdio.h>int main(){int n;int m=0;int a [5][2] = {{1,1},{2,2},{3,3},{4,4},{5,5}};printf("输入一个数:");scanf("%d",&n);for(int i=0;i<5;i++){for(int j=0;j<2;j++){if(n == a[i][j]) {printf("%d在第%d行第%d列\n",n,i,j);m++;}}}if(m==0) printf("%d未在数组中",n); return 0;}
二维整型数组,求所有元素平均值,求每行最大值,求每列最小值。
#include <stdio.h>int main(){int n,m;float sum = 0;int max = 0; //最大初始化 printf("输入有几行几列:");scanf("%d %d",&n,&m); int a[n][m];printf("输入数组数:");for(int i = 0;i < n;i++){for(int j = 0;j < m;j++) scanf("%d",&a[i][j]);}printf("输入的数组a为:\n");for(int i = 0;i < n;i++){for(int j = 0;j < m;j++) printf("%4d",a[i][j]);printf("\n");}for(int i = 0;i < n;i++){for(int j = 0;j < m;j++) sum += a[i][j];} sum = sum/(float)(n*m);printf("所有元素平均值为%f\n",sum);printf("输入的数组b为:\n");for(int i = 0;i < n;i++){for(int j = 0;j < m;j++) printf("%4d",b[i][j]);printf("\n");} //每行最大 for(int i = 0;i < n;i++){for(int j = 0;j < m;j++){if(a[i][j] > max){max = a[i][j];}}printf("%d行最大为:",i); printf("%d\n",max);}//每列最小 for(int j = 0;j < m;j++){int min = a[0][j];for(int i = 0;i < n;i++){if(a[i][j] < min){min = a[i][j];}}printf("%d列最小为:",j); printf("%d\n",min);}return 0;}
在行列相等数组计算主对角线元素的和
#include <stdio.h> int main() {int n;int sum = 0;printf("请输入行列的大小n = ");scanf("%d",&n);int a[n][n];printf("请输入数组值:");for(int i=0;i<n;i++){for(int j=0;j<n;j++) scanf("%d",&a[i][j]);}printf("输入的数组为:\n");for(int i=0;i<n;i++){for(int j=0;j<n;j++) printf("%4d",a[i][j]);printf("\n");}for(int i=0;i<n;i++){sum += a[i][i];}printf("斜角和为:%d",sum);return 0;}
计算一个矩阵下三角元素的和
#include <stdio.h> //行索引 ≥ 列索引(即 i ≥ j) 下三角 int main() {int n;int num = 0;printf("请输入行列的大小n = ");scanf("%d",&n);int a[n][n]; printf("请输入数组值:");for(int i=0;i<n;i++){for(int j=0;j<n;j++) scanf("%d",&a[i][j]);}printf("输入的数组为:\n");for(int i=0;i<n;i++){for(int j=0;j<n;j++) printf("%4d",a[i][j]);printf("\n");}printf("下三角元素:\n");for (int i = 0; i < n; i++) {for (int j = 0; j <= i; j++) { printf("a[%d][%d] = %d\n", i, j, a[i][j]);num += a[i][j];}}printf("%d",num);return 0; }
电影院为了答谢影迷的支持,在某一排的某一列座位上放置了一个大礼包,放置礼物的位置具有这样的规则(行和列的平方和为开店日期 512(5月12日)); 请设计程序找出大礼包的位置,(假定电影院有20排,每排25个座位)
#include <stdio.h> int main() {int a[20][25];for(int i = 0;i < 20;i++){for(int j = 0;j < 25;j++){if(i*i+j*j == 512) printf("礼物在第%d行,第%d列",i,j);}}return 0; }
字符数组练习题
编写一个程序,读取用户输入的字符串,并将其反转输出。
#include <stdio.h> int main() {int n;printf("字符串长度:");scanf("%d",&n);char a[n] ; //空格' '也是字符,对应的ASCII 为32 int len = sizeof(a) / sizeof(a[0]);printf("输入字符串:");scanf("%s",a);printf("\n");printf("反转过来的字符串为:");for (int i = len - 1; i >= 0; i--){printf("%c", a[i]);}printf("\n");return 0;}
编写一个程序,判断用户输入的字符串是否为回文(即正反读都一样的字符串)。
#include <stdio.h> int main() {int n; //字符串长度 int b = 0; //用于回文判断 printf("字符串长度:");scanf("%d",&n);char a[n] ; //空格' '也是字符,对应的ASCII 为32 int len = sizeof(a) / sizeof(a[0]);printf("输入字符串:");scanf("%s",a);printf("\n");printf("字符串为:");for (int i = 0; i <len; i++){if(a[0+i] == a[len-1-i]) b++;}printf("\n");if(b++ == len) printf("%s是回文",a);else printf("%s不是回文",a);return 0;}