C语言练习题(山东科技大学吐血整理)(共28页)_第1页
C语言练习题(山东科技大学吐血整理)(共28页)_第2页
C语言练习题(山东科技大学吐血整理)(共28页)_第3页
C语言练习题(山东科技大学吐血整理)(共28页)_第4页
C语言练习题(山东科技大学吐血整理)(共28页)_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上数学11-1 C语言平时训练题1、算术基本运算Description计算两整数x和y(0<x,y<1000)的和、差、积、商、余数、x的平方和y的三次方。Input输入只有一行。Output输出为多行,按顺序每行输出x,y的和、差、积、商、余数、x的平方和y的三次方。Sample Inputx = 11, y = 3Sample Outputx + y : 14x - y : 8x * y : 33x / y quotient: 3, remainder: 2x 2 : 121y 3 : 27Answer#include <stdio.h>in

2、t main()int x,y,a,b,c,d,e,f,g;0<x<1000,0<y<1000;scanf("x = %d, y = %d",&x,&y);a=x+y;b=x-y;c=x*y;d=x/y;e=x%y;f=x*x;g=y*y*y;printf("x + y : %dn",a); printf("x - y : %dn",b);printf("x * y : %dn",c);printf("x / y quotient: %d, remainder: %

3、dn",d,e);printf("x 2 : %dn",f);printf("y 3 : %dn",g);return 0;2、求圆的面积和周长Description从键盘输入圆的半径,求圆的面积和周长,圆周率取3.14。Input输入一个浮点型数据,有效数字不会超过十进制的6位。Output输出为两行。第一行为圆的面积,第二行为圆的周长,格式见sample。Sample Input3Sample OutputArea: 28.Perimeter: 18.Answer#include<stdio.h>#define PI 3.14i

4、nt main()float r,s,c;scanf("%f",&r);s=PI*r*r;c=2*PI*r;printf("Area: %fn",s); printf("Perimeter: %fn",c); return 0;3、 平均值Description求3个数的平均值。Input输入只有一行,为3个较小的整数。Output输出为这3个整数的平均值,保留3位小数。Sample Input1 2 3Sample Output2.000Answer#include <stdio.h>int main()int

5、a,b,c;float d;scanf("%d %d %d",&a,&b,&c);d=(a+b+c)/3.0;printf("%.3fn",d); return 0;4、货币兑换Description给出人民币对美元、欧元、日元的当日汇率,求给定金额的人民币能兑换成外币的金额,求给定金额的外币能兑换成人民币的金额。要计算的外币有三种:美元、欧元、日元。Input输入有三行。第一行依次为美元、欧元、日元外币汇率,用空格分开。汇率用100外币为单位,精确到小数点后4位,如668.5200表示“100美元=668.5200人民币”。汇率

6、浮动范围为(0,10000)。第二行为外币金额x,第三行为人民币金额y。x,y均为整数,且0<x,y<10000。Output输出为两行。第一行为金额为x的美元、欧元、日元兑换成人民币的金额,用空格分开。第二行为金额为y的人民币兑换成美元、欧元、日元的金额,用空格分开。所有金额精确到小数点后两位。Sample Input668.5200 908.0685 7.985215001500Sample Output10027.80 13621.03 119.78224.38 165.19 18784.75Answer#include <stdio.h>int main()do

7、uble x,y,a,b,c,d,e,f,g,h,i;scanf("%lf%lf%lf",&a,&b,&c);scanf("%lf",&x);scanf("%lf",&y);d=x/100*a;e=x/100*b;f=x/100*c;g=y/a*100;h=y/b*100;i=y/c*100;printf("%.2lf %.2lf %.2lfn",d,e,f);printf("%.2lf %.2lf %.2lfn",g,h,i);return 0;5、 求

8、字符的值Description从键盘输入3个字符(不含双字节字符),分别输出每个字符的十进制值(ASCII码)、八进制值和十六进制值。Input输入为3个字符。Output输出为3行。每一行为每个字符(对应输入顺序)的十进制、八进制和十六进制值,用空格分隔开。每个输出的值占3个字符,不足3个字符前面补0。Sample Input0 ASample Output048 060 030032 040 020065 101 041Answer#include <stdio.h> int main() char a,b,c; scanf("%c%c%c",&a,

9、&b,&c); printf("%.3d %.3o %.3xn",a,a,a); printf("%.3d %.3o %.3xn",b,b,b); printf("%.3d %.3o %.3xn",c,c,c); return 0; 6、 奇数还是偶数?Description输入一个整数,判读它是奇数还是偶数。Input输入只有一行,为一个100以内的正整数。Output输出为一行。若输入为偶数则输出“even”,奇数输出“odd”。Sample Input30Sample OutputevenAnswer#inclu

