一道c语言编程题,求高手帮忙,填空题

程序说明
本程序为六个整型变量A、B、C、D、E、F输入整数,并按从大到小的顺序输出他们的名和值,如某次A、B、C、D、E、F的输入值为3、2、5、7、4、6,则程序将输出:D(7)F(6)C(5)E(4)A(3)B(2)
程序:
#define N sizeof tbl[0]
int A,B,C,D,E,F;
struct ele {
char vn;
int *vp;
}tbl[]={{'A',&A},{'B',&B},{'C',&C},{'D',&D},{'E',&E},{'F',&F}},t

main()
{
int k,j,m;
for (k=0;k<N;k++)
{ printf("Enter data for %c\n",tbl[k].vn);
scanf("%d",__(1)__);
}
m=N-1;/*采用冒泡法排序*/
while(m>0)
{
for (k=j=0;j<m;j++)
if (__(2)___)
{
t=tbl[j];
tbl[j]=tbl[j+1];
tbl[j+1]=t;
___(3)___;
}
m=__(4)__;/*本框填m-1不给分*/
}
for (k=0;k<N;k++)
printf("%c(%d)",_(5)___,____(6)__) ;
printf("\n");
}

这道题本身是错误的,应该把#define N sizeof tbl[0] 改成:#define N sizeof tbl / sizeof t。不然输入的时候就有错误了,具体为什么要这样改自己想想,呵呵,改完之后答案就是下面这个了:

(1) tbl[k].vp
(2) *tbl[j].vp < *tbl[j+1].vp
(3) k=j
(4) k
(5) tbl[k].vn
(6) *tbl[k].vp

在vc6.0下运行测试过的:
#include <stdio.h>
#define N sizeof tbl / sizeof tbl[0]
int A,B,C,D,E,F;
struct ele {
char vn;
int *vp;
}tbl[]={{'A',&A},{'B',&B},{'C',&C},{'D',&D},{'E',&E},{'F',&F}},t;

