C语言新答案.doc

上传人:s****u 文档编号:12811959 上传时间:2020-05-26 格式:DOC 页数:25 大小:182KB
返回 下载 相关 举报
C语言新答案.doc_第1页
第1页 / 共25页
C语言新答案.doc_第2页
第2页 / 共25页
C语言新答案.doc_第3页
第3页 / 共25页
点击查看更多>>
资源描述
第三章习题编程:(1)有一函数:编写一程序,输入X,输出Y值。#include int main() double x,y; scanf(%lf,&x); if(x=1.0&x10) y=2*x-11; else y=3*x-11; printf(%lfn,y); return 0; ( 2) 从键盘上输入3个整数,求最小的数。#include int main() double x,y,z,min; scanf(%lf%lf%lf,&x,&y,&z); if(xy) min=y; else min=x; if(minz) min=z; printf(min=%lfn,min); return 0; ( 3) 输入某人的出生日期,计算并显示其出生的当天是星期几。#include int main() int y,m,d,flag,s=0,w,i; scanf(%d%d%d,&y,&m,&d); flag=(y%4=0&y%100!=0|y%400=0); w=(y-1)*365+(y-1)/4-(y-1)/100+(y-1)/400)%7; for(i=1;i2)s=s+1; s=(w+s)%7; if(s=0) printf(星期日n); else printf(星期%dn,s); return 0; ( 4)企业发放的奖金根据利润提成:利润低于或等于10万元时,奖金可提成10%;利润高于10万元低于20万元时,低于10万元的部分按10%提成,高于10万元的部分可提成7.5%;20万到40万之间时,高于20万元的部分可提成5%;40万到60万之间时,高于40万元的部分可提成3%;60万到100万之间时,高于60万元的部分可提成1.5%;高于100万元时,超过100万元的部分按1%提成。从键盘输入当月利润,求应发放奖金总数。#include int main() float p,r; scanf(%f,&p); if(p10&p20&p40&p60&p100) r=10*0.1+10*0.075+20*0.05+20*0.03+40*0.015+(p-100)*0.01; printf(%fn,r); return 0; ( 5) 输入字符,并以回车结束。将其中的小写字母转换成大写字母,而其他字符不变。#include int main() char c; while(c=getchar()!=n) if(c=a&c=z) c=c-32; putchar(c); return 0; ( 6) 输入一个正整数,求它的所有素数因子。#include int main() int m,k=2; printf(输入一个正整数:n); scanf(%d,&m); while(km) if(m%k=0) printf(%4d,k); m=m/k; else k+; printf(%4dn,m); return 0; ( 7) 从键盘输入正整数a,求s=a+aa+aaa+aa#include int main() int a,n,s=0,p=0,i; scanf(%d %d,&n,&a); for(i=1;i=n;i+) p=p*10+a; s=s+p; printf(%dn,s); return 0; ( 8) 输出用09这10个数字能组成的三位数#include int main() int i,j,k; for(i=1;i=9;i+) for(j=0;j=9;j+) for(k=0;k=9;k+) printf(%5d,100*i+10*j+k); return 0; ( 9) 用二分法求方程 在区间(-10,10)之间的根 #include #include int main() float a=-10,b=10,x,f1,f2,f; f1=(2*a-4)*a+3)*a)-6; f2=(2*b-4)*b+3)*b)-6; do x=(a+b)/2; f=(2*x-4)*x+3)*x)-6; if(f*f1=1e-6); printf(%6.2fn,x); return 0; (10) 编写一个程序,计算 的近似值#include #include int main() int n=2; double eps,t,s=0,x; scanf(%lf %lf,&x,&eps); t=x; s=t; while(fabs(t)=eps) t=-t*(2*n-3)*x*x/(2*n-2); s=s+t/(2*n); n+; printf(%d,%lfn,n,s); return 0; (11) 取出一个无符号的十进制整数中所有奇数数字,按原来的顺序组成一个新的数#include int main() unsigned long s,t=0,p=1; scanf(%u,&s); while(s!=0) if(s%10)%2!=0) t=t+(s%10)*p; p=p*10; s=s/10; printf(%un,t); return 0; 第四章编程输入一无符号整数,求所有数位上数字之和#include unsigned int fun(unsigned int); int main() unsigned int s; scanf(%u,&s); printf(%un,fun(s); return 0; unsigned int fun(unsigned int s) unsigned int p=0; while(s!=0) p=p+s%10; s=s/10; return p; ( 2) 求一元二次方程 的根,用3个函数分别求判别式大于0,等于0和小于0时的根,并输出结果。主函数中输入系数a、b、c#include #include #include void f1(float,float,float,float); void f2(float,float,float,float); void f3(float,float,float,float); int main() float a,b,c,d; scanf(%f %f %f,&a,&b,&c); if(a=0) printf(不是一元二次方程n); exit(0); d=b*b-4*a*c; if(d0) f1(a,b,c,d); else if(d=0) f2(a,b,c,d); else f3(a,b,c,d); return 0; void f1(float a,float b,float c,float d) float x1,x2; x1=(-b+sqrt(d)/(2*a); x2=(-b-sqrt(d)/(2*a); printf(%.2f ,%.2fn,x1,x2); void f2(float a,float b,float c,float d) float x1,x2; x1=-b/(2*a); x2=-b/(2*a); printf(%.2f ,%.2fn,x1,x2); void f3(float a,float b,float c,float d) float x1,x2; x1=-b/(2*a); x2=sqrt(-d)/(2*a); printf(%.2f+i*%.2fn,x1,x2); printf(%.2f-i*%.2fn,x1,x2); ( 3). 用递归方法求n解勒让德多项式的值,其递推公式为:#include double p(int,double); int main() int n; double x; do scanf(%d,&n); while(n0); scanf(%lf,&x); printf(%lfn,p(n,x); return 0; double p(int n,double x) double pn; if(n=0) pn=1; else if(n=1) pn=x; else pn=(2*n-1)*x*p(n-1,x)-(n-1)*p(n-2,x)/n; return pn; ( 4)计算银行存款余额和利息:假设银行存款季度利息是5.3%,根据输入的原始数据计算利息和账户余额,并以表格的形式输出每个季度的利息和账户余额。要求写两个函数,一个用来计算利息和余额,一个用来输出 #include #define RATE 0.053 double fun(float); void display(float,int); int main() float dep; int season; scanf(%f %d,&dep,&season); display(dep,season); return 0; double fun(float d) return d*RATE; void display(float d,int s) int i; printf(季度 利息 余额n); printf(-n); for(i=1;i=s;i+) printf(%-4d %-.2f %-.2fn,i,fun(d),fun(d)*i+d); printf(-n); ( 5) 利用函数求 ,直到 ,并把计算结果作为函数返回值。 #include double fun(void); int main() printf(%lfn,fun(); return 0; double fun(void) double s=0; int n=1; while(double)(2*n-1)/(2*n)*(2*n)1e-4) s=s+(double)(2*n-1)/(2*n)*(2*n); n+; return s; ( 6) 设w是一个大于10的无符号整数,若w是n(n=2)位的整数,函数求出w的低n-1位的数作为函数的返回值。如w=5923,则函数返回值位923#include int fun(int); int main() int w; scanf(%d,&w); printf(%dn,fun(w); return 0; int fun(int w) int n=1,p=1,m; m=w; while(m10) m=m/10; p=p*10; n+; return w%p; 第五章编程( 1) 用循环将a34的第一行与第三行对调#include int main ( ) int a34 = 0, 2,9,7, 5,13,6,8, 27,11,1,3 ; int i,j,temp; for(i=0,j=0;j4;j+) temp = a2-ij; a2-ij = aij; aij = temp; for(i=0;i3;i+) for(j=0;j4;j+) printf(%3d,aij); printf(n); return 0; ( 2)编程实现显示如下形式的数字:#include int main ( ) static int a66; int i,j,t=1; for(i=0;i6;i+) t = i+1; for(j=0;ji+1;j+)aij=t-; for(i=0;i6;i+)for(j=0;j6;j+) printf(”%3d”,aij);printf(“n”);return 0;(3)编程实现求两个矩阵相乘 #include #define M 3 #define N 4 #define R 5 int main( ) static int aMN,bNR,cMR; int i,j,k; printf(Matrix a:n); for( i = 0; i M; i+ ) for( j = 0; j N; j+ ) scanf( %d,&aij ); printf(Matrix b:n); for( i = 0; i N; i+ ) for( j = 0; j R; j+ ) scanf( %d,&bij ); for( i = 0; i M; i + ) for( j = 0; j N; j+ ) for( k = 0; k R; k+) cik += aij*bjk; for( i = 0; i M; i+ ) for( j = 0; j R; j+ ) printf( %3d,cij ); printf(n); return 0; ( 4) 输入5个整数,并存放在数组中,找出最大数与最小数所在的下标位置,并把两者对调,然后输出调整后的5个数#include #define M 5 int main( ) static int aM; int i,max = -1,min = 100,maxi,mini,temp; for( i = 0; i M; i+ ) scanf( %d,&ai ); /099 间的值 for( i = 0; i M; i+ ) if( max ai ) min = ai; mini = i; temp = amaxi; amaxi = amini; amini = temp; for( i = 0; i M; i+ ) printf( %3d,ai ); return 0; ( 5)编写一个函数计算具有NROWS行和NCOLS列的二维数组中指定列的平均值以及数组各行的和的最小值 #include #define M 3 #define N 4 int main( ) static int aMN; int max = -1,sumcol=0,sumrow=0; int i,j,maxi,col; for( i = 0; i M; i+ ) sumrow = 0; for( j = 0; j N; j+ ) scanf( %d,&aij ); sumrow += aij; if ( max 0); scanf(%d,&col); for( i = 0; i M; i + ) sumcol += aicol-1; printf(The %dth rows sum is max, max=%dn,maxi+1,max); printf(The %dth columns sum=%dn,col,sumcol); return 0; ( 6) 输入一段文字统计文字中指定字符的个数#include #define M 81 int main( ) static char strM; int i,count = 0; char ch; gets(str); fflush(stdin); /清空输入缓冲区,以便读入字符数据 printf(Which character will be found?); ch = getchar(); for( i = 0; i strlen(str); i+ ) if( ch = stri ) count+; printf( The number of character %c is %dn,ch,count ); ( 7) 编写程序实现:用二维数组表示10同学的5门课程成绩 以均分作为排序依据,降序排列成绩表 以柱状图输出指定课程的成绩分布#include #include #define N 10 #define M 5 void enter_scores(void); void sort_scores(int scoreM, int averageN3); void disp_scores(int scoreM); void histogram(int n, int scoreM); void printchar(int n); static int scoreNM; static int averN3; /第 1 列为均值,第 2 列原始顺序,第 3 列为均值逆序 int main() int course; enter_scores(); printf(n=Oringenal Score Start=n); disp_scores(score); printf(n=Oringenal Score End=n); printf(n=Sorted Score Start=n); sort_scores(score,aver); printf(n=Sorted Score End=n); printf(nWhich class will be statisticed?n); scanf(%d,&course); histogram(course, score); system(Pause); return 0; /* 输入成绩 */ void enter_scores() int i, j; for(i=0; iN; i+) for(j=0; jM; j+) scanf(%d,&scoreij); averi0 += scoreij; for( i = 0; i N; i+ ) for ( j = 1; j 3; j+ ) averij = i; /* 成绩排序. */ void sort_scores(int scoreM, int averageN3) int i,j,t; int temp,tempindex; for( i = 0; i N - 1; i+ ) for( j = 0; j N - 1 - i; j+ ) if ( averagej0 averagej+10 ) temp = averagej0; averagej0 = averagej+10; averagej+10 = temp; tempindex = averagej2; averagej2 = averagej+12; averagej+12 = tempindex; printf(n Score1 Score2 Score3 Score4 Score5n); for( i = 0; i N; i+ ) t = averagei2; for( j = 0;j M; j+ ) printf(%8d, scoretj); printf(n); /* 输出成绩 */ void disp_scores(int scoreM) int i, j; printf(n Score1 Score2 Score3 Score4 Score5n); for( i = 0; i N; i+ ) for( j = 0;j M; j+ ) printf(%8d, scoreij); printf(n); void printchar(int n) int i; for (i = 0; i n; +i) putchar(*); void histogram(int course, int scoreM) int i,temp; int segs5 = 0; int scN; for( i = 0; i N; i+ ) sci = scoreicourse; for (i = 0; i N; i+)/* 统计各分段人数 */ temp = (int)sci/10; segs temp6?0:temp-5+; /* 成绩/10,将成绩分段 */ printf(nSegment Numbern); for (i = 0; i 5; i+) /* 输出直方图,每段的人数 */ printf(%3d: %5d| , (i+1)*10+50, segsi); printchar(segsi); putchar(n); putchar(n); ( 8) 编写程序寻找输入字符串中字符值大的字符,并统计其位置和出现的次数#include #define M 81 int main( ) static char strM; int i,count = 0; char ch = 0; gets(str); for( i = 0; i strlen(str); i+ ) if( ch stri ) ch = stri; for( i = 0; i strlen(str); i+ ) if( ch = stri ) count+; printf( max = %c ,count = %dn,ch,count ); return 0; 第六章 1) 定义3个整数及指向整数的指针,仅用指针方法按由小到大的顺序输出#include int main() int a=3,b=7,c=2; int *ptra = &a,*ptrb = &b,*ptrc = &c; int temp; printf(a=%d,b=%d,c=%dn,a,b,c); printf(*ptra=%d,*ptrb=%d,*ptrc=%dn,*ptra,*ptrb,*ptrc); if ( *ptra *ptrb ) temp = *ptra; *ptra = *ptrb; *ptrb = temp; if ( *ptra *ptrc ) temp = *ptra; *ptra = *ptrc; *ptrc = temp; if ( *ptrb *ptrc ) temp = *ptrb; *ptrb = *ptrc; *ptrc = temp; printf(a=%d,b=%d,c=%dn,a,b,c); printf(*ptra=%d,*ptrb=%d,*ptrc=%dn,*ptra,*ptrb,*ptrc); return 0; ( 2) 输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换,写三个函数:1、输入10个数;2、进行处理;3、输出10个数。所有函数的参数均用指针#include #include void inputdata(int a,int n); void process(int a,int n); void outputdata(int a,int n); int main() int a10,n=10; inputdata(a,n); outputdata(a,n); process(a,n); outputdata(a,n); system(Pause); return 0; void inputdata(int a,int n) /099 之间的数 int i; for( i = 0; i n; i+ ) scanf(%d,a+i); void outputdata(int *ptr,int n) int i; int i; for( i = 0; i n; i+ ) scanf(%d,a+i); void outputdata(int *ptr,int n) int i; printf(n=OutPut Data Start=n); for( i = 0; i n; i+ ) printf(%4d,*ptr+); printf(n=OutPut Data End=n); void process(int *ptr,int n) int i,maxi,mini; int max=-1,min=101; for( i = 0; i n; i+ ) if ( max *(ptr+i) ) min = ptri; mini= i; if ( mini != 0) ptr0 = ptrmini; i=ptr0;ptrmini = i; if (maxi != n-1) i = ptrn-1; ptrn-1 = ptrmaxi; ptrmaxi = i; if (maxi = 0 & mini = n-1) i = ptrmaxi; ptrmaxi = ptrmini; ptrmini = i; ( 3)编写一个求字符串的函数(参数用指针),在主函数中输入字符串,并输出其长度。 #include int strLength (char *); int main() static char str81; gets(str); printf(string %s length:%3dn,str,strLength(str) ; system(Pause); return 0; int strLength (char *s) char *p=s; while (*p) p+ ; return (p-s) ; ( 4) 编写一个函数(参数用指针)将3*3矩阵转置#include #define M 3 #define N 4 void Transpose (int (*a)N,int (*T)M); int main( ) static int aMN,TNM; int i,j; for( i = 0; i M; i+ ) for( j = 0; j N; j+ ) scanf( %d,&aij ); printf(n=Oringinal Matrix Start=n); for( i = 0; i M; i + ) for( j = 0; j N; j+ ) printf( %4d,aij ); printf(n); printf(n=Oringinal Matrix End=n); Transpose(a, T); printf(n=Transpose Matrix Start=n); for( i = 0; i N; i + ) for( j = 0; j M; j+ ) printf( %4d,Tij ); printf(n); printf(n=Transpose Matrix End=n); return 0; void Transpose (int (*a)N,int (*T)M) int i,j; for( i = 0; i N; i+ ) for( j =0; j M; j+ ) Tij = aji; ( 5) 编写函数原型为int strcmp(char *s1,char *s2);的函数,该函数实现两个字符串的比较#include int main() static char source81,target81; int result; gets(source); gets(target); result = Strcmp(source,target); if (result) if( result 0 ) printf(%s %sn,source,target); else printf(%s = %sn,source,target); return 0; int Strcmp(char *s,char *t) while (*s & *t & (*s = *t) s+; t+; return *s - *t; ( 6) 利用指向行的指针变量求5*3数组各行元素之和#include #define M 5 #define N 3 int sum (int *a); int main( ) static int aMN; int i,j; for( i = 0; i M; i+ ) for( j = 0; j N; j+ ) scanf( %d,&aij ); for( i = 0; i M; i + ) printf(Row %d sum: %3dn, i, sum(ai); return 0; int sum (int *ptr) int i,result = 0; for( i = 0; i N; i+ ) result += *(ptr+i); return result; 第八章有10个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入10个学生数据,要求打印出3门课总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课的成绩、平均分数)#include #include #define N 10 #define M 3 struct stu char name15; char num6; float scoreM; float aver; studentN; /*说明结构体变量 */ struct stu findmax(struct stu student); void input(struct stu student); void output(struct stu student); int main() struct stu temp; input(student); output(student); temp = findmax(student); printf(Max is:n); printf(%15s%8s%7.2f%7.2f%7.2f%7.2f,temp.name,temp.num, temp.score0,temp.score1,temp.score2, temp.aver/M); system(Pause); return 0; struct stu findmax(struct stu student) float max = 0.0; int i,maxi; for(i=0; iN; i+) if(max studenti.aver) max = studenti.aver; maxi = i; return studentmaxi; void input(struct stu student) int i,j; printf(input data:n); for( i=0;iN;i+) scanf(%s %s,studenti.name,studenti.num); studenti.aver = 0; for( j=0;jM;j+) scanf(%f, &studenti.scorej); studenti.aver += studenti.scorej; void output(struct stu student) int i,j; for( i=0;iN;i+) printf(%15s%8s,studenti.name,studenti.num); for( j=0;jM;j+) printf(%7.2f, studenti.scorej); printf(%7.2fn,studenti.aver/M); 第九章有5个学生,每个学生有3门课的成绩,从键盘输入数据(包括学号、姓名、三门课成绩),分别写出满足下面要求的成绩:1、 计算出平均成绩,将原有数据和计算出的平均分数存放在磁盘文件student.txt中2、 对学生成绩平均成绩排序后,将原有数据和计算出的平均分数存放在磁盘文件sort.txt中3、 对排序后的数据再插入一个学生的成绩,将原有数据和计算出的平均分数存放在磁盘文件sort2.txt中#include #define N 5 #define M 3 struct stu char name15; char num6; float scoreM; float aver; studentN; void sort(struct stu student); void writetofile(struct stu student, char filename,char mode); int main() FILE *fp; struct stu *ptr=NULL; int i,j; printf(input data:n); for( i=0;iN;i+) scanf(%s %s,studenti.name,studenti.num); studenti.aver = 0; for( j=0;jname,ptr-num); ptr-aver = 0; for( j=0;jscorej); ptr-aver += ptr-scorej; if (fp=fopen(sort2.txt,a)=NULL) printf(cannot open file); exit(0); fprintf(fp,%s %s,ptr-name,ptr-num); for( j=0;jscorej); fprintf(fp,%7.2fn,ptr-aver/M); fclose(fp); return 0; void sort(struct stu student) struct stu temp; int i,j,k; for(i=0; iN-1; i+) k=i; for(j=i+1; jN; j+) if(studentj.aver studentk.aver)k=j; if(k!=i) temp=studenti; studenti=studentk; studentk=temp; void writetofile(struct stu student, char filename,char mode) FILE *fp; int i,j; if (fp=fopen(filename,mode)=NULL) printf(cannot open file); exit(0); for( i=0;iN;i+) fprintf(fp,%s %s,studenti.name,studenti.num); for( j=0;jM;j+) fprintf(fp,%7.2f, studenti.scorej); fprintf(fp,%7.2fn,studenti.aver/M); fclose(fp);
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 考试试卷


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!