C语言程序设计:第6章 利用数组处理批量数据_第1页
C语言程序设计:第6章 利用数组处理批量数据_第2页
C语言程序设计:第6章 利用数组处理批量数据_第3页
C语言程序设计:第6章 利用数组处理批量数据_第4页
C语言程序设计:第6章 利用数组处理批量数据_第5页
已阅读5页,还剩77页未读, 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第6章利用数组处理批量数据引言一维数组的定义和引用二维数组的定义和引用字符数组与字符串1引言基本数据类型整型实型字符型构造数据类型(用户自定义数据类型)数组结构体共用体2引言数组数组是有序数据的集合特点所有数据元素类型相同数据元素类型可以是基本数据类型和构造数据类型由数组名和下标确定具体的数据元素3一维数组的定义一维数组的定义格式:类型数组名[数组长度];长度——只能为常量、常量表达式类型——数组中元素的类型数组名——遵循标识符命名规则,表示数组中元素的起始位置例如:inta[6];分配了六个单元,每个单元存放一个int(即4个Byte),而且各单元连续!注意:

c不允许对数组的大小作动态定义。4350x78240x78280x78340x783846175781000x782C0x7830aa[0]a[1]a[2]a[3]a[4]a[5]一维数组的定义举例:inta[4+6];合法5不合法intn=10;inta[n];#defineN10floatarry[N];合法结论:定义数组时,数组长度必须是常量或者常量表达式,不能为变量。一维数组的使用一维数组的使用格式:名称[下标];说明:1)下标范围:0~长度-12)越界问题:C中不检查越界,但越界写数据可能造成系统崩溃3)数组不能整体引用,只能引用其中的元素例如:inta[3];

a[2]=19; 4)下标可以是常量、变量、表达式或函数6一维数组元素的引用举例:inta[10];a[0]=a[5]+a[7]-a[2*3]7合法intn=5;inta[10];a[n]=20;intn=5;inta[5];a[n]=20;不正确注意:使用数组时,程序员必须自己检查数组越界问题。使用数组时,数组下标可以是常量,变量,表达式,甚至是函数。合法一维数组的初始化部分初始化:例如:inta[20]={3,2,5,6,9};其余元素为0全部初始化:——数组长度可以省略例如:inta[3]={3,4,6}; intb[]={23,45,67,89};对数组全部元素初始化为0方式例如:inta[5]={0,0,0,0,0};或者:inta[5]={0};说明:如果不给数组设置初值,则为随机数8在定义数组的同时,给各数组元素赋值inta[10]={0,1,2,3,4,5,6,7,8,9};inta[10]={0,1,2,3,4};相当于inta[10]={0,1,2,3,4,0,0,0,0,0};inta[10]={0,0,0,0,0,0,0,0,0,0};相当于inta[10]={0};inta[5]={1,2,3,4,5};可写为inta[]={1,2,3,4,5};9一维数组的初始化一维数组程序举例用数组来处理求fibonacci数列问题冒泡排序选择排序插入排序统计数字序列中0-9中各数值出现的次数任意从键盘上输入一个正整数(最大为65535),请将它逆序输出10一维数组程序举例

