C语言程序设计省二级考试题编程.docx
文件题:1、在文本文件20075.txt中共有500个记录,每个记录是用以下格式表示的5项数据(各数据间以空格分开)(从网络课件中下载素材文件): 学号 姓名 机试成绩 笔试成绩 平时成绩 nnnnnnnnn cccccc nn nn nn说明:n表示整型;c表示字符型;n的个数表示数据位数,例如nn表示两位整数,c的个数表示字符位数求出前400人的机试的平均成绩。*/#include <stdio.h>#include <stdlib.h>main() FILE *fp; char xh10,name7; int i,js,bs,pscj; double sum=0,average; fp=fopen("20075.txt","r"); if(fp!=NULL) for(i=1;i<=400;i+) fscanf(fp,"%s%s%d%d%d",xh,name,&js,&bs,&pscj); sum+=js; average=sum/400; printf("average=%.2lfn",average); fclose(fp); else printf("文件翻开失败!n"); exit(0); /*average=91.56Press any key to continue*/2、在文本文件20071.txt中共有600个记录,每个记录是一个用xx.x格式表示的实数,编写程序统计出记录中所有大于等于60的数据个数使用循环构造实现) */#include<stdio.h>#include<stdlib.h>main() FILE *fp; int i; double score; int count=0; fp=fopen("20071.txt","r"); if(fp!=NULL) for(i=1;i<=600;i+) fscanf(fp,"%lf",&score); if(score>=60) count+; fclose(fp); printf(">=60的人数为%dn",count); else printf("文件翻开失败!n"); exit(0); /*>=60的人数为513Press any key to continue*/3、/*在文本文件<20211.txt>中共有600个记录,每个记录是一个用"xx.x"格式表示的实数,编程将该文件中的全部数据原样复制一份到文本文件20212.txt中。 */#include <stdio.h>#include <stdlib.h>main() FILE *f20211,*f20212; double score; int i; f20211=fopen("20211.txt","r"); f20212=fopen("20212.txt","w"); if(f20211!=NULL&&f20212!=NULL) while( fscanf(f20211,"%lf",&score)!=EOF) fprintf(f20212,"%4.1lfn",score); fclose(f20211); fclose(f20212); printf("文件复制成功!n"); else printf("20211.txt未翻开或20212.txt未翻开!n"); exit(0); 4、#include <stdio.h>#include <stdlib.h>main() FILE *f20213,*f20214,*f20215; double score; f20213=fopen("20213.txt","r"); f20214=fopen("20214.txt","r"); f20215=fopen("20215.txt","w"); if(f20213!=NULL&&f20214!=NULL&&f20215!=NULL) while( fscanf(f20213,"%lf",&score)!=EOF) fprintf(f20215,"%4.1lfn",score); while( fscanf(f20214,"%lf",&score)!=EOF) fprintf(f20215,"%4.1lfn",score); fclose(f20213); fclose(f20214); fclose(f20215); printf("两个文件合并成功,请检查20215.txt是否存在!n"); else printf("20213.txt或20214.txt或20215.txt未翻开!n"); exit(0); 5、/*在文本文件<s20212.txt>中共有600个记录,每个记录是一个用"xx.xx"格式表示的实数,编程求出文件中每两个相邻数中的小值的和。注:每两个相邻数的含义是:第i个数及第i+1个数称为是两个相邻数。 */#include <stdio.h>main() FILE *fp; double sum=0,score,pre; fp=fopen("s20212.txt","r"); if(fp!=NULL) fscanf(fp,"%lf",&pre); while( fscanf(fp,"%lf",&score)!=EOF) if(pre<score) sum+=pre; else sum+=score; pre=score; fclose(fp); printf("sum=%.2lfn",sum); else printf("s20212.txt翻开失败!n"); exit(0); /*sum=24279.36Press any key to continue*/6、/*在文本文件<20074.txt>中共有600个记录,每个记录是一个用"xx.xx"格式表示的实数,编程求出文件中其值小于50的最大实数首次出现是第几个记录。 */#include <stdio.h>#include <stdlib.h>main() FILE *fp; double score,max; int pos=0,result; fp=fopen("20074.txt","r"); if(fp!=NULL) /*找出小于50的第一条记录,并把数据赋值给max*/ while( fscanf(fp,"%lf",&score)!=EOF) pos+; if(score<50) max=score; break; fclose(fp); else exit(0); pos=0; fp=fopen("20074.txt","r"); if(fp!=NULL) while( fscanf(fp,"%lf",&score)!=EOF) pos+; if(score>max&&score<50) max=score; result=pos; fclose(fp); else exit(0); printf("小于50的最大实数首次出现是第%d个记录n",result);一维数组:1#include <stdio.h>main() int i,j,t; int a10=11,33,56,67,25,45,43,54,69,89; printf("冒泡法排序前:n"); for(i=0;i<10;i+)printf("%3d",ai); printf("n");/*冒泡法排序*/ for(i=0;i<10-1;i+) for(j=0;j<10-1-i;j+) if(aj<aj+1) t=aj; aj=aj+1; aj+1=t; printf("冒泡法排序后:n"); for(i=0;i<10;i+) printf("%3d",ai); printf("n"); 102#include <stdio.h>main() int i,j,k,t; int a10=23,45,56,98,56,74,85,33,40,67; printf("选择法排序前:n"); for(i=0;i<10;i+) printf("%3d",ai); printf("n"); /*选择法排序*/ for(i=0;i<10-1;i+) k=i; for(j=i+1;j<10;j+) if(ak<aj) k=j; if(k!=i) t=ak; ak=ai; ai=t; printf("选择法排序后:n"); for(i=0;i<10;i+) printf("%3d",ai); printf("n"); 103/*编写程序实现统计一维数组A中小于数组元素平均值的元素个数并输出数组各元素的值,平均值和小于平均值的元素的个数,数组A的数据为:12,56,69,59,47,21,24,51,64。*/#include <stdio.h>main() int i,count=0,sum=0; double average; int a9=12,56,69,59,47,21,24,51,64; printf("数组原始数据为:n"); for(i=0;i<9;i+) printf("%3d",ai); sum=sum+ai; printf("n"); /*求平均值*/ average=1.0*sum/9; printf("数组各元素的平均值为:n%.2lf。n",average); printf("小于平均值的数据为:n"); for(i=0;i<9;i+) if(ai<average) printf("%3d",ai); count+; printf("n"); printf("小于平均值的元素一共有%d个。n",count);104/*用随机函数产生15到85间的正整数,为一维数组A10赋值,然后将数组A降序排序,输出数组A最大的5个元素的平均值。思路:产生随机数所需要的头文件为"stdlib.h",初始化随机数生成器的语句为" srand(time(0);", 先对数组进展排序,然后计算前5个元素的平均值,最后将该平均值输出*/#include <stdio.h>#include <stdlib.h>main() int i,j,t,a10; double sum=0,average; srand(time(0); /*产生随机数,并输出各个元素*/ printf("随机数数组的各元素为:n"); for(i=0;i<10;i+) ai=rand()%71+15; printf("%3d",ai); printf("n"); /*冒泡法排序*/ for(i=0;i<10-1;i+) for(j=0;j<10-1-i;j+) if(aj<aj+1) t=aj; aj=aj+1; aj+1=t; /*输出排序后的数组*/ printf("排序后的随机数数组的各元素为:n"); for(i=0;i<10;i+) printf("%3d",ai); if(i<5) sum+=ai; average=sum/5.0; printf("n"); printf("最大的五个元素的平均值为:%.2lf。n",average); 105/*求一维数组A中最大3个元素的平方根之和。 A数组的数据为56, 78, 98, 45, 58, 34, 12, 90, 76,88。思路:定义一个数组B,将A的数组的各元素复制到B数组中,然后对B数组升序排序,找出排序后的前三个元素,即为最大的三个元素,最后将此三元素进展计算并输出 */#include <stdio.h>#include <math.h>main() int i,j,t; int a10=56,78,98,45,58,34,12,90,76,88; int b10; double result=0; /*输入a数组,并向将各个元素填入b数组*/ printf("输入数组A的各元素:n"); for(i=0;i<10;i+) printf("%3d",ai); bi=ai; printf("n"); /*对b数组进展逆序排序*/ for(i=0;i<10-1;i+) for(j=0;j<10-1-i;j+) if(bj<bj+1) t=bj; bj=bj+1; bj+1=t; /*输出逆序有序b数组*/ printf("输入数组B的各元素:n"); for(i=0;i<10;i+) printf("%3d",bi); /*此时,B已经有序,前3个元素即为最大值*/ if(i<3) result=result+sqrt(bi); printf("nn"); printf("最大三个元素的平方根之和:%.2lfn",result); 1#include <stdio.h>main() int i,j,t; int a10=11,33,56,67,25,45,43,54,69,89; printf("冒泡法排序前:n"); for(i=0;i<10;i+) printf("%3d",ai); printf("n"); /*冒泡法排序*/ for(i=0;i<10-1;i+) for(j=0;j<10-1-i;j+) if(aj<aj+1) t=aj; aj=aj+1; aj+1=t; printf("冒泡法排序后:n"); for(i=0;i<10;i+)printf("%3d",ai); printf("n"); 102#include <stdio.h>main() int i,j,k,t; int a10=23,45,56,98,56,74,85,33,40,67; printf("选择法排序前:n"); for(i=0;i<10;i+) printf("%3d",ai); printf("n"); /*选择法排序*/ for(i=0;i<10-1;i+) k=i; for(j=i+1;j<10;j+) if(ak<aj) k=j; if(k!=i) t=ak; ak=ai; ai=t; printf("选择法排序后:n"); for(i=0;i<10;i+) printf("%3d",ai); printf("n"); 103/*编写程序实现统计一维数组A中小于数组元素平均值的元素个数并输出数组各元素的值,平均值和小于平均值的元素的个数,数组A的数据为:12,56,69,59,47,21,24,51,64。*/#include <stdio.h>main() int i,count=0,sum=0; double average; int a9=12,56,69,59,47,21,24,51,64; printf("数组原始数据为:n"); for(i=0;i<9;i+) printf("%3d",ai); sum=sum+ai; printf("n"); /*求平均值*/ average=1.0*sum/9; printf("数组各元素的平均值为:n%.2lf。n",average); printf("小于平均值的数据为:n"); for(i=0;i<9;i+) if(ai<average) printf("%3d",ai); count+; printf("n"); printf("小于平均值的元素一共有%d个。n",count);104/*用随机函数产生15到85间的正整数,为一维数组A10赋值,然后将数组A降序排序,输出数组A最大的5个元素的平均值。思路:产生随机数所需要的头文件为"stdlib.h",初始化随机数生成器的语句为" srand(time(0);", 先对数组进展排序,然后计算前5个元素的平均值,最后将该平均值输出*/#include <stdio.h>#include <stdlib.h>main() int i,j,t,a10; double sum=0,average; srand(time(0); /*产生随机数,并输出各个元素*/ printf("随机数数组的各元素为:n"); for(i=0;i<10;i+) ai=rand()%71+15; printf("%3d",ai); printf("n"); /*冒泡法排序*/ for(i=0;i<10-1;i+) for(j=0;j<10-1-i;j+) if(aj<aj+1) t=aj; aj=aj+1; aj+1=t; /*输出排序后的数组*/ printf("排序后的随机数数组的各元素为:n"); for(i=0;i<10;i+) printf("%3d",ai); if(i<5) sum+=ai; average=sum/5.0; printf("n"); printf("最大的五个元素的平均值为:%.2lf。n",average); 105/*求一维数组A中最大3个元素的平方根之和。 A数组的数据为56, 78, 98, 45, 58, 34, 12, 90, 76,88。思路:定义一个数组B,将A的数组的各元素复制到B数组中,然后对B数组升序排序,找出排序后的前三个元素,即为最大的三个元素,最后将此三元素进展计算并输出 */#include <stdio.h>#include <math.h>main() int i,j,t; int a10=56,78,98,45,58,34,12,90,76,88; int b10; double result=0; /*输入a数组,并向将各个元素填入b数组*/ printf("输入数组A的各元素:n"); for(i=0;i<10;i+) printf("%3d",ai); bi=ai; printf("n"); /*对b数组进展逆序排序*/ for(i=0;i<10-1;i+) for(j=0;j<10-1-i;j+) if(bj<bj+1) t=bj; bj=bj+1; bj+1=t; /*输出逆序有序b数组*/ printf("输入数组B的各元素:n"); for(i=0;i<10;i+) printf("%3d",bi); /*此时,B已经有序,前3个元素即为最大值*/ if(i<3) result=result+sqrt(bi); printf("nn"); printf("最大三个元素的平方根之和:%.2lfn",result); 1、打印杨辉三角形#define N 10main() int i,j; int yNN; for(i=0;i<N;i+) for(j=1;j<=i-1;j+) yij=yi-1j-1+yi-1j; /其他元素由上一行得到 yi0=yii=1;/每行首尾元素为1 /数组y初始化完毕 for(i=0;i<N;i+) /用for循环输出数组y for(j=0;j<=i;j+) /杨辉三角只有前i个元素 printf(“%6d,yij); printf(“n); 2、输入3个学生、5门课程的成绩,分别存放在3×6矩阵的前5列上,求出每个学生的平均成绩并存放在该行对应的列上。#include<stdio.h>main() int i,j; float s36,sum; for(i=0;i<3;i+) for(j=0;j<5;j+)scanf("%f",&aij); for(i=0;i<3;i+) sum=0; for(j=0;j<5;j+) sum=sum+sij; / 用循环计算每行前5个元素的和 si5=sum/5; /求出平均并存入该行最后一个元素的位置 for(i=0;i<3;i+) for(j=0;j<6;j+) /用for循环输出数组s,运行结果如下 printf(“%5.1f,sij); printf(“n); 3、将一个二维数组行和列的元素互换,存入另一个二维数组中。参考P123 例6-21#include<stdio.h>void main() int a23=1,2,3,4,5,6; int b32 , i, j; /定义数组a和b printf(“array a:n); for(i=0;i<2;i+) for(j=0;j<3;j+) printf(“%5d,aij); /输出数组a bji=aij; /a的行列互换,存入b printf(“n); printf(“array b:n);for(i=0;i<3;i+) for(j=0;j<2;j+) printf(“%5d,bij); /输入数组b printf(“n); 4、从键盘输入10个学生的成绩,保存在一维数组中,然后显示出平均成绩。要求求平均成绩功能用函数实现。#include<stdio.h>main( ) float average(float b10); float score10,aver; int i; printf (“input 10 scores:n); for (i=0;i<10;i+) scanf (“%f,&scorei); aver=average(score); printf (“average score is %5.2fn,aver);float average (float b10) int i; float aver, sum=0; for (i=0;i<10;i+) sum=sum+bi; aver=sum/10; return(aver);5、从键盘输入一个字符串,统计其字母的个数。#include<stdio.h>#include<string.h>int count(char ch);main()char str200; int i, k; printf(“输入一个字符串:n);gets(str);for(i=0; i<strlen(str);i+)k=count(stri);printf(“n其中字母的个数是:%dn,k);int count(char ch) static int a=0; if(ch>=a && ch<=z | ch>=A && ch<=Z)a+; return a; 6、编写一个处理一维数组的通用过程函数或字程序,该过程可以实现任意一维数组按由大到小进展排序。数组A数据附后,编写主程序调用以上过程,输出经过排序之后最小的3个数组元素之平均值(结果保存小数后两位)。56,78,98,45,58,34,12,90,76,85/*文件main.c*/#include<stdio.h>extern void sort(int a , int m);main( ) int i, a =56,78,98,45,58,34,12,90,76,85;float sum=0; sort(a,10); for(i=10-3;i<10;i+)sum=sum+ai; sum=sum/3;printf(“%.2f,sum);/*文件sort.c*/*冒泡排序法 */extern void sort(int a , int m) int i, j, temp; for(i=0;i<m-1;i+) for(j=0;j<m-i-1;j+) if(aj<j+1) temp=aj;aj=aj+1;aj+1=temp 7、编写一个通用过程函数或子程序),该过程可