结构体之时间设计
题目要求:定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天,注意闰年问题。
#include<stdio.h>
struct Date{
int year;
int month;
int day;
};
int main()
{
int mon[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int total,i;
struct Date date;
scanf("%d%d%d",&date.year,&date.month,&date.day);
if((date.year%4==0 && date.year%100!=0)||date.year%400==0)
{
mon[1]=29;
}
for(i=0;i<date.month-1;i++)
{
total=total+mon[i];
}
total=total+date.day;
printf("%d",total);
return 0;
}
结构体之成绩记录
现有有N个学生的数据记录,每个记录包括学号、姓名、三科成绩。 编写一个函数input,用来输入一个学生的数据记录。 编写一个函数print,打印一个学生的数据记录。 在主函数调用这两个函数,读取N条记录输入,再按要求输出。 N<100
首先定义一个结构体进行信息存储
#include<stdio.h>
struct stu{
char num[100];
char name[100];
int score [3];
};
void input (struct stu* a,int n);
void output(struct stu* a,int n);
主函数
int main()
{
int n;
scanf("%d",&n);
struct stu a[n];
input(a,n);
output(a,n);
return 0;
}
输入存储信息
void input(struct stu *a,int n)
{
int i;
for(i=0;i<n;i++)
{
scanf("%s%s%d%d%d",&(a[i].num),&(a[i].name),&(a[i].score[0]),&(a[i].score[1]),&(a[i].score[2]));
}
}
输出学生信息
void output(struct stu *a,int n)
{
int i;
for(i=0;i<n;i++)
{
printf("%s,%s,%d,%d,%d\n",a[i].num,a[i].name,a[i].score[0],a[i].score[1],a[i].score[2]);
}
}
结构体之成绩统计2
题目要求:有N个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入N个学生的数据,要求打印出3门课的总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课成绩
定义结构体,存储信息
#include<stdio.h>
struct stu{
char num[100];
char name[100];
int score [3];
};
void input (struct stu* a,int n);
void pingjunfen(struct stu *a,int n);
void max(struct stu*a,int n);
主函数
int main()
{
int n;
scanf("%d",&n);
struct stu a[n];
input(a,n);
pingjunfen(a,n);
max(a,n);
return 0;
}
学生信息的输入
void input(struct stu *a,int n)
{
int i;
for(i=0;i<n;i++)
{
scanf("%s%s%d%d%d",&(a[i].num),&(a[i].name),&(a[i].score[0]),&(a[i].score[1]),&(a[i].score[2]));
}
}
判断哪一科的平均分最大
void pingjunfen(struct stu *a,int n)
{
int i;
int sum1=0,sum2=0,sum3=0;
for(i=0;i<n;i++)
{
sum1=sum1+a[i].score[0];
sum2=sum2+a[i].score[1];
sum3=sum3+a[i].score[2];
}
printf("%d %d %d",sum1/n,sum2/n,sum3/n);
printf("\n");
}
输出分数最高的学生的所有成绩
void max(struct stu *a,int n)
{
int t[n];
int i,max,x;
for(i=0;i<n;i++)
{
t[i]=a[i].score[0]+a[i].score[1]+a[i].score[2];
}
max=t[0];
for(i=0;i<n;i++)
{
if(t[i]>max)
{
max=t[i];
x=i;
}
}
printf("%s,%s,%d,%d,%d\n",a[x].num,a[x].name,a[x].score[0],a[x].score[1],a[x].score[2]);
}
汽水瓶
有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?
#include <stdio.h>
int main()
{
int n; //定义n为现有空瓶子数
while (scanf("%d", &n) != EOF && n) //循环输入n
{
int ans = 0; //定义答案 初始化为0
while (n >= 2) //循环n>=2时可继续换汽水
{
if (n >= 3) //模式一:n>=3时三个瓶子换一瓶汽水
{
int temp = n / 3; //temp记录当前瓶子可换取的汽水瓶数
ans += temp; //答案加上temp
n = n - temp * 3 + temp;//n减去换汽水消耗的瓶子,再加上新得到的瓶子
}
else if (n == 2) //模式二:两个瓶子可以借汽水再换
{
ans++; //答案加一
n = 0; //瓶子清零
}
}
printf("%d\n", ans); //输出答案
}
return 0;
}
弟弟的作业
你的弟弟刚做完了“100以内数的加减法”这部分的作业,请你帮他检查一下。每道题目(包括弟弟的答案)的格式为a+b=c或者a-b=c,其中a和b是作业中给出的,均为不超过100的非负整数;c是弟弟算出的答案,可能是不超过200的非负整数,也可能是单个字符"?",表示他不会算。
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a, b, c, num=0;
char s[10], c1;
while(scanf("%d%c%d=%s", &a, &c1, &b, s)!=EOF)
{
if(c1 == '+' && (a+b == atoi(s)))
num++;
else if(c1 == '-' && (a-b == atoi(s)))
num++;
}
printf("%d\n", num);
return 0;
}
atoi(char *p),它将字符串转换成整数。它会扫描p所指的字符串,跳过空白字符,直到遇见数字或正负号开始转换,再遇见非数字或字符串结束时才停止转换,并将结果返回,返回转换后的整数