例6.2用数组处理求Fibonacci数列问题解题思路:例5.8中用简单变量处理的,缺点不能在内存中保存这些数。假如想直接输出数列中第25个数,是很困难的。如果用数组处理,每一个数组元素代表数列中的一个数,依次求出各数并存放在相应的数组元素中11例题(1)用数组来处理求fibonacci数列问题。#include<stdio.h>voidmain(){inti;intf[20]={1,1};for(i=2;i<20;i++)f[i]=f[i-2]+f[i-1];for(i=0;i<20;i++){if((i+1)%5==0)printf("\n");printf("%12d",f[i]);}}12一维数组程序举例例6.3有6个地区的面积,要求对它们按由小到大的顺序排列。解题思路:排序的规律有两种:一种是“升序”,从小到大;另一种是“降序”,从大到小把题目抽象为:“对n个数按升序排序”常用的排序算法起泡排序(冒泡排序)选择排序插入排序13起泡排序98542014895420859420854920854290854209大数沉淀,小数起泡a[0]a[1]a[2]a[3]a[4]a[5]for(i=0;i<5;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}854209584209548209542809542089a[0]a[1]a[2]a[3]a[4]a[5]for(i=0;i<4;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}起泡排序15542089452089425089420589a[0]a[1]a[2]a[3]a[4]a[5]for(i=0;i<3;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}起泡排序16420589240589204589a[0]a[1]a[2]a[3]a[4]a[5]for(i=0;i<2;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}起泡排序17204589024589a[0]a[1]a[2]a[3]a[4]a[5]for(i=0;i<1;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}起泡排序18for(i=0;i<5;i++)if(a[i]>a[i+1]){……}for(i=0;i<4;i++)if(a[i]>a[i+1]){……}for(i=0;i<1;i++)if(a[i]>a[i+1]){……}……for(i=0;i<5-j;i++)if(a[i]>a[i+1]){……}for(j=0;j<5;j++)结论:如果有n个数,则要进行n-1趟比较。在第1趟比较中要进行n-1次两两比较,在第j趟比较中要进行n-j次两两比较。19冒泡排序20程序流程图如下:冒泡排序源程序21#include<stdio.h>#defineN10voidmain(){intarray[N];inti,j,t;printf("Input10numbers:\n");for(i=0;i<N;i++) scanf("%d",&array[i]);printf("\n");for(j=0;j<N;j++){ for(i=0;i<(N-j);i++) {

if(array[i]>array[i+1]) { t=array[i]; array[i]=array[i+1]; array[i+1]=array[i]; } }}printf("Thesortednumbers:\n");for(i=0;i<N;i++){ printf("%d",array[i]); if((i+1)%5==0) printf("\n");} }选择排序98542022a[0]a[1]a[2]a[3]a[4]a[5]index=0;for(i=1;i<6;i++)if(a[index]<a[i]){index=i}max=a[index];a[index]=a[5];a[5]=max;985420985420985420985420085429index=0;for(i=1;i<6;i++)if(a[index]>a[i]){index=i}min=a[index];a[index]=a[0];a[0]=min;选择排序08542923a[0]a[1]a[2]a[3]a[4]a[5]085429085429085429025489index=0;for(i=1;i<5;i++)if(a[index]<a[i]){index=i}max=a[index];a[index]=a[4];a[4]=max;index=1;for(i=2;i<6;i++)if(a[index]>a[i]){index=i}min=a[index];a[index]=a[1];a[1]=min;选择排序02548924a[0]a[1]a[2]a[3]a[4]a[5]025489025489024589index=0;for(i=1;i<4;i++)if(a[index]<a[i]){index=i}max=a[index];a[index]=a[3];a[3]=max;index=2;for(i=3;i<6;i++)if(a[index]>a[i]){index=i}min=a[index];a[index]=a[2];a[2]=min;选择排序02458925a[0]a[1]a[2]a[3]a[4]a[5]024589024589index=0;for(i=1;i<3;i++)if(a[index]<a[i]){index=i}max=a[index];a[index]=a[2];a[2]=max;index=3;for(i=4;i<6;i++)if(a[index]>a[i]){index=i}min=a[index];a[index]=a[3];a[3]=min;选择排序02458926a[0]a[1]a[2]a[3]a[4]a[5]024589结论:如果有n个数,则要进行n-1趟比较。在第1趟比较中要进行n-1次两两比较,在第j趟比较中要进行n-j次两两比较。index=0;for(i=1;i<2;i++)if(a[index]<a[i]){index=i}max=a[index];a[index]=a[1];a[1]=max;index=4;for(i=5;i<6;i++)if(a[index]>a[i]){index=i}min=a[index];a[index]=a[4];a[4]=min;选择排序原理每次循环选择没有排序的元素中的最小元素置于元素序列的开始N-S图27输入数组aindex=kfori=k+1ton-1a[i]<a[index]index=ia[index]<==>a[k]YNfork=0ton-2输出数组a选择排序程序voidmain(){

inti,index,k,n,temp,a[10]; for(i=0;i<10;i++)scanf(“%d”,&a[i]);for(k=0;k<9;k++){index=k;for(i=k+1;i<10;i++)if(a[i]<a[index])index=i;temp=a[index];a[index]=a[k];a[k]=temp;}for(i=0;i<10;i++)printf(“%d”,a[i]);}28选择数组元素选择排序大循环交换元素插入排序原理:把数组中的元素插入到适当位置。步骤:将数组中的开始两个元素按要求(降序/升序)排序。把其余所有元素依次插入到已排序序列中的适当位置29原始数据

