-
三目运算符
类似于if吧
查看全部 -
Hallo World查看全部
-
第23行:if括号内(!=1)的判断是为了避免正对角线与反对角线相交的元素重复计算
查看全部 -
第3行:void say(char string[]) //整个数组做为函数参数
第5行:printf("%s\n",string); //打印字符串
say(string); //调用say函数输出字符串
注意区别
查看全部 -
第12行使用break的原因:需要用break语句中断后跳出for循环,否则,仍然会继续比较下去,后面程序语句会对index赋值-1;这个代码必须有break。在没有break的情况下,循环的时候假如说在第三个arr[i]=value,然后index=i,这个时候i=3,index也就是3,接着下一个循环i=4的时候,arr[4]不等于value,进入else,index又变成了-1,直到i=5,循环结束,返回-1.所以说break这个作用是当arr[i]等于value时,让index=i,接着跳出循环,返回index,得到正确结果。
考虑情况更加完整的代码;
//教程里的解决方案不够完整,当数组中与value的值相等的元素存在多个时,程序总是会输出其中的第一个元素的下标,其后仍有与value相同的值则直接跳过,不会输出。 #include <stdio.h> int getIndex(int arr[5],int value) { int i; int temp=0; //用来承载第二个for循环中arr[i] != value的判断次数。 for(i=0;i<5;i++) { if(arr[i]==value) { printf("存在,下标为"); break; //当arr[i] == value的结果时,证明value的值能在arr数组中找到,立即退出循环。 } } for(i=0;i<5;i++) { if(arr[i]==value) { printf(" ··· %d",i); //输出当arr[i] == value时i的数字。即arr数组中的某个元素等于value时,该元素的下标。(这个循环与上面的for循环分开的原因:为了可以输出多个符合要求的下标) } else { temp++; //累加arr[i] != value的判断次数。当temp==arr数组的总长度时,代表arr数组中没有一个元素==value,即value在arr数组中不存在。 } } if(temp==5) { printf("不存在。\n"); } else { printf("。"); } } int main() { int arr[5]={3,12,9,8,6}; //可更改此数组的元素,观察运行结果有没有错误,即使相同的元素也能正确输出结果。 int value=8; //可更改此数组的元素,观察运行结果有没有错误。 printf("%d在数组中",value);//没有”\n“与”getIndex“函数中的输出语句可以打印在同一行,形成一句话的效果。(”getIndex“函数中的输出语句中无“\n”原因同理。 getIndex(arr,value); //传递arr[]以及value的参数。 return 0; }
查看全部 -
细节注意:1.相邻前后两数两两比较:若元素个数为n,则最大的下标为n-1;因为是相邻每两个数依次比较(两个数为一组),所以比较涉及的循环(14到26行)中的外层循环(14行)的索引(下标j)从n-2开始;2.要设置两层循环,原因:例如数组中最大的数是第一个数,第二大的数是第二个数,仅一次内循环只能将第一个数(最大的数)放在最后面,无法使第二个数(第二大的数)放在倒数第二个数的位置。所以要有两层循环。
学习(7到13行)输出如题改格式的方法。
查看全部 -
设置index(即第十二行代码)的作用是记录arr1中较(最)大元素的索引
记住9到14行比较(出)并记录数组中最大元素的方法;
第23行和第2行传入整个数组(arr1)无“[ ]”;
查看全部 -
C语言的数组长度一经声明,长度就是固定,无法改变;
最好避免出现数组越界访问,循环变量不要超出数组的长度;
由于C语言是没有检查数组长度改变或者数组越界的这个机制,可能会在编辑器中编译并通过,但是结果就不能肯定了,因此还是不要越界或者改变数组的长度。
查看全部 -
初始化数组时,数组内元素的个数小于等于(不能大于)声明的数组长度(否则越界);
在声明数组后没有进行初始化的时候,静态(static)和外部(extern)类型的数组元素初始化元素为0,自动(auto)类型的数组的元素初始化值不确定。
查看全部 -
为什么要删去第二行:将hello.c中的#include "test.c",这一行删去,在函数printLine之前加上extern(事实上可省略)使其成为外部函数,使其能被test.c调用从而在test.c中完成函数say,函数say默认为外部函数,能被(删去#include "test.c"的)hello.c调用,从而完成。(hello.c是我们现在正在完成(作业)的函数)
查看全部 -
用auto定义的变量为自动变量(动态存储类别:是指在程序运行期间根据需要进行动态的分配存储空间的方式。动态存储区中存放的变量是根据程序运行的需要而建立和释放的);
用static修饰的为静态变量(静态存储类别),注:静态局部变量只赋初值一次,如果在定义局部变量时不赋初值的话,则对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符(对字符变量);
registe:将局部变量得值放在CPU中的寄存器中,叫做“寄存器变量”。局部静态变量不能定义为寄存器变量;
用extern声明的的变量是外部变量,外部变量的意义是某函数可以调用在该函数之后定义的变量。
查看全部 -
int x=77; 标为x(1),它是整个程序的变量,(整个程序的)全局变量
int x=10; 标为x(2),这是函数main() 中的全局变量,也是整个程序的局部变量
int x=100; 标为x(3),这是if语句中的全局变量,这也是整个程序的局部变量,但级别比x(2) 还低,被引用的范围更小。若写成 x=100;这就是给x(2)进行赋值,也就是说x(2)的值被改成100了,main()函数中使用x的位置,其值都是100
在main()函数中,运行到
fn1();
时,程序暂时跳出main()函数,去执行自定义函数fn1(),此时已经跳出了main()函数的范围,故x为x(1)的内容。
整个完整的程序中,虽然定义的变量都名为x,但对于计算机而言,是三个不同的变量,并且使用的范围也是不一样的。
int 是告诉计算机定义新变量的标识,同时确定数据类型,类似的还有char,short,long,float,double等。
查看全部 -
这里都改变了a的值
查看全部 -
强制类型转换是通过定义类型转换运算来实现的。其一般形式为:
(数据类型) (表达式)
其作用是把表达式的运算结果强制转换成类型说明符所表示的类型,例如:
查看全部 -
输出语句的
查看全部
举报