C语言程序设计实验报告实验四 使用数组的程序设计一、实验目的(1)掌握一维数组和二维数组的定义、赋值和输入输出方法2)掌握字符数组的使用3)掌握与数组有关的算法二、实验内容及步骤1、 检验并打印幻方矩阵 在下面的5*5阶幻方矩阵中,每一行、每一列、每一对角线上的元素之和都是相等的,试编写程序将这些幻方矩阵中的元素读到一个二维整型数组中,然后检验其是否为幻方矩阵,并将其按如下格式显示到屏幕上 17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9程序代码:#include void main(){ int i,j,flag=0,s1=0,s2=0; int a[5][5]={{17,24,1,8,15},{23,5,7,14,16},{4,6,13,20,22},{10,12,19,21,3},{11,18,25,2,9}}; for(i=0;i<5;i++)// 判断每行元素之和是否相等 { int s=0; for(j=0;j<5;j++) { s+=a[i][j]; } if(s!=65) { flag=0; printf("所求矩阵不是幻方矩阵\n"); break; } flag=1;//若每行元素之和都相等,将标志置为1 } for(j=0;j<5;j++)// 判断每列元素之和是否相等 { int s=0; for(i=0;i<5;i++) { s+=a[i][j]; } if(s!=65) { flag=0; printf("所求矩阵不是幻方矩阵\n"); break; } flag=1;//若每列元素之和都相等,将标志置为1 } //判断两条对角线上元素之和是否和每行列元素之和相等 for(i=0;i<5;i++) { s1+=a[i++][i++]; } if(s1!=65) flag=0; else flag=1; for(i=0;i<5;i++) { s2+=a[i][4-i]; } if(s2!=65) flag=0; else flag=1; if(flag==1) { printf("所求矩阵是幻方矩阵\n"); } else { printf("所求矩阵不是幻方矩阵\n"); } //输入幻方矩阵 for(i=0;i<5;i++) { for(j=0;j<5;j++) { printf("%-3d",a[i][j]); } printf("\n"); }}程序运行结果:所求矩阵是幻方矩阵17 24 1 8 1523 5 7 14 164 6 13 20 2210 12 19 21 311 18 25 2 92、完成以下程序,并进行调试某班期末考试科目为数学、英语和计算机,有最多不超过30人参加考试,考试后要求:1)计算每个学生的总分和平均分;2)按总分成绩由高到低排出成绩的名次;3)打印出名次表,表格内包括学生学号、各科分数、总分和平均分;4)任意输入一个学号,能够查找出该学生在班级中的排名及其考试分数。
提示】:用二维数组score存放每个学生各门课程的成绩,用一维数组num存放每个学生的学号,用一维数组sum存放每个学生的总分,用一维数组aver存放每个学生的平均分程序代码:#include #include main(){ float score[3][3]={{85.5,78,85},{75.5,65,63},{80,90,83.5}},sum[3]={0.0},aver[3]={0.0},temp; int num[3]={1,2,3},i,j,t,student_num; printf("学生成绩(按学号从小到大顺序排列)\n"); for(i=0;i<3;i++) { for(j=0;j<3;j++) { sum[i]+=score[i][j]; printf("%8.1f",score[i][j]); } aver[i]=sum[i]/3.0; printf("\n"); } printf("总分和平均分分别为(按学号从小到大顺序排列)\n"); for(i=0;i<3;i++) { printf("%3.1f,%3.1f\n",sum[i],aver[i]); } //成绩总分降序排序 for(i=0;i<2;i++) { for(j=0;j<2-i;j++) { if(sum[j]
注意不能使用字符串比较函数strcmp())程序代码:#includeint str_compare(char[],char[]);//函数声明语句main(){ char str1[80],str2[80]; printf("请输入两个字符串:\n"); gets(str1); gets(str2); printf("您输入的字符串分别是:\n"); puts(str1); puts(str2); if((str_compare(str1,str2))>0) printf("%s大于%s\n",str1,str2); else if((str_compare(str1,str2))==0) printf("%s等于%s\n",str1,str2); else printf("%s小于%s\n",str1,str2);}int str_compare(char str1[],char str2[]){ int i=0,j=0,result=0;//置result起始值为0 while(str1[i]||str2[j])//当两个字符有一个不为空时,循环继续 { if(str1[i]>str2[j]) { result=1; break; } else if(str1[i]