执行C语言程序时显示已停止工作
#include<stdio.h>#include<stdlib.h>#include<math.h>intcombine(float*a,float*b,intm,in...
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int combine(float *a,float *b,int m,int s,char c);
void compare(float f1,float f2,float l1,float l2,int *q,int *p);
int residual_sequence_rearrange(float *a,int c1,char choice_compare);
int main(void)
{
float a[10];
int i,c1,c2;
char choice_compare;
choice_compare='a';
c1=10;
printf("Enter a[10]:");
for(i=0;i<c1;i++)
scanf("%f",&a[i]);
c2=residual_sequence_rearrange(a,c1,choice_compare);
printf("c2 is %d\n",c2);
for(i=0;i<c2;i++)
printf("%f\n",a[i]);
return 0;
}
int residual_sequence_rearrange(float *a,int c1,char choice_compare)
{
double max;
int i,maxi,c2;
float c[10000];
max=fabs(*a);
for(i=1;i<c1;i++){
if(fabs(*(a+i))>max){
max=fabs(*(a+i));
maxi=i;
}
}
for(i=0;i<=maxi;i++)
*(c+i)=*(a+i);
for(i=0;i<(c1-maxi);i++)
*(a+i)=*(a+maxi+i);
c2=combine(a,c,(c1-maxi-1),maxi,choice_compare);
return c2;
}
int combine(float *a,float *b,int m,int s,char c)
{
float f1,f2,l1,l2;
int i,c2;
l1=*(a+m);
l2=*(a+m-1);
f1=*b;
f2=*(b+1);
if(c=='a'){
p=0;
q=1;
}
else if(c=='b'){
compare(f1,f2,l1,l2,&q,&p);
}
i=0;
while((i+p)<=s){
*(a+m+q+i)=*(b+p+i);
i++;
}
if(q==0){
if(p==0)
c2=m+s+1;
else
c2=m+s;
}
else{
if(p==0)
c2=m+s+2;
else
c2=m+s+1;
}
return c2;
}
void compare(float f1,float f2,float l1,float l2,int *q,int *p)
{
if(l1>l2){
if(f1>f2){
if(f1>l1){
*q=0;
*p=0;
}
else{
*q=1;
*p=1;
}
}
else{
if(f1>=l1){
*q=0;
*p=1;
}
else{
*q=1;
*p=0;
}
}
}
else{
if(f1>f2){
if(f1>l1){
*q=1;
*p=0;
}
else{
*q=0;
*p=1;
}
}
else{
if(f1>=l1){
*q=1;
*p=1;
}
else{
*q=0;
*p=0;
}
}
}
}
这个程序的大概意思是:将数列(程序中的数为10个)从绝对值最大点处截开,再首尾相接,形成新的数列。 展开
#include<stdlib.h>
#include<math.h>
int combine(float *a,float *b,int m,int s,char c);
void compare(float f1,float f2,float l1,float l2,int *q,int *p);
int residual_sequence_rearrange(float *a,int c1,char choice_compare);
int main(void)
{
float a[10];
int i,c1,c2;
char choice_compare;
choice_compare='a';
c1=10;
printf("Enter a[10]:");
for(i=0;i<c1;i++)
scanf("%f",&a[i]);
c2=residual_sequence_rearrange(a,c1,choice_compare);
printf("c2 is %d\n",c2);
for(i=0;i<c2;i++)
printf("%f\n",a[i]);
return 0;
}
int residual_sequence_rearrange(float *a,int c1,char choice_compare)
{
double max;
int i,maxi,c2;
float c[10000];
max=fabs(*a);
for(i=1;i<c1;i++){
if(fabs(*(a+i))>max){
max=fabs(*(a+i));
maxi=i;
}
}
for(i=0;i<=maxi;i++)
*(c+i)=*(a+i);
for(i=0;i<(c1-maxi);i++)
*(a+i)=*(a+maxi+i);
c2=combine(a,c,(c1-maxi-1),maxi,choice_compare);
return c2;
}
int combine(float *a,float *b,int m,int s,char c)
{
float f1,f2,l1,l2;
int i,c2;
l1=*(a+m);
l2=*(a+m-1);
f1=*b;
f2=*(b+1);
if(c=='a'){
p=0;
q=1;
}
else if(c=='b'){
compare(f1,f2,l1,l2,&q,&p);
}
i=0;
while((i+p)<=s){
*(a+m+q+i)=*(b+p+i);
i++;
}
if(q==0){
if(p==0)
c2=m+s+1;
else
c2=m+s;
}
else{
if(p==0)
c2=m+s+2;
else
c2=m+s+1;
}
return c2;
}
void compare(float f1,float f2,float l1,float l2,int *q,int *p)
{
if(l1>l2){
if(f1>f2){
if(f1>l1){
*q=0;
*p=0;
}
else{
*q=1;
*p=1;
}
}
else{
if(f1>=l1){
*q=0;
*p=1;
}
else{
*q=1;
*p=0;
}
}
}
else{
if(f1>f2){
if(f1>l1){
*q=1;
*p=0;
}
else{
*q=0;
*p=1;
}
}
else{
if(f1>=l1){
*q=1;
*p=1;
}
else{
*q=0;
*p=0;
}
}
}
}
这个程序的大概意思是:将数列(程序中的数为10个)从绝对值最大点处截开,再首尾相接,形成新的数列。 展开
3个回答
2013-09-01
展开全部
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
在头文件的下面增加这一语句:
int q,p;
你程序的功能和结果没有验证
更多追问追答
追问
不太明白你说的意思,能不能详细解释下
这个程序可以输出正确的计算结果,但是在输出结果后没有显示“Press any key to continue”,而是显示程序已停止工作
追答
你把出错的图片贴出来
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
是什么停止工作呢?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
p和q没定义啊
追问
定义p、q后,还是显示已停止工作
这个程序可以输出正确的计算结果,但是在输出结果后没有显示“Press any key to continue”,而是显示程序已停止工作
追答
得到结果就可以了,不要追究这个了。你用的什么编译器?可以试下www.52bianma.com上的在线编译器,看看结果是什么?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询