10、de <stdio.h> int main() int a; scanf("%d",&a); if(a>=0&&a<=100)if (a%2=0) printf("evenn"); else printf("oddn"); elseprintf("error"); return 0; 7、绝对值Description求整型数据和浮点型数据的绝对值。Input输入两个数,第一个是整数,第二个是浮点数。Output输出为两行,第一行为整数的绝对值,第二行为浮点数的绝对值,

11、注意浮点数的绝对值不输出无意义的0。Sample Input-11Sample Output11Answer#include<stdio.h> #include<math.h> #include<stdlib.h> int main() int a,c; double b,d; scanf("%dn%lf",&a,&b); c=abs(a); d=fabs(b); printf("%dn%g",c,d); return 0; 8、简单的打折计算Description商店规定:消费满n元,可以打八八折。设

12、某件商品标价m元,输入购买的件数x,计算出需要支付的金额(单位:元),精确到分。Input输入只有一行,三个整数m、n和x,且0<x<m<n<1000。Output输出金额,精确到分。Sample Input95 300 4Sample Output334.40Answer#include <stdio.h> int main() int m,x,n,a; float b; scanf("%d%d%d",&m,&n,&x); 0<x&&x<m; x<m&&m<

13、n; m<n&&n<1000; a=m*x; if (a>n) b=0.88*a; else b=a; printf("%.2fn",b); return 0; 9、 判断闰年Description输入一个正整数的年份,判断是否为闰年。Input输入只有一行,为一个10000以内的正整数。Output输出为一行。若输入为闰年偶数则输出“Yes”,否则输出“No”。Sample Input2010Sample OutputNo答案#include <stdio.h> int main() int a; scanf("%d

14、",&a); if (a>0&&a<10000) if (a%4=0&&a%100!=0) printf("Yesn"); else if (a%400=0) printf("Yesn"); else printf("Non"); else printf("error"); return 0; 10、 水仙花数Description如果一个三位十进制数等于其各位数字的立方和,则称这个数为水仙花数。如:13+53+33=153。Input一个整数x,100

15、<=x<=999。Outputx是水仙花数,则输出“YES”,否则为“NO”。Sample Input153Sample OutputYESAnswer#include<stdio.h> int main() int a,b,c,d,e; scanf("%d",&a); b=a/100; c=(a-b*100)/10; d=(a-b*100-c*10); e=b*b*b+c*c*c+d*d*d; if(a=e) printf("YESn"); else printf("NOn"); return 0;

16、11、 三个数比较大小Description从键盘上输入0100之间的三个数,按从小到大的顺序输出。Input输入只有一行,为三个整数。Output按从小到大输出这三个数。Sample Input15 10 20Sample Output10 15 20Answer#include <stdio.h>int main()int a,b,c;scanf("%d %d %d",&a,&b,&c);if (a>=b)if (b>=c)printf("%d %d %dn",c,b,a);else if (a>