BEDCA第一轮

BEDCA第二轮

BDECA第三轮

BCDEA第四轮ABCDE插入排序30流程图输入数组atemp=a[k]fori=k-1to0a[i]>tempa[i+1]=a[i]YNfork=2ton-1输出数组a排序a[0],a[1]a[i+1]=tempbreak;i<0a[0]=tempYN一维数组应用举例统计数字序列中0-9中各数值出现的次数数字序列保存于一个整型数组中任意从键盘上输入一个正整数(最大为65535),请将它逆序输出如:输入:64934;则输出:43946对每一个数进行如下处理提取个位数字:让数字序列对10求余控制循环每次循环让整数减去个位数,并除以10当(1)结果的个位数为0时,表示整数数字检测完毕。31二维数组多维数组的空间想象32二维数组:一个表格或一个平面矩阵一维数组:一列长表或一个向量多维数组:多维空间的一个数据列阵三维数组:三维空间的一个方阵二维数组的定义格式<类型>名称[长度1][长度2];说明:1)长度1和长度2——常量表达式,其中长度1表示行数,长度2表示列数2)内存中二维数组的元素按行存放3334地址

值

数组元素b[0][0]b[0][1]b[0][2]b[1][0]b[1][1]b[1][2]b[2][0]b[2][1]b[2][2]3000H3004H3008H300CH3010H3014H3018H301CH3020H例如:整型数组b[3][3]={{1,2,3},{4,5,6},{7,8,9}};123456789二维数组的定义35问题:有了二维数组的基础,那么多维数组如何定义呢?

定义三维数组:floata[2][3][4];注意:多维数组元素在内存中的排列顺序:第一维的下标变化最慢,最右边的下标变化最快。二维数组的使用

格式:

名称[下标1][下标2]

——下标范围0~下标1-1;0~下标2-1

——下标可以为常量、变量、表达式或函数36二维数组的说明重要的理解严格区分在定义数组时用的a[3][4]和引用元素时的a[3][4]的区别。前者a[3][4]用来定义数组的维数和各维的大小,后者a[3][4]中的3和4是下标值,a[3][4]代表某一个元素。记住:(1)数组下标总是从0开始!(2)一维数组的最大下标总是数组长度减1!(3)二维数组或多维数组的最大下标总是其维数减1和各维大小减1。37二维数组的初始化1、按行初始化:例如:inta[3][2]={{2},{3,2},{4}};

2、整体初始化:

例如:inta[2][3]={2,3,4,1,8,9};

3、全部元素初始化:——行可以省略

例如:inta[][3]={2,3,4,5,6,7};38二维数组的初始化inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};inta[3][4]={{1},{5},{9}};等价于inta[3][4]={{1,0,0,0},{5,0,0,0},{9,0,0,0}};inta[3][4]={{1},{5,6}};相当于inta[3][4]={{1},{5,6},{0}};39二维数组的初始化inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};等价于:inta[][4]={1,2,3,4,5,6,7,8,9,10,11,12};inta[][4]={{0,0,3},{},{0,10}};合法40二维数组与一维数组的关系

两维数组和一维数组的关系:41例inta[3][4];a[0][0]a[0][1]a[0][2]a[0][3]a[1][0]a[1][1]a[1][2]a[1][3]a[2][0]a[2][1]a[2][2]a[2][3]每个元素a[i]由包含4个元素的一维数组组成二维数组a是由3个元素组成014523a[0][1]a[0][2]a[0][3]a[1][0]a[1][1]a[0][0]a[1][3]a[2][0]a[2][1]a[2][2]a[2][3]a[1][2]67101189a[0]a[1]a[2]二维数组程序举例(1)将一个二维数组行和列元素互换,存到另一个二维数组中。原理:b[j][i]=a[i][j]42#include<stdio.h>voidmain(){inta[2][3]={{1,2,3},{4,5,6}};intb[3][2],i,j;printf("arraya:\n");for(i=0;i<=1;i++){for(j=0;j<=2;j++){printf("%5d",a[i][j]);b[j][i]=a[i][j];} printf("\n");}printf("arrayb:\n");for(i=0;i<=2,i++){for(j=0;j<=1;j++)printf("%5d",b[i][j]);printf("\n");}}二维数组程序举例(2)问题有一个3×4的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。N-S流程图43例(2)源程序44#include<stdio.h>voidmain(){inti,j,row=0,colum=0,max;inta[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};max=a[0][0];for(i=0;i<=2;i++)for(j=0;j<=3;j++)if(a[i][j]>max){max=a[i][j];row=i;colum=j;}

