C语言如何实现一个一维数组的输入输出?

代码有逻辑问题。

最大值位置找不对。

时间:2 02 3 -1 0-2 7 地点:不确定 代码问题:第二层循环没更新maxxr。

直接改。

int main(void) { int a[1 0]={8 7 6 ,6 7 5 ,8 9 6 ,1 01 ,3 01 ,4 01 ,9 8 0,4 3 1 ,4 5 1 ,7 7 7 },k; fun(a,1 0,&k); printf("%d,%d",k,a[k]); } void fun(int a[],int n,int k) { int i,maxxr,j; maxxr=a[0]; for(i=0;i

问:帮忙写一个c语言程序:使用一维数组和scanf去读输入的数字,一直到输入的数字有相等的,并打印

说白了,这段代码就是用暴力方式找数组里第一个重复的数。
不过它有个致命缺陷,效率低到爆。

展开讲,关键点有三个: 1 . 用双层循环暴力比对,去年我们跑那个项目,1 0000量级的数据,直接卡到怀疑人生,CPU飙到9 0%以上 2 . scanf直接读入数组,没考虑边界,当输入超过1 0000个数字时,程序会乱读内存,说实话挺坑的 3 . system("pause")是Windows才有效的,Linux系统会直接崩,跨平台写法要死
我一开始也以为用break跳出内层循环就完事了,后来发现不对,这个j!=i的判断写得很聪明,但整体效率根本没法看。
另外有个细节挺关键的,如果输入的数字都不同,它居然会卡死在死循环里,没有退出机制。

等等,还有个事,它居然没有数组越界检查,用ida分析过,内存访问完全没保护。
建议改成用哈希表或者排序后单层遍历,至少能从秒级降到毫秒级。

最后提醒个坑:用scanf读大量数据时,最好加条件判断,比如scanf("%d", &a[i]) == 1 ,不然空行输入会直接导致scanf返回EOF,程序直接挂。

如何在C语言中输入一维数组?

昨天晚上,我在宿舍里对着电脑琢磨C语言,手指头在键盘上敲得飞快。
突然,屏幕上弹出一个对话框,提示输入五个数字。
我愣了一下,想起之前看的那个例子,说用指针操作数组挺方便的。

打开DEVC++,新建一个文件,一行行敲代码。
先定义一个整型数组a[5 ],然后是scanf语句,逐个输入每个元素的地址。
这时候,指针的作用就显现出来了,它像个小向导,带着我访问每个数。
输入完,再算出平均值,一行行注释都写好了,心里还挺得意。

编译运行,果然,输入面板跳了出来。
我随手敲了几个数字:1 2 , 4 5 , 2 3 , 8 9 , 5 6 ,回车。
屏幕上立刻显示出平均值:4 1 .6 我心里暗自点头,果然指针挺管用。

等等,还有个事,我突然想到,如果输入的不是整数,比如字母或者符号呢?程序会不会崩溃?得试试看。