首页
动态
归档
Github
留言
工具箱
更多
邻居
壁纸
音乐
Search
1
欢迎访问我的日志空间
8,244 阅读
2
C语言读写程序文件-学习三十二
742 阅读
3
WEB音乐播放器源码
712 阅读
4
Typecho - Joe主题魔改版(持续更新)
660 阅读
5
Typecho-1.1/17.10.30-定制版源码
639 阅读
学习笔记
源码库
BUG
第九艺术
登录
Search
标签搜索
学习笔记
C语言
typecho
Java
扫雷
源码
PHP
插件
网站源码
音乐播放器
模板
git
github
bug
XG.孤梦
累计撰写
50
篇文章
累计收到
44
条评论
首页
栏目
学习笔记
源码库
BUG
第九艺术
页面
动态
归档
Github
留言
工具箱
邻居
壁纸
音乐
搜索到
39
篇与
的结果
2022-02-13
C语言数组作为函数参数-学习十九
数组元素作函数实参数组元素就是变量,它与普通变量并无区别。因此它作为函数实参使用与普通变量是完全相同的,在发生函数调用时,把作为实参的数组元素的值传递给形参,实现单向的值传送。例子:有两个数组 a,b,各有10个元素,将它们对应地逐个相比(即 a[0] 与 b[0] 比....…)。如果a数组中的元素大于b数组中的相应元素的数目多于 b 数组中元素大于 a 数组中相应元素的数目(如:a[i]>b[i] 3次,b[i]>a[i] 5次,其中i每次为不同的值),则认为a 数组小于 b 数组,并分别统计出两个数组相应元素大于、等于、小于的次数。#include <stdio.h> main() { int large(int x, int y); int i,c,v=0,m=0,n=0,a[10],b[10]; printf("输入a数组的值:\n"); for (i = 0; i < 10; i++) { scanf_s("%d", &a[i]); } printf("输入b数组的值:\n"); for (i = 0; i < 10; i++) { scanf_s("%d", &b[i]); } for (i = 0; i < 10; i++) { c = large(a[i], b[i]); if (c == 1) { v++; } else if (c == -1) { n++; } else { m++; } } printf("a[i]大于b[i]的个数:%d\na[i]小于b[i]的个数:%d\na[i]等于b[i]的个数:%d\n", v, n, m); if (v > n) { printf("a[i]大于b[i]\n"); } else if(v < n){ printf("a[i]小于b[i]\n"); } else { printf("a[i]等于b[i]\n"); } } int large(int x,int y) { int flag; if (x > y) { flag = 1; } else if(x < y){ flag = -1; } else { flag = 0; } return (flag); } 数组名作函数参数除了可以用数组元素作为函数参数外,还可以用数组名作函数参数(包括实参和形参)。用数组元素作实参时,向形参变量传递的是数组元素的值。用数组名作函数实参时,向形参传递的是数组首元素的地址。例子:有一个一维数组score,内放10个学生成绩,求平均成绩。#include <stdio.h> main() { float score[10], aver; float average(float array[10]); printf("输入10个成绩:\n"); for (int i = 0; i < 10; i++) { scanf_s("%f", &score[i]); } aver = average(score); printf("平均成绩= %.2f\n", aver); } float average(float array[10]) { int i; float aver, sum = array[0]; for (i = 1; i < 10; i++) { sum = sum + array[i]; } aver = sum / 10; return aver; }有两个班级,分别有35名和30名学生,调用一个average函数,分别求这两个班的学生的平均成绩。需要解决怎样用同一个函数求两个不同长度的数组的平均值的问题#include <stdio.h> main() { float score1[5], score2[10], aver1, aver2; float average(float array[], int n); printf("输入A班成绩:\n"); for (int i = 0; i < 5; i++) { scanf_s("%f", &score1[i]); } printf("输入B班成绩:\n"); for (int i = 0; i < 10; i++) { scanf_s("%f", &score2[i]); } aver1 = average(score1, 5); aver2 = average(score2, 10); printf("A平均成绩= %.2f\nB平均成绩= %.2f\n", aver1, aver2); } float average(float array[], int n) { int i; float aver, sum = array[0]; for (i = 1; i < n; i++) { sum = sum + array[i]; } aver = sum / n; return aver; } 注意用数组与用数组元素名作函数参数不同点:1.用数组元素作实参时,对数组元素的处理是按普通变量对待的。用数组名作函数参数时,则要求形参和相对应的实参都必须是类型相同的数组,都必须有明确的数组说明,当形参和实参二者不一致时,即会发生错误。2.在普通变量或下标变量作函数参数时,形参变量和实参变量是由编译系统分配的两个不同的内存单元。在函数调用时发生的值传送是把实参变量的值赋予形参变量。在用数组名作函数参数时,不是进行值的传送,是把实参数组的首地址赋子形参数组名, 而不是把实参数组的每一个元素的值都赋予形参数组的各个元素。用多维数组名作函数参数多维数组元素与一维数组元素一样,可以看作一个变量,所以在调用函数时可以作为实参,进行值的传递。用多维数组名作为函数参数传递的是数组首元素的地址,要求形参是相同类型的同维数组。这里,形参是二维数组时,第二维的大小(长度)必须指明,而第一维的大小(长度)可以指明,也可以不指明。例如:int array[5][10]int array[][10]求出3X4的矩阵(二维数组)中的最大元素。#include <stdio.h> main() { int max(int array[][4]); int a[3][4] = { {1,5,7,9},{2,6,12,10},{15,16,33,4} }; printf("最大值= %d\n", max(a)); } int max(int array[][4]) { int i,j,n; n = array[0][0]; for(i=0;i<3;i++){ for (j = 0; j < 4; j++) { if (n < array[i][j]) { n = array[i][j]; } } } return n; }
2022年02月13日
319 阅读
0 评论
0 点赞
2022-02-12
C语言函数嵌套与递归调用-学习十八
函数的嵌套调用C语言的函数定义是互相平行、独立的即函数不能嵌套定义,但可以嵌套调用函数。即调用一个函数的过程中,又可以调用另一个函数。上图表示了两层嵌套的情形。其执行过程是:1.执行 main函数 中调用 a函数 的语句时,即转去执行a函数;2.在 a函数 中调用 b函数 时,又转去执行 b函数;3.在 b函数 执行完毕返回 a函数 的断点继续执行;4.在 a函数 执行完毕返回 main函数 的断点继续执行。例如:输入4个整数,找出其中最大的数。用函数的嵌套调用来处理。#include <stdio.h> main() { int n1, n2, n3, n4,max; int max4(int a, int b, int c, int d); printf("请输入4个整数:\n"); scanf_s("%d %d %d %d", &n1, &n2, &n3, &n4); max = max4(n1, n2, n3, n4); printf("max = %d\n", max); } int max4(int a, int b, int c, int d) { int max2(int a, int b); int m; m = max2(a, b); m = max2(m, c); m = max2(m, d); return m; } int max2(int a,int b){ return (a > b ? a : b); }函数的递归调用在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用。应使用if语句控制结束调用例如:a1 = 10, a2 = a1 +2, a3 = a2+2,以此类推求a36的值。#include <stdio.h> main() { int add(int a); printf("a36 = %d\n", add(36)); } int add(int a) { int sum; if (a == 1) { sum = 10; } else { sum = add(a-1) + 2; } return sum; }例子用递归方法求n!#include <stdio.h> main() { int n; int rec(int a); printf("输入n的值:"); scanf_s("%d", &n); printf("%d的阶乘 = %d\n",n, rec(n)); } int rec(int a) { int x; if (a == 1) { x = 1; } else { x = rec(a-1) * a; } return x; } 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少个桃子。#include <stdio.h> main() { int n; int toatal(int a); n = toatal(1); printf("总数 = %d\n",n); } int toatal(int day) { int x; if (day == 10) { x = 1 ; } else { x = (toatal(day + 1) + 1) * 2 ; // 反向思维理解,程序必须有确定值才能进行计算 } //所以程序会先从有确定值的第10天开始从里向外计算 return x; }汉诺(Hanoi)塔问题,古代某寺庙中有一个梵塔,塔内有3个座A、B和C,座A上放着64个大小不等的盘,其中大盘在下,小盘在上。有一个和尚想把这64 个盘从座A搬到座C,但一次只能搬一个盘,搬动的盘只允许放在其他两个座上,且大盘不能压在小盘上,移动过程可以使用B座。编写函数输出移动盘子的步骤。解题思路:1.将A上n-1个盘借助C座先移到B座上;2.把A座上剩下的一个盘移到c座上;3.将n-1个盘从B座借助于A座移到C座上。关键步骤图解#include <stdio.h> main() { int m; void hanoi(int n, char A, char B, char C); printf("输入盘子的数量:\n"); scanf_s("%d", &m); hanoi(m, 'A', 'B', 'C'); } void hanoi(int n,char A,char B, char C) { void move(char x,char y); if (n == 1) { move(A, C); } else { hanoi(n - 1, A, C, B); move(A, C); hanoi(n - 1, B, A, C); } } void move(char x, char y) { printf("%c ==> %c\n", x, y); }
2022年02月12日
253 阅读
0 评论
0 点赞
2022-02-11
C语言函数的调用-学习十七
函数调用的形式一般形式为: 函数名 (实参表列)如果是调用无参函数,则“实参表列”可以没有,但括号不能省略。max();如果实参表列包含多个实参,则各参数间用逗号隔开。max(a,b);按函数调用在程序中出现的形式和位置来分,可以有以下3种函数调用方式:1.函数调用语句把函数调用单独作为一个语句。如: printf_star();这时不要求函数带回值,只要求函数完成一定的操作。2.函数表达式函数调用出现在另一个表达式中。如:c=max(a,b);这时要求函数带回一个确定的值。3.函数参数函数调用作为另一函数调用时的实参。如:m=max(a,max(b,c));其中 max(b,c) 是一次函数调用,它的值作为max另一次调用的实参。函数调用时的数据传递在调用有参函数时,主调函数和被调用函数之间有数据传递关系。定义函数时函数名后面的变量名称为“形式参数”(简称“形参”)。主调函数中调用一个函数时,函数名后面参数称为“实际参数”(简称“实参”)。在调用函数过程中,系统会把实参的值传递给被调用函数的形参。该值在函数调用期间有效,可以参加被调函数中的运算。函数调用的过程在定义函数中指定的形参,在未出现函数调用时,它们并不占内存中的存储单元。在发生函数调用时,函数的形参被临时分配内存单元。实参与形参的类型应相同或赋值兼容。C语言规定,实参变量对形参变量的数据传递是“值传递”,即单向传递,只由实参传给形参,而不能由形参传回来给实参。在内存中,实参单元与形参单元是不同的单元。函数的返回值通常,希望通过函数调用使主调函数能得到一个确定的值,这就是函数值(函数的返回值)。函数的返回值是通过函数中的return语句获得的。一个函数中可以有一个以上的return语句,执行到哪一个return语句,哪一个就起作用return语句一般形式为:return 表达式; 或者为:return (表达式);例如:return(z); 或者:return Z;函数调用的过程图如果被调用函数中没有return语句,说明程序员没有希望得到函数值。但实际上,函数并不是不带回值,而只是不带回有用的值,带回的是一个不确定的值。为了明确表示“不带回值”,可以用“void”定义函数“无类型”(或称 “空类型”),此时函数中不得有return语句。例如:void printstar(){ ... }函数值的类型和函数定义中函数的类型应保持一致。如果函数值的类型和return语句中表达式的值不一致,以函数类型为准。凡不加类型说明的函数,自动按整型处理。被调用函数的声明和函数原型声明在一个函数中调用另一个函数需要具备如下条件:1.被调用函数必须是已经定义的函数(是库函数或用户自己定义的函数)。2.如果使用库函数,应该在本文件开头加相应的#include指令。3.如果使用自己定义的函数,而该函数的位置在调用它的函数后面,应该在前面声明。注意:“定义”是对函数功能的确立,包括指定函数名,函数类型、形参及类型,语句等,是一个完整、独立的函数单位。“声明”是把函数的名字、函数类型和形参的类型、个数以及顺序通知编译系统,以便在调用该函数时系统按此进打对照检查。函数原型声明(函数声明是使用函数原型来声明的)。函数类型 函数名(参数类型1 参数名1,数类型2 参数名2...);函数类型 函数名(参数类型1,参数类型2......);例如:float add(float x, float y);float add(float, float);如果在函数调用之前,没有对函数作说明,则编译系统会把第一次遇到的该函数形式 (函数定义或函数调用)作为函数的声明,并将函数类型默认为int型。如果被调用的函数类型为整型,则允许在调用函数前不做声明。如果被调用函数的定义出现在主调用函数之前,可不必声明。例如#include <stdio.h> // 主调用函数之前定义函数 float add(float x, float y) { float z; z = x + y; return z; } main() { float a, b, c; printf("请输入两个实数:\n"); scanf_s("%f %f", &a, &b); c = add(a, b); printf("结果:%f\n", c); }如果已经在文件的开头( 所有函数之前),对本文中所调用的函数进行了声明,则在各函数中不必对其所调用的函数再作声明。例如#include <stdio.h> float add(float x, float y); //所有函数之前声明 main() { float a, b, c; printf("请输入两个实数:\n"); scanf_s("%f %f", &a, &b); c = add(a, b); printf("结果:%f\n", c); } float add(float x, float y) { float z; z = x + y; return z; }例子将在max函数中定义的变量 z 改为float型。函数返回值的类型与指定的函数类型不同,分析其处理方法。#include <stdio.h> main() { int max(float x, float y); float a,b; int c; printf("请输入两个实数:\n"); scanf_s("%f %f", &a, &b); c = max(a, b); printf("结果:%d\n", c); } int max(float x, float y) { float z; if (x > y) { z = x; } else { z = y; } return z; }因为函数类型为 int ,float转int精度问题导致数据丢失,结果出现了偏差输入两个实数,用一个函数求出它们之和。#include <stdio.h> main() { float add(float x, float y); float a, b,c; printf("请输入两个实数:\n"); scanf_s("%f %f", &a, &b); c = add(a, b); printf("结果:%f\n",c ); } float add(float x, float y) { float z; z = x + y; return z; }编写判断一个数为素数的函数,输出100到200之间的素数。#include <stdio.h> #include <math.h> main() { int leaps(int x); int m, n = 0; for (m = 101; m <200; m=m+2) //偶数不可能是素数 if (leaps(m) == 1) { n++; printf("%d, ", m); if (n % 5 == 0) { printf("\n"); } } } int leaps(int x) { int i, j, leap; j = sqrt(x); //减少计算次数 for (i = 2; i <= j; i++) if (x % i == 0) { leap = 0; break; } else { leap = 1; } return leap; }
2022年02月11日
303 阅读
0 评论
0 点赞
2022-02-10
C语言函数的定义与调用-学习十六
为什么要用函数?问题如果程序的功能比较多,规模比较大把所有代码都写在main函数中, 就会使主函数变得复杂、头绪不清,阅读和维护变得困难。有时程序中要多次实现某一功能,就要多次重复编写实现此功能的程序代码,这使程序冗长,不精炼。解决的方法:用模块化程序设计的思路采里“组装”的办法简化程序设计的过程。事先编好一批实现各种不同功能的函数。把它们保存在函数库中;需要时直接调用。在设计一个较大的程序时,往往把它分为若干个程序模块,每一个模块包括一个或多个函数,每个函数实现一个特定的功能。C程序可由一个主函数和若干个其他函数构成。函数还有很多叫法,比如方法、子例程或程序,等等。例子直接写在主函数#include <stdio.h> int main() { printf("************\n"); printf("Hello Word!\n"); printf("************\n"); return 0; }调用函数#include <stdio.h> int main() { void printf_star(); //声明函数 void printf_text(); //声明函数 printf_star(); //函数调用 printf_text(); printf_star(); return 0; } void printf_star() { printf("************\n"); } void printf_text() { printf("Hello Word!\n"); }说明1.一个C程序由一个或多个程序模块组成,每一个程序模块作为一个源程序文件。对较大的程序,一般不希望把所有内容全放在一个文件中,而是将它们分别放在若干个源文件中,由若干个源程序文件组成一个C程序。这样便于分别编写、分别编译,提高调试效率。一个源程序文件可以为多个C程序共用。2.一个源程序文件由一个或多个函数以及其他有关内容(如预处理指令、数据声明与定义等)组成。一个源程序文件是一个编译单位,在程序编译时是以源程序文件为单位进行编译的,而不是以函数为单位进行编译的。3.C程序的执行是从main函数开始的,如果在main函数中调用其他函数,在调用后流程返回到main函数,在main函数中结束整个程序的运行。4.所有函数都是平行的,即在定义函数时是分别进行的,是互相独立的。一个函数并不从属于另一个函数,即函数不能嵌套定义。函数间可以互相调用,但不能调用main函数。main函数是被操作系统调用的5.从用户使用的角度看,函数有两种。库函数。它是由系统提供的,用户不必自己定义而直接使用它们。 应该说明,不同的C语言编译系统提供的库函数的数量和功能会有一些不同,当然许多基本的函数是共同的。用户自己定义的函数。它是用以解决用户专门需要的函数。6.从函数的形式看,函数分两类。无参函数。无参函数- -般用来执行指定的一组操作。 无参函数可以带回或不带回函数值,但一般以不带回函数值的居多。int max()有参函数。在调用函数时,主调函数在调用被调用函数时,通过叁数向被调用函数传递数据。 一般情况下,执行被调用函数时会得到一个函数值,供主调函数使用。int max(int a,int b)函数的定义无参函数的定义形式:类型标识符 函数名() { 声明部分 语句 } // 例如 void printf_star() // 函数头 { printf("************\n"); } // 函数体 有参函数定义的一般形式:类型标识符 函数名(形式参数) { 声明部分 语句 } // 例如 int max(int x, inty) // 函数头 { // 函数体 int z; // 局部变量声明 if (x > y) z = x; else z = y; return z; } 定义空函数定义空函数的一般形式为:类型标识符 函数名() { } // 例如 void star() // 函数头 { } // 函数体 先用空函数占一个位置,以后逐步扩充好处:程序结构清楚,可读性好,以后扩充新功能方便,对程序结构影响不大。例子编写一个求阶乘的函数,求5! +6! +7!#include <stdio.h> main() { int factorial(int num); printf("总和为:%d\n", factorial(5) + factorial(6) + factorial(6)); } int factorial(int num) { int sum = 1; for (int i = 1; i <= num; i++) { sum = sum * i; } return sum; }求两个整数的较大者#include <stdio.h> main() { int a,b; printf("请输入两个整数:\n"); scanf_s("%d %d", &a,&b); printf("结果:%d\n", max(a,b)); } int max(int x,int y) { int max; if (x > y) { max = x; } else { max = y; } return max; }
2022年02月10日
283 阅读
0 评论
0 点赞
2022-02-08
C语言数组的应用-学习十五
数组排序排序算法是程序设计中最基本的、最重要的算法之一。排序算法有很多,比较常用的有选择法、冒泡法、比较法和插入法等。选择排序法1.从n个数中选出最小数的下标,然后将最小数与第一个数交换位置;2.除第1个数外,其余n-1个数再按步骤1的方法选出次小的数,与第2个数交换位置;3.重复步骤n-1遍,最后构成递增序列。排序过程图例如:#include <stdio.h> #define N 10 void main() { int i,j,x,min,a[N]; printf("随机输入10整数:\n"); for (i = 0; i < N; i++) { scanf_s("%d", &a[i]); } for (i = 0; i < N - 1; i++) { min = i; for (j = i+1; j < N; j++){ if (a[j] < a[min]) { min = j; x = a[i]; a[i] = a[min]; a[min] = x; } } } for (i = 0; i < 10; i++) { printf("%d,", a[i]); } }冒泡排序法1.从第一个数开始,与相邻的数比较,若大于该数,则交换位置。2.一轮排序后,最大数换到了最下面(即小数往上冒,大数往下沉);3.除最后一个数外,其他n-1个数按步骤:的方法使次大的数下沉;4.重复步骤n-1遍,最后构成递增序列。排序过程图例子#include <stdio.h> #define N 10 main(){ int a[10]; int i,j,t; printf("输入十个整数:\n"); for (i = 0; i<N; i++) { scanf_s("%d", &a[i]); } for (j = 0;j < N-1; j++) { for (i = 0; i < N -1-j; i++) { if (a[i] > a[i + 1]) { t = a[i]; a[i] = a[i + 1]; a[i + 1] = t; } } } for (i = 0; i < N; i++) { printf("%d,", a[i]); } }数组中元素的插入和删除插入排序子过程的算法(基于有序数组):假设输入的数为 a ;找到 a 应在数组中的位置;从该位置开始将它及其后面的数依次往后移,将位置腾出;将 a 放入该位置。例如#include <stdio.h> main(){ int a[11] = {1,3,6,9,14,16,21,33,40,50}; int i,j,x=0; for (i = 0; i<10; i++) { printf("%d ", a[i]); } printf("\n"); printf("输入一个要插入的整数:"); scanf_s("%d", &x); for (i = 0; i <= 10; i++) { if (a[i] > x) { for (j = 10; j > i; j--) { a[j] = a[j - 1]; } a[i] = x; break; } } for (i = 0; i <=10; i++) { printf("%d ", a[i]); } }删除排序过程的算法:假设删除的数为num找到num应在数组中的位置;从该位置开始将它后面的数依次往前移即可例如:#include <stdio.h> main(){ int a[11] = {1,3,6,9,14,16,21,33,40,50}; int i,j,num=0; for (i = 0; i<10; i++) { printf("%d ", a[i]); } printf("\n"); printf("输入一个要删除的整数:"); scanf_s("%d", &num); for (i = 0; i < 10; i++) { if (a[i] == num) { break; } } for (j = i; j <10; j++) { a[j] = a[j + 1]; } for (i = 0; i <9; i++) { printf("%d ", a[i]); } }查找顺序查找思路:将查找关键值与数组中的元素一一比较,若相同,则查找成功,否则查找失败。例如#include <stdio.h> main() { int a[11] = { 1,3,6,9,14,16,21,33,40,50 }; int i, j, x = 0,y = 0; for (i = 0; i < 10; i++) { printf("%d ", a[i]); } printf("\n"); printf("输入一个要查找的整数:"); scanf_s("%d", &x); for (i = 0; i <11; i++) { if (a[i] == x) { y = 1; printf("找到数字%d,它的下标是%d", x, i); break; } } if (y == 0) printf("没有找到你输入的数字!"); }二分法查找(折半查找)可大大提高查找的速度,必须是有序数组。查找过程图例如#include <stdio.h> main() { int a[] = { 1,3,6,9,14,16,21,33,40,50,100}; int i,find=0, mid,x=0, top = 0,bot = 10; for (i = 0; i <=10; i++) { printf("%d ", a[i]); } printf("\n"); printf("输入一个要查找的整数:"); scanf_s("%d", &x); do { mid = (top + bot) / 2; if (x > a[mid]) top = mid + 1; if (x == a[mid]) find = 1; if (x < a[mid]) bot = mid - 1; printf("%d,%d,%d\n", top, mid, bot); } while (top <= bot && find == 0); if (find == 1) printf("找到数字%d\n", x); else printf("没有找到你输入的数字!\n"); }二维数组的鞍点一个元素在该行最大,在该列最小的话,称其为数组的鞍点思路:按行求出各行最大的元素位置某行最大的元素与该元素所在列的所有元素比较, 判断是否为最小元素,是则是鞍点,否则不是鞍点。例如:#include<stdio.h> #define N 3 #define M 3 main(){ int i, j, k, a[N][M], max, maxj, flag; printf("请输入数组:\n"); for (i = 0; i < N; i++){ for (j = 0; j < M; j++){ scanf_s("%d", &a[i][j]); } } printf("\n"); for (i = 0; i < N; i++){ max = a[i][0]; // 开始时假设a[i][0]最大 maxj = 0; //将列号0赋给maxj保存 for (j = 0; j < M; j++){ // 找出第i行中的最大数 if (a[i][j] > max){ max = a[i][j]; // 将本行最大的数放在max中 maxj = j; // 将最大数所在的列号存放在maxj中 } } flag = 1; // 先假设是鞍点,以flag为1代表 for (k = 0; k < N; k++){ if (max > a[k][maxj]){ // 将最大的数和其同列元素相比 flag = 0; // 如果max不是同列最小,表示不是鞍点 continue; } } if (flag){ printf("a[%d][%d]=%d\n", i, maxj, max); //输出鞍点的值和所在行列号 break; } } if (!flag){ printf("鞍点不存在!\n"); } }改良版(上面的算法无法判断一些特殊的数组矩阵)#include<stdio.h> #define N 3 #define M 3 main() { int i, j, k,p, a[N][M], max, maxj, flag=0; printf("请输入数组:\n"); for (i = 0; i < N; i++) { for (j = 0; j < M; j++) { scanf_s("%d", &a[i][j]); } } printf("\n"); for (i = 0; i < N; i++) { max = a[i][0]; // 开始时假设a[i][0]最大 maxj = 0; //将列号0赋给maxj保存 for (j = 0; j < M; j++) { // 找出第i行中的最大数 if (a[i][j] > max) { max = a[i][j]; // 将本行最大的数放在max中 } } for (j = 0; j < M; j++) { // 检测最大值是否是鞍点 if (a[i][j] == max) { k = j; p = 0; while (p < N && max <= a[p][k]) { p++; } if (p == N) { printf("a[%d][%d]=%d\n", i, k, max); flag = 1; } } } if (flag == 0) { printf("鞍点不存在!\n"); } } }数组注意问题用scanf函数向字符型数组输入数据char a[20];scanf("%s",&a); 错误 scanf(%s",a); 正确用scanf函数向数值型数组输入数据int a[20];scanf("%d",a); 错误 scanf(%d",&a); 正确引用数组元素要用[]。int i, a(10); for (i=0;i<10;i++) scanf(%d",&a(i)); 错误int i, a(10); for (i=0;i<10;i++) scanf(%d",&a[i])); 正确数组元素可使用的最大下标int i,a[10]={1}; for(i=1;i<=10;i++) printf(%d",a[i]); 错误int i,a[10]={1}; for(i=1;i<=9;i++) printf(%d",a[i]); 或者 for(i=1;i<10;i++) printf(%d",a[i]); 正确二维数据或多维数组的定义和引用int a[4,5]; a[1+2,2+2]=5; 错误int[10]; 正确误以为数组名代表数组全部元素int a[4]={1,3,5,7},b[4]; b=a; char str[4]; str="computer"; 错误混淆字符字符串的表示形式char sex; sex="M"; 错误char sex; sex= ' M '; 正确
2022年02月08日
302 阅读
0 评论
0 点赞
1
...
4
5
6
...
8