经典的题目

1、有若干的人员的数据,其中有学生和教师。

学生的数据中包括:姓名、号码、性别、职业、班级。

教师的数据包括:姓名、号码、性别、职业、职务。要求用同一个表格来处理

#include<stdio.h>
struct{                //声明无名结构体类型
    int num;            //成员num(编号)
    char name[10];    
    char sex;
    char job;
    union{
    int class;
    char position[10];
    }category;        //成员category是共用体变量
}person[2];            //定义结构体数组person,有两个元素

int main(){
    int i;
    for(i=0;i<2;i++){
        printf("输入结构体的数据")
        scanf("%d,%s,%c,%c",&person[i].num,&person[i].name,&person[i].sex,&person[i].job);
        if(person[i].job=='s')
            scanf("%d",&person[i].category.class);//如是学生,输入班级
        else if(person[i].job=='t')
            scanf("%d",&person[i].category.position);
        else
            printf("Input error!");
        }
printf("\n");
for(i=0;i<2;i++)
{
 if(person[i].job=='s')
    printf("%-6d%-10s%-4c%-10s\n",person[i].num,person[i].name,person[i].sex,person[i].job,person[i].category.class);
else
    printf("%-6d%-10s%-4c%-10s\n",person[i].num,person[i].name,preson[i].sex,person[i].job,person[i].category.position);

}

    return 0;
}

有n个结构体变量,内含学生学号、姓名和三门课程成绩。要求输出平均分最高的学生的信息(包含学号、姓名、3门成绩和平均分)

#include<stdio.h>
#define N 3//学生数为3
struct Student{
    int num;
    char name[20];
    float score[3];
    float aver;
};
int main(){
    void input(struct Student stu[]);
    struct Student max(struct Student stu[]);
    void print(struct Student stu);
    struct Student stu[N],*p=stu;
    input(p);
    print(max(p));
    return 0;
}
void input(struct Student stu[])
{    int i;
     printf("请输入各个学生的信息:学号、姓名、3门课成绩\n");
     for(i=0;i<N;i++)
    {scanf("%d %s %f %f",&stu[i].num,stu[i].name,&stu[i].score[0],&stu[i].score[0],
        &stu[i].score[1],&stu[i].score[2]);
    stu[i].aver=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3.0;

 }
}
struct Student max(struct Student stu[])
{    int i,m=0;
     for(i=0;i<N;i++)
        if(stu[i].aver>stu[m].aver)m=i;
     return stu[m];
}
void print(struct Student stud){
    printf("\n成绩最高的学生是:\n");
    printf("学号:%d\n姓名:%s\n三门课成绩:%5.1f,%5.1f\n平均成绩:%6.2f\n",
    stud.num,stud.name,stud.score[0],stud.score[1],stud.score[2],stud.aver);

}

2、素数的判断

#include<stdio.h>
#include<math.h>
int main(){
    int n,i;
    print("输入数");
    scanf("%d",&n);
    k=sqrt(n)
    for(i=2;i<k;i++){
        if(n%i==0)break;
    if(i<k)print("%d不是素数\n",n);
    else printf("%d是素数\n",n);
    return 0;
}
}

3、鸡兔同笼,a只头,b只脚,问鸡兔各几只。

#include<stdio.h>
int main() {
	int a, b;
	printf("请输入总头");
	scanf_s("%d", &a);
	printf("请输入总脚");
	scanf_s("%d", &b);
	for (int i = 0; i <= a; i++) {//i代表鸡头 
		int j = a - i;			//j代表兔头
		if (2 * i + 4 * j == b) { printf("鸡:%d;兔:%d", i, j); }
	}
	return 0;
}

4、输出所有水仙花数。所谓“水仙花数”是指一个3位数,其各位数字立方和等于数本身。

例如,153是一水仙花数,因为153=1^{3}+5^{3}+3^{3}

