C语言写了一个简单的合并数组,运行不对啊

ramay7 2015-08-25 07:04:11
void merge(int *a,int *b,int *c,int M,int N,int K)//c为合并后数组
{
int i=0,j=0,k=0;
while(i<M&&j<N){//两数组比较插入c,遍历到数组尾
if(a[i]<b[j])
c[k++]=a[i++];
else{
if(a[i]>b[j])
c[k++]=b[j++];
else
c[k++]=a[i++];
j++;
}
}
if(i==M)//数组a先遍历完毕,将b中元素复制到c中
while(j<N)
c[k++]=b[j++];
else//数组b先遍历完毕,将a中元素复制到c中
while(i<M)
c[k++]=a[i++];
K=k;//c中元素个数
}
#include <stdio.h>
#define M 3
#define N 4
int main()
{
int a[M]={1,3,5},b[N]={2,3,5,7},c[M+N];
int i,j,k;
merge(a,b,c,M,N,k);
printf("合并后数组为:");
for(i=0;i<k;i++)
printf("%d ",c[i]);
printf("\n");
return 0;
}


这是为什么呢?
...全文
430 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
ramay7 2015-08-27
  • 打赏
  • 举报
回复
引用 13 楼 u1083189332 的回复:
void merge(int *a, int *b, int *c, int M, int N, int &K)//引用
{                                                                                       
	int i = 0, j = 0, k = 0;
	while (i<M&&j<N){
		if (a[i]<b[j])
			c[k++] = a[i++];
		else{
			if (a[i]>b[j])
				c[k++] = b[j++];
			else
			{
				c[k++] = a[i++];
				c[k++]=a[j++]; //再加一行
			}
			
		}
	}
	if (i == M)
	while (j<N)
		c[k++] = b[j++];
	else
	while (i<M)
		c[k++] = a[i++];
	K = k;
}


