南師大複試編程訓練十

91.建立動態數組,輸入5個學生的成績,另外用一個函數檢查其中有無低於60分的,輸出不合格的成績

#include <stdio.h>
#include <stdlib.h>

void check(int *p)    //打印成績<60的
{
    int i;
    for(i=0; i<5; i++)
        if(*(p+i)<60)
            printf("%d ",*(p+i));
    printf("\n");
}

int main()
{
    int *p1,i;
    p1=(int *)malloc(5*sizeof(int));  //動態開闢空間
    for(i=0; i<5; i++)
        scanf("%d",p1+i);  //p1+i爲地址
    check(p1);
    return 0;
}

運行結果:

92.驗證:哥德巴赫猜想:一個不小於6的偶數可以表示爲兩個素數之和。例:34=3+31

#include <stdio.h>
#include <math.h>
int prime(int m)  //判斷是否爲素數
{
    int i,k;
    k=sqrt(m);
    for(i=2; i<=k; i++)
        if(m%i==0)
            break;
    if(i>k)
        return 1;
    else
        return 0;
}

void godbaha(int n)
{
    int a,b;
    for(a=3; a<=n/2; a+=2)   //a爲第一個素數,一定不大於n/2
    {
        if(prime(a))
        {
            b=n-a;       //判斷第二個是否爲素數
            if(prime(b))
                printf("%d=%d+%d\n",n,a,b);
        }
    }
}

int main()
{
    int number;
    printf("輸入一個不小於6的偶數:");
    scanf("%d",&number);
    godbaha(number);
    printf("\n");
    return 0;
}

運行結果:

93.輸入10個學生的姓名、學號和成績,將其中不及格者的姓名、學號和成績輸出

#include <stdio.h>

int main()
{
    char name[10][10];   //姓名
    int no[10];       //學號
    float score[10];   //成績
    int i;
    for(i=0; i<10; i++) //三者通過數組下標相聯繫
        scanf("%s %d %f",name[i],&no[i],&score[i]);
    printf("打印成績不及格的學生:\n");
    for(i=0; i<10; i++)
        if(score[i]<60)
            printf("%s %d %.2f\n",name[i],no[i],score[i]);

    return 0;
}

運行結果:

94.定義結構體,打印成員信息

#include <stdio.h>

struct Student
{
    long int num;   //學號
    char name[20]; //姓名
    char sex;   //性別
    char addr[30];  //地址
} s1= {10101,"Li Lin",'M',"123 Beijing Road"};
int main()
{
    printf("No:%ld\nname:%s\nsex:%c\naddress:%s\n",s1.num,s1.name,s1.sex,s1.addr);  //輸出
    return 0;
}

運行結果:

95.有3個候選人,每個選民只能投1人,編一個程序,得投票結果

#include <stdio.h>
#include <string.h>
struct Person
{
    char name[30];  //姓名
    int count;  //票數
} leader[3]= {"Li",0,"Zhang",0,"Sun",0};
int main()
{
    int i,j;
    char leader_name[30];
    for(i=0; i<10; i++)   //依次輸入10個票選
    {
        scanf("%s",leader_name);
        for(j=0; j<3; j++)   //輸入一個判斷一次
            if(strcmp(leader_name,leader[j].name)==0)  //將候選人票數加1
                leader[j].count++;
    }
    printf("Result:\n");   //輸出各候選人票數
    for(i=0; i<3; i++)
        printf("%5s:%d\n",leader[i].name,leader[i].count);
    printf("\n");
    return 0;
}

運行結果:

96.有n個學生,按成績的高低輸出學生信息

#include <stdio.h>

struct Student   //學生結構體
{
    int num;
    char name[20];
    float score;
};
int main()
{
    struct Student stu[5]= {{10101,"Zhang",78},{10102,"Wang",98.5},{10106,"Li",86},{10108,"Ling",73.5},{10110,"Sun",100}};
    struct Student temp;
    const int n=5;
    int i,j;
    for(i=0; i<n-1; i++)   //根據成績進行冒泡排序
        for(j=0; j<n-i-1; j++)
            if(stu[j].score>stu[j+1].score)
            {
                temp=stu[j];   //結構體可以直接進行賦值
                stu[j]=stu[j+1];
                stu[j+1]=temp;
            }
    for(i=0; i<n; i++)  //輸出排序後的結果
        printf("%6d %8s %6.2f\n",stu[i].num,stu[i].name,stu[i].score);
    printf("\n");
    return 0;
}

運行結果:

97.有n個結構體變量,內含學生學號,姓名和三門成績。要求:輸出平均成績最高的學生信息

#include <stdio.h>
#define N 3
struct Student   //學生結構體
{
    int num;  //學號
    char name[20];  //姓名
    float score[3]; //三門成績
    float aver;  //平均成績
};

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 input(struct Student stu[])  //輸入學生信息及求平均成績
{
    int i;
    for(i=0; i<N; i++)
    {
        scanf("%d %s %f %f %f",&stu[i].num,stu[i].name,&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;
    }
}

void print(struct Student stud)  //打印學生信息
{
    printf("%d\n%s\n%5.1f\n%5.1f\n%5.1f\n%6.2f\n",stud.num,stud.name,stud.score[0],stud.score[1],stud.score[2],stud.aver);
}

int main()
{
    struct Student stu[N],*p=stu;
    input(p);  //直接用stu相同
    printf("平均成績最高的學生:\n");
    print(max(p));  //直接用stu相同
    return 0;
}

運行結果:

98.指向結構體變量的指針

#include <stdio.h>
#include <string.h>
struct Student
{
    long num;
    char name[20];
};
int main()
{
    struct Student stu_1;
    struct Student *p;   //定義指向結構體變量的指針
    p=&stu_1;
    stu_1.num=10101;
    strcpy(stu_1.name,"Li Ming");     //下述三種方法結果相同
    printf("直接調用:\n");
    printf("No:%ld\nname:%s\n",stu_1.num,stu_1.name);
    printf("結構體變量指針調用用法:\n");
    printf("No:%ld\nname:%s\n",(*p).num,(*p).name);  //用*p調用
    printf("No:%ld\nname:%s\n",p->num,p->name);   //用p->調用

    return 0;
}

運行結果:

99.結構體變量指針的用法

#include <stdio.h>

struct Student
{
    long num;
    char name[20];
};
int main()
{
    struct Student stu[3]= {{10101,"Li Min"},{10102,"Zhang Zi"},{10103,"Wang Min"}};
    struct Student *p;
    for(p=stu; p<stu+3; p++)   //和普通數組相同用法
        printf("%5ld %-20s\n",p->num,p->name);

    return 0;
}

運行結果:

100.寫一個函數,建立有3名學生數據的單向動態鏈表

#include <stdio.h>
#include <stdlib.h>    //malloc
struct Student
{
    long num;
    float score;
    struct Student *next;
};//定義學生結構體

struct Student * Create(void)  //創建學生鏈表
{
    struct Student *head=NULL,*p1,*p2;
    p1=p2=(struct Student *)malloc(sizeof(struct Student));
    while(scanf("%ld,%f",&p1->num,&p1->score)&&p1->num!=0&&p1->score!=0)   //輸入學生信息直到輸入"0,0"
    {
        if(head==NULL)    //一開始鏈表爲空
            head=p1;
        else    //鏈表不爲空
            p2->next=p1;
        p2=p1;   //p2爲循環指針
        p1=(struct Student *)malloc(sizeof(struct Student));
    }
    p2->next=NULL;
    return head;
}

void print(struct Student *head)  //打印學生鏈表
{
    struct Student *p;
    p=head;
    if(p!=NULL)
        while(p!=NULL)
        {
            printf("%ld %5.1f\n",p->num,p->score);
            p=p->next;
        }
}
int main()
{
    struct Student *pt;
    pt=Create();
    printf("輸出學生數據:\n");
    print(pt);
    return 0;
}

運行結果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章