17、c)printf("%d %d %dn",b,c,a);elseprintf("%d %d %dn",b,a,c);elseif (a>=c)printf("%d %d %dn",c,a,b);else if (b>=c)printf("%d %d %dn",a,c,b);elseprintf("%d %d %dn",a,b,c);return 0;12、 输出整数的最低两位Description把一个整数的最低两位打印出来,不输出整数的符号。Input输入为一个整数n,不会超出in

18、t类型的数据范围。Output输出n的最低两位数字。但是,输入的数字本身不足两位时,不应当补0。如,输入为“1”,则输出为“1”。Sample Input-102Sample Output02Answer#include<stdio.h>int main()int a,b,c;scanf("%d",&a);if(a>=100)b=a-a/100*100;printf("%.2dn",b);else if(a>=0)printf("%dn",a);else if(a>=-99)printf(&quo

19、t;%dn",-a);elsec=-a;b=c-c/100*100;printf("%.2dn",b);return 0;13、判断奇偶数(填空)Description编写一个程序,判断读取的正整数的奇偶性,部分程序已经给出,请填上空白语句,并提交填充后的完整程序。程序(含答案):#include <stdio.h>int main() int num; scanf("%d",&num); if (num%2=0) printf("%d is an even number.",num);/num是一个偶数

20、 else printf("%d is an odd number.",num);/num是一个奇数 return 0;14、求分段函数的值(填空)Description设有分段函数如下:给出N>0个x的值,求对应的y值并输出。部分程序已经给出,请填充其中的空白语句,并提交填充后的完整程序。程序(含答案):#include <stdio.h>#include <math.h>int main() double x,y; int i,N; scanf("%d",&N); for (i=0;i<N;i+) scan

21、f("%lf",&x); if (x<0) y=-x; else if (x<1) y=sin(2*x); else if (x<5) y=sqrt(x*x*x+x); else y=2*x+10; if (i=0) printf("case 1:y=%.6g.",y); else printf("ncase %d:y=%.6g.",i+1,y); return 0;15、输出是m的倍数或n的倍数、但不是m和n的公倍数的数Description输出1k之间是m的倍数或n的倍数、但不是m和n的公倍数的数,其中1

22、<=m,n<k<100,且m与n不相等。Input输入三个整数,依次为k、m、 n。Output从小到大输出符合题意的所有整数,两数之间用一个空格分开。Sample Input15 2 3Sample Output2 3 4 8 9 10 14 15Answer#include<stdio.h>int main()int k,m,n,a,i=1;scanf("%d %d %d",&k,&m,&n);if(m<n) a=m;elsea=n;printf("%d",a);for(i=a+1;i<

23、;=k;i+) if(i%m=0&&i%n!=0)|(i%n=0&&i%m!=0) printf(" %d",i);return 0;16、A+B ProblemTDescription计算a+b,0<=a,b<1000。Input输入有多对整数a和b组成,每对a和b占一行,a,b用空格分开。Output每行输出一个a+b的值,顺序与输入对应。Sample Input1 210 20Sample Output330Answer#include<stdio.h>int main()int a,b;while(scanf(

24、"%d %d",&a,&b)!=EOF)printf("%dn",a+b);return 0;17、A+B Problem (II) : Input/Output PraticeDescription计算a+b,0<=a,b<1000。Input输入的第一行是一个整数N,后面有N对整数a和b,每对a和b占一行,a,b用空格分开。Output每行输出一个a+b的和,顺序与输入对应。Sample Input21 210 20Sample Output330Answer#include<stdio.h>int main(

25、)int a1000,b1000,N,i;scanf("%d",&N);for(i=1;i<=N;i+)scanf("%d %d",&ai,&bi);for(i=1;i<=N;i+)printf("%dn",ai+bi); return 0;18、成绩的等级Description把百分制的考试成绩转换成五级制的成绩:90100:Excellent8089:Good7079:Average6069:Pass059:Failing不在0100之间的输入是非法数据,输出“Error”。Input输入多行,

