C编程的一个小题目:有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中。
#include<stdio.h>
int main()
{
int a[11]={1,4,6,9,13,16,19,28,40,100};
int temp,i=0,j=0;
scanf("%d",&temp);
for(i=9;i>=0;i--)
{
if(temp<a<i>){
a[i+1]=a<i>;
}else{
a[i+1]=temp;
break;
}
}
for(i=0;i<11;i++)
{
printf("%d",a<i>);
}
system("pause");
return 0;
}
扩展资料:
printf用法:
printf()函数的调用格式为:printf("<格式化字符串>",<参量表>)。
其中格式化字符串包括两部分内容:一部分是正常字符,这些字符将按原样输出;另一部分是格式化规定字符,以"%"开始,后跟一个或几个规定字符,用来确定输出内容格式。
参量表是需要输出的一系列参数,其个数必须与格式化字符串所说明的输出参数个数一样多,各参数之间用","分开,且顺序一一对应,否则将会出现意想不到的错误。
比如:
int a=1234;
printf("a=%d
",a);
输出结果为a=1234。
printf的格式控制的完整格式:
%-0 m.n l或h格式字符
下面对组成格式说明的各项加以说明:
①%:表示格式说明的起始符号,不可缺少。
②-:有-表示左对齐输出,如省略表示右对齐输出。
③0:有0表示指定空位填0,如省略表示指定空位不填。
④m.n:m指域宽,即对应的输出项在输出设备上所占的字符数。N指精度。用于说明输出的实型数的小数位数。为指定n时,隐含的精度为n=6位。
⑤l或h:l对整型指long型,对实型指double型。h用于将整型的格式字符修正为short型。
调试了一下,是末尾补值语句有逻辑错误,如下图:
数组a[],b[]在编译后在内存中是相邻的,即b[7]之后紧接a[0],在i=6时,b[]插入了23,j变成7,又走到i==6的判断,执行了b[j+1]=k语句,此时是b[8]=k(数组越界),b[8]就是a[0]的地址,故看到a[0]被赋值23.i==6的逻辑判断不严密。
修改代码和注释如下:
#include <stdio.h>
int main()
{
int i,j,k,a[]={3,5,7,9,10,12,35},b[8];
char flag_inserted=0; //增加1个已完成插入的标志,中间插入与后边补值互斥
printf("请输入需要插入的数:");
scanf("%d",&k);
for(i=0,j=0;i<7;i++,j++)
{
if(i==j)
{
if(k<a[i])
{
b[j]=k;
j=j+1;
flag_inserted=1;
}
//if((i==6) //需要过滤已插入值的情况
if((i==6)&&(flag_inserted==0))
b[j+1]=k;
}
b[j]=a[i];
}
printf("原数组为:");
for(i=0;i<7;i++)
printf("%5d",a[i]);
printf("
");
printf("新数组为:");
for(j=0;j<8;j++)
printf("%5d",b[j]);
printf("
");
return 0;
}
在VC6调试通过,如下图:
供参考。
米败林3009 :答:printf("请输入排好序的一串数字:\n");for(i=0;i<n;i++)scanf("%d",&a);printf("请输入要插入的数:");scanf("%d",&x);if(a[0]<a[1])//该数组按升序排列 { for(i=0;i<n;i++)if(x<a)break;for(j=n;j>=i;j--)//从插入位置后一位开始,每一个元素向后移一个位...
米败林3009 :答:include<stdio.h> define N 20 define M 11 void main() { int a[N]={1,3,5,7,9,11,13,15,17,19,21},x,i,j;scanf("%d",&x);for ( i=M;i>0;i++ ) if ( a[i-1]>x ) a[i]=a[i-1]; else break;a[i]=x;for ( i=0;i<M+1;i++ ) printf("%d ",a[i...
米败林3009 :答:include <stdio.h> int main() { int a[15] = {9,12,13,23,24,35,46,54,57,67,89}; int i,j,x,n = 11; int flag = 1; for(i = 0; i < n; ++i) printf("%d ",a[i]); printf("\n要插入的数:"); scanf("%d",&x); for(i = 0; i...
米败林3009 :答:int a[]={1,2,3,4,5,6,7,8};int alen = sizeof(a);int b[alen+1];int i;int c; //插入的 int ins = 0; //插入标记 for(i=0; i<alen; i++){ if(c
米败林3009 :答:} printf("\n");}//在有序数组插入数据,用折半插入法void InsertData(int data[],int *n,int x){ int j; int theLen; int low,high,mid; theLen=*n; data[0]=x; low=1; high=theLen; while(low<=high) { mid=(low+high)/2; if(data[mid...
米败林3009 :答:main( ){ int i,j,number;int a[11]={1,4,6,9,13,16,19,28,40,100};/*数组初始化时预留一位置*/ printf("array a:\n");for(i=0;i<10;i++) /* 输出数组原有元素 */ printf("%d ",a[i]);printf("\n");printf("Insert data:");scanf("%d"...
米败林3009 :答:以下代码创建了一个奇数线性表和一个偶数线性表,奇数表有10个节点,偶数表有5个节点。先看运行结果 以下是代码 include <stdio.h>#include <stdlib.h>typedef struct List { int number; struct List*next;} LinearList;LinearList*createList(int);LinearList*createList2(int);void freeList(...
米败林3009 :答:include <stdio.h>int main(int argc, const char *argv[]){int i = 0, j = 0;int a[11] = {10,20,30,40,50,60,70,80,90,100};int n = 0;int num = 10;int tmp = 0;printf("原有数组:\n");for (i=0; i<num; i++){printf("%d ",a[i]);}printf("\n");...
米败林3009 :答:抄代码抄错了 最后一个printf 后面用a[i] 这里不需要&的。第一个空填的不对。include <stdio.h>void main(){int x,i,k=10;int a[11]={5,11,21,31,41,51,61,71,81,91}printf("请输入需要插入的一个整数:");scanf("%d",&x);k=10;for(i=0;i<10;i++)if(x>a[i]){k...
米败林3009 :答:4 2012-04-22 把一个整数x按大小顺序插入已排好序(从大到小,数据已定义)的... 2015-11-16 c语言,有一个已安排好序的数组,要求输入一个数后,按原来排序... 2012-01-05 c语言编程:将一个任意整数插入到已排列的整型数组中,插入后,... 31 更多...