/*ifend*/printf(“max=%d,row=%d,colum=%d\n”,max,row,colum);}一维数组作业【一维数值数组】已知数组intx[10]={13,24,35,46,57,68,79,88,93},请用户输入一个数字并按照从小到大的顺序插在对应的位置后输出整个数组。【一维数值数组】已知数组

intx[]={35,46,57,13,24,35,99,68,13,79,88,46},请将数组中重复的元素去除,并按从小到大的顺序排列并输出。45二维数组作业编程打印下列形式的杨辉三角(10行)46 1 1 1 1 2 1 1 3 3 1 1 4 6 4 11 5 10105 1 1 6 15 20 156 1n[i][j]=n[i-1][j-1]+n[i-1][j]字符数组与字符串字符数组存放字符数据的数组,字符数组中的一个元素存放一个字符。字符串字符串:双引号括起的多个字符序列,例如:“abc”,“1”,“abc123”字符串尾:系统自动添加’\0’//ASCII为零的字符字符串的含义:字符串的起始位置字符串的存储:——利用字符数组chars[10]={“Hello”};chars[]=”Hello”; //数组的长度为6chars[10]={‘2’,’3’,’4’,’5’,’\0’};//字符形式的串chars[10]={‘2’,’3’,’4’,’5’};//字符形式,不是字符串47字符串的输入/输出利用scanf/printf进行: charstr[20]=“Helloworld”; scanf(“%s”,str);//str数组名,表示起始位置,代表串的起始位置 printf(“%s”,str); //输出从str开始的串说明:

(1)scanf中不需要求地址运算,直接用数组名;

(2)printf中给出数组名,输出遇到’\0’结束; (3)scanf输入串,以空格和回车键和Tab键进行分割例如 charstr[13];scanf("%s",str);如果输入以下12个字符Howareyou?48How\0字符串的输入/输出利用puts/gets进行: puts(数组名);—输出字符串,并将’\0’转换成换行输出。 gets(数组名);—输入字符串;只能以回车键作为分割符说明:一般情况下,字符串的输入采用gets函数使用这两个函数时,需要#include<stdio.h>用puts函数输出的字符串中可以包含转义字符4950字符串的输入/输出例如:charstr[]={″China\nBeijing″};puts(str);输出结果:ChinaBeijing

在输出时,将字符串结束标志′\0′转换成′\n′,即输出完字符串后换行。字符串数组:二维字符数组51二维字符数组初始化

例charfruit[][7]={“Apple”,”Orange”,”Grape”,”Pear”,”Peach”};fruit[0]fruit[1]fruit[2]fruit[3]fruit[4]Apple\0\0Orange\0Grape\0\0Pear\0\0\0Peach\0\0字符串相关的系统函数(string.h) 例如:charstr1[30]={“People’sRepublicof”};charstr2[]={“China”}; printf(“%s”,strcat(str1,str2));52字符串连接函数strcat格式:strcat(字符数组1,字符数组2)功能:把字符数组2连到字符数组1后面返值:返回字符数组1的首地址说明:字符数组1必须足够大连接前,两串均以‘\0’结束;连接后,串1的‘\0’取消,新串最后加‘\0’字符串相关的系统函数(string.h) 例如:charstr1[30]={“People’sRepublicof”};charstr2[]={“China”}; printf(“%s”,strcpy(str1,str2));53字符串拷贝函数strcpy格式:strcpy(字符数组1,字符串2)功能:将字符串2,拷贝到字符数组1中去返值:返回字符数组1的首地址说明:字符数组1必须足够大拷贝时‘\0’一同拷贝