26、每行一个整数。Output输入所对应的成绩等级。Sample Input-18192356872100Sample OutputErrorGoodExcellentFailingPassAverageExcellentAnswer#include <stdio.h>int main() int score; while(scanf("%d",&score)!=EOF) if (score<0|score>100) printf("Errorn"); else switch (score/10) case 0: case 1

27、: case 2: case 3: case 4: case 5:printf("Failingn");break; case 6:printf("Passn");break; case 7:printf("Averagen");break; case 8:printf("Goodn");break; case 9: case 10:printf("Excellentn");break; return 0;19、n个数的最大值和最小值Description找出n个数中最大的数和最小的数,并将它们

28、的值输出出来。Input输入为n+1个整数,都在int类型范围内。这些数可能用若干空格或者换行符分隔开。输入的第1个数为n,表示后续有n个数输入。从输入的第2个数开始,求出直到第n+1个数中最大的数和最小的数。Output输出为两行,格式见sample。Sample Input3 0 1 -1Sample OutputThe maximum number is 1.The minimum number is -1.Answer#include<stdio.h>int main() int n,i,max,min; scanf("%d",&n); int

29、an; for(i=0; i<n; i+) scanf("%d",&ai); max=a0; min=a0; for(i=0; i<n; i+) if(max<ai) max=ai; if(min>ai) min=ai; printf("The maximum number is %d.n",max); printf("The minimum number is %d.",min); return 0;20、字符加密DescriptionTom和Jack是密码学爱好者,他们在聊天时经常使用一些暗语。他们

30、使用的一种最简单的暗语是:将要说的每句话里面的英文字母变成这个字母之后的某个字母。现在要求你写一个程序,将一个字母变成它之后的某个字母。Input输入有2个:一个大写字母c和一个正整数d(0<d<26)。其中c是要进行变换的字母,d表示要将c变成其后面第d个字母。Output输出字母c之后的第d个字母。大小写与c一致。如果c之后的某个字母已经超出'Z',则再从字母'A'开始计数。如:c='A',d=3,则输出应为:D。若:c='Y',d=3,则输出应为:B。Sample InputA 3Sample OutputDAn

31、swer#include<stdio.h>void main()int d,x;char c;scanf("%c",&c);scanf("%d",&d);x=c+d;c=c+d;x<=90?printf("%c",c):printf("%c",x-26);21、求100以内的素数Description素数是只能被1和自身整除的正整数,根据数学定义1不是素数。素数也叫质数。Input输入为两个整数m和n,满足0<=m<=n<=100。Output从大到小输出mn之间

32、的所有素数,一个素数一行。如果mn之间没有素数,则不输出任何数。输出的所有数在两行“=”之间。Sample Input2 12Sample Output=117532=Answer#include<stdio.h>#include<math.h>int main()int m,n,i,j,k,t;scanf("%d %d",&m,&n);/2 12printf("=n");for(i=n;i>=m;i-) t=0;for(j=2;j<=sqrt(i);j+)/12if(i%j=0)t=1; if(t=0

33、&&i>1) printf("%dn",i);printf("=");return 0;22、 Sum Problem (II) : Input/Output PraticeDescription计算若干整数的和,这些整数都是小于1000的非负整数。Input输入的第一行是一个整数M,后面有M个测试样例。每个测试样例以一个整数N开始,后面接着是N个整数。Output每组测试样例对应一行输出,为所给的N个整数之和,顺序与输入对应。Sample Input23 1 2 35 10 15 20 30 50Sample Output6125

34、Answer#include <stdio.h> int main() int m,n,a,i,j,s; scanf("%d",&m); for(i=1;i<=m;i+) scanf("%d",&n); s=0; for(j=1;j<=n;j+) scanf("%d",&a); s=s+a; printf("%dn",s); return 0; 23、十进制整数转二进制Description给出一个十进制的非负整数x,x<=216,把它转换成二进制数输出。Inp