void main()
{
int k,j,m;
for (k=0;k<N;k++)
{ printf("Enter data for %c\n",tbl[k].vn);
scanf("%d",tbl[k].vp);
}
m=N-1;/*采用冒泡法排序*/
while(m>0)
{
for (k=j=0;j<m;j++)
if (*tbl[j].vp < *tbl[j+1].vp)
{
t=tbl[j];
tbl[j]=tbl[j+1];
tbl[j+1]=t;
k=j;
}
m=k;/*本框填m-1不给分*/
}
for (k=0;k<N;k++)
printf("%c(%d)",tbl[k].vn,*tbl[k].vp) ;
printf("\n");
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-03-19
#define N sizeof tbl[0]
int A,B,C,D,E,F;
struct ele {
char vn;
int *vp;
}tbl[]={{'A',&A},{'B',&B},{'C',&C},{'D',&D},{'E',&E},{'F',&F}},t;

main()
{
int k,j,m;
for (k=0;k<6;k++)
{ printf("Enter data for %c\n",tbl[k].vn);
scanf("%d",tbl[k].vp);
}
m=6-1;/**/
while(m>0)
{
for (k=j=0;j<m;j++)
if (*tbl[j].vp<*tbl[j+1].vp)
{
t=tbl[j];
tbl[j]=tbl[j+1];
tbl[j+1]=t;
/*t.vp=tbl[j].vp,tbl[j].vp=tbl[j+1].vp,tbl[j+1].vp=t.vp;*/
}
m=m-1;/*m-1*/
}
for (k=0;k<6;k++)
printf("%c(%d)",tbl[k].vn,*(tbl[k].vp)) ;
printf("\n");
}

题目本身就怪怪的,改成这样大家看看。
第2个回答  2009-03-19
#include<stdio.h>
#define N 6

void main()
{ int A,B,C,D,E,F;
struct ele {
char vn;
int *vp;
}tbl[]={{'A',&A},{'B',&B},{'C',&C},{'D',&D},{'E',&E},{'F',&F}},t;

int k,j,m;
for (k=0;k<N;k++)
{ printf("Enter data for %c\n",tbl[k].vn);
scanf("%d",&(*tbl[k].vp));
}
m=N-1;/*采用冒泡法排序*/
while(m>0)
{
for (k=j=0;j<m;j++)
if (*tbl[j+1].vp>*tbl[j].vp)
{
t=tbl[j];
tbl[j]=tbl[j+1];
tbl[j+1]=t;
k=j;
}
m=k;/*本框填m-1不给分*/
}
for (k=0;k<N;k++)
printf("%c (%d)",tbl[k].vn,*tbl[k].vp) ;
printf("\n");
}
冒泡排序背下来就好了
每次交换要记录交换位置 就是变量k的作用
vp为指针 要引用其所指的变量要加*
这个是经过编译器调试的 若果有不明白的可以给我留言 祝你好运喽
第3个回答  2009-03-19
1.&tbl[k]
2.tbl[j]<tbl[j+1]
3.
4.
5.tbl[k].vn
6.tbl[k].vp

C语言作业,求大神帮忙
\/\/由于时间关系,我也准备断网了,先写了前边4题,剩下的明天有空再帮你补上 1、程序填空1 include <stdio.h> include <string.h> define ARR_SIZE 80 main(){ char str[ARR_SIZE];int len, i, letter=0, digit=0, space=0, others=0;gets(str);for (i=0;i < strlen(str); ...

电脑C语言编程,求高手帮忙
1.include<stdio.h> void main(){ int n[8],maxn=0,minn=0,detn;float score[8],max,min,aver=0.0,det,detm;printf("输入裁判号及分数:\\n");scanf("%d%f",&n[0],&score[0]);max=min=score[0];for(int i=1;i<8;i++){ scanf("%d%f",&n[i],&score[i]);if(max<...

C语言高手,帮帮忙
然后在执行i=st%i,因为初值i=10,经过执行第一句后st=75,所以i=75%10 ,所以是5 (8) !(非) &&(且) ||(或)(9) 1,2,3 因为if的条件是a>c,那么要当a>c成立的时候,才执行后面的语句,但是初值给出了a=1,c=3,所以,不执行后面的语句,所以还是现实原来的值 (10)x=0;...

请C语言编程高手帮忙帮我看看下面的题目
① 倒填 ② 蛇形填数 ③ 回转填数 这个你应该看的懂吧 你在表中从1数到25就知道怎么填的了 然后再看程序 应该很简单的啊 你得把程序循环得层次弄清楚 例如③ 回转填数 int i,j,k=1,m,mi,mj,a[NUM][NUM],ind[4]={NUM-1,NUM-1,0,1}; \/*i为行号,j为列号,k当前填的数...

几道简单的C语言编程题,请高手帮忙
void main(){ int i,element,sum=0;for(i=1;i<=101;i+=2){ element=-i;sum=sum+element;sum=-sum;} printf("%d\\n",sum);} 2、编写程序,判断一个数是否是素数。6n+1,6n-1法代码 include<stdio.h> int main(){ int data[5]={2,3,5,7};int n;scanf("%d",&n);if(n=...

求C语言练习题答案
二、填空题 1. ___变量__是指在程序运行过程中,值可以发生变化的量。2.C语言是一种___区分_(区分\/不区分)字母大小写的语言,Password和password在C语言中是两个___不同__(相同\/不同)的标识符。3.下面的转义字符分别表示:’\\b’__退格___,’\\n’__换行___,’...

C语言求平均年龄 求高手帮忙 班上有学生若干名,给出每名学生的年龄(整...
int main (){ int num,sum,i;int a[100];double each;sum=0;scanf("%d",&num);each=num;for(i=0;i<num;i++){ scanf("%d",&a[i]);sum+=a[i];} printf("%d\\n",sum);each\/=sum;printf("%.2f",each);return 0;} each 没有被num赋值 数组下标是从0开始到最大-1 实际...

请各位C语言高手帮忙解决下面的问题。
int binary_find(int * a, int target, int low, int high){ if (low > high){ return -1;} else if (a[(low + high)\/2] == target){ return (low + high)\/2;} else if (a[(low + high)\/2] > target){ return binary_find(a, target, low, (low + high)\/2 - 1)...

一道C语言编程问题,高手们来看看帮忙解答下
int c;int sum;\/\/ABC之和。for (a = 100;a > 0;a--)\/\/以A为循环变量,在1到100之间。{ for (b = a-1;b > 0;b--)\/\/以B为循环变量,在1到A之间。{ for (c = b-1;c > 0;c--)\/\/以C为循环变量,在1到B之间。{ \/\/判断公式左右两侧是不是相等,相等侧符合题目要求 if...

[急求助]C语言程序编程题,请高手帮忙解答下!
按照题目要求编写的程序如下(见图)

相似回答