不能使用赋值语句为一个字符数组赋值字符串相关的系统函数(string.h)54字符串比较函数strcmp格式:strcmp(字符串1,字符串2)功能:比较两个字符串比较规则:对两串从左向右逐个字符比较(ASCII码),直到遇到不同字符或‘\0’为止返值:返回int型整数,a.若字符串1<字符串2,返回负整数b.若字符串1>字符串2,返回正整数c.若字符串1==字符串2,返回零说明:字符串比较不能用“==”,必须用strcmp字符串相关的系统函数(string.h)55字符串长度函数strlen格式:strlen(字符数组)功能:计算字符串长度返值:返回字符串实际长度,不包括‘\0’在内例对于以下字符串,strlen(s)的值为:(1)chars[10]={‘A’,’\0’,’B’,’C’,’\0’,’D’};(2)chars[]=“\t\v\\\0will\n”;(3)chars[]=“\x69\072\n”;133strlwr函数----转换为小写的函数其一般形式为strlwr(字符串)函数的作用是将字符串中大写字母换成小写字母56字符串相关的系统函数(string.h)strupr函数----转换为大写的函数其一般形式为strupr(字符串)函数的作用是将字符串中小写字母换成大写字母57字符串相关的系统函数(string.h)字符串的应用举例(1)问题有3个字符串,要求找出其中最大者。今设一个二维的字符数组str,大小为3×20,即有3行20列,每一行可以容纳20个字符。下图表示此二维数组的情况。58解题思路:可以把str[0]、str[1]、str[2]看作3个一维字符数组,它们各有20个元素。可以把它们如同一维数组那样进行处理。可以用gets函数分别读入3个字符串。经过二次比较,就可得到值最大者,把它放在一维字符数组String中。例题(1)源程序59#include<stdio.h>voidmain(){charstring[20],str[3][20];inti;for(i=0;i<3;i++)gets(str[i]);/*初始化三个字符串*/if(strcmp(str[0],str[1])>0)strcpy(string,str[0]);elsestrcpy(string,str[1]);if(strcmp(str[2],string)>0)strcpy(string,str[2]);printf(“\nthelargeststringis∶\n%s\n",string);}字符串的应用举例(2)问题输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。60解题思路:判断是否出现新单词,可以由是否有空格出现来决定(连续的若干个空格作为出现一次空格;一行开头的空格不统计在内)如果测出某一个字符为非空格,而它的前面的字符是空格,则表示“新的单词开始了”,此时使num累加1。字符串的应用举例(2)问题输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。61例题(2)源程序62#include<Studio.h>voidmain(){ charstring[81]; int

i,num=0;

charc; gets(string); for(i=0;(c=string[i])!='\0';i++) if(c==‘’)word=0;elseif(word==0) { word=1;num++; }printf("Thereare%dwordsintheline.\n",num);}Word=0;字符串的应用举例(3)问题输入一行字符,判断是否为回文。回文即正序和逆序相同,形如“abcba”63解题思路1:将字符串逆序后,与原字符串比较思路2:回文字符串前后对称,只要前后逐个比较即可判断。例题(3)源程序64#include<Studio.h>#include<string.h>voidmain(){ charstring[81];

//定义字符数组 inti=0,len;

printf(“Pleaseinputastringwhoselengthislessthan81\n”); gets(string);

//输入数组len=strlen(string);//获取字符串长度j=len-1;while(i<j)

{if(string[i]!=string[j])

//前后对称比较

break;i++;j--;}if(i>=j)