35、ut输入为多行,每行一个整数x,至读入EOF结束。Output每行输出x对应的二进制数值。Sample Input0133365535Sample Output011111111Answer#include <stdio.h> int main() int a100,i,b; while(scanf("%d",&b)!=EOF) for(i=0;i+) ai=b%2; b=b/2; if(b=0) break; for(;i>=0;) printf("%d",ai); i-; printf("n"); ret

36、urn 0; 24、简单的整数排序Description对给出的若干整数按从小到大排序。Input输入的第一个数为n(n<=1000),后接n个整数。Output按从小到大的顺序输出这些整数,每两个整数之间用一个空格分隔开,最后一个整数后面没有空格。Sample Input10 3 9 1 5 2 8 5 6 7 3Sample Output1 2 3 3 5 5 6 7 8 9Answer#include <stdio.h> int main() int c,i,n,j; int a1000; scanf("%d",&n); for (i=0;i

37、<n;i+) scanf("%d",&ai); for(i=1;i<=n-1;i+) for(j=0;j<n-i;j+) if(aj>aj+1) c=aj; aj=aj+1; aj+1=c; printf("%d",a0); for(i=1;i<n;i+) printf(" %d",ai); return 0;25、兔子的繁殖问题Description假设一对兔子每月能生一对小兔(一雌一雄),每对小兔出生后的下一个月是没有繁殖能力的,至出生后的第三个月开始又可以每月生一队小兔,问从一对刚出生的小兔

38、开始,经过若干个月后一共有多少兔子(假设在此过程中兔子没有死亡)?这个问题是意大利数学家菲波那契(Fibonacci)在他1202年出版的算盘全书中提出来的,从第一对刚出生的小兔开始每月的兔子数被乘坐菲波那契序列。Input输入的第一个数为n,接下来有n个数字。每个数字为一个月份m(m<=45)。Output输出为n行,每行为第m个月后的兔子总数。Sample Input61 2 3 4 5 10Sample Output1235889Answer#include<stdio.h>int main() int n,x,i; int a50,b50; a0=1; a1=1; i

39、=2; while(i<50) ai=ai-1+ai-2; i+; scanf("%d",&x); for(i=1;i<=x;i+) scanf("%d",&n); bi=an; for(i=1;i<=x;i+) printf("%dn",bi);26登录密码验证Description编写一个程序,模拟用户登录系统的密码验证过程。系统提供给用户的密码长度最长为20个字符,若密码输入错误可以再次输入。但为了保证用户密码安全,若连续输入密码错误超过5次就会锁定账号一段时间。Input输入为若干个串,至EO

40、F结束。输入的第一个串是用户的正确密码,后面的串为模拟用户登录时的输入的密码。Output每次输入错误的密码,输出一个“Wrong!”,若输入的密码为正确的,输出一个“Welcome!”,并结束密码测试。若前5次输入的密码都是错误的,则后面的输入中不管是否有正确的密码都输出“Out of limited!”。Sample Inputabcdefg kkkkkkkk abcdefgSample OutputWrong!Wrong!Welcome!Answer#include<stdio.h>#include<string.h>int main() char a20,b20

41、; int i,j=1; scanf("%s",a); while(scanf("%s",b)!=EOF) if(j<=5) if(strcmp(a,b)=0) printf("Welcome!n"); break; else printf("Wrong!n"); j+; else printf("Out of limited!n"); 27、 Matrix Problem : Array PraticeDescription求一个m×n阶矩阵A的转置矩阵AT。矩阵A的每个元素都

42、在int类型的范围之内。Input输入的第一行为一个整数M(M>0),后面有M组输入数据。每组数据以两个正整数m和n开始,满足0<m,n<=100,接下来为一个m行n列的矩阵A。Output输出为多组,每组输出A的转置矩阵AT。矩阵的输出为:每行两个元素之间用一个空格分开,每行最后一个元素之后为一个换行,在下一行开始输出矩阵的下一行。每两组输出之间用一个空行分隔开。Sample Input13 31 2 34 5 67 8 9Sample Output1 4 72 5 83 6 9Answer#include <stdio.h> int main() int a1

