本文主要是介绍期末复习4---PTA之前题目复习,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
怎么在不能用strlen也就四没有string.h头文件的时候实现统计字符串的长度?
字符串的逆序(看收藏里面的题)
#include <stdio.h>
void f(char *p);int main()
{char s[1000];gets(s);f(s);printf("%s",s);return 0;
}void f(char *p)
{int i=0;int q,k=0;while(p[i]!='\0'){i++;}while(k<i){q=p[k];p[k]=p[i-1];p[i-1]=q;k++;i--;}
}
输入输出函数实现
void InputArr( struct student arr[], int n, int m )
{int i;for(i=0;i<n;i++){scanf("%ld %s",&arr[i].id,arr[i].name);for(int j=0;j<m;j++){scanf("%d",&arr[i].score[j]);}}
}void OutputArr( struct student arr[], int n, int m )
{double average;for(int i=0;i<n;i++){average=(double)(arr[i].score[0]+arr[i].score[1]+arr[i].score[2])/m;printf("%8ld%8s%4d%4d%4d%6.1f\n",arr[i].id,arr[i].name,arr[i].score[0],arr[i].score[1],arr[i].score[2],average);}
}
找出总分最高的同学信息
存在的问题:sum,average,max这些变量到底在什么时候去定义,定义完后分别该怎么用?
有一个最简单的办法,就是代码写的长,但是不用担心这样的问题
#include <stdio.h>
struct student{char num[6];char name[11];int a,b,c;
};
int main()
{int n;scanf("%d",&n);struct student stu[n];int i;for(i=0;i<n;i++){scanf("%s%s%d%d%d",stu[i].num,stu[i].name,&stu[i].a,&stu[i].b,&stu[i].c);}int max=0;for(i=1;i<n;i++){if(stu[i].a+stu[i].b+stu[i].c>stu[max].a+stu[max].b+stu[max].c)max=i;}printf("%s %s %d",stu[max].name,stu[max].num,stu[max].a+stu[max].b+stu[max].c);return 0;
}
经过修改实验
sum最好定义到结构体里面,后面才可以用stu[i].sum
max最好直接int max=0;
下面的循环从1开始
更改以后的简便一点的
相应代码:
#include <stdio.h>
struct student{char num[6];char name[11];int a,b,c;int sum;
};
int main()
{int n;scanf("%d",&n);struct student stu[n];int i;for(i=0;i<n;i++){scanf("%s%s%d%d%d",stu[i].num,stu[i].name,&stu[i].a,&stu[i].b,&stu[i].c);}int max=0;for(i=1;i<n;i++){stu[i].sum=stu[i].a+stu[i].b+stu[i].c;if(stu[i].sum>stu[max].sum)max=i;}printf("%s %s %d",stu[max].name,stu[max].num,stu[max].sum);return 0;
}
从大到小或者从小到大排序----冒泡排序---双重循环i,j
#include<stdio.h>
#include<string.h>struct student{char name[10];int birth;char tale[21];}stu[10],stu1;int main() {int i,j,n;scanf("%d",&n);for(i=0;i<n;i++){scanf("%s %d %s",stu[i].name,&stu[i].birth,stu[i].tale);}for( i=0;i<n-1;i++){for( j=0;j<n-i-1;j++){if(stu[j].birth>stu[j+1].birth){stu1=stu[j];stu[j]=stu[j+1];stu[j+1]=stu1;}}}for(i=0;i<n;i++){printf("%s %d %s\n",stu[i].name,stu[i].birth,stu[i].tale);}return 0;}
我写的时候有一个错误,下次要避免
这篇关于期末复习4---PTA之前题目复习的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!