printf(“这是一个回文串\n");else

printf(“这不是一个回文串\n");

}字符数组作业(与二维数组作业一起检查)【一维字符数组】从键盘输入一个字符串,将这个字符串变成逆序字符串并输出。如:输入字符串为“abcdefg”,则逆序字符串为“gfedcba”。【一维字符数组】用户输入两个字符串s1,s2(长度均不超过10),不使用字符串处理函数,判断字符串s1中是否存在子字符串s2,若存在则输出其位置,否则输出不匹配。如:s1=“abcdefgh”,s2=“cde”,则输出匹配位置为第3个字符65数组应用示例例1

编写一个简单分析随机数的程序。产生100个51到60之间的随机整数。统计51到60之间的各个整数的个数,并按由多到少的次序,显示输出统计结果。思路安排一个数组a[100],用于存放100个随机整数;安排一个二维数组c[10][2],用于存放统计结果;采用循环,生成100个符合条件的随机整数;采用循环,初始化存放统计结果的数组c[10][2]采用循环,统计各个数据的出现次数;按各数据出现的次数,对二维数组排序(由大到小)。数组应用示例随机生成函数有两个库函数用于产生随机数:srand()和rand()。

intrand(void);

//返回一个[0,RAND_MAX]间的随机整数//缺省情况下,RAND_MAX为32767

voidsrand(unsignedseed);

//参数seed是种子,用于初始化rand()的起始值生成[m,n]之间随机正整数的表达式

rand()%(n-m+1)+m例1(符号常量定义等)#include<stdio.h>#include"time.h"#defineCOUNT100#defineLOW51#defineHIGH60#defineLENHIGH-LOW+1intmain(){

。。。。。。return0;}因用到time函数,应该包含该头文件数组应用示例为了增加灵活性和便于阅读,定义若干符号常量例1(定义数组和程序框架)intmain(){inta[COUNT];intc[LEN][2];inti,j,k,temp;//(1)生成100个符合条件的随机整数

//(2)初始化存放统计结果的数组c[10][2]

//(3)统计各个数据的出现次数

//(4)按各数据出现的次数,对数组c[10][2]由大到小排序//(5)显示输出结果return0;}数组应用示例定义存放随机数和统计结果的数组例1(生成随机整数)

srand((unsigned)time(0));for(i=0;i<COUNT;i++){

a[i]=rand()%(HIGH-LOW+1)+LOW;}数组应用示例生成[LOW,HIGH]之间的随机整数,依次存放到数组a中每次生成不一样的随机整数,需要种子!例1(统计各个数据出现次数)for(j=0;j<LEN;j++){c[j][0]=LOW+j;c[j][1]=0;}for(i=0;i<COUNT;i++){

k=a[i]-LOW;c[k][1]++;}数组应用示例初始化统计数组:第0列是数据;第1列是出现次数对每个数据:先确定数据的序号;再使得对应数据出现次数加1例1(出现次数作为关键字,对二维数组排序)for(i=0;i<LEN-1;i++)for(j=i+1;j<LEN;j++)if(c[i][1]<c[j][1]){temp=c[i][1];c[i][1]=c[j][1];c[j][1]=temp;temp=c[i][0];c[i][0]=c[j][0];c[j][0]=temp;}数组应用示例一行的2个值(数据和出现次数),需要同时交换!冒泡排序,降序->大数上浮小数下沉如何减少交换的次数?例1(显示输出)for(j=0;j<LEN;j++)printf("%d:%d\n",c[j][0],c[j][1]);数组应用示例例1(优化)intmain(){

inta[COUNT];

intc[LEN][2];

int

i,j,k,temp;//(1)生成100个符合条件的随机整数

//(2)初始化存放统计结果的数组c[10][2]

//(3)生成符合条件的随机整数,同时统计各个数据的出现次数

//(4)按各数据出现的次数,对数组c[10][2]由大到小排序//(5)显示输出结果return0;}数组应用示例不安排存放随机数的数组a生成随机整数的同时,进行统计采用选择排序,减少交换数据次数例2

编写一个演示比对验证码的程序。设验证码由5位特定的大写字母构成,把生成的10个验证码按字典序输出到屏幕(作为示例才需要)。由用户输入字符串,与验证码比对,最多比对3次。数组应用示例思路安排一个二维数组words[10][6],存放生成的验证码;采用循环,生成10个符合条件的验证码;按字典序,对验证码排序;采用循环,比对用户输入:

接受用户输入;依次与验证码比对;根据比对结果给出提示信息#include<stdio.h>#include"string.h"#include"time.h"#defineCOUNT10#defineLEN5#defineCHECKNUM3charalp[]="ABCDEFGHJKLMNPQRSTUVWXYZ";intmain(){

。。。。。。return0;}因用到字符串函数,应该包含该头文件数组应用示例用于构成验证码的特定的大写字母intmain(){charwords[COUNT][LE

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论