43、00100=0,M,m,n,i,j,k,b100100=0; scanf("%d",&M); for(k=0;k<M;k+) scanf("%d %d",&m,&n); for(i=0;i<m;i+) for(j=0;j<n;j+) scanf("%d",&aij); for(j=0;j<n;j+) for(i=0;i<m;i+) bji=aij; if(i<(m-1) printf("%d ",bji); else printf("%d

44、n",bji); if (k<(M-1) printf("n"); return 0; 28、string to integer(I)Description需要编写一个函数,将字符串转换为整数。函数原型为:int strToInt(char str);其中:参数str是需要转换的字符串,返回值表示字符串str转换为整数之后的结果。转换规则是:将字符串str中全部都是数字字符的前缀转换为整数,并返回。如果str的首字符不是数字字符,则返回0;如果str是空串,则返回-1。示例:strToInt(“123ab”)=123; strToInt("a123

45、")=0注意:主函数已经给出,你只需要提交strToInt()函数的代码。而且不能使用标准库函数进行转换。提交的代码要包含必要的头文件包含命令。Input输入是若干行字符串,它们都包含不超过10个的字符,而且包含的整数不会超出int类型的表示范围。Output输出为若干行整数,每一行输出与上述输入一一对应。Sample Input123c0123dd-45ede1321Sample Output123123-100Answer#include<stdio.h> int strToInt(char str) int i,j,a=0,s=0; if(str0='0&#

46、39;) return -1; else for(i=0;stri!='0'i+) if(str0<48|str0>57) return 0; goto loop; else if(stri>=48&&stri<=57) a=stri-'0' s=s*10+a; a=0; else break; return s; loop:; int main() char str11; gets(str); printf("%d",strToInt(str); while (gets(str)!=NULL) pri

47、ntf("n%d",strToInt(str); return 0; 29、 string to integer(II)Description需要编写一个函数,将字符串转换为整数。函数原型为:int strToInt(char str);其中:参数str是需要转换的字符串,返回值表示字符串str转换为整数之后的结果。转换规则是:字符串中可能包含符号位,即“+”或“-”,而且如果包含符号位,能且仅能是第一个字符。将字符串str中全部都是数字字符(含0个或1个符号位)的前缀转换为整数,并返回。如果str的首字符不是数字字符也不是符号位,则返回0;如果str是空串,则返回0。示例

48、:strToInt(“+123ab”)=123; strToInt("-a123")=0; strToInt("-123")=-123。注意:主函数已经给出,你只需要提交strToInt()函数的代码。而且不能使用标准库函数进行转换。提交的代码要包含必要的头文件包含命令。Input输入是若干行字符串,它们都包含不超过10个的字符,而且包含的整数不会超出int类型的表示范围。Output输出为若干行整数,每一行输出与上述输入一一对应。Sample Input123c0123dd-45ede1321+76abcdefSample Output1231230-

49、45076Answer#include<stdio.h>int strToInt(char str) int i,j,a=0,s=0; if(str0='0') return 0; else if(str0<48|str0>57)&&str0!='-'&&str0!='+') return 0; else if(str0='+') for(i=1;stri!='0'i+) if(stri>=48&&stri<=57) a=stri-

50、'0' s=s*10+a; else break; else if(str0='-') for(i=1;stri!='0'i+) if(stri>=48&&stri<=57) a=stri-'0' s=s*10+a; else break; s=-s; else for(i=0;stri!='0'i+) if(stri>=48&stri<=57) a=stri-'0' s=s*10+a; else break; return s; int main() char str11; gets(str); printf("%d",strToInt(str); while (gets(str)!=NULL) printf(&qu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论