#define M 3
#define N 4
int main()
{
	int a[M] = { 1, 3, 5 }, b[N] = { 2, 3, 5, 7 }, c[M + N];
	int i, j, k=0;
	merge(a, b, c, M, N, k);
	printf("合并后数组为:");
	for (i = 0; i<k; i++)
		printf("%d ", c[i]);
	printf("\n");
能否解释下?看得不大懂.....
ramay7 2015-08-27
  • 打赏
  • 举报
回复
引用 9 楼 zxh707wk 的回复:
#include <stdio.h>

#define M 3
#define N 4

void merge(int*a,int*b,int*c,int m,int n,int* qwe)
{
int i=0,j=0,k=0 ;
while(i<m&&j<n)
{
//两数组比较插入c,遍历到数组尾
if(a[i]<b[j])
c[k++]=a[i++];
else
c[k++]=b[j++];
}
if(i==m)
{
while(j<n)
c[k++]=b[j++];
}
else
{
while(i<m)
c[k++]=a[i++];
}
*qwe=k ;
}

int main()
{
int a[M]=
{
1,3,5
}
,b[N]=
{
2,3,5,7
}
,c[M+N];
int i,j,k ;
merge(a,b,c,M,N,&k);
printf("合并后数组为:");
for(i=0;i<k;i++)
printf("%d ",c[i]);
printf("\n");
return 0 ;
}
居然用K 和k来区分变量

感谢感谢~~以后再也不敢了。
再添加点代码就完美了

可是原来为什么错了?不会就是因为K和k吧...........
u1083189332 2015-08-27
  • 打赏
  • 举报
回复
void merge(int *a, int *b, int *c, int M, int N, int &K)//引用
{                                                                                       
	int i = 0, j = 0, k = 0;
	while (i<M&&j<N){
		if (a[i]<b[j])
			c[k++] = a[i++];
		else{
			if (a[i]>b[j])
				c[k++] = b[j++];
			else
			{
				c[k++] = a[i++];
				c[k++]=a[j++]; //再加一行
			}
			
		}
	}
	if (i == M)
	while (j<N)
		c[k++] = b[j++];
	else
	while (i<M)
		c[k++] = a[i++];
	K = k;
}


#define M 3
#define N 4
int main()
{
	int a[M] = { 1, 3, 5 }, b[N] = { 2, 3, 5, 7 }, c[M + N];
	int i, j, k=0;
	merge(a, b, c, M, N, k);
	printf("合并后数组为:");
	for (i = 0; i<k; i++)
		printf("%d ", c[i]);
	printf("\n");
u1083189332 2015-08-27
  • 打赏
  • 举报
回复
[code=c]void merge(int *a, int *b, int *c, int M, int N, int &K)//c为合并后数组 
{                                                                                        //引用
	int i = 0, j = 0, k = 0;
	while (i<M&&j<N){//两数组比较插入c,遍历到数组尾 
		if (a[i]<b[j])
			c[k++] = a[i++];
		else{
			if (a[i]>b[j])
				c[k++] = b[j++];
			else
			{
				c[k++] = a[i++];
				c[k++]=a[j++]; //再加一行
			}
			
		}
	}
	if (i == M)//数组a先遍历完毕,将b中元素复制到c中	
	while (j<N)
		c[k++] = b[j++];
	else//数组b先遍历完毕,将a中元素复制到c中
	while (i<M)
		c[k++] = a[i++];
	K = k;//c中元素个数 
}


#define M 3
#define N 4
int main()
{
	int a[M] = { 1, 3, 5 }, b[N] = { 2, 3, 5, 7 }, c[M + N];
	int i, j, k=0;
	merge(a, b, c, M, N, k);
	printf("合并后数组为:");
	for (i = 0; i<k; i++)
		printf("%d ", c[i]);
	printf("\n");
[/code]
saulibilibili 2015-08-27
  • 打赏
  • 举报
回复
void merge(int *a,int *b,int *c,int M,int N,int K) 最后一个参数应该是int &k
长沙刘德华 2015-08-26
  • 打赏
  • 举报
回复
函数中,c[k++]=b[j++]改成=b[j]试试
707wk 2015-08-26
  • 打赏
  • 举报
回复
#include <stdio.h>

#define M 3 
#define N 4 

void merge(int*a,int*b,int*c,int m,int n,int* qwe)
{
	int i=0,j=0,k=0 ;
	while(i<m&&j<n)
	{
		//两数组比较插入c,遍历到数组尾
		if(a[i]<b[j])
			c[k++]=a[i++];
		else
			c[k++]=b[j++];
	}
	if(i==m)
	{
	while(j<n)
		c[k++]=b[j++];
	}
	else
	{
	while(i<m)
		c[k++]=a[i++];
	}
	*qwe=k ;
}

int main()
{
	int a[M]=
	{
		1,3,5 
	}
	,b[N]=
	{
		2,3,5,7 
	}
	,c[M+N];
	int i,j,k ;
	merge(a,b,c,M,N,&k);
	printf("合并后数组为:");
	for(i=0;i<k;i++)
		printf("%d ",c[i]);
	printf("\n");
	return 0 ;
}
居然用K 和k来区分变量
lyzlwb2010 2015-08-26
  • 打赏
  • 举报
回复
可以将两数组直接合并成一个数组C,然后在数组C里排序。
ramay7 2015-08-26
  • 打赏
  • 举报
回复
引用 5 楼 xxxxssss12 的回复:
函数中,c[k++]=b[j++]改成=b[j]试试

运行也不对
ramay7 2015-08-26
  • 打赏
  • 举报
回复
引用 5 楼 xxxxssss12 的回复:
函数中,c[k++]=b[j++]改成=b[j]试试
[code=cvoid merge(int *a,int *b,int *c,int M,int N,int K)//c为合并后数组 { int i=0,j=0,k=0; while(i<M&&j<N){//两数组比较插入c,遍历到数组尾 if(a[i]<b[j]){ c[k]=a[i]; k++; i++; } else{ if(a[i]>b[j]){ c[k]=b[j]; k++; j++; } else{ c[k]=a[i]; k++; i++; j++; } } } if(i==M)//数组a先遍历完毕,将b中元素复制到c中 { while(j<N){ c[k]=b[j]; k++; j++; } } else//数组b先遍历完毕,将a中元素复制到c中 { while(i<M){ c[k]=a[i]; k++; i++; } } K=k;//c中元素个数 } #include <stdio.h> #define M 3 #define N 4 int main() { int a[M]={1,3,5},b[N]={2,3,5,7},c[M+N]={0}; int i,j,k; merge(a,b,c,M,N,k); printf("合并后数组为:"); for(i=0;i<k;i++) printf("%d ",c[i]); printf("\n"); return 0; } ][/code]
ramay7 2015-08-25
  • 打赏
  • 举报
回复
引用 2 楼 aoyuanbo 的回复:
先合并 在排序
你的意思是这样吗? for(i=0;i<M;i++) c[k++]=a[i]; for(j=0;j<N;j++) c[k++]=b[j];
ramay7 2015-08-25
  • 打赏
  • 举报
回复
引用 1 楼 sinat_30796471 的回复:
c[m+n]没初始化,如果走到a[i]=b[j]=3这一步会怎样

将c[M+N]改写为c[M+N]={0};
运行结果是:
“如果走到a[i]=b[j]=3这一步会怎样”,代码在这里:
KingRoot111 2015-08-25
  • 打赏
  • 举报
回复
先合并 在排序
sinat_30796471 2015-08-25
  • 打赏
  • 举报
回复
c[m+n]没初始化,如果走到a[i]=b[j]=3这一步会怎样
比较详实 第四章: 数组 数 组   数组在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在C语言中, 数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。   本章介绍数值数组和字符数组,其余的在以后各章陆续介绍。数组类型说明 在C语言中使用数组必须先进行类型说明。 数组说明的一般形 式为: 类型说明符 数组名 [常量表达式],……; 其中,类型说明符是任一种基本数据类型或构造数据类型。 数组名是用户定义的数组标识符。 方括号中的常量表达式表示数据元素的个数,也称为数组的长度。 例如: int a[10]; 说明整型数组a,有10个元素。 float b[10],c[20]; 说明实型数组b,有10个元素,实型数组c,有20个元素。 char ch[20]; 说明字符数组ch,有20个元素。 对于数组类型说明应注意以下几点: 1.数组的类型实际上是指数组元素的取值类型。对于同一个数组,其所有元素的数据类型都是相同的。 2.数组名的书规则应符合标识符的书规定。 3.数组名不能与其它变量名相同,例如: void main() { int a; float a[10]; …… } 是错误的。 4.方括号中常量表达式表示数组元素的个数,如a[5]表示数组a有5个元素。但是其下标从0开始计算。因此5个元素分别为a[0],a[1],a[2],a[3],a[4]。 5.不能在方括号中用变量来表示元素的个数, 但是可以是符号常数或常量表达式。例如: #define FD 5 void main() { int a[3+2],b[7+FD]; …… } 是合法的。但是下述说明方式是错误的。 void main() { int n=5; int a[n]; …… } 6.允许在同一个类型说明中,说明多个数组和多个变量。 例如: int a,b,c,d,k1[10],k2[20]; 数组元素的表示方法   数组元素是组成数组的基本单元。数组元素也是一种变量, 其标识方法为数组名后跟一个下标。 下标表示了元素在数组中的顺序号。数组元素的一般形式为: 数组名[下标] 其中的下标只能为整型常量或整型表达式。如为小数时,C编译将自动取整。例如,a[5],a[i+j],a[i++]都是合法的数组元素。 数组元素通常也称为下标变量。必须先定义数组, 才能使用下标变量。在C语言中只能逐个地使用下标变量, 而不能一次引用整个数组。 例如,输出有10 个元素的数组必须使用循环语句逐个输出各下标变量: for(i=0; i<10; i++)  printf("%d",a[i]); 而不能用一个语句输出整个数组,下面的法是错误的: printf("%d",a); void main() { int i,a[10]; for(i=0;i<10;i++) a[i++]=2*i+1; for(i=9;i>=0;i--) printf("%d",a[i]); printf("\n%d %d\n",a[5.2],a[5.8]); }   本例中用一个循环语句给a数组各元素送入奇数值,然后用第二个循环语句从大到小输出各个奇数。在第一个 for语句中,表达式3省略了。在下标变量中使用了表达式i++,用以修改循环变量。当然第二个for语句也可以这样作, C语言允许用表达式表示下标。 程序中最后一个printf语句输出了两次a[5]的值, 可以看出当下标不为整数时将自动取整。数组的赋值给数组赋值的方法除了用赋值语句对数组元素逐个赋值外, 还可采用初始化赋值和动态赋值的方法。数组初始化赋值数组初始化赋值是指在数组说明时给数组元素赋予初值。 数组初始化是在编译阶段进行的。这样将减少运行时间,提高效率。   初始化赋值的一般形式为: static 类型说明符 数组名[常量表达式]={值,值……值}; 其中static表示是静态存储类型, C语言规定只有静态存储数组和外部存储数组才可作初始化赋值(有关静态存储,外部存储的概念在第五章中介绍)。在{ }中的各数据值即为各元素的初值, 各值之间用逗号间隔。例如: static int a[10]={ 0,1,2,3,4,5,6,7,8,9 }; 相当于a[0]=0;a[1]=1...a[9]=9;   C语言对数组的初始赋值还有以下几点规定: 1.可以只给部分元素赋初值。当{ }中值的个数少于元素个数时,只给前面部分元素赋值。例如: static int a[10]={0,1,2,3,4};表示只给a[0]~a[4]5个元素赋值,而后5个元素自动赋0值。 2.只能给元素逐个赋值,不能给数组整体赋值。 例如给十个元素全部赋1值,只能为: static int a[10]={1,1,1,1,1,1,1,1,1,1};而不能为: static int a[10]=1; 3.如不给可初始化的数组赋初值,则全部元素均为0值。 4.如给全部元素赋值,则在数组说明中, 可以不给出数组元素的个数。例如: static int a[5]={1,2,3,4,5};可为: static int a[]={1,2,3,4,5};动态赋值可以在程序执行过程中,对数组作动态赋值。 这时可用循环语句配合scanf函数逐个对数组元素赋值。 void main() { int i,max,a[10]; printf("input 10 numbers:\n"); for(i=0;i<10;i++) scanf("%d",&a[i]); max=a[0]; for(i=1;i<10;i++) if(a[i]>max) max=a[i]; printf("maxmum=%d\n",max); }   本例程序中第一个for语句逐个输入10个数到数组a中。 然后把a[0]送入max中。在第二个for语句中,从a[1]到a[9]逐个与max中的内容比较,若比max的值大,则把该下标变量送入max中,因此max总是在已比较过的下标变量中为最大者。比较结束,输出max的值。 void main() { int i,j,p,q,s,a[10]; printf("\n input 10 numbers:\n"); for(i=0;i<10;i++) scanf("%d",&a[i]); for(i=0;i<10;i++){ p=i;q=a[i]; for(j=i+1;j<10;j++) if(q一个循环语句。第一个for语句用于输入10个元素的初值。第二个for语句用于排序。本程序的排序采用逐个比较的方法进行。在i次循环时,把第一个元素的下标i赋于p,而把该下标变量值a[i]赋于q。然后进入小循环,从a[i+1]起到最后一个元素止逐个与a[i]作比较,有比a[i]大者则将其下标送p,元素值送q。 一次循环结束后,p即为最大元素的下标,q则为该元素值。若此时i≠p,说明p,q值均已不是进入小循环之前所赋之值,则交换a[i]和a[p]之值。 此时a[i]为已排序完毕的元素。输出该值之后转入下一次循环。对i+1以后各个元素排序。 二维数组   前面介绍的数组只有一个下标,称为一维数组, 其数组元素也称为单下标变量。在实际问题中有很多量是二维的或多维的, 因此C语言允许构造多维数组。多维数组元素有多个下标, 以标识它在数组中的位置,所以也称为多下标变量。 本小节只介绍二维数组,多维数组可由二维数组类推而得到。二维数组类型说明二维数组类型说明的一般形式是: 类型说明符 数组名[常量表达式1][常量表达式2]…; 其中常量表达式1表示第一维下标的长度,常量表达式2 表示第二维下标的长度。例如: int a[3][4]; 说明了一个三行四列的数组数组名为a,其下标变量的类型为整型。该数组的下标变量共有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]   二维数组在概念上是二维的,即是说其下标在两个方向上变化, 下标变量在数组中的位置也处于一个平面之中, 而不是象一维数组只是一个向量。但是,实际的硬件存储器却是连续编址的, 也就是说存储器单元是按一维线性排列的。 如何在一维存储器中存放二维数组,可有两种方式:一种是按行排列, 即放完一行之后顺次放入第二行。另一种是按列排列, 即放完一列之后再顺次放入第二列。在C语言中,二维数组是按行排列的。 在图4.1中,按行顺次存放,先存放a[0]行,再存放a[1]行,最后存放a[2]行。每行中有四个元素也是依次存放。由于数组a说明为 int类型,该类型占两个字节的内存空间,所以每个元素均占有两个 字节(图中每一格为一字节)。 二维数组元素的表示方法   二维数组的元素也称为双下标变量,其表示的形式为: 数组名[下标][下标] 其中下标应为整型常量或整型表达式。例如: a[3][4] 表示a数组三行四列的元素。下标变量和数组说明在形式中有些相似,但这两者具有完全不同的含义。 数组说明的方括号中给出的是某一维的长度,即可取下标的最大值; 而数组元素中的下标是该元素在数组中的位置标识。前者只能是常量, 后者可以是常量,变量或表达式。 一个学习小组有5个人,每个人有三门课的考试成绩。求全组分科的平均成绩和各科总平均成绩。 课程 成绩姓名 Math C DBASE 张      80  75 92 王      61  65 71 李      59  63 70 赵      85  87 90 周      76  77 85   可设一个二维数组a[5][3]存放五个人三门课的成绩。再设一个一维数组v[3]存放所求得各分科平均成绩,设变量l为全组各科总平均成绩。编程如下: void main() { int i,j,s=0,l,v[3],a[5][3]; printf("input score\n"); for(i=0;i<3;i++){ for(j=0;j<5;j++) { scanf("%d",&a[j][i]); s=s+a[j][i];} v[i]=s/5; s=0; } l=(v[0]+v[1]+v[2])/3; printf("math:%d\nc languag:%d\ndbase:%d\n",v[0],v[1],v[2]); printf("total:%d\n",l); }   程序中首先用了一个双重循环。 在内循环中依次读入某一门课程的各个学生的成绩,并把这些成绩累加起来, 退出内循环后再把该累加成绩除以5送入v[i]之中,这就是该门课程的平均成绩。外循环共循环三次,分别求出三门课各自的平均成绩并存放在v数组之中。退出外循环之后,把v[0],v[1],v[2]相加除以3即得到各科总平均成绩。最后按题意输出各个成绩。 二维数组的初始化   二维数组初始化也是在类型说明时给各下标变量赋以初值。 二维数组可按行分段赋值,也可按行连续赋值。 例如对数组a[5][3]: 1.按行分段赋值可为static int a[5][3]={ {80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85} }; 2.按行连续赋值可为static int a[5][3]={ 80,75,92,61,65,71,59,63,70,85,87,90,76,77,85 };   这两种赋初值的结果是完全相同的。 void main() { int i,j,s=0,l,v[3]; static int a[5][3]={ {80,75,92},{61,65,71},{59,63,70}, {85,87,90},{76,77,85} }; for(i=0;i<3;i++) { for(j=0;j<5;j++) s=s+a[j][i]; v[i]=s/5; s=0; } l=(v[0]+v[1]+v[2])/3; printf("math:%d\nc languag:%d\ndbase:%d\n",v[0],v[1],v[2]); printf("total:%d\n",l); }   对于二维数组初始化赋值还有以下说明: 1.可以只对部分元素赋初值,未赋初值的元素自动取0值。 例如: static int a[3][3]={{1},{2},{3}}; 是对每一行的第一列元素赋值,未赋值的元素取0值。 赋值后各元素的值为: 1 0 02 0 03 0 0 static int a [3][3]={{0,1},{0,0,2},{3}}; 赋值后的元素值为 0 1 00 0 23 0 0 2.如对全部元素赋初值,则第一维的长度可以不给出。 例如: static int a[3][3]={1,2,3,4,5,6,7,8,9}; 可以为:static int a[][3]={1,2,3,4,5,6,7,8,9};   数组是一种构造类型的数据。 二维数组可以看作是由一维数组的嵌套而构成的。设一维数组的每个元素都又是一个数组, 就组成了二维数组。当然,前提是各元素类型必须相同。根据这样的分析,一个二维数组也可以分解为多个一维数组。 C语言允许这种分解有二维数组a[3][4],可分解为三个一维数组,其数组名分别为a[0],a[1],a[2]。对这三个一维数组不需另作说明即可使用。这三个一维数组都有4个元素,例如:一维数组a[0]的元素为a[0][0],a[0][1],a[0][2],a[0][3]。必须强调的是,a[0],a[1],a[2]不能当作下标变量使用,它们是数组名,不是一个单纯的下标变量。 字符数组   用来存放字符量的数组称为字符数组。 字符数组类型说明的形式与前面介绍的数值数组相同。例如: char c[10]; 由于字符型和整型通用,也可以定义为int c[10]但这时每个数组元素占2个字节的内存单元。字符数组也可以是二维或多维数组,例如: char c[5][10];即为二维字符数组。 字符数组也允许在类型说明时作初始化赋值。例如: static char c[10]={`c`,` `,`p`,`r`,o`,g`,r`,`a`,`m`};赋值后各元素的值为: 数组C c[0]c[1]c[2]c[3]c[4]c [5]c[6]c[7]c[8]c[9]其中c[9]未赋值,由系统自动赋予0值。 当对全体元素赋初值时也可以省去长度说明。例如: static char c[]={`c`,` `,`p`,`r`,`o`,`g`,`r`,`a`,`m`};这时C数组的长度自动定为9。 main() { int i,j; char a[][5]={{'B','A','S','I','C',},{'d','B','A','S','E'}}; for(i=0;i<=1;i++) { for(j=0;j<=4;j++) printf("%c",a[i][j]); printf("\n"); } }   本例的二维字符数组由于在初始化时全部元素都赋以初值, 因此一维下标的长度可以不加以说明。字符串在C语言中没有专门的字符串变量, 通常用一个字符数组来存放一个字符串。在2.1.4节介绍字符串常量时,已说明字符串总是以'\0'作为串的结束符。因此当把一个字符串存入一个数组时, 也把结束符'\0'存入数组,并以此作为该字符串是否结束的标志。 有了'\0'标志后,就不必再用字符数组的长度来判断字符串的长度了。   C语言允许用字符串的方式对数组作初始化赋值。例如: static char c[]={'c', ' ','p','r','o','g','r','a','m'}; 可为: static char c[]={"C program"}; 或去掉{}为: sratic char c[]="C program";   用字符串方式赋值比用字符逐个赋值要多占一个字节, 用于存放字符串结束标志'\0'。上面的数组c在内存中的实际存放情况为: C program\0`\0'是由C编译系统自动加上的。由于采用了`\0'标志,所以在用字符串赋初值时一般无须指定数组的长度, 而由系统自行处理。在采用字符串方式后,字符数组的输入输出将变得简单方便。 除了上述用字符串赋初值的办法外,还可用printf函数和scanf函数一次性输出输入一个字符数组中的字符串, 而不必使用循环语句逐个地输入输出每个字符。 void main() { static char c[]="BASIC\ndBASE"; printf("%s\n",c); } 注意在本例的printf函数中,使用的格式字符串为“%s”, 表示输出的是一个字符串。而在输出表列中给出数组名则可。 不能为: printf("%s",c[]); void main() { char st[15]; printf("input string:\n"); scanf("%s",st); printf("%s\n",st); }   本例中由于定义数组长度为15, 因此输入的字符串长度必须小于15,以留出一个字节用于存放字符串结束标志`\0`。 应该说明的是,对一个字符数组,如果不作初始化赋值,则必须说明数组长度。还应该特别注意的是,当用scanf函数输入字符串时,字符串中不能含有空格,否则将以空格作为串的结束符。例如运行例4.8,当输入的字符串中含有空格时,运行情况为: input string:this is a book this 从输出结果可以看出空格以后的字符都未能输出。 为了避免这种情况, 可多设几个字符数组分段存放含空格的串。程序可改如下: Lesson void main() { char st1[6],st2[6],st3[6],st4[6]; printf("input string:\n"); scanf("%s%s%s%s",st1,st2,st3,st4); printf("%s %s %s %s\n",st1,st2,st3,st4); }   本程序分别设了四个数组, 输入的一行字符的空格分段分别装入四个数组。然后分别输出这四个数组中的字符串。在前面介绍过,scanf的各输入项必须以地址方式出现,如 &a,&b等。但在例4.8中却是以数组名方式出现的,这是为什么呢?这是由于在C语言中规定,数组名就代表了该数组的首地址。 整个数组是以首地址开头的一块连续的内存单元。如有字符数组char c[10],在内存可表示如图4.2。设数组c的首地址为2000,也就是说c[0]单元地址为2000。则数组名c就代表这个首地址。因此在c前面不能再加地址运算符&。如作scanf("%s",&c);则是错误的。 在执行函数printf("%s",c) 时,按数组名c找到首地址,然后逐个输出数组中各个字符直到遇到字符串终止标志'\0'为止。 字符串常用函数   C语言提供了丰富的字符串处理函数, 大致可分为字符串的输入、输出、合并、修改、比较、转换、复制、搜索几类。 使用这些函数可大大减轻编程的负担。用于输入输出的字符串函数, 在使用前应包含头文件"stdio.h" ; 使用其它字符串函数则应包含头文件"string.h"。 下面介绍几个最常用的字符串函数。 1.字符串输出函数 puts 格式: puts (字符数组名) 功能:把字符数组中的字符串输出到显示器。 即在屏幕上显示该字符串 #include"stdio.h" main() { static char c[]="BASIC\ndBASE"; puts(c); }   从程序中可以看出puts函数中可以使用转义字符, 因此输出结果成为两行。puts函数完全可以由printf函数取代。 当需要按一定格式输出时,通常使用printf函数。 2.字符串输入函数gets 格式: gets (字符数组名) 功能:从标准输入设备键盘上输入一个字符串。 本函数得到一个函数值,即为该字符数组的首地址。 #include"stdio.h" main() { char st[15]; printf("input string:\n"); gets(st); puts(st); }   可以看出当输入的字符串中含有空格时,输出仍为全部字符串。说明gets函数并不以空格作为字符串输入结束的标志, 而只以回车作为输入结束。这是与scanf函数不同的。 3.字符串连接函数strcat 格式: strcat (字符数组名1,字符数组名2) 功能:把字符数组2中的字符串连接到字符数组1 中字符串的后面,并删去字符串1后的串标志“\0”。本函数返回值是字符数组1的首地址。 #include"string.h" main() { static char st1[30]="My name is "; int st2[10]; printf("input your name:\n"); gets(st2); strcat(st1,st2); puts(st1); } 本程序把初始化赋值的字符数组与动态赋值的字符串连接起来。 要注意的是,字符数组1应定义足够的长度,否则不能全部装入被连接的字符串 4.字符串拷贝函数strcpy 格式: strcpy (字符数组名1,字符数组名2) 功能:把字符数组2中的字符串拷贝到字符数组1中。串结束标志“\0”也一同拷贝。字符数名2, 也可以是一个字符串常量。这时相当于把一个字符串赋予一个字符数组。 #include"string.h" main() { static char st1[15],st2[]="C Language"; strcpy(st1,st2); puts(st1);printf("\n"); } 本函数要求字符数组1应有足够的长度,否则不能全部装入所拷贝的字符串。 5.字符串比较函数strcmp 格式: strcmp(字符数组名1,字符数组名2) 功能:按照ASCII码顺序比较两个数组中的字符串,并由函数返回值返回比较结果。 字符串1=字符串2,返回值=0; 字符串2〉字符串2,返回值〉0; 字符串1〈字符串2,返回值〈0。 本函数也可用于比较两个字符串常量,或比较数组和字符串常量。 #include"string.h" main() { int k; static char st1[15],st2[]="C Language"; printf("input a string:\n"); gets(st1); k=strcmp(st1,st2); if(k==0) printf("st1=st2\n"); if(k>0) printf("st1>st2\n"); if(k<0) printf("st1数组st2中的串比较,比较结果返回到k中,根据k值再输出结果提示串。当输入为dbase时,由ASCII 码可知“dBASE”大于“C Language”故k〉0,输出结果“st1>st2”。 6.测字符串长度函数strlen 格式: strlen(字符数组名) 功能:测字符串的实际长度(不含字符串结束标志‘\0’) 并作为函数返回值。 #include"string.h" main() { int k; static char st[]="C language"; k=strlen(st); printf("The lenth of the string is %d\n",k); } 程序举例   把一个整数按大小顺序插入已排好序的数组中。 为了把一个数按大小插入已排好序的数组中, 应首先确定排序是从大到小还是从小到大进行的。设排序是从大到小进序的, 则可把欲插入的数与数组中各数逐个比较, 当找到第一个比插入数小的元素i时,该元素之前即为插入位置。然后从数组最后一个元素开始到该元素为止,逐个后移一个单元。最后把插入数赋予元素i即可。如果被插入数比所有的元素值都小则插入最后位置。 main() { int i,j,p,q,s,n,a[11]={127,3,6,28,54,68,87,105,162,18}; for(i=0;i<10;i++) { p=i;q=a[i]; for(j=i+1;j<10;j++) if(qa[i]) {for(s=9;s>=i;s--) a[s+1]=a[s]; break;} a[i]=n; for(i=0;i<=10;i++) printf("%d ",a[i]); printf("\n"); } 本程序首先对数组a中的10个数从大到小排序并输出排序结果。然后输入要插入的整数n。再用一个for语句把n和数组元素逐个比较,如果发现有n>a[i]时,则由一个内循环把i以下各元素值顺次后移一个单元。后移应从后向前进行(从a[9]开始到a[i]为止)。 后移结束跳出外循环。插入点为i,把n赋予a[i]即可。 如所有的元素均大于被插入数,则并未进行过后移工作。此时i=10,结果是把n赋于a[10]。最后一个循环输出插入数后的数组各元素值。程序运行时,输入数47。从结果中可以看出47已插入到54和 28之间。   在二维数组a中选出各行最大的元素组成一个一维数组b。 a=3 16 87 65 4 32 11 108 10 25 12 37b=(87 108 37) 本题的编程思路是,在数组A的每一行中寻找最大的元素,找到之后把该值赋予数组B相应的元素即可。程序如下: main() { static int a[][4]={3,16,87,65,4,32,11,108,10,25,12,27}; int b[3],i,j,l; for(i=0;i<=2;i++) { l=a[i][0]; for(j=1;j<=3;j++) if(a[i][j]>l) l=a[i][j]; b[i]=l;} printf("\narray a:\n"); for(i=0;i<=2;i++) { for(j=0;j<=3;j++) printf("%5d",a[i][j]); printf("\n");} printf("\narray b:\n"); for(i=0;i<=2;i++) printf("%5d",b[i]); printf("\n"); }   程序中第一个for语句中又嵌套了一个for语句组成了双重循环。外循环控制逐行处理,并把每行的第0列元素赋予l。进入内循环后,把l与后面各列元素比较,并把比l大者赋予l。内循环结束时l 即为该行最大的元素,然后把l值赋予b[i]。等外循环全部完成时,数组b中已装入了a各行中的最大值。后面的两个 for语句分别输出数组a和数组b。   输入五个国家的名称按字母顺序排列输出。   本题编程思路如下:五个国家名应由一个二维字符数组来处理。然而C语言规定可以把一个二维数组当成多个一维数组处理。 因此本题又可以按五个一维数组处理, 而每一个一维数组就是一个国家名字符串。用字符串比较函数比较各一维数组的大小,并排序, 输出结果即可。 编程如下: void main() { char st[20],cs[5][20]; int i,j,p; printf("input country's name:\n"); for(i=0;i<5;i++) gets(cs[i]); printf("\n"); for(i=0;i<5;i++) { p=i;strcpy(st,cs[i]); for(j=i+1;j<5;j++) if(strcmp(cs[j],st)<0) {p=j;strcpy(st,cs[j]);} if(p!=i) { strcpy(st,cs[i]); strcpy(cs[i],cs[p]); strcpy(cs[p],st); } puts(cs[i]);}printf("\n"); }   本程序的第一个for语句中,用gets函数输入五个国家名字符串。上面说过C语言允许把一个二维数组按多个一维数组处理, 本程序说明cs[5][20]为二维字符数组,可分为五个一维数组cs[0],cs[1],cs[2],cs[3],cs[4]。因此在gets函数中使用cs[i]是合法的。 在第二个for语句中又嵌套了一个for语句组成双重循环。 这个双重循环完成按字母顺序排序的工作。在外层循环中把字符数组cs[i]中的国名字符串拷贝到数组st中,并把下标i赋予P。 进入内层循环后,把st与cs[i]以后的各字符串作比较,若有比st小者则把该字符串拷贝到st中,并把其下标赋予p。内循环完成后如p不等于 i 说明有比cs[i]更小的字符串出现,因此交换cs[i]和st的内容。 至此已确定了数组cs的第i号元素的排序值。然后输出该字符串。在外循环全部完成之后即完成全部排序和输出。 本章小结 1.数组是程序设计中最常用的数据结构。数组可分为数值数组(整数组,实数组),字符数组以及后面将要介绍的指针数组,结构数组等。 2.数组可以是一维的,二维的或多维的。 3.数组类型说明由类型说明符、数组名、数组长度 (数组元素个数)三部分组成。数组元素又称为下标变量。 数组的类型是指下标变量取值的类型。 4.对数组的赋值可以用数组初始化赋值, 输入函数动态赋值和赋值语句赋值三种方法实现。 对数值数组不能用赋值语句整体赋值、输入或输出,而必须用循环语句逐个对数组元素进行操作。 资料收集:beck Copyright 2002 www.vcok.com, All Rights Reserved
本文件中讲述了c语言经典的282个案例,由浅入深。有利于提高广大爱好c语言编程的人员。 其中包括: 第1章 初识C语言 1 实例001 第一个C语言程序 2 实例002 一个完整的C语言程序 2 实例003 输出名言 3 实例004 用TC 2.0打开文件 4 实例005 计算正方形的周长 5 第2章 简单的C程序 6 实例006 输出一个正方形 7 实例007 输出一个三角形 8 实例008 一个简单的求和程序 9 实例009 求10! 10 实例010 3个数由小到大排序 11 实例011 猴子吃桃 13 实例012 阳阳买苹果 14 第3章 算法入门 15 实例013 任意次方后的最后三位 16 实例014 计算某日是该年的第几天 16 实例015 婚礼上的谎言 18 实例016 百元买百鸡 19 实例017 打渔晒网问题 20 实例018 判断三角形的类型 22 实例019 直接插入排序 23 实例020 希尔排序 25 实例021 冒泡排序 26 实例022 快速排序 27 实例023 选择排序 28 实例024 归并排序 29 实例025 二分查找 31 实例026 分块查找 32 实例027 哈希查找 34 实例028 斐波那契数列 37 实例029 哥德巴赫猜想 38 实例030 尼科彻斯定理 39 第4章 常用数据类型 41 实例031 数值型常量的使用 42 实例032 字符型变量的使用 42 实例033 求100~200之间的素数 43 实例034 利用#输出三角形 44 实例035 十进制转换为二进制 45 实例036 n进制转换为十进制 46 实例037 小球下落问题 48 实例038 巧分苹果 49 实例039 老师分糖果 50 实例040 IP地址形式输出 51 实例041 特殊的完全平方数 52 实例042 一数三平方 54 实例043 求等差数列 55 实例044 亲密数 56 实例045 自守数 57 第5章 运算符与表达式 60 实例046 求二元一次不定方程 61 实例047 可逆素数 63 实例048 判断闰年 64 实例049 黑纸与白纸 65 实例050 阿姆斯特朗数 67 实例051 最大公约数和最小公倍数 67 实例052 求一元二次方程的根 69 实例053 自然对数的底e的计算 70 实例054 满足abcd=(ab+cd)2的数 70 实例055 整数加减法练习 71 实例056 判断整倍数 73 实例057 阶梯问题 73 实例058 乘积大于和的数 74 实例059 求各位数之和为5的数 75 第6章 数据输入与输出函数 77 实例060 使用字符函数输入/输出字符 78 实例061 输出相对的最小整数 79 实例062 将小字母转换为大字母 80 实例063 水池注水问题 80 实例064 用*号输出图案 81 实例065 输出一个字符的前驱字符 82 实例066 求学生总成绩和平均成绩 83 实例067 回文素数 84 第7章 选择和分支结构程序设计 86 实例068 判断偶数 87 实例069 判断字母是否为大 88 实例070 检查字符类型 89 实例071 求最低分和最高分 90 实例072 模拟自动售货机 91 实例073 计算工资 93 实例074 平方和值判断 94 实例075 加油站加油 95 实例076 简单计算器 97 第8章 循环结构 98 实例077 使用while语句求n! 99 实例078 使用while为用户提供 菜单显示 100 实例079 一元钱的兑换方案 102 实例080 特殊等式 103 实例081 打印乘法口诀表 104 实例082 平方和运算的问题 105 实例083 求从键盘中输入字符的个数 106 实例084 打印杨辉三角 108 实例085 求总数问题 109 实例086 彩球问题 110 实例087 新同学年龄 112 实例088 灯塔数量 113 实例089 计算12+22+…+102 114 实例090 循环显示随机数 115 实例091 卖西瓜 116 实例092 银行存款问题 117 实例093 统计不及格的人数 118 实例094 猜数字游戏 119 第9章 数组 123 实例095 求各元素之和 124 实例096 使用二维数组保存数据 125 实例097 计算字符串中有多少个单词 126 实例098 不使用strcpy()函数实现 字符串复制功能 127 实例099 逆序存放数据 129 实例100 相邻元素之和 130 实例101 选票统计 131 实例102 使用数组统计学生成绩 132 实例103 查找数组中的最值 134 实例104 判断一个数是否存在数组中 135 实例105 求二维数组对角线之和 136 实例106 模拟比赛打分 137 实例107 矩阵的转置 139 实例108 设计魔方阵 141 实例109 字符升序排列 142 实例110 在指定位置插入字符 144 实例111 删除字符串中的连续字符 146 实例112 统计各种字符个数 147 实例113 字符串替换 148 实例114 回文字符串 150 实例115 字符串加密和解密 151 实例116 对调最大数与最小数位置 153 第10章 函数编程基础 155 实例117 输出两个数中的最大值 156 实例118 判断素数 157 实例119 递归解决年龄问题 158 实例120 递归解决分鱼问题 159 实例121 小数分离 160 实例122 求任意数的n次幂 161 实例123 固定格式输出当前时间 163 实例124 设计函数计算学生平均身高 164 实例125 求数组元素中的最小值 165 实例126 打印1~5的阶乘 166 实例127 求最大公约数和最小公倍数 167 实例128 求直角三角形的斜边 168 实例129 相对的最小整数 169 实例130 当前时间转换 170 实例131 显示程序运行时间 171 实例132 显示当前日期及时间 172 实例133 设置DOS系统日期 173 实例134 设置DOS系统时间 174 实例135 读取并设置BIOS的时钟 175 实例136 任意大字母转小 176 实例137 字符串复制到指定空间 176 实例138 查找位置信息 177 实例139 复制当前目录 179 实例140 产生唯一文件 180 实例141 不同亮度显示 181 实例142 字母检测 182 实例143 建立目录 183 实例144 删除目录 184 实例145 对数组进行升序和降序排序 185 实例146 设置组合键 187 实例147 获取当前日期与时间 188 实例148 获取当地日期与时间 189 实例149 获取格林尼治平时 190 实例150 设置系统日期 191 实例151 获取BIOS常规内存容量 193 实例152 读/BIOS计时器 194 实例153 获取CMOS密码 195 实例154 获取Ctrl+Break消息 197 实例155 鼠标中断 198 实例156 设置文本显示模式 200 实例157 显卡类型测试 204 实例158 获取系统配置信息 206 实例159 访问系统temp中的文件 209 实例160 控制扬声器声音 210 实例161 获取Caps Lock键状态 211 实例162 获取环境变量 212 实例163 贪吃蛇游戏 213 实例164 五子棋游戏 219 实例165 弹力球游戏 227 第11章 指针 235 实例166 使用指针实现整数排序 236 实例167 指向结构体变量的指针 237 实例168 使用指针输出数组元素 238 实例169 使用指针查找数列中的 最大值和最小值 240 实例170 使用指针的指针输出字符串 241 实例171 使用指向指针的指针对 字符串排序 242 实例172 使用返回指针的函数查找 最大值 244 实例173 使用指针连接两个字符串 245 实例174 用指针实现逆序存放数 组元素值 247 实例175 用指针数组构造字符串数组 248 实例176 用指针函数输出学生成绩 249 实例177 寻找相同元素的指针 251 实例178 查找成绩不及格的学生 252 实例179 使用指针实现冒泡排序 254 实例180 输入月份号并输出英文月份名 255 实例181 使用指针插入元素 256 实例182 使用指针交换两个数组 中的最大值 257 实例183 输出二维数组有关值 259 实例184 输出二维数组任一行 任一列值 260 实例185 将若干字符串按照字母 顺序输出 262 实例186 用指向函数的指针比较大小 263 实例187 寻找指定元素的指针 265 实例188 字符串的匹配 266 第12章 常用数据结构 269 实例189 比较计数 270 实例190 找出最高分 271 实例191 信息查询 272 实例192 候选人选票程序 274 实例193 计算开机时间 276 实例194 取出整型数据的高字节数据 277 实例195 使用共用体存放学生和 老师信息 278 实例196 使用共用体处理任意类型数据 279 实例197 输出今天星期几 281 实例198 创建单向链表 282 实例199 创建双向链表 284 实例200 创建循环链表 287 实例201 使用头插入法建立单链表 289 实例202 双链表逆序输出 291 实例203 约瑟夫环 293 实例204 创建顺序表并插入元素 294 实例205 合并两个链表 296 实例206 单链表节点逆置 298 实例207 应用栈实现进制转换 300 实例208 用栈实现行编辑程序 303 实例209 用栈设置密码 306 实例210 括号匹配检测 310 实例211 用栈及递归计算多项式 313 实例212 链队列 315 实例213 循环缓冲区问题 318 实例214 简单的文本编辑器 321 第13章 位运算操作符 326 实例215 使二进制数特定位翻转 327 实例216 将输入的数左移两位并输出 327 实例217 编循环移位函数 328 实例218 取出给定16位二进制数 的奇数位 330 实例219 取一个整数的后四位 331 实例220 求一个数的补码 332 实例221 普通的位运算 333 实例222 整数与0异或 334 第14章 存储管理 335 实例223 使用malloc()函数分配内存 336 实例224 调用calloc()函数动态分 配内存 337 实例225 为具有3个数组元素的 数组分配内存 338 实例226 为二维数组动态分配内存 338 实例227 商品信息的动态存放 340 第15章 预处理和函数类型 341 实例228 用不带参数的宏定义求 平行四边形面积 342 实例229 使用宏定义实现数组值 的互换 343 实例230 编头文件包含圆面积的 计算公式 344 实例231 利用宏定义求偶数和 345 实例232 利用文件包含设计输出模式 346 实例233 使用条件编译隐藏密码 347 第16章 文件读 349 实例234 关闭所有打开的文件 350 实例235 同时显示两个文件的内容 352 实例236 创建文件 353 实例237 格式化读文件 355 实例238 创建临时文件 357 实例239 成块读操作 358 实例240 随机读文件 360 实例241 以行为单位读文件 362 实例242 查找文件 364 实例243 重命名文件 364 实例244 删除文件 366 实例245 删除文件中的记录 367 实例246 文件内容复制 369 实例247 错误处理 370 实例248 合并两个文件信息 373 实例249 统计文件内容 375 实例250 读取磁盘文件 376 实例251 将数据入磁盘文件 378 实例252 显示目录内同类型文件 379 实例253 文件分割 382 实例254 文件加密 384 实例255 自毁程序 386 实例256 明码序列号保护 388 实例257 非明码序列号保护 389 实例258 恺撒加密 391 实例259 RSA加密 394 实例260 获取当前磁盘空间信息 396 实例261 DES加密 398 实例262 获取系统配置信息 403 实例263 获取寄存器信息 405 第17章 图形图像处理 407 实例264 绘制直线 408 实例265 绘制矩形 409 实例266 绘制表格 411 实例267 绘制立体窗口 412 实例268 绘制椭圆 414 实例269 绘制圆弧线 415 实例270 绘制扇区 417 实例271 绘制空心圆 418 实例272 绘制箭头 419 实例273 绘制正弦曲线 420 实例274 绘制彩带 421 实例275 绘制黄色网格填充的椭圆 423 实例276 绘制红色间隔点填充的 多边形 424 实例277 绘制五角星 425 实例278 颜色变换 427 实例279 彩色扇形 428 实例280 输出不同字体 429 实例281 相同图案的输出 431 实例282 设置文本及背景颜色 433
C语言程序源代码(大集合).rar 实际只有139个,其余部分丢失! 第一部分 基础篇 001 第一个C程序 002 运行多个源文件 003 求整数之积 004 比较实数大小 005 字符的输出 006 显示变量所占字节数 007 自增/自减运算 008 数列求和 009 乘法口诀表 010 猜数字游戏 011 模拟ATM(自动柜员机)界面 012 用一维数组统计学生成绩 013 用二维数组实现矩阵转置 014 求解二维数组的最大/最小元素 015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较整数大小 023 指向数组的指针 024 寻找指定元素的指针 025 寻找相同元素的指针 026 阿拉伯数字转换为罗马数字 027 字符替换 028 从键盘读入实数 029 字符行排版 030 字符排列 031 判断字符串是否回文 032 通讯录的输入输出 033 扑克牌的结构表示 034 用“结构”统计学生成绩 035 报数游戏 036 模拟社会关系 037 统计文件的字符数 038 同时显示两个文件的内容 039 简单的文本编辑器 040 文件的字数统计程序 041 学生成绩管理程序 第二部分 数据结构篇 042 插入排序 043 希尔排序 044 冒泡排序 045 快速排序 046 选择排序 047 堆排序 048 归并排序 049 基数排序 050 二叉搜索树操作 051 二项式系数递归 052 背包问题 053 顺序表插入和删除 054 链表操作(1) 055 链表操作(2) 056 单链表就地逆置 057 运动会分数统计 058 双链表 059 约瑟夫环 060 记录个人资料 061 二叉树遍利 062 浮点数转换为字符串 063 汉诺塔问题 064 哈夫曼编码 065 图的深度优先遍利 066 图的广度优先遍利 067 求解最优交通路径 068 八皇后问题 069 骑士巡游 070 用栈设置密码 071 魔王语言翻译 072 火车车厢重排 073 队列实例 074 K阶斐波那契序列 第三部分 数值计算与趣味数学篇 075 绘制余弦曲线和直线的迭加 076 计算高次方数的尾数 077 打鱼还是晒网 078 怎样存钱以获取最大利息 079 阿姆斯特朗数 080 亲密数 081 自守数 082 具有abcd=(ab+cd)2性质的数 083 验证歌德巴赫猜想 084 素数幻方 085 百钱百鸡问题 086 爱因斯坦的数学题 087 三色球问题 088 马克思手稿中的数学题 089 配对新郎和新娘 090 约瑟夫问题 091 邮票组合 092 分糖果 093 波瓦松的分酒趣题 094 求π的近似值 095 奇数平方的有趣性质 096 角谷猜想 097 四方定理 098 卡布列克常数 099 尼科彻斯定理 100 扑克牌自动发牌 101 常胜将军 102 搬山游戏 103 兔子产子(菲波那契数列) 104 数字移动 105 多项式乘法 106 产生随机数 107 堆栈四则运算 108 递归整数四则运算 109 复平面作图 110 绘制彩色抛物线 111 绘制正态分布曲线 112 求解非线性方程 113 实矩阵乘法运算 114 求解线性方程 115 n阶方阵求逆 116 复矩阵乘法 117 求定积分 118 求满足特异条件的数列 119 超长正整数的加法 第四部分 图形篇 120 绘制直线 121 绘制圆 122 绘制圆弧 123 绘制椭圆 124 设置背景色和前景色 125 设置线条类型 126 设置填充类型和填充颜色 127 图形文本的输出 128 金刚石图案 129 飘带图案 130 圆环图案 131 肾形图案 132 心脏形图案 133 渔网图案 134 沙丘图案 135 设置图形方式下的文本类型 136 绘制正多边形 137 正六边形螺旋图案 138 正方形螺旋拼块图案 139 图形法绘制圆 140 递归法绘制三角形图案 141 图形法绘制椭圆 142 抛物样条曲线 143 Mandelbrot分形图案 144 绘制布朗运动曲线 145 艺术清屏 146 矩形区域的颜色填充 147 VGA256色模式编程 148 绘制蓝天图案 149 屏幕检测程序 150 运动的小车动画 151 动态显示位图 152 利用图形页实现动画 153 图形时钟 154 音乐动画 第五部分 系统篇 155 读取DOS系统中的国家信息 156 修改环境变量 157 显示系统文件表 158 显示目录内容 159 读取磁盘文件 160 删除目录树 161 定义文本模式 162 设计立体窗口 163 彩色弹出菜单 164 读取CMOS信息 165 获取BIOS设备列表 166 锁住硬盘 167 备份/恢复硬盘分区表 168 设计口令程序 169 程序自我保护 第六部分 常见试题解答篇 170 水果拼盘 171 小孩吃梨 172 删除字符串中的特定字符 173 求解符号方程 174 计算标准差 175 求取符合特定要求的素数 176 统计符合特定条件的数 177 字符串倒置 178 部分排序 179 产品销售记录处理 180 特定要求的字符编码 181 求解三角方程 182 新完全平方数 183 三重回文数 184 奇数方差 185 统计选票 186 同时整除 187 字符左右排序 188 符号算式求解 189 数字移位 190 统计最高成绩 191 比较字符串长度 192 合并整数 193 矩阵逆置 194 删除指定的字符 195 括号匹配 196 字符串逆置 197 SIX/NINE问题 198 单词个数统计 199 方差运算 200 级数运算 201 输出素数 202 素数题 203 序列排序 204 整数各位数字排序 205 字符串字母移位 206 Fibonacc数列 第七部分 游戏篇 207 商人过河游戏 208 吃数游戏 209 解救人质游戏 210 打字训练游戏 211 双人竞走游戏 212 迷宫探险游戏 213 迷你撞球游戏 214 模拟扫雷游戏 215 推箱子游戏 216 五子棋游戏 第八部分 综合实例篇 217 综合CAD系统 218 功能强大的文本编辑器 219 图书管理系统 220 进销存管理系统

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