本次作业所属课程 | C语言程序设计|| |
本次作业要求 | 不能晚交,迟交,缺交,抄袭 |
我在这个课程的目标是 | 我希望通过学习c语言的知识,实现编写一些小程序 |
本次学习在哪些具体方面帮组我实现目标 | 这个作业让我知道了选择排序和冒泡排序,二维数组的定义和使用,让我对数组知识的了解更加深入了 |
参考文献 | 排序算法:冒泡排序 |
基础作业
题目1:填空题:
输入一个正整数 n (1≤n≤10)和n 阶方阵a的元素,如果方阵a中的所有元素都沿主对角线对称,输出“Yes”, 否则,输出“No”。主对角线为从矩阵的左上角至右下角的连线,方阵a中的所有元素都沿主对角线对称指对所有i, k,a[i][k]和a[k][i]相等。输入输出示例如下:
输入:
3
1 2 3
4 5 6
7 8 9
输出:
No
实验代码
#include <stdio.h> int main(void) { int found, i, k, n; int a[10][10]; scanf ("%d", &n); for (i = 0; i < n; i++) for (k = 0; k < n; k++) scanf("%d", &a[i][k]); found = 1; for (i = 0; i < n; i++){ for (k = 0; k < i; k++){ if ( a[i][k]!=a[k][i] (3分)) { found==0 ; break; } } if ( found==0 ){ break; } } if (found != 0){ printf("Yes "); } else{ printf("No "); } return 0; }
题目2:
一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。
本题要求编写程序,求一个给定的n阶方阵的鞍点。
输入格式:
输入第一行给出一个正整数n(1≤n≤6)。随后n行,每行给出n个整数,其间以空格分隔。
输出格式:
输出在一行中按照“行下标 列下标”(下标从0开始)的格式输出鞍点的位置。如果鞍点不存在,则输出“NONE”。题目保证给出的矩阵至多存在一个鞍点。
输入样例1:
4
1 7 4 1
4 8 3 6
1 6 1 2
0 7 8 9
输出样例1:
2 1
输入样例2:
2
1 7
4 1
输出样例2:
NONE
实验代码
#include <stdio.h> int main() { int a[6][6], n,i,j, x=0,y=0,flag=1,index=0; scanf("%d",&n); for(i=0; i<n; i++) for(j=0; j<n; j++) { scanf("%d",&a[i][j]); } { for(i=0; i<n; i++) { y=i; for(index=0; index<n; index++) //找行最大值 { if(a[i][x]<=a[i][index])//数组元素之间比较,若比a[i][x]大,则将数组列标赋给x { x=index; } } for(j=0; j<n; j++)//判断是否为列最小值 { if(a[y][x]>a[j][x])//若此行最大值不是列所在最小值,把小的行标赋给y { y=j; break; } } if(i==y)//行最大且列最小,判断条件行标不改变 { flag=0; break; } } if(flag==0) printf("%d %d",i,x); else printf("NONE"); } return 0; }
设计思路
错误截图
我遇到的问题:输出行正确后不知道怎么输出列最小。解决方法:问助教
运行截图
题目2:
本题要求将给定的n个整数从大到小排序后输出。
输入格式:
输入第一行给出一个不超过10的正整数n。第二行给出n个整数,其间以空格分隔。
输出格式:
在一行中输出从大到小有序的数列,相邻数字间有一个空格,行末不得有多余空格。
输入样例:
4
5 1 7 6
输出样例:
7 6 5 1
实验代码
#include<stdio.h> int main() { int i, index, s, n, temp,a[10]; scanf("%d", &n); for(i=0; i<n; i++) scanf("%d", &a[i]); for(s=0; s<n-1; s++){ index=s; for(i=s+1; i<n; i++) if(a[i]>a[index]) //从大到小排序 index=i; temp=a[index]; a[index]=a[s]; a[s]=temp; } printf("%d", a[0]); for(i=1; i<n; i++) printf(" %d", a[i]); return 0; }
设计思路
错误截图
遇到的问题:编译错误,解决方法:和大家一样
运行截图
输入1个正整数n(1<=n<=10),然后输入n个整数并存放在数组中,将这n个整数从大到小排序后输出,相邻数字间有一个空格,行末不得有多余空格。
输入格式:
输入第一行给出一个不超过10的正整数n。第二行给出n个整数,其间以空格分隔。
输出格式:
在一行中输出从大到小有序的数列,相邻数字间有一个空格,行末不得有多余空格。
输入样例:
4
75 71 77 76
输出样例:
77 76 75 71
实验代码
#include<stdio.h> int main(void) { int i,n,j,index; scanf("%d",&n); int a[n]; for(i=0;i<n;i++){ scanf("%d",&a[i]); } for(i=1;i<n;i++) for(j=0;j<n-i;j++) if(a[j]<a[j+1]){ index=a[j+1]; a[j+1]=a[j]; a[j]=index; } printf("%d",a[0]); for(i=1;i<n;i++) printf(" %d",a[i]); return 0; }
设计思路:
错误截图
没问题吧,我的结对编程的队友太强了
运行截图
学习进度条:
选择排序法 |
大约一小时 |
找鞍点 |
两小时三十分钟 |
冒泡排序法 |
三十分钟 |
总计 |
四小时 |
我的感悟:自己太菜了,但是比较幸 运,继续努力吧
折线图