PTA 习题7-5 习题7-6

习题7-5
题目要求:
一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。本题要求编写程序,求一个给定的n阶方阵的鞍点。
代码如下:

#include<stdio.h>int main(void){int n,i,j,k,max,flag=1;  //0为没有,1为有 int h,l,count=0;scanf("%d",&n);int a[n][n];for(i=0;i<n;i++){for(j=0;j<n;j++){scanf("%d",&a[i][j]);}}for(i=0;i<n;i++){   //i检查行最大 flag=1;max=0;for(j=0;j<n;j++){if(a[i][j]>=max){  //注意是大于等于。max=a[i][j];h=i;l=j;}} for(k=0;k<n;k++){if(a[k][l]<max){flag=0;  //在列上有比最大值小的。 }}//printf("flag=%d\n",flag);if(flag==1){printf("%d %d\n",h,l);count++;}}if(count==0){printf("NONE");}return 0;
} 

本题思路:
1、先依题意输入二维数组。for循环查找每行最大元素并做好标记。在第一层循环内部继续加入for循环判断是否在列上为最小值。
2、输出时使用了一个count来输出NONE,count=0则不存在鞍点。

习题7-6
题目要求:
英文辅音字母是除A、E、I、O、U以外的字母。本题要求编写程序,统计给定字符串中大写辅音字母的个数。
代码如下:

#include<stdio.h>int main(void){char c[80];int count=0,i=0,j;while((c[i]=getchar())!='\n'){i++;}for(j=0;c[j]!='\0';j++){if(c[j]>='A'&&c[j]<='Z'&&c[j]!='A'&&c[j]!='E'&&c[j]!='I'&&c[j]!='O'&&c[j]!='U'){count++;}}printf("%d",count);return 0;
} 

本题思路:
1、最开始用的是将除A,E,I,O,U以外的大写字母存入另一个字符串中,再拿来一一与原字符串比对,但是一直出问题。后边改成了现在这样,用单层for循环加if语句判断的形式。
2、另一个比较重要的点是字符串自行会有一个’\0’作为结尾。所以在跳出循环时只需要判断是否遇到这个标记就可以。