C 语言30道例题东大期末考试+答案.docx
C 语言30道例题东大期末考试+答案29题号 题目 第几题 1 编写一个售货机计算程序,用于水果店售货员算账。苹果每千克3.2元,1 梨每千克1.96元,香蕉每千克3元,樱桃每千克24元。某顾客购买1.5斤苹果,2斤梨,3斤香蕉,1.5斤樱桃,付给售货员100元。要求规范输出这位顾客购买各类水果的名称,对应的重量和应付价钱,显示顾客所付款项,输出应找回的款项。 #include<stdio.h> #include<stdio.h> void main float n4,apple=3.2,pear=1.96,banana=3,Cherry=24,price,charge,money; int i; printf("请输入水果重量苹果 梨 香蕉 樱桃 (不买的水果请输入0):n"); for(i=0;i<4;i+) scanf("%f",&ni); printf("应付钱 %.2f 元n",price=apple*n0+pear*n1+banana*n2+Cherry*n3); printf("请输入付款数:");scanf("%f",&money); printf("应找钱 %.2f 元n",money-price); 2 编写一个程序,对输入的一组整数,分别统计其中正整数和负整数的个数。 #include<stdio.h> main int i,sum1=0,sum2=0; printf("请输入一组整数,0结尾"); scanf("%d",&i); while(i!=0) if(i>0) sum1=sum1+1; else sum2=sum2+1; scanf("%d",&i); 1 29题号 printf("%d,%d",sum1,sum2); printf("n"); 题目 第几题 3 统计100-500之间各个数字之和为9的三位数,输出这些三位数。例如351的各个数字之和为9。 #include<stdio.h> main int a,b,c,t; for(t=100;t<500;t+) a=t%10; b=t/100; c=(t/10)%10; if(a+b+c=9) printf("%d,",t); return 0; 4 编程求1-1000之间的所有完数。 #include<stdio.h> main int m,i,s; for(m=2;m<1000;m+) s=1; for(i=2;i<=m/2;i+) if(m%i=0) s=s+i; if(s=m) printf("%d is 完数",m); printf("n"); 1 1 29题号 题目 第几题 5 已知银行整存整取存款不同期限的利率分别为:3.30%期限半年;3.50%期限一年;1 4.40%期限二年;5.00%期限三年;5.50%期限五年;到期利息税为5%。要求输入存取的本金和期限,求到期能从银行得到的利息、本金及总和。 6 输入三角形的三边长,判断这个三角形是否是直角三角形。 7 输入一串字符,统计其中数字、大写字母、小写字母以及其他字符的个数。 8 编写程序:找出不超过1000的十位数字为1,个位数字为3或7的所有数。例如:13、17、113、317等。 #include<stdio.h> main int a,b,c,t; for(t=10;t<1000;t+) a=t%10; b=(t/10)%10; if(a=3|a=7)&&b=1) printf("%d,",t); printf("n"); return 0; 1 1 1 9 某企业利润提成的规则如下:1)利润低于或等于10万元的,可提成奖金%10;2)1 利润高于10万元,低于20万元时,低于10万元的部分按%10提成,另外部分可以提成7.5%;3)利润高于20万低于40万元的,其中20万元按前面的方法发放,另外的部分按5%提成;4)利润高于40万元的,40 万元按前面的方法提成,高于部分按3%提成。从键盘输入利润,输出应发的提成。 10 利用公式e=1/1!+1/2!+1/3!+1/n!计算e的值并输出。 1 #include<stdio.h> main float e=1.0; int t=1,i=1; while(1.0/t>0.00001) 29题号 i+; e=e+1.0/t; t=i*t; printf("%fn",e); 题目 第几题 11 从键盘输入一个字符串str,统计其中大写英文字母A,B,C,D出现的次数。要求输出原始字符串,以及统计的结果。 #include<stdio.h> main char str100; int n=0,i; gets(str); for(i=0;stri!=0;i+) if(stri='A'|stri='B'|stri='C'|stri='D') n+; puts(str); printf("%d",n); 12 将字符串a中的每个字符用加3的方法加密并存入数组b中,再对b中的字符串解密存入数组c。要求:初始化字符串a,依次输出字符串a、b、c。 #include<stdio.h> main char a="hdckskshalsjak",b100,c100; int i,j=0,u=0; for(i=0;ai!=0;i+) bj=ai+3; j+; bj=0; for(j=0;bj!=0;j+) 2 2 29题号 cu=bj-3; u+; cu=0; puts(a); puts(b); puts(c); 题目 第几题 13 输入两个字符串str1和str2,计算并输出str2在str1中出现的位置,要求初始化字符串str1和str2,输出原始字符串str1和str2,以及位置结果值。 #include<stdio.h> void main char str1="weallhopeforsuccess",str2="for",i,j=0,k,p; for(i=0;str1i!=0;i+) if(str2j=str1i) j+; k=i; p=j-1; else j=0; printf("%dn",k-p); puts(str1); puts(str2); 14 从键盘输入一个字符串str和一个字符ch,删除字符串str中和输入字符ch相同的所有字符,输出原始字符串str以及删除字符ch后的字符串str。 15 从具有10个元素的一维整型数组中查找最小值的元素,然后与数组的第一个元素对调。要求:初始化一维数组,输出该数组以及对调元素的数组。 #include<stdio.h> main 2 2 29题号 题目 第几题 int i,temp,b,a10=1,2,3,5,6,10,13,67,8,9; int max=a0; for(i=0;i<10;i+) printf("%3d",ai); printf("n"); for(i=0;i<10;i+) if(ai>max) max=ai; b=i; printf("max=%dn",max); temp=ab; ab=a0; a0=temp; for(i=0;i<10;i+) printf("%3d",ai); printf("n"); 16 在一个具有10元素的整型数组a中,删除数组元素值为奇数的所有数组元素。要求:初始化数组a,输出原始数组以及删除数据的数组。 #include<stdio.h> void main int a10=2,4,2,5,6,7,3,7,4,8,b10; int i,j=0,k; for(i=0;i<10;i+) printf("%5d",ai); printf("n"); for(i=0;i<10;i+) if(ai%2=0) 2 29题号 bj=ai; j+; k=j; for(j=0;j<k;j+) printf("%5d",bj); printf("n"); 题目 第几题 17 将10个整数存入数组,删除数组中指定的第n个元素。 #include <stdio.h> main int a10=1,2,3,4,5,6,7,8,9,10,i,j; for(j=0;j<10;j+) if(aj=6) aj=aj+1; j+; printf("%d ",aj); 2 18 初始化一个4x5的矩阵,求其中最大元素和最小元素所在的行号,对调最大最小2 元素,输出行号、列号、对调后的矩阵。 #include <stdio.h> main int a45=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,i,j; int max=a00,min=a00,c=0,d=0,e=0,f=0; int temp; for(i=0;i<4;i+) for(j=0;j<5;j+) printf("%4d",aij); 29题号 题目 第几题 printf("n"); for(i=0;i<4;i+) for(j=0;j<5;j+) if(aij>max) max=aij; c=i; d=j; printf("max is %d,在第%d行第%d列",max,c,d); printf("n"); for(i=0;i<4;i+) for(j=0;j<5;j+) if(aij<min) min=aij; e=i; f=j; printf("min is %d,在第%d行第%d列",min,e,f); printf("n"); temp=acd; acd=aef; aef=temp; for(i=0;i<4;i+) for(j=0;j<5;j+) 29题号 printf("%4d",aij); printf("n"); 题目 第几题 19 编写函数int fun(int n),判定n是否为十位数字为1,个位数字为3或7的数。2 若是,函数返回1,否则返回0。 要求:在主函数中调用fun函数,并在主函数中输出1000之间的所有十位数字为1,个位数字为3或7的数。 #include<stdio.h> int fun(int n) int a,b; a=n%10; b=n/10%10; if(a=3|a=7) if(b=1) return 1; else return 0; else return 0; main int a,n; for(n=3;n<1001;n+) a=fun(n); if(a=1) printf("%5d",n); if(a=0) continue; 20 初始化数组为10个学生的某门课成绩,求出其中最高成绩、最低成绩及平均值,2 统计成绩低于60分的人数、高于平均值的人数和低于平均值的人数。要求:输29题号 题目 第几题 出原始成绩、最高成绩、最低成绩、平均成绩、低于60分的人数、高于平均值的人数、低于平均值的人数。 21 已知矩阵a44,交换矩阵中最大元素所在的列与次大元素所在的列。 要求:编写函数void change(int a44)交换最大元素所在的列与次大元素所在的列; 在主函数中初始化原始矩阵,输出原始矩阵以及交换发生后的矩阵。 例如:初始化矩阵为: 交换后矩阵为: 1 4 5 8 1 5 4 8 3 2 6 7 #include<stdio.h> void change(int a44) int i=0,j=0,n=0,m=0,x,y,s; int max,temp1,temp2; max=a00; for(i=0;i<4;i+) for(j=0;j<4;j+) if(aij>=max) max=aij; x=i;y=j; temp1=axy; axy=0;max=a00; for(n=0;n<4;n+) for(m=0;m<4;m+) if(anm>=max) max=anm; s=m; axy=temp1; for(i=0;i<4;i+) temp2=ais; ais=aiy; aiy=temp2; 3 29题号 题目 第几题 main int a44=1,2,15,16,5,6,7,8,9,10,11,12,13,14,3,4; int i,j; printf("Orignal:n"); for(i=0;i<4;i+) for(j=0;j<4;j+) printf("%2d ",aij); printf("n"); change(a); i=0;j=0; printf("Changed:n"); for(i=0;i<4;i+) for(j=0;j<4;j+) printf("%2d ",aij); printf("n"); 22 编写函数void fun(char str30,char a),删除字符串str中所有a代表的字3 符,被删除后的字符依次向前移动。 要求:在主函数中初始化字符数组,并输入字符a,输出原字符数组及删除结果。 例如:初始化字符数组str30=”This is a test of C language.”,输入字符a=t,则删除之后的结果为”This is a es of C language.”。 23 编写函数int StrCount(char* str1,char* str2)。Str1和str2为两个输入的字符串。函数统计str2在str1中出现的次数,返回该数值。要求:在主函数main中初始化str1和str2,调用函数StrCount(str1,str2)后输出结果。如输入str1为"howareyouareGGGare",str2为"are",那么调用函数StrCount后函数返回3。 #include<stdio.h> int StrCount(char *str1,char *str2) int i=0,j=0,ncourt=0; for(i=0;*(str1+i)!='0'i+) if(*(str1+i)=*(str2+j) for(j=0;j<3;j+) 3 29题号 题目 第几题 if(*(str1+i+j)!=*(str2+j) break; if(j=3) j=0;ncourt+; return(ncourt); main char a="howareyouarehhare" char b="are" int n; n=StrCount(a,b); printf("%dn",n); 24 编写函数void StrMid(char* str1,int m,int n,char* str2)。Str1为一个输入的字符串,函数把str1从第m个字符开始的n个字符拷贝到str2中。函数没有返回值。要求在主函数main中读入str1,调用函数StrMid(str1,m,n,str2)后输出str2的结果。如:输入str1为"goodmorning",m为1,n为3,调用函数StrMid(str1,m,n,str2)后str2为"ood"。#include<stdio.h> void StrMid(char* str1,int m,int n,char* str2) int i=0,j=0; for(i=m;i<m+n;i+) *(str2+j)=*(str1+i); j+; *(str2+j)='0' main char a="goodmorning" char b10; int n,m; scanf("%d%d",&m,&n); StrMid(a,m,n,b); puts(a); 3 29题号 puts(b); 题目 第几题 25 编写函数catStr(char str1,char str2)用于进行两个字符串的连接,编写3 函数lenStr(char str)用于统计一个字符串的长度,并在主函数中调用。要求:不允许使用strcat和strlen字符处理库函数,在主函数以直接初始化的方式输入两个字符串str1和str2。如输入str1为"howareyou",str2为"me",调用catStr函数后str1为"howareyoume",调用lenStr函数后输出11。#include <stdio.h> void catStr(char str1,char str2) int i=0,j; while(str1i!='0') i+; for(j=0;str2j!='0'j+) str1i+j=str2j; str1i+j='0' int lenStr(char str) int i=0; while(stri!='0') i+; return(i); main char str1="howareyou",str2="me" int n; puts(str1); puts(str2); catStr(str1,str2); n=lenStr(str1); puts(str1); printf("%dn",n); 29题号 题目 第几题 3 26 编写函数void fun(char *t,char a,char b),将字符串t中所有a代表的字符用b所代表的字符替换。 要求:在主函数中初始化字符数组,并输入字符a和b,输出原字符数组及替换结果。 例如:初始化字符数组str30=”This is a test of C language.”,输入字符a=t,b=T则替换结果为”This is a TesT of C language.”。#include<stdio.h> void fun(char *t,char a,char b) int i=0; for(i=0;*(t+i)!='0'i+) if(*(t+i)=a) *(t+i)=b; main char str20; char a,n; gets(str); scanf("%c %c",&a,&n); fun(str,a,n); puts(str); 27 编写函数int fun(char *t,char a),统计字符串t中有多少个变量a代表的字3 符。 要求:在主函数中初始化字符数组,并输入字符a,输出原字符数组及统计结果。 例如:初始化字符数组str30=”This is a test of C language.”,输入字符a=s,则统计结果为3。 #include<stdio.h> int fun(char *t,char a) int i=0,ncount=0; for(i=0;*(t+i)!='0'i+) if(*(t+i)=a) ncount+; return(ncount); 29题号 main char str100; char c; int n; gets(str); scanf("%c",&c); n=fun(str,c); printf("%dn",n); 题目 第几题 28 编写函数void fun(int *p,int n)对于一个存放任意10个整数的一维数组,从第n(0<=n<=9)个数据依次向左移动一个位置。 要求:在主函数中初始化数组,输入n值,输出原始数组和移动后的数组。 例如:初始化数组为6 10 2 9 8 7 17 18 23 45,如果n=6 移动后的数组为:10 2 9 8 7 7 17 18 23 45#include<stdio.h> void fun(int *p,int n) int i; for(i=0;i<n-1;i+) *(p+i)=*(p+i+1); main int a10=1,2,3,4,5,6,7,8,9,10; int n,i=0,j=0; for(i=0;i<10;i+) printf("%d ",ai); printf("n"); scanf("%d",&n); fun(a,n); for(j=0;j<10;j+) printf("%d ",*(a+j); printf("n"); 29 编写函数函数void newcopy,其功能是删除old所指向字符串中的所有大写字母,并将删除后的字符串存入new中。要求,在主函数中输入一个字符串并输出原始字符串,调用上述函数后,输出删除了小写字母后的字符串。 3 3 29题号 题目 第几题 #include<stdio.h> void newcopy(char *New,char *Old) int i,j=0; for(i=0;*(Old+i)!='0'i+) if(*(Old+i)>=97&&*(Old+i)<=122) *(New+j)=*(Old+i); j+; *(New+j)='0' main int i=0; char a20; char *p=a; gets(a); newcopy(p,a); for(i=0;*(p+i)!='0'i+) printf("%c",*(p+i); printf("n"); 30 编写函数void dele(char *s,char *p),其功能是删除字符串p中的所有数字字符保存于字符串s中。要求:在main函数中初始化字符串s并输出原字符串s,调用上述函数后输出处理后的新字符串s。 #include<stdio.h> void dele(char *s,char *p) int i=0,j=0; for(i=0;*(p+i)!='0'i+) if(!(*(p+i)>=48&&*(p+i)<=57) *(s+j)=*(p+i); j+; *(s+j)='0' 3 29题号 main char a="abc12ef5ghij8yz" char *p; p=a; puts(a); dele(p,a); printf("%sn",p); 题目 第几题