关于C语言学习的问题与收获(2)

1随机取10个数,输出最小值
代码如下:
在这里插入图片描述
需要关注的:
a[i]=(int)(rand()%90+10);
rand()函数用于产生随机数,因此要使用它,则必须定义头文件#include<stdlib.h>,“()”中的时筛选条件,“%90+10”意为对90取余得到0-89的数据,再+10,生成10-99的随机数,(int)强制生成的随机数为整型数据。
在这里插入图片描述
筛选出的数据再通过for循环体输出,再定义最小值为第一个数据,即a[0],然后再用冒泡排序法筛选出真正的最小值再输出。

2定义一个数组 ,输入一个数x,若再数组中有这个数,则输出其下标,若无,则输出-1。
代码如下:
在这里插入图片描述
需要关注的:
在这个代码中,特别需要注意的是“n”,即x在数组中的位置,最好赋给其一个负值,并不是因为正值不行,而是因为如果是负值的话,在寻找目标数据时,如果没有找到,则输出所定义的负数,如果定义的值为正值,那么可能就会导致,没有找到数据却给了一个数据的 角标这样的情况发生。
例如:
把n=-1改成n=3
在这里插入图片描述
在数组中并没有“5”这个数据,但是最后却输出了角标3,角标3上的位置是1,或许在这个简易的代码中很容易找出错误,但放在一群代码中,则可能导致程序错误,所以务必重视。

在for循环体中,找到x的位置后,可以用i+1来表示其角标,因为在for循环中,直到找到a[i]==x,就输出角标。a[5]中的五个数据在计算机中的角标为:0,1,2,3,4。且在寻找x位置的过程中是逐个查看,所以要转化为人们能一目了然的数据,可以用i+1表示。在找到x位置以后再给n赋值使之为0,当找到目标后,直接利用break再跳出for循环,然后执行if语句,发现n!=-1,所以就结束程序,若没找到与x相等的数,则输出n=-1,表示无此数据,然后结束程序。

3给定一个矩阵,要求分别求出每行,每列,主对角线和反对角线上的数据的和。
代码如下:
在这里插入图片描述
在这里插入图片描述
需要关注的:
在写代码前我们可以通过一些草稿发现规律,比如:
a[0][0] a[0][1] a[0][2]
a[1][0] a[1][1] a[1][2]
a[2][0] a[2][1] a[2][2]
可以发现每行,每列,对角线上数据的规律。反对角线上的数据,其所在的列的角标可表示为m-1-n,而主对角线,其行和列的角标相同,每行上的数据,行的角标相同,每列上的数据,则列的角标相同。因此可以定义n为行数,m为列数,s为各需要求的数据。
写代码追求可读性,所以在保证代码正确性的前提下,我们要尽可能缩短代码长度,所以可以将其精简一下得到:
在这里插入图片描述

通过for循环嵌套,可以求出每行和每列的数据,但是在输出每一个数据之后,必须重新定义s=0,否则得出的数据将会是前面多个行总值的累加值,去掉s=0后,可得:
在这里插入图片描述

而当有对s重新赋值的s=0后则成功得出各数据

在这里插入图片描述

在输出对角线上的数据时,代码可以合在一起写,因为前面的for循环体结束后,m已经赋值到m=3,s也重新被赋值为s=0,所以有了s2=s2+a[n][m-1-n],s=s+a[n][n]。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值