C语言期末总结_c语言期末总结
C语言期末总结由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“c语言期末总结”。
结构体
例10.4 指向结构体数组的指针的应用
#include struct student { int num;char name[20];char sex;int age;};struct student stu[3]={{10101,″Li Lin″,′M′,18},{10102,″Zhang Fun″,′M′,19},{10104,″WangMing″,′F′,20}};void main(){ struct student *p;
printf(″No.Name
sex
agen″);
for(p=stu;p<stu+3;p++)
printf(″%5d %-20s %2c %4dn″,p->num,p->name,p->sex,p->age);
} 运行结果:
No.Name
sex
age
10101
LiLin
M
1010Zhang Fun M
10104
WangMing F
例10.5 有一个结构体变量stu,内含学生学号、姓名和3门课程的成绩。要求在main函数中赋予值,在另一函数print中将它们输出。今用结构体变量作函数参数。#include #include #define FORMAT ″%dn%sn%fn%fn%fn″ struct student { int num;
char name[20];
float score[3];};
#include #include #define FORMAT ″%dn%sn%fn%fn%fn″ struct student { int num;
char name[20];
float score[3];};
void main(){ void print(struct student);
struct student stu;
stu.num=12345;
strcpy(stu.name,″LiLin″);
stu.score[0]=67.5;
stu.score[1]=89;
stu.score[2]=78.6;
print(stu);} void print(struct student stu){ printf(FORMAT,stu.num,stu.name,stu.score[0],stu.score[1],stu.score[2]);
printf(″n″);} 运行结果: 12345 Li Li 67.500000 89.000000 78.599998 例10.6 将上题改用指向结构体变量的指针作参数。#include struct student { int num;
char name[20];
float score[3];}stu={12345, ″LiLi″,67.5,89,78.6};void main(){ void print(struct student *);
print(&stu);}
void print(struct student *p){ printf(FORMAT,p->num,p->name,p->score[0],p->score[1],p->score[2]);
printf(″\n″); } 运行结果: 12345 Li Li 67.500000 89.000000 78.599998 有10个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入10个学生数据,要求输出3门课程总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课程总成绩、平均分数)。 10.1:# include
struct student
{ char num[6];
char name[8];
int score[3];
float avr;
}stu[10];
main()
{ int i,j,max=0,maxi=0,sum=0;
float average=0;
for(i=0;i
{ scanf(“%s%s”,stu[i].num,stu[i].name);
for(j=0;j
scanf(“%d”,&stu[i].score[j]);
}
for(i=0;i
{ sum=0;
for(j=0;j
sum+=stu[i].score[j];
stu[i].avr=sum/3.0;
average+=stu[i].avr;
if(sum>max){ max=sum;maxi=i;}
}
average/=10;
printf(“average=%6.2fn”,average);
printf(“The highest is:%s,%s,%d,%f”,stu[maxi].num,stu[maxi].name,max,stu[maxi].avr); }
指针
例9.4 输入a、b、c3个整数,按大小顺序输出。#include void main()
{void exchange(int *q1,int *q2,int *q3);int a,b,c,*p1,*p2,*p3;
scanf(″%d,%d,%d″,&a, &b, &c);
p1=&a;p2=&b;p3=&c;
exchange(p1,p2,p3);
printf(″%d,%d,%d\n″,a,b,c);
}
void exchange(int *q1,int *q2,int *q3){ void swap(int *pt1,int *pt2);
if(*q1<*q2)swap(q1,q2);
if(*q1<*q3)swap(q1,q3);
if(*q2<*q3)swap(q2,q3);
}
void swap(int *pt1,int *pt2)
{int temp;
temp=*pt1;
*pt1=*pt2;
*pt2=temp;
score 3
}
运行情况如下:
9,0,10↙ 10,9,0
例9.10:有一个班,3个学生,各学4门课,计算总平均分数以及第n个学生的成绩。这个题目是很简单的。只是为了说明用指向数组的指针作函数参数而举的例子。用函数average求总平均成绩,用函数search找出并输出第i个学生的成绩。#include void main()
{ void average(float *p,int n);
void search(float(*p)[4],int n);
float score[3][4]={{65,67,70,60},average(*score,12); /*求12个分数的平均分*/
search(score,2);
/*求序号为2的学生的成绩*/ }
void average(float *p,int n){ float*p_end;
float sum=0,aver;
p_end=p+n-1;
for(;p<=p_end;p++)
sum=sum+(*p);
aver=sum/n;
printf(″average=%5.2f\n″,aver); }
void search(float(*p)[4],int n)
/ * p是指向具有4个元素的一维数组的指针 */ {int i;
printf(″the score of No.%d are:n″,n);
for(i=0;i<4;i++)
printf(″%5.2f″,*(*(p+n)+i));}
程序运行结果如下: average=82.25
The score of No.2 are:
90.00 99.00 100.00 98.00
例9.11: 在上题基础上,查找有一门以上课程不及格的学生,打印出他们的全部课程的成绩。
#include void main()
{void search(float(*p)[4],int n);
float score[3][4]={{65,57,70,60},{58,87,90,81},{90,99,100,98}};
{80,87,90,81},{90,99,100,98}};
search(score,3);
}
void search(float(*p)[4],int n){int i,j,flag;
for(j=0;j<n;j++)
{flag=0;
for(i=0;i<4;i++)
if(*(*(p+j)+i)
if(flag==1)
{ printf(“No.%d fails,his scores are: \n”,j+1);
for(i=0;i<4;i++)
printf(″%5.1f″,*(*(p+j)+i));
printf(″\n″);
}
}
}
程序运行结果如下:
No.1 fails, his scores are:
65.0
57.0
70.0
60.0 No.2 fails, his scores are:
58.0 87.0 90.0 81.0 例9.17:求a和b中的最大者。#include void main()
{int max(int,int);int a,b,c;
scanf(″%d,%d″,&a,&b);
c=max(a,b);printf(″a=%d,b=%d,max=%dn″,a,b,c);
}
int max(int x,int y){ int z;
if(x>y)z=x;
else
z=y;
return(z);
}
例9.18:有若干个学生的成绩(每个学生有4门课程),要求在用户输入学生序号以后,能输出该学生的全部成绩。用指针函数来实现。
#include void main()
{float score[][4]={{60,70,80,90},{56,89,67,88},{34,78,90,66}};
float *search(float(*pointer)[4],int n);
float*p;
int i,m;
printf(″enter the number of student:″);
scanf(″%d″,&m);
printf(″The scores of No.%d are:n″,m); p=search(score,m);
for(i=0;i<4;i++)printf(″%5.2ft″,*(p+i));
}
float *search(float(*pointer)[4],int n){ float *pt;
pt=*(pointer+n);
return(pt);
}
运行情况如下:
enter the number of student:1↙ The scores of No.1 are:
56.00
89.00
67.00
88.00 例9.19: 对上例中的学生,找出其中有不及格课程的学生及其学生号。#include void main()
{ float score[][4]={{60,70,80,90},{56,89,67,88},{34,78,90,66}};
float search(float(*pointer)[4]);
float*p;
int i,j;
for(i=0;i
{p=search(score+i);
if(p==*(score+i))
{ printf(″No.%d scores:″,i);
for(j=0;j
printf(″%5.2f″,*(p+j));
printf(″n″);}
}
}
float *search(float(*pointer)[4]){ int i;
float *pt;
pt=*(pointer+1);
for(i=0;i
if(*(*pointer+i)
return(pt);
} 运行情况如下:
No.1 scores:56.00 89.00 67.00 88.00
No.2 scores:34.00 78.00 90.00 66.00
例9.20:将若干字符串按字母顺序(由小到大)输出。#include #include void main()
{void sort(char *name[ ],int n);
void print(char *name[ ],int n);
char *name[ ]={“Follow me”,“BASIC”,“Great Wall″,”FORTRAN“,”Computer design“};int n=5;
sort(name,n);
print(name,n);
}
void sort(char *name[ ],int n){char *temp;
int i,j,k;
for(i=0;i<n-1;i++){k=i;
for(j=i+1;j<n;j++)
if(strcmp(name[k],name[j])>0)k=j;
if(k!=i)
{ temp=name[i];
name[i]=name[k];
name[k]=temp;}
}
}
void print(char *name[ ],int n){ int i;
for(i=0;i<n;i++)
printf(″%sn″,name[i]);
} 运行结果为: BASIC Computer design FORTRAN Follow me Great Wall 作业:(提交上机报告)输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写3个函数:①输入10个数;②进行处理;③输出10个数。# include main()
{ void input(int number[10]);
void max_min_value(int array[10]);
void output(int array[10]);
int number[10];input(number);max_min_value(number);output(number);
} void input(int number[10])
{ int i;
for(i=0;i
scanf(“%d”,&number[i]);} void max_min_value(int array[10])
{ int *max,*min,*p,*array_end;
array_end=array+10;
max=min=array;
for(p=array+1;p
if(*p>*max)max=p;
else if(*p
*p=array[0];array[0]=*min;*min=*p;
*p=array[9];array[9]=*max;*max=*p;
} void output(int array[10])
{ int *p;
for(p=array;p
printf(“%4d”,*p); }
数组和函数的组合例8.12 有一个一维数组,内放10个学生成绩,写一个函数,求出平均分、最高分和最低分。#include float Max=0,Min=0;
/*全局变量*/ void main()
{float average(float array[ ],int n);
float ave,score[10];
int i;
for(i=0;i<10;i++)
scanf(″%f″,&score[i]);
ave= average(score,10);
printf(″max=%6.2f\nmin=%6.2f\n
average=%6.2f\n″,Max,Min,ave);
}
float average(float array[ ],int n)
/*定义函数,形参为数组*/ { int i;
float aver,sum=array[0];
Max=Min=array[0];
for(i=1;i<n;i++)
{if(array[i]>Max)Max=array[i];
else if(array[i]
sum=sum+array[i];
}
aver=sum/n;
return(aver);
}
例8.18 有一个含若干字符的字符串,今输入一个字符,要求程序将字符串中该字符删去。用外部函数实现。file1.c(文件1)#include void main()
{ extern void enter_string(char str[]);
extern void detele_string(char str[],char ch);
extern void print_string(char str[]);
char c;
char str[80];enter_string(str);
scanf(”%c“,&c);
detele_string(str,c);
print_string(str);
} file2.c(文件2)#include void enter_string(char str[80]){
gets(str);}
file3.c(文件3)
void delete_string(char str[],char ch){ int i,j;
for(i=j=0;str[i]!=' ';i++)
if(str[i]!=ch)
str[j++]=str[i];
str[i]=' ';} file4.c(文件4)#include void print_string(char str[]){
printf(”%sn“,str);}
运行情况如下:
abcdefgc↙
(输入str)
c↙
(输入要删去的字符)abdefg
(输出已删去指定字符的字符串)
8.1:判断m是否是素数。(用函数实现)#include main()
{ int f(int m);
int m,n;
scanf(“%d”,&m);
n=f(m);
if(n)printf(“%d is a prime numbern”,m);
else printf(“%d is not a prime numbern”,m);
}
int f(int m)
{ int i,k,p;
k=sqrt(m);
for(i=2;i
if(m%i==0)break;
if(i>=k+1)p=1;
else p=0;
return p;
}
8.2:用起泡法对10个数排序。(用函数实现)
#include main()
{ void sort(int array[],int n);
int a[10],i;
for(i=0;i
scanf(“%d”,&a[i]);
sort(a,10);
for(i=0;i
printf(“%4d”,a[i]);} void sort(int array[],int n)
{ int i,j,t;
for(i=0;i
for(j=0;j
if(a[j]>a[j+1])
{ t=a[j];a[j]=a[j+1];a[j+1]=t;}
}
8.3:用选择法对10个数排序。(用函数实现)#include main()
{ void sort(int array[],int n);
int a[10],i;
for(i=0;i
scanf(“%d”,&a[i]);
sort(a,10);
for(i=0;i
printf(“%4d”,a[i]);} void sort(int array[],int n)
{ int i,j,k,t;
for(i=0;i
{ k=i;
for(j=i+1;j
if(array[j]
t=array[k];array[k]=array[i];array[i]=t;
}
}