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;
}
運行結果: