数据表里面的字段 content 存储了一个以逗号分割的字符串,最大有20个数,最大数字为40。比如3,24,33,40类似字样的数字序列。其实就是一个保存了多项投票结果的字段啦。现在需要统计每个数字的个数,也就是每个投票项有多少人投了,并排序
解决思路
1. 首先从数据库的congtent字段读取数据,并把它们合并成一个字符串。
代码如下:
while($myrow = $connector -> fetch_array($result))
{
//$r[] = explode(",", $myrow["content"]);
$str .= $myrow["content"].',';
}
$arr_str = substr($str, 0, -1);
?>
由于最后一个数后面有逗号,所以要对字符串进行截取。
2. 将字符串按逗号分割成数组。
代码如下:
$r = explode(",", $arr_str);
3. 用array_count_values() 统计一维数组的元素个数
由于array_count_values()貌似不能直接对二维数组的元素进行个数统计,所以进行了上面的两个步骤,得到一个一维数组。
array_count_values() 函数用于统计数组中所有值出现的次数。返回一个数组,其元素的键名是原数组的值,键值是该值在原数组中出现的次数。
代码如下:
$rs = array_count_values($r);
4. 排序
代码如下:
asort($rs);
echo '
';';print_r($rs);
echo '
数组元素存储地址的计算 一维数组 设一维数组A[n]存放在n 个连续的存储单元中,每个数组元素占一个存储单元(不妨设为C 个连续字节). 如果数组元素A[0]的首地址是L ,则A[1]的首地址是L+C ,A[2]的首地址是L+2C ,… …,依次类推,对于01≤≤-i n 有: C i A Loc i A Loc *])0[(])[(+= 二维数组 二维数组的每个元素含两个下标,如果将二维数组的第一个下标理解为行号,第二个下标理解为列号,然后按行列次序排列个元素,则二维数组呈阵列形状。例如 mn m m n n a a a a a a a a a A ΛΛΛ Λ21 222 2111211= 它是一个行号为1~m ,列号为1~n 的二维数组元素阵列。 如何保存二维数组? 首先要确定一个顺序 222120 121110 020100a a a a a a a a a B = 222120 121110020100a a a a a a a a a B = 22 2120 121110 020100a a a a a a a a a B = 2221 20 12 11 10 02 01 00 a a a a a a a a a 第0行 第1行 第2行
222120 121110 020100a a a a a a a a a B = 2221 20 121110020100a a a a a a a a a B = 22 2120 121110 020100a a a a a a a a a B = 2212 02 21 11 01 20 10 00 a a a a a a a a a 第0列 第1列 第2列 222120 121110 020100a a a a a a a a a B = 221202a a a a a B = B = B B 021******* 00 21 10 20 a a a a a a a a a 设count 为数组B 中元素的个数,则count=9 按行优先存储
复习题二 一.填空题 1.若有以下定义,则执行表达式y+=y-=m*=y后y的值是____ __。 int m=5,y=2; 2.若有说明:int a[3][4]={{1,2},{0},{4,6,8,10}},则a[1][2]= ; 3. 能表达“20
C语言数组元素的查询 在实际开发中,经常需要查询数组中的元素。例如,学校为每位同学分配了一个唯一的编号,现在有一个数组,保存了实验班所有同学的编号信息,如果有家?想知道他的孩子是否进入了实验班,只要提供孩子子的编号就可以,如果编号和数组中的某个元素相等,就进入了实验班,否则就没进入.不幸的是,C语言标准库没有提供与数组查询相关的函数,所以我们只能自己编写代码。 对无序数组的查询所谓无序数组,就是数组元素的排列没有规律。无序数组元素查询的思路也很简单,就是用循环遍历数组中的每个元素,把要查询的值挨个比比较一遍。请看下面的代码: #include
} if(subscript<0){ printf("%d isn't in the array.\n", num); }else{ printf("%d is in the array, and it's subscript is %d.\n ", num, subscript); } system("pause"); return 0; } 运行结果: Please input an integer: 100 100 is in the array, and it's subscript is 7. 或者 Please input an integer: 28 28 isn't in the array. 这段代码的作用是让用户输入一个数字,判断该数字是否在数组中,如果在,就打印出下标。 第10~15行代码是关键,它会遍历数组中的每个元素,和用户输入的数字进行比较,如果相等就获取它的下标并跳出循环。
精心整理一填空题 1)数组的元素通过下标来访问,数组Array的长度为Array.length。 2)数组复制时,"="将一个数组的引用传递给另一个数组。 3)JVM将数组存储在栈(堆或栈)中。 4)数组的二分查找法运用的前提条件是数组已经排序。 5)Java中数组的下标的数据类型是整型。 6)数组最小的下标是0。 7) 8) 9) 10) 11) 12) 1. 2. 3. 4. 5. 6. 7. 8.A. 9. 10. 11.A 12.C.charstr[5]={"hi"}; D.charstr[100]=""; 13.数组在Java中储存在C中 14.A.栈 B.队列 C.堆 D.链表 15.下面程序的运行结果是____ main(){ inta[][]={{1,2,3},{4,5,6}}; }
A.3 B.4 C.5 D.6 16.下面程序的运行结果是_C___ 17.m ain(){ intx=30; int[]numbers=newint[x]; x=60; (numbers.length); } A.60 B.20 C.30 D.50 18. 19.m 20.c 21.i 22.w 23. 24.A 25.C 26. A. C.用 27. 28. A. 29. 30. A.char--'"u0000' B.Boolean--true C.float--0.0f D.int--0 31.关于数组作为方法的参数时,向方法传递的是A A.数组的引用 B.数组的栈地址 C.数组自身 D.数组的元素 32.关于数组复制,下列说法错误的是AC A."="可以实现数组复制 B.运用循环语句进行数组复制必须两个数组长度相同 C.arraycopy()方法没有给目标数组分配内存空间 D.数组复制是数组引用的传递
1、给定n 个数据, 求最小值出现的位置(如果最小值 出现多次,求出第一次出现的位置即可)。 最大值 第三行i<=n 五行k+1 2、编写程序求无理数e 的值并输出。计算公式为: e=1+1/1!+1/2!+1/3!+......+1/n! 当1/n!<0.000001时e=2.718282。 3、求一批数中最大值和最小值的积。 4、某一正数的值保留2位小数,对第三位进行四舍 五入。 5、从键盘上输入任意实数x,求出其所对应的函数值。 z=(x-4)的二次幂(x>4) z=x 的八次幂(x>-4) z=z=4/(x*(x+1))(x>-10) z=|x|+20(其他) 6、求出N ×M 整型数组的最大元素及其所在的行坐标 及列坐标(如果最大元素不唯一,选择位置在最前面 的一个)。 例如:输入的数组为: 1 2 3 4 15 6 12 18 9 10 11 2 求出的最大数为18,行坐标为2,列坐标为1。 7、求一个n 位自然数的各位数字的积。(n 是小于10的 自然数) 8、计算n 门课程的平均值,计算结果作为函数值返回。 例如:若有5门课程的成绩是:92,76,69,58,88, 则函数的值为76.599998。 9、求一批数中小于平均值的数的个数。 10、编写函数判断一个整数m 的各位数字之和能否被7整除, 可以被7整除则返回1,否则返回0。调用该函数找出 100~200之间满足条件的所有数。 11、请编一个函数void fun(int tt[M][N],int pp[N]), tt 指向一个M 行N 列的二维数组,求出二维数组每列 中最大元素,并依次放入pp 所指一维数组中。二维 数组中的数已在主函数中赋予。
第五章数组 一、单项选择 1.若要定义一个具有5个元素的整型数组,以下错误的定义语句是( C) 2.下列选项中,能正确定义数组的语句是( D) 3.下面是有关C语言字符数组的描述,其中错误的是( D) 4.有以下程序,程序运行时若输入:how are you? I am fine<回车>则输出结果是( C)#include
{ char a[30],b[30]; scanf("%s",a); gets(b); printf("%s\n %s\n",a,b); return 0; } 5.以下选项中正确的语句组是( D) 6.若有定义语句:int m[]={5,4,3,2,1},i=4;则下面对m数组元素的引用中错误的是( A )
7.以下数组定义中错误的是( A) 8.下列选项中,能够满足"若字符串s1等于字符串s2,则执行ST"要求的是 ( A ) 9.有以下程序,程序运行后的输出结果是( C) #include
10.有以下程序,程序运行后的输出结果是( B ) #include
第 5 章数组 一、选择题 1.设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储,a11为第一元素,其存储地址为1,每个元素占一个地址空间,则a85的地址为( B )。 A. 13 B. 33 C. 18 D. 40 2.有一个二维数组A[1:6,0:7]每个数组元素用相邻的6个字节存储,存储器按字节编址,那么这个数组的体积是(①L)个字节。假设存储数组元素A[1,0]的第一个字节的地址是0,则存储数组A的最后一个元素的第一个字节的地址是(②J)。若按行存储,则A[2,4]的第一个字节的地址是(③C)。若按列存储,则A[5,7]的第一个字节的地址是(④I)。就一般情况而言,当(⑤C)时,按行存储的A[I,J]地址与按列存储的A[J,I]地址相等。供选择的答案: ①-④: A.12 B. 66 C. 72 D. 96 E. 114 F. 120 G. 156 H. 234 I. 276 J. 282 K. 283 L. 288 ⑤: A.行与列的上界相同 B.行与列的下界相同 C.行与列的上、下界都相同 D.行的元素个数与列的元素个数相同 3.设有数组A[i,j],数组的每个元素长度为3字节,i的值为1到8,j的值为1到10,数组从内存首地址BA开始顺序存放,当用以列为主存放时,元素A[5,8]的存储首地址为( B )。 A. BA+141 B. BA+180 C. BA+222 D. BA+225 4.假设以行序为主序存储二维数组A=array[1..100,1..100],设每个数据元素占2个存储单元,基地址为10,则LOC[5,5]=( B )。 A. 808 B. 818 C. 1010 D. 1020 5.数组A[0..5,0..6]的每个元素占五个字节,将其按列优先次序存储在起始地址为1000的内存单元中,则元素A[5,5]的地址是( A )。 A. 1175 B. 1180 C. 1205 D. 1210 6.有一个二维数组A[0:8,1:5],每个数组元素用相邻的4个字节存储,存储器按字节编址,假设存储数组元素A[0,1]的第一个字节的地址是0,存储数组A的最后一个元素的第一个字节的地址是(①H )。若按行存储,则A[3,5]和 A[5,3]的第一个字节的地址是(②C )和(③E )。若按列存储,则A[7,1]和A[2,4]的第一个字节的地址是(④A )和(⑤F )。 ①-⑤:A.28 B.44 C.76 D.92 E.108 F.116 G.132 H.176 I.184 J.188 7.将一个A[1..100,1..100]的三对角矩阵,按行优先存入一维数组B[1‥298]中,A中元素A6665(即该元素下标i=66,j=65),在B数组中的位置K为( B )。供选择的答案: A. 198 B. 195 C. 197 8.二维数组A的元素都是6个字符组成的串,行下标i的范围从0到8,列下标j的范圈从1到10。从供选择的答案中选出应填入下列关于数组存储叙述中()内的正确答案。 (1)存放A至少需要( E )个字节; (2)A的第8列和第5行共占( A )个字节; (3)若A按行存放,元素A[8,5]的起始地址与A按列存放时的元素( B )的起始地址一致。 供选择的答案: (1)A. 90 B. 180 C. 240 D. 270 E. 540 (2)A. 108 B. 114 C. 54 D. 60 E. 150 (3)A. A[8,5] B. A[3,10] C. A[5,8] D. A[0,9] 9.二维数组A的每个元素是由6个字符组成的串,其行下标i=0,1,…,8,列下标j=1,2,…,10。若A按行先存储,元素A[8,5]的起始地址与当A按列先存储时的元素( B )的起始地址相同。设每个字符占一个字节。 A. A[8,5] B. A[3,10] C. A[5,8] D. A[0,9] 10.若对n阶对称矩阵A以行序为主序方式将其下三角形的元素(包括主对角线上所有元素)依次存放于一维数组B[1..(n(n+1))/2]中,则在B中确定a ij(i 习题4 一、单项选择题 1.若有说明inta[3][4];则a数组元素的非法引用是【】 A.a[0][2*1] B.a[1][3] C.a[4-2][0] D.a[0][4] 【答案】D 【解析】数组下标从0开始,a[0][4]的列下标越界。 2.在C++语言中,引用数组元素时,其数组下标的数据类型允许是【】 A.整型常量 B.整型表达式 C.整型常量或整型表达式 D.任何类型的表达式 【答案】C 3.以下不正确的定义语句是【】 A.doublex[5]={2.0,4.0,6.0,8.0,10.0}; B.inty[5]={0,1,3,5,7,9}; C.charc1[]={′1′,′2′,′3′,′4′,′5′}; D.charc2[]={x1′0′x,a′′x,8′′}; 【答案】B 【解析】初始值的个数大于数组的大小,系统会出现编译错误。 4.对以下说明语句的正确理解是【】 inta[10]={6,7,8,9,10}; A.将5个初值依次赋给a[1]至a[5] B.将5个初值依次赋给a[0]至a[4] C.将5个初值依次赋给a[6]至a[10] D.因为数组长度与初值的个数不相同,所以此语句不正确 【答案】B 5.若有说明:inta[][4]={0,0};则下面不正确的叙述是【】 A.数组a的每个元素都可得到初值0 B.二维数组a的第一维大小为1 C.当初值的个数能被第二维的常量表达式的值除尽时,所得商数就是第一维的大小 D.只有元素a[0][0]和a[0][1]可得到初值,其余元素均得不到确定的初值 【答案】D 【解析】二维数组初始化时,行大小可以省略,被省略的大小根据初值的个数系统来确定,本题中,有2个初值说明是1行4列,所以第一维为1。元素a[0][0]和a[0][1]赋初值为0,其余元素初值系统默认为0。 6.以下能对二维数组c进行正确的初始化的语句是【】 A.intc[3][]={{3},{3},{4}}; B.intc[][3]={{3},{3},{4}}; C.intc[3][2]={{3},{3},{4},{5}}; 习题 4 一、单项选择题 1. 若有说明int a[3][4];则a数组元素的非法引用是【】 A. a[0][2*1] B. a[1][3] C. a[4-2][0] D. a[0][4] 【答案】D 【解析】数组下标从0开始,a[0][4]的列下标越界。 2. 在C++语言中,引用数组元素时,其数组下标的数据类型允许是【】 A. 整型常量 B. 整型表达式 C. 整型常量或整型表达式 D. 任何类型的表达式 【答案】C 3. 以下不正确的定义语句是【】 A. double x[5]={2.0,4.0,6.0,8.0,10.0}; B. int y[5]={0,1,3,5,7,9}; C. char c1[]={′1′,′2′,′3′,′4′,′5′}; D. char c2[]={′\x10′,′\xa′,′\x8′}; 【答案】B 【解析】初始值的个数大于数组的大小,系统会出现编译错误。 4. 对以下说明语句的正确理解是【】 int a[10]={6,7,8,9,10}; A. 将5个初值依次赋给a[1]至a[5] B. 将5个初值依次赋给a[0]至a[4] C. 将5个初值依次赋给a[6]至a[10] D. 因为数组长度与初值的个数不相同,所以此语句不正确 【答案】B 5. 若有说明:int a[ ][4]={0,0};则下面不正确的叙述是【】 A. 数组a的每个元素都可得到初值0 B. 二维数组a的第一维大小为1 C. 当初值的个数能被第二维的常量表达式的值除尽时,所得商数就是第一维的大小 D. 只有元素a[0][0]和a[0][1]可得到初值,其余元素均得不到确定的初值 【答案】D 【解析】二维数组初始化时,行大小可以省略,被省略的大小根据初值的个数系统来确定,本题中,有2个初值说明是1行4列,所以第一维为1。元素a[0][0]和a[0][1]赋初值为0 ,其余元素初值系统默认为0。 6. 以下能对二维数组c进行正确的初始化的语句是【】 A. int c[3][]={{3},{3},{4}}; B. int c[][3]={{3},{3},{4}}; C. int c[3][2]={{3},{3},{4},{5}}; ***软件类实验报告 课程名称:C语言程序设计 学号: 姓名: 班级: 指导教师: 开课学期: 学院: ***教务处 ⑶二维数组处理矩阵问题。 四、实验过程及内容:(运行结果请抓图到对应题目的下方) 1.输入下面的程序,说明程序的功能并分析运行结果。 2.程序填空题。加法口诀表。输入1个正整数n(1≤n≤10),输出一张10以内的加法口诀表。 加数与被加数都不大于n(将加数、被加数、和放入一个二维数组中,再输出该数组),程序运行结果如图7-1所示。填空完成程序。 实验结果: 3. 程序填空题。下列程序定义了M×N的二维数组,并在主函数中对其赋值。函数fun()的功能是计算数组周边元素的平均值并作为函数值返回给主函数。 实验结果: 4. 编程insert函数,insert函数的功能是:实现在字符串s的指定的下标位置插入另一个字符串t。例如:字符串s为“I am a boy.”,t为“good ”,调用insert(s,7,t);则s结果为“I am a good boy.”。 主函数框架如下: #include "stdio.h" #include "string.h" void main() { char s[100]="I am a boy.",t[50]="good "; void insert(char s[],int n,char t[]); insert(s,7,t); puts(s); } 请完成insert函数的定义。 实验结果: 5. 程序改错题。打印九九乘法表。 6.编写程序实现,求3*3矩阵两条对角线元素之和 五、实验小结 一、选择题 1. 将一个A[1..100,1..100]的三对角矩阵,按行优先存入一维数组B[1‥298]中,A中元素A6665(即该元素下标i=66,j=65),在B数组中的位置K为()。供选择的答案: A. 198 B. 195 C. 197 2. 二维数组A的元素都是6个字符组成的串,行下标i的范围从0到8,列下标j的范圈从1到10。从供选择的答案中选出应填入下列关于数组存储叙述中()内的正确答案。(1)存放A至少需要(E)个字节; (2)A的第8列和第5行共占(B)个字节; (3)若A按行存放,元素A[8,5]的起始地址与A按列存放时的元素( B )的起始地址一致。 供选择的答案: (1)A. 90 B. 180 C. 240 D. 270 E. 540 (2)A. 108 B. 114 C. 54 D. 60 E. 150 (3)A. A[8,5] B. A[3,10] C. A[5,8] D. A[0,9] 3. 设A是n*n的对称矩阵,将A的对角线及对角线上方的元素以列为主的次序存放在一维数组B[1..n(n+1)/2]中,对上述任一元素aij(1≤i,j≤n,且i≤j)在B中的位置为( A )。 A. i(i-l)/2+j B. j(j-l)/2+i C. j(j-l)/2+i-1 D. i(i-l)/2+j-1 4. A[N,N]是对称矩阵,将下面三角(包括对角线)以行序存储到一维数组T[N(N+1)/2]中,则对任一上三角元素a[i][j]对应T[k]的下标k是(B)。 A. i(i-1)/2+j B. j(j-1)/2+i C. i(j-i)/2+1 D. j(i-1)/2+1 5. 设二维数组A[1.. m,1..n](即m行n列)按行存储在数组B[1.. m*n]中,则二维数组元素A[i,j]在一维数组B中的下标为( A)。 A.(i-1)*n+j B.(i-1)*n+j-1 C. i*(j-1) D. j*m+i-1 6.有一个二维数组A,行下标的范围是0到8,列下标的范围是1到5,每个数组元素用相邻的4个字节存储。存储器按字节编址。假设存储数组元素A[0,1]的第一个字节的地址是0。 存储数组A的最后一个元素的第一个字节的地址是(⑧)。若按行存储,则A[3,5]和A[5,3]的第一个字节的地址分别是(③)和(⑤)。若按列存储,则A[7,1]和A[2,4]的第一个字节的地址分别是(①)和(⑥)。供选择的答案:A~E:①28 ②44 ③76 ④92 ⑤108 ⑥116 ⑦132 ⑧176 ⑨184 ⑩188 7.有一个二维数组A,行下标的范围是1到6,列下标的范围是0到7,每个数组元素用相邻的6个字节存储,存储器按字节编址。那么,这个数组的体积是((12))个字节。假设存储数组元素A[1,0]的第一个字节的地址是0,则存储数组A的最后一个元素的第一个字节的地址是((11))。若按行存储,则A[2,4]的第一个字节的地址是(③)。若按列存储,则A[5,7]的第一个字节的地址是(⑨)。供选择的答案A~D:①12 ②66 ③72 ④96 ⑤114 ⑥120 ⑦156 ⑧234 ⑨276 ⑩282 (11)283 (12)288 8. 设矩阵A是一个对称矩阵,为了节省存储,将其下三角部分(如下图所示)按行序存放在一维数组B[ 1, n(n-1)/2 ]中,对下三角部分中任一元素ai,j(i≤j), 在一维数组B中下标k 的值是:(B) A.i(i-1)/2+j-1 B.i(i-1)/2+j C.i(i+1)/2+j-1 D.i(i+1)/2+j 实 验 报 告 五 一【实验目的】 1.掌握一维数组、二维数组的概念及元素的各种表示方法 2.正确掌握数组输入输出等的基本操作。 3.掌握数组和指针的关系和有关操作 4.掌握数组掌握字符串的处理方法 5.掌握数组中的一些常用算法。 二【实验内容】 【实验5-1】从键盘输入6个同学计算机课程期末考试成绩,并统计出平均分、最高分、最低分,以及统计超过平均分的人数,并实现正确输出。 【实验5-2】随机产生10个学生的计算机课程的成绩(30~100),按照从大到小的顺序排序,分别显示排序前和排序后的结果。 提示:#include 1、程序填空题目: 请编写函数void fun (int x, int pp[ ], int *n),它的功能是求出能整除x 且不是偶数的各整数,并按从小到大的顺序放在pp所指的数组中,这些除数的个数通过形参n返回。 例如:若x中的值为30,则有4个数符合要求,它们是1,3,5,15。 #include #include 1.请编写函数fun,其功能是:找出2×M整型二维数组中最大元素的值,并将此值返回调用函数。 int fun (int a[ ][M]) {int i,j,max=a[0][0];for(i=0;i<2;i++) for(j=0;j c++中关于数组作为函数参数并传递数组元素个数的几种有效方法的讨论 //由于数组的元素个数默认情况下是不作为实参内容传入调用函数的,本程序用来讨论有此带来的 //相关问题,以及解决问题方法,即给调用函数传递数组的元素个数的几种有效方法并实现它 #include } void PutArray5(vector 课程设计任务书 目录 一题目1 (1) 1题目内容 (1) 2设计实现 (1) 3程序结果 (2) 二题目2 (3) 1题目内容 (3) 2设计实现 (3) 3程序结果 (3) 三题目3 (5) 1题目内容 (5) 2设计实现 (5) 3程序结果 (7) 参考文献 (10) 一题目1 1 题目内容 编写函数,求一个二维数组周边元素的最大值和最小值:主函数中初始化一个4×4的数组,输出该数组,并调用函数后,输出结果。 2 设计实现 #include 3 程序结果 二题目2 1 题目内容 编写函数fun,其功能是:从字符串中删除指定的字符。同一字母的大、小写按不同字符处理。 若程序执行时,输出字符串为:WearelearningClanguang 从键盘上驶入字符:a,则输出应为:WerelerningClngung 2 设计实现 #include第4章_数组c++_习题答案解析
数组c习题答案解析
实验七 二维数组实验报告
数据结构习题3(数组)
C-数组上机作业和参考答案
C语言题库(1-9)
计算机二级C语言上机考试——数组与矩阵
c++中关于数组作为函数参数并传递数组元素个数的几种有效方法的讨论
C语言课设1二维数组的应用2删除指定字符3楼盘管理程序