怎么在不能用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;
}
我写的时候有一个错误,下次要避免