c-C初学者编程问题 指针对应修改问题 求思路

问题描述

C初学者编程问题 指针对应修改问题 求思路

#include
#include
//阅读程序,在读懂程序的基础上运行程序,
//观察运行结果,发现其中出现的问题,并解决:
//修改BubbleSort函数(函数头也可修改),使得
//在对成绩排序时,各成绩对应的人名也做相应调整
//typedef int INT;
//typedef char * PCHAR;
typedef char STR[10];
typedef STR * PSTR;

//输入成绩的函数
float* inputScore(int* n)
{
int m, i;
printf("请输入人数:");
scanf("%d", n);
float score =NULL;
m = *n;
score = (float *)malloc(
sizeof(float)*m);
for (i = 0; i < m; ++i)
{
scanf("%f", &score[i]);
}
return score;
}
STR
inputNames(int n)
{
STR* s=NULL;
int i;
s=(STR* )malloc(sizeof(STR)*n);
while(getchar()!='n');
printf("请输入%d个名字(一行一个):n",n);
for(i=0;i<n;i++)
gets(s[i]);
return s;
}
void printRecord(STR *s,float a[], int m)
{
int i;
for (i = 0; i < m; ++i)
printf("%st%-6.1fn",s[i],a[i]);
putchar('n');
}
void printNames(STR s[], int n)
{ int i;
for(i=0;i<n;i++)
puts(s[i]);
return;
}
//修改这个函数(函数头也可修改),使得
//在对成绩排序时,各成绩对应的人名也做相应调整
void BubbleSort(float a[], int n)
{
int i,j;
float t;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-i-1;j++)
{
if(a[j]<a[j+1])
{
t = a[j];
a[j] = a[j+1];
a[j+1]=t;
}
}
}
}

int main()
{
int n;
float *p = inputScore(&n);
STR * names=NULL;
names = inputNames(n);
printRecord(names,p, n);
//printNames(names, n);
BubbleSort(p,n);
printRecord(names,p, n);
return 0;
}


解决方案

排序那个地方,就不说了啦,如果你真打算这么做,也可以,将两个数组都传过去,在交换分数的时候,也交换名字就可以了。

值得一提的是,你这代码估计编译都不过

1. 输入分数的函数 float score =NULL; 应该是 float score =NULL;

2. 函数inputNames返回类型应该是PSTR

3. 还是输入名字这个函数里,你知道这个s=(STR )malloc(sizeof(STR)*n);是什么意思吗?申请一个10*n这么大的连续空间。

你想和分数一一对应没错,但是如果这样做的话,交换分数的时候,名字要来回拷贝的。

倒不如这样做:

s=(PSTR* )malloc(sizeof(PSTR)*n);首先生成这么大的一块指针,然后每个名字s[i]再申请sizeof(STR)的大小的地方

到时候,你i交换分数的时候,将s也交换了,就行了。

还有gets是一个很危险的函数,尽量做好长度判断,到时候越界就不好办了。

解决方案二:

我建议你别这么干,你把每个学生的信息定义一个struct,然后把struct放到数组或列表,对这个列表排序,这样就不需要你再改每个学生的具体信息了

解决方案三:

把学生写成struct ,然后再用malloc添加学生做成链表,或者直接建立数组也行

解决方案四:

很简单做成链表就OK

时间: 2024-12-22 14:03:40

c-C初学者编程问题 指针对应修改问题 求思路的相关文章

c语言-C语言初学者提问,不会修改程序

问题描述 C语言初学者提问,不会修改程序 可以运行,但是达不到目的,不会修改 程序代码: typedef struct /* 学生结构 / { short status; / 数据状态,0:正常 1:删除 / char number[10]; / 学号 / char name[20]; / 姓名 / char sex[3]; / 性别 / int age; / 年龄 / char place; / 籍贯 / char department; / 系别 / char major; / 专业 / i

python初学者编程过程中遇到问题

问题描述 python初学者编程过程中遇到问题 用python编写了个Person类:''Created on 2014年9月19日 @author: Administrator''' class Person: def __init__(selfnameagesalary=0job=None): self.name=name self.age=age self.salary=salary self.job=jobdef lastName(self): return self.name.spli

http协议系统之间交互,出现的编程的报错。我该怎样修改?求大神啊

问题描述 http协议系统之间交互,出现的编程的报错.我该怎样修改?求大神啊 现在我们系统跟gps之间交互,我采用的httpClient,可是每次跑程序的时候都会报错 java.net.SocketException: Software caused connection abort: recv failed at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.read(Un

c 指针 函数调用-C语言指针和数组问题求帮助

问题描述 C语言指针和数组问题求帮助 当我运行input和display函数时正常工作,但是调用sum结果就乱了,不知道哪里出问题了,求帮助. 代码如下: #include #define ROWS 3 #define COLS 5 void input(double arr[][COLS],int n,int m); void display(double arr[][COLS],int n,int m); void sum(double arr[][COLS],int n,int m); i

c++-C++指针赋值问题,求帮助!

问题描述 C++指针赋值问题,求帮助! int a=12; int b; int *p; int **ptr; p=&a;//&a的结果是一个指针,类型是int*,指向的类型是int,指向的地址是a的地址. *p=24;//*p的结果,在这里它的类型是int,它所占用的地址是p所指向的地址,显然,*p就是变量a. ptr=&p;//&p的结果是个指针,该指针的类型是p的类型加个*,在这里是int**.该指针所指向的类型是p的类型,这里是int*.该指针所指向的地址就是指针p

编程-Yahoo UI(引用)问题,求高手指教!

问题描述 Yahoo UI(引用)问题,求高手指教! http://img.my.csdn.net/uploads/201309/02/1378129656_3660.jpg <!DOCTYPE html> new document <!--引入一个yui3的种子文件--> .hello{ background-color:red } <script type="text/javascript" src="http://yui.yahooapis

网络编程 ping程序有点问题,求大神帮忙看看

问题描述 网络编程 ping程序有点问题,求大神帮忙看看 // ping.cpp : 定义控制台应用程序的入口点. #include "stdafx.h" #include #pragma comment(lib,"ws2_32") //定义ICMP首部 typedef struct icmp_hdr{ unsigned char icmp_type; //ICMP消息类型,回显请求:8,回显应答请求:0 unsigned char icmp_code; //代码,

shell 编程 语句-shell编程中的语句问题,求解答

问题描述 shell编程中的语句问题,求解答 #!/bin/bash use=cat cat_greet() { echo "hello cat" } if [ $use=cat ] then cat_greet fi no_exit=1 [[ $no_exit -eq 1 ]]&& exit(){true;} exit 这个程序输出结果为 hello cat 我想问的是 [[ $no_exit -eq 1 ]]&& exit() {true;} 这一句

服务器-前端页面我做的差不多了,但是不懂如何和后端交互,还有哪些是不能交互的需要修改的求帮助

问题描述 前端页面我做的差不多了,但是不懂如何和后端交互,还有哪些是不能交互的需要修改的求帮助 <div class=""am-list-news-bd""> <ul class=""am-list""> <li class=""am-g am-list-item-dated""> <a href=""invite-list.