习题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’作为结尾。所以在跳出循环时只需要判断是否遇到这个标记就可以。