#include<stdio.h>
int main() {
	int a,b,c,n;
	for (n = 100; n < 1000; n++) {
		a = n / 100;
		b = n / 10 % 10;
		c = n % 10;
		if (a * a * a + b * b * b + c * c * c == n) {
			printf("%d", n);
		}

	}
}

5、输入一行字符,分别统计出英文字母、空格、数字和其他字符的个数

#include<stdio.h>
int main(){
    char c;
    int zhimu=0,kongge=0,shuzi=0,other=0;
    printf("快快快输入字符:\n");
    while((c=getchar())!='\n')
    {
        if(c>='a'&&c<='z'||c>='A'&&c<='Z')
            zhimu++;
        else if(c=' ');
            kongge++;
        else if(c>='0'&&c<='9')
            shuzi++;
        else:
            other++;
}
    printf("字母数:%d\n空格数:%d\n其他字符数:%d\n",zhimu,kongge,shuzi,other);
    return 0;
}

6、输入两个正整数m和n,求其最大的公约数和最大公倍数。

1.选择两个整数a和b,其中a >= b。

2.用a除以b,得到余数r。

3.将b的值赋给a,将r的值赋给b。

4.重复步骤2和3,直到r等于0。此时,b即为最大公约数。

5.最小公倍数=两数的乘积/最大公约(因)数

#include<stdio.h>
int main(){
    int s,r,n,m,t;
    printf("输入两个整数n,m:");
    scanf("%d",%d",&n,&m);
    if(n<m){
        t=n;
        n=m;     
        m=t;
}
    s=n*m;
    while(m!=0)
    {
        r=n%m;
        n=m;
        m=r;
}
    printf("他最大公约数为:%d\n",n);
    printf("他最小公倍数是:%d\n",s/n);
    return 0;
}

7、口袋中有红、黄、蓝、白、黑5种颜色的球若干。若每次从口袋中先后取出3个球,问得到的三种颜色的可能取法,输出每次排列的情况。

#include<stdio.h>
int main(){
    enum Color{red,yellow,blue,white,black};
    enum Color i,j,k,pri;
    int n,loop;
    n=0;
    for(i=red;i<=black;i++)
        for(j=red;j<=black;j++)
            if(i!=j)
                {
                    for(k=red,k<=black;k++)
                    if((k!=i)&&(k!=j))
                        {n=n+1;
                         printf("%-4d",n);
                         for(loop=1;loop<=3;loop++)
                        {switch(loop)
                            {
                             case 1:pri=i;break;
                             case 2:pri=j;break;
                             case 3:pri=k;break;
                             default:break;
                           }
                    switch(pri)
                    {
                        case red:printf("%-10s","red");break;
                        case yellow:printf("%-10s","yellow");break;
                        case blue:printf("%-10s","blue");break;
                        case white:printf("%-10s","white");break;
                        case black:printf("%-10s","black");break;
                        default:break;}
}
printf("\n");
}
}
printf("\ntotal:%5d\n",n);
return 0;    


}


}

8、建立动态链表

#include<stio.h>
#include<stdlib.h>
#define LEN sizeof(struct Student)
struct Student
{
    long num;
    float score;
    struct Stuent * next;
    };
int n;
struct Student*creat(void)
{
    struct Student*head;
    struct Stuent *p1,*p2;
    n=0;
    p1=p2=(struct Student*)malloc(LEN);
    scanf("%d,%f",&p1->num,&p1->score);
    head=NULL;
    while(p1->num!=0){
        n=n+1;
        if(n==1)head=p1;
            else p2->next=p1;
        p2=p1;
        p1=(struct Student*)malloc(LEN);
        scanf("%ld,%f",&p1->num,&p1->score);

}
p2->next=NULL;
return(head);
}
int main(){
    struct Student * pt;
    pt=creat();
    printf("\nnum:%d\nscore:%5.1f\n",pt->num,pt->score);
    return 0;
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值