使用指针数组:
#include <stringh>
#include <stdioh>
#include <stdlibh>
int main()
{
char test[]={ "this is a test ", "test 2 ", " "};
int i=0;
while(strcmp(test[i], " ") != 0)
puts(test[i++]);
system( "PAUSE ");
return 0;
}
#include<stdioh>
void main()
{
int i,x,j;
int a[6]={1,5,10,15,20};
scanf("%d",&x);
for(i=0;i<5;i++)
if(x<a[i])
{
j=i; /当这个数比当前数小时,用j记住当前位置,即j=i,中断循环。比当前数大时继续下一个(小应当在左侧,大则在右侧) /
break;
}
for(i=5;i>=j;i--)
a[i+1]=a[i]; /将位置j以后的数据都向后移一位/
a[i+1]=x; / 把要插入的数x放到a[i]中,因为i--后 i 比实际要插入的位置少1,所以真正插入的位置应该i+1/
for(i=0;i<=5;i++) /这时一共有6个数/
{
printf("%d ",a[i]);
}
}#include<stdioh>
void main()
{int i,j;
for(i=0;i<5;i++)
{j=i;
while(j--!=0)
printf(" ");
printf(" \n");}
}使用malloc函数动态分配内存:
#include<stdioh>
#include<malloch>
int main()
{
int num;
scanf("%d",&num);
int arr = (int)malloc(sizeof(int)num);
return 0;
}
题目是5x5数组,写成程序必须具有通用型,代码通过改行列常量,实现任意大小矩阵求对角线。
通过对角线元素下标关系,可以获得所有对角线元素地址,并存放在指针数组中返回。
通过元素地址与首地址差值及列数运算得其位置。
注意:最大值存在多个相同元素,只返回找到的第一个元素位置。
25个元素我直接用随机数填充数组,你需要手动输入,在我标注的地方写scanf语句。
在输出所有对角线元素那里,中心元素被打印了2次(正反对角线算了2次),但不影响本题目,(地址运算),这题不需要打印所有对角线元素,你可直接把打印所有元素的那个函数注销掉,或者加一个中心地址判断。
#include<stdioh>
#include<stdlibh>
#include<timeh>
#define MRC 5//数组最大行列数
void pArrInfo(int a[][MRC]);
int getP(int a[][MRC]);
int main()
{
int i=MRCMRC,a[MRC][MRC],p=&a[0][0],pa=NULL;
int sum=0,z,y,max,mp=NULL;
srand(time(NULL));
while(i--)
p=rand()%99+1,p++;//1~99 随机数填充数组,你想手动输入,在这里写scanf函数
max=a[0][0];
pArrInfo(a);
pa=getP(a);
printf("所有对角线的元素为:\n");
i=MRC+MRC;
while(i--)
{
printf("%d ",pa);
sum+=pa;
if(max<pa)
max=pa,mp=pa;
pa++;
}
printf("\n对角线元素总和为:%d\n",sum);
z=mp-&a[0][0]+1;//第几个元素
y=(mp-&a[0][0]+1)%MRC;//整除列数后余数
printf("其中最大值是%d,位置是第%d行第%d列\n",max,y>0z/MRC+1:z/MRC,y>0y:MRC);
return 0;
}
void pArrInfo(int a[][MRC])
{
int i,j;
for(i=0;i<MRC;i++,printf("\n"))
for(j=0;j<MRC;j++)
printf("%2d ",a[i][j]);
}
int getP(int a[][MRC])
{
static int pa[MRC+MRC];
int i,j,k=0;
for(i=0;i<MRC;i++)//正向对角线
for(j=0;j<MRC;j++)
if(i==j)
pa[k++]=&a[i][j];
for(i=MRC-1;i>=0;i--)//反向对角线
for(j=0;j<MRC;j++)
if((MRC-1)-i==j-0)
pa[k++]=&a[i][j];
return pa;
}
#include <stdioh>#include <memoryh>
#include <stdlibh>
#include <stringh>
typedef struct data {
int number;
char name[20];
char id[20];
double score[3];
}dataType;
typedef struct list {
dataType pauline;
struct list next;
}LinkList,pNode,Node;
void getMemory(size_t size) {
return malloc(size);
}
LinkList getEmptyList() {
LinkList head = (pNode)getMemory(sizeof(Node));
memset(head,0,sizeof(Node));
return head;
}
int addNode(LinkList head,pNode pnode) {
pNode q;
for(q = head; q->next; q = q->next)
if(q->next->paulineid == pnode->paulineid) return 0;
q->next = pnode;
pnode->next = NULL;
return 1;
}
// 按学号升排序
void sortNumber(LinkList head) {
pNode p,q,pt,qt;
p = head;
while(p->next) {
qt = p;
q = p->next;
while(q->next) {
if(qt->next->paulinenumber > q->next->paulinenumber)
qt = q;
q = q->next;
}
if(qt != p) {
pt = p->next;
p->next = qt->next;
qt->next = qt->next->next;
p->next->next = pt;
}
p = p->next;
}
}
// 按第th门成绩降排序,th = 1,2,3
void sortScore(LinkList head,int th) {
pNode p,q,pt,qt;
int i;
if(th < 1 || th > 3) return;
i = th - 1;
for(p = head; p->next; p = p->next) {
qt = p;
q = p->next;
while(q->next) {
if(qt->next->paulinescore[i] < q->next->paulinescore[i])
qt = q;
q = q->next;
}
if(qt != p) {
pt = p->next;
p->next = qt->next;
qt->next = qt->next->next;
p->next->next = pt;
}
}
}
void show(LinkList head) {
pNode p;
for(p = head->next; p; p = p->next ) {
printf("%d\t%s\t%s\t%2lf\t%2lf\t%2lf\n",
p->paulinenumber,p->paulinename,p->paulineid,
p->paulinescore[0],p->paulinescore[1],p->paulinescore[2]);
}
}
pNode readData() {
pNode pnode = (pNode)getMemory(sizeof(Node));
int i;
printf("学 号:");
scanf("%d",&pnode->paulinenumber);
printf("姓 名:");
scanf("%s",pnode->paulinename);
printf("身份z:");
scanf("%s",pnode->paulineid);
for(i = 0; i < 3; ++i) {
printf("第%d门成绩:",i + 1);
scanf("%lf",&pnode->paulinescore[i]);
}
return pnode;
}
void menu() {
printf("\n");
printf(" 学生成绩管理系统 \n");
printf("\n");
printf(" 1、添加学生信息 \n");
printf(" 2、显示学生信息 \n");
printf(" 3、按学号排序 \n");
printf(" 4、按成绩排序 \n");
printf("\n");
printf(" 0、退出 \n");
printf("\n");
}
int main() {
char op[20];
int select;
LinkList head = getEmptyList();
do {
menu();
printf("请选择:");
fflush(stdin);
fgets(op,20,stdin);
fflush(stdin);
switch(op[0] - '0') {
case 1 : addNode(head,readData()); break;
case 2 : show(head); break;
case 3 : sortNumber(head); break;
case 4 : printf("按第几门功课排序;");
scanf("%d",&select);
sortScore(head,select);
break;
}
}while(op[0] - '0');
printf("END\n");
return 0;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)