① 簡單c語言題。求鞍點下面的程序哪裡錯了順便求高手詳解一下flog的用法菜鳥拜謝。
問題有很多啊。。。你需要理解以下內容
1. 變數i,j的定義,需要好好理解變數的作用范圍
2. = 和 == 的區別
3. 了解if語句後若不加花括弧,該模塊的有效區域
你說的flog其實就是flag,用它來判斷當前二維數組是否有鞍點,有的話置1,就不用進printf("無鞍點\n");的if模塊了
以下是正確的程序
#include<stdio.h>
#define M 4
#define N 3
int main()
{
int a[M][N],r,c;
int flog,max,min;
for(int i=0;i<M;i++)
{
for(int j=0;j<N;j++)
{
scanf("%d",&a[i][j]);
}
}
flog=0;
for(int i=0;i<M;i++)
{
max=a[i][0];
r=i;
c=0;
for(int j=1;j<N;j++)
{
if(a[i][j]>max)
{
max=a[i][j];
r=i;
c=j;
}
}
min=a[r][c];
for(int i=0;i<M;i++)
{
if(a[i][c]<min)
{
min=a[i][c];
}
}
if(max==min)
{
printf("%d行%d列是鞍點%d\n",r,c,max);
flog=1;
}
}
if(flog=0)
printf("無鞍點\n");
system("pause");
return 0;
}
② c語言編程 求鞍點
#include "stdio.h"
int main( )
{ int ri,repeat;
int flag,i,j,k,row,col,n,a[6][6];
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++){
scanf("%d",&n);
for(i=0; i<n; i++)
for(j=0; j<n; j++)
scanf("%d",&a[i][j]);
/*開始編程*/
for(int i=0;i<n;i++)
{
int rowmax=a[i][0];
for(j=0;j<n;j++)
if(rowmax<a[i][j])
{
rowmax=a[i][j];//得到行上最大的數字
row=i;
col=j;
}
for(j=0;j<n;j++)
if(rowmax>a[row][j]) //判斷找到的行最大的數字是否小於所在列數字,如果不是,就跳出列循環,繼續判斷方陣的下一行
break;
else
{
continue;//判斷找到的行最大的數字是否小於所在列數字,如果是,就繼續下次循環
}
if(j==n)//判斷列上是否最小,如果是,就設置flag,並跳出循環
{
flag=true;
break;
}
}
/*結束編程*/
if(flag)
printf("a[%d][%d]=%d\n", row, col,a[row][col]);
else
printf("NO\n");
}
}
③ C語言尋找矩陣的鞍點
1、鞍點為矩陣元素所在行的最大值,以及所在列的最小值。
④ 求解一道求鞍點的C語言演算法以及源程序,求大神啊,盡量簡便一點
#include<stdio.h>
#include<stdlib.h>
intfindSaddle(int**p,intm,intn,int*x,int*y){
inti,j,k,max,jmax,flag,f=1;
for(i=0;i<m;++i){
max=p[i][0];
jmax=0;
for(j=1;j<n;++j){//找出i行最大的
if(max<p[i][j]){
max=p[i][j];
jmax=j;//且記錄所在的列坐標
}
}
flag=1;//預置標志
for(k=0;k<m&&flag;++k){//判斷max是否為所在列最小的
if(p[k][jmax]<max)//不是
flag=0;//則清標志
}
if(flag){
*x=i;
*y=jmax;
return1;
}
}
return0;
}
intmain(){
int**arr,x,y,i,j,m,n;
printf("行數列數:");
while(scanf("%d%d",&m,&n)==2){
printf("輸入%dX%d個整數 ",m,n);
arr=(int**)malloc(m*sizeof(int*));
for(i=0;i<m;++i){
arr[i]=(int*)malloc(n*sizeof(int));
for(j=0;j<n;++j)
scanf("%d",&arr[i][j]);
}
if(findSaddle(arr,m,n,&x,&y))
printf("鞍點:a[%d][%d]=%d ",x,y,arr[x][y]);
elseprintf("鞍點不存在! ");
for(i=0;i<m;++i)free(arr[i]);
free(arr);
printf("行數列數(qtoquit):");
}
return0;
}
⑤ c語言 求二維數組的鞍點
#include<stdio.h>
#define N 3
#define M 4
int main()
{
int i,j,k,max,min;
int array[N][M];
printf("請輸入數組元素: ");
for(i=0;i<N;i++)
{
for(j=0;j<M;j++)
scanf("%d",&array<i>[j]);
}
printf("數組有: ");
for(i=0;i<N;i++)
{
for(j=0;j<M;j++)
printf("%-5d ",array<i>[j]);
printf(" ");
}
for(i=0;i<N;i++)
{
max=array<i>[0];//用列來進行當前行來比較
for(j=0;j<M;j++)
{
if(max<array<i>[j])
max=array<i>[j];
k=j;//記錄下當前一行中最大的小標
}
min=array[0][k];
for(j=0;j<N;j++)//用行來進行列比較
{
if(min>array<i>[k])//若在該列中有更小的,則賦值與min
min=array<i>[k];
}
if(min==max)
{
printf("小標為%d,%d,鞍點為:%d",i+1,k,max);
}
}
printf("搜索結束 ");
return;
}
(5)C語言求逆鞍點擴展閱讀:
define作用
被定義為「宏」的標識符稱為「宏名」。在編譯預處理時,對程序中所有出現的「宏名」,都用宏定義中的字元串去代換,這稱為「宏代換」或「宏展開」。宏定義是由源程序中的宏定義命令完成的。宏代換是由預處理程序自動完成的。
宏定義的作用范圍僅限於當前文件,即file1.c中定義#define PI 3.14,在file2.c中該宏定義不起作用;
通過將#define PI 3.14定義在common.h中,file1.c和file2.c分別#include"common.h"的方式,該宏定義在file1.c和file2.c中都起作用。
在C或C++語言中,「宏」分為有參數和無參數兩種。
⑥ c語言求鞍點!
#include"stdafx.h"
#include<stdio.h>
voidmain(){
inti,j,a[4][5];
intk,g,min,max;
for(i=0;i<4;i++)
for(j=0;j<5;j++)
scanf("%d",&a[i][j]);
for(i=0;i<4;i++){
max=a[i][0];
for(j=1;j<5;j++)
if(a[i][j]>max)
{max=a[i][j];
k=j;
}
}
for(i=1;i<4;i++){
min=a[0][k];
if(a[i][k]<min)
min=a[i][k];
}
if(max==min)
printf("andianis%d",max);
else
printf("noandian");
}
已經編譯通過。你的錯誤是:
①if(max==min)其中為==並不是=;
②最後少一個大括弧,否則程序不完整,無法結束。
⑦ 用C語言編輯 鞍點計算
由鍵盤輸入一個3×4(3 行4 列)的矩陣,輸出矩陣中的鞍點(即在矩陣行中最大,列中最小的數)。
若沒有鞍點,輸出「NO」字樣。
[自測數據]
[鍵盤輸入]
87 90 110 98↙
70 97 210 65↙
98 45 120 30↙
[正確輸出]
110
參考程序:
#include <stdio.h>
main()
{ int i,j,k,a[3][4],max,maxj,flag;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf("%d",&a[i][j]);
for(i=0;i<3;i++)
{ max=a[i][0];
maxj=0;
for(j=0;j<4;j++)
if(a[i][j]>max)
{max=a[i][j]; maxj=j; }
flag=1;
for(k=0;k<3;k++)
if(max>a[k][maxj])
{ flag=0; break; }
if(flag)
{printf("%d",max);break;}
}
if(!flag)
printf("NO");
}
這個要不要?
⑧ c語言 求鞍點問題(運行出來的答案是錯的,不知道為什麼)
是的 這個你自己都可以證明的 你仔細想想假定 我們 已確定 一個鞍點a 了 a 是該行最大的 a是該列最小的比如說 1 2 3 X1 X2 6 X3 X4 9 3是鞍點 3是該行最大的 3是該列最小的如果還有鞍點的話 比如說X2是鞍點 X2是所在行最大的 那麼X2 還能是所在列最小的嗎?因為 如果存在第二個X2 是鞍點 那麼X2必須大於 第一個鞍點(這里是3)所在那列, X2所在那行 的交叉點的那個數(這里是6)而 6 大於 3 (鞍點)的 3是 它所在行最大的 那麼 3 所在行 與 X2所在列的交叉點的數 肯定 小於 X2 即 X2不是所在 列最小的 與假設存在多個鞍點 矛盾 所以要麼只有一個 要麼沒有
⑨ C語言編程題,找鞍點
#include<stdio.h>
int main()
{
int a[4][4]={{2,3,9,5},{6,7,8,3},{0,5,7,5},{2,1,8,3}};
int i,j,k,i0,j0,find=0;
printf("數組a: ");
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
printf("%3d",a[i][j]);
printf(" ");
}
for(i=0;i<4;i++)//窮舉所有的行
{
j0=0;
for(j=1;j<4;j++)
if(a[i][j]>a[i][j0])j0=j;//找到第i行上最大的數a[i][j0]
k=1;
for(i0=0;i0<4;i0++)//對找到的該數窮舉所有行
if(a[i0][j0]<a[i][j0])k=0;//如它不是本列上最小的數就「一票否決」
if(k)//若確認是,就輸出,並記錄已找到
{
printf("鞍點是:a[%d][%d]=%d ",i,j0,a[i][j0]);
find=1;
}
}
if(!find)//若未找到,則輸出提示信息
printf("此數組無鞍點! ");
return 0;
}