《C语言练习题(山东科技大学吐血整理)(共28页).doc》由会员分享,可在线阅读,更多相关《C语言练习题(山东科技大学吐血整理)(共28页).doc(28页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上数学11-1 C语言平时训练题1、算术基本运算Description计算两整数x和y(0x,y1000)的和、差、积、商、余数、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 int main()int x,y,a,b,c,d
2、,e,f,g;0x1000,0y1000;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: %dn,d,e);printf(x 2 : %dn,f);printf(y 3 : %dn,g);return 0;2、求圆的面积和周长Description从键盘输入圆的半径,求圆的面积和周长,圆周率取
3、3.14。Input输入一个浮点型数据,有效数字不会超过十进制的6位。Output输出为两行。第一行为圆的面积,第二行为圆的周长,格式见sample。Sample Input3Sample OutputArea: 28.Perimeter: 18.Answer#include#define PI 3.14int 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输入只有一行,
4、为3个较小的整数。Output输出为这3个整数的平均值,保留3位小数。Sample Input1 2 3Sample Output2.000Answer#include int main()int 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输入有三行。第一行依次为美元、欧元、日元外币汇
5、率,用空格分开。汇率用100外币为单位,精确到小数点后4位,如668.5200表示“100美元=668.5200人民币”。汇率浮动范围为(0,10000)。第二行为外币金额x,第三行为人民币金额y。x,y均为整数,且0x,y10000。Output输出为两行。第一行为金额为x的美元、欧元、日元兑换成人民币的金额,用空格分开。第二行为金额为y的人民币兑换成美元、欧元、日元的金额,用空格分开。所有金额精确到小数点后两位。Sample Input668.5200 908.0685 7.985215001500Sample Output10027.80 13621.03 119.78224.38 16
6、5.19 18784.75Answer#include int main()double 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、 求字符的值Description从键盘输入3个字符(不含双字节字符),分别输出每个
7、字符的十进制值(ASCII码)、八进制值和十六进制值。Input输入为3个字符。Output输出为3行。每一行为每个字符(对应输入顺序)的十进制、八进制和十六进制值,用空格分隔开。每个输出的值占3个字符,不足3个字符前面补0。Sample Input0 ASample Output048 060 030032 040 020065 101 041Answer#include int main() char a,b,c; scanf(%c%c%c,&a,&b,&c); printf(%.3d %.3o %.3xn,a,a,a); printf(%.3d %.3o %.3xn,b,b,b); pr
8、intf(%.3d %.3o %.3xn,c,c,c); return 0; 6、 奇数还是偶数?Description输入一个整数,判读它是奇数还是偶数。Input输入只有一行,为一个100以内的正整数。Output输出为一行。若输入为偶数则输出“even”,奇数输出“odd”。Sample Input30Sample OutputevenAnswer#include int main() int a; scanf(%d,&a); if(a=0&a=100)if (a%2=0) printf(evenn); else printf(oddn); elseprintf(error); retu
9、rn 0; 7、绝对值Description求整型数据和浮点型数据的绝对值。Input输入两个数,第一个是整数,第二个是浮点数。Output输出为两行,第一行为整数的绝对值,第二行为浮点数的绝对值,注意浮点数的绝对值不输出无意义的0。Sample Input-11Sample Output11Answer#include #include #include 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、简单的打折计算Descript
10、ion商店规定:消费满n元,可以打八八折。设某件商品标价m元,输入购买的件数x,计算出需要支付的金额(单位:元),精确到分。Input输入只有一行,三个整数m、n和x,且0xmn1000。Output输出金额,精确到分。Sample Input95 300 4Sample Output334.40Answer#include int main() int m,x,n,a; float b; scanf(%d%d%d,&m,&n,&x); 0x&xm; xm&mn; mn&nn) b=0.88*a; else b=a; printf(%.2fn,b); return 0; 9、 判断闰年Desc
11、ription输入一个正整数的年份,判断是否为闰年。Input输入只有一行,为一个10000以内的正整数。Output输出为一行。若输入为闰年偶数则输出“Yes”,否则输出“No”。Sample Input2010Sample OutputNo答案#include int main() int a; scanf(%d,&a); if (a0&a10000) 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、 水仙
12、花数Description如果一个三位十进制数等于其各位数字的立方和,则称这个数为水仙花数。如:13+53+33=153。Input一个整数x,100=x=999。Outputx是水仙花数,则输出“YES”,否则为“NO”。Sample Input153Sample OutputYESAnswer#include 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)
13、; return 0; 11、 三个数比较大小Description从键盘上输入0100之间的三个数,按从小到大的顺序输出。Input输入只有一行,为三个整数。Output按从小到大输出这三个数。Sample Input15 10 20Sample Output10 15 20Answer#include 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 (ac)printf(%d %d %dn,b,c,a);elseprintf(%d %d %dn,b,a,
14、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,不会超出int类型的数据范围。Output输出n的最低两位数字。但是,输入的数字本身不足两位时,不应当补0。如,输入为“1”,则输出为“1”。Sample Input-102Sample Output02Answer#includeint main(
15、)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(%dn,-a);elsec=-a;b=c-c/100*100;printf(%.2dn,b);return 0;13、判断奇偶数(填空)Description编写一个程序,判断读取的正整数的奇偶性,部分程序已经给出,请填上空白语句,并提交填充后的完整程序。程序(含答案):#include int main() int num; scanf(%d,&num); if (num%2
16、=0) printf(%d is an even number.,num);/num是一个偶数 else printf(%d is an odd number.,num);/num是一个奇数 return 0;14、求分段函数的值(填空)Description设有分段函数如下:给出N0个x的值,求对应的y值并输出。部分程序已经给出,请填充其中的空白语句,并提交填充后的完整程序。程序(含答案):#include #include int main() double x,y; int i,N; scanf(%d,&N); for (i=0;iN;i+) scanf(%lf,&x); if (x0)
17、 y=-x; else if (x1) y=sin(2*x); else if (x5) 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=m,nk100,且m与n不相等。Input输入三个整数,依次为k、m、 n。Output从小到大输出符合题意的所有整数,两数之间用一个空格
18、分开。Sample Input15 2 3Sample Output2 3 4 8 9 10 14 15Answer#includeint main()int k,m,n,a,i=1;scanf(%d %d %d,&k,&m,&n);if(mn) a=m;elsea=n;printf(%d,a);for(i=a+1;i=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,b1000。Input输入有多对整数a和b组成,每对a和b占一行,a,b用空格分开。
19、Output每行输出一个a+b的值,顺序与输入对应。Sample Input1 210 20Sample Output330Answer#includeint main()int a,b;while(scanf(%d %d,&a,&b)!=EOF)printf(%dn,a+b);return 0;17、A+B Problem (II) : Input/Output PraticeDescription计算a+b,0=a,b1000。Input输入的第一行是一个整数N,后面有N对整数a和b,每对a和b占一行,a,b用空格分开。Output每行输出一个a+b的和,顺序与输入对应。Sample In
20、put21 210 20Sample Output330Answer#includeint main()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输入多行,每行一个整
21、数。Output输入所对应的成绩等级。Sample Input-18192356872100Sample OutputErrorGoodExcellentFailingPassAverageExcellentAnswer#include int main() int score; while(scanf(%d,&score)!=EOF) if (score100) printf(Errorn); else switch (score/10) case 0: case 1: case 2: case 3: case 4: case 5:printf(Failingn);break; case 6
22、: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个数中最大的数和最小的数,并将它们的值输出出来。Input输入为n+1个整数,都在int类型范围内。这些数可能用若干空格或者换行符分隔开。输入的第1个数为n,表示后续有n个数输入。从输入的第2个数开始,求出直到第n+1个数中最大的数和最小的数。Output输出为两行,格式见sam
23、ple。Sample Input3 0 1 -1Sample OutputThe maximum number is 1.The minimum number is -1.Answer#includeint main() int n,i,max,min; scanf(%d,&n); int an; for(i=0; in; i+) scanf(%d,&ai); max=a0; min=a0; for(i=0; in; i+) if(maxai) min=ai; printf(The maximum number is %d.n,max); printf(The minimum number i
24、s %d.,min); return 0;20、字符加密DescriptionTom和Jack是密码学爱好者,他们在聊天时经常使用一些暗语。他们使用的一种最简单的暗语是:将要说的每句话里面的英文字母变成这个字母之后的某个字母。现在要求你写一个程序,将一个字母变成它之后的某个字母。Input输入有2个:一个大写字母c和一个正整数d(0d26)。其中c是要进行变换的字母,d表示要将c变成其后面第d个字母。Output输出字母c之后的第d个字母。大小写与c一致。如果c之后的某个字母已经超出Z,则再从字母A开始计数。如:c=A,d=3,则输出应为:D。若:c=Y,d=3,则输出应为:B。Sample
25、InputA 3Sample OutputDAnswer#includevoid 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之间的所有素数,一个素数一行。如果mn之间没有素数,则不输出任何数。输出的所有数在两行“=”之间。Sample Input2 12
26、Sample Output=117532=Answer#include#includeint 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;j1) printf(%dn,i);printf(=);return 0;22、 Sum Problem (II) : Input/Output PraticeDescription计算若干整数的和,这些整数都是小于1000的非负整数。Input输入的第一行是一个整数M,后面有M个测试样例。每个测试样例以一个整数N开始,后面接着是N个
27、整数。Output每组测试样例对应一行输出,为所给的N个整数之和,顺序与输入对应。Sample Input23 1 2 35 10 15 20 30 50Sample Output6125Answer#include 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,把它转换成二进制数
28、输出。Input输入为多行,每行一个整数x,至读入EOF结束。Output每行输出x对应的二进制数值。Sample Input0133365535Sample Output011111111Answer#include 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); return 0; 24、简单的整数排序Description对给出的若干整数按从小到大排序。Input输入的第一
29、个数为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 int main() int c,i,n,j; int a1000; scanf(%d,&n); for (i=0;in;i+) scanf(%d,&ai); for(i=1;i=n-1;i+) for(j=0;jaj+1) c=aj; aj=aj+1; aj+1=c; printf(%d,a0)
30、; for(i=1;in;i+) printf( %d,ai); return 0;25、兔子的繁殖问题Description假设一对兔子每月能生一对小兔(一雌一雄),每对小兔出生后的下一个月是没有繁殖能力的,至出生后的第三个月开始又可以每月生一队小兔,问从一对刚出生的小兔开始,经过若干个月后一共有多少兔子(假设在此过程中兔子没有死亡)?这个问题是意大利数学家菲波那契(Fibonacci)在他1202年出版的算盘全书中提出来的,从第一对刚出生的小兔开始每月的兔子数被乘坐菲波那契序列。Input输入的第一个数为n,接下来有n个数字。每个数字为一个月份m(m=45)。Output输出为n行,每行为
31、第m个月后的兔子总数。Sample Input61 2 3 4 5 10Sample Output1235889Answer#includeint main() int n,x,i; int a50,b50; a0=1; a1=1; i=2; while(i50) 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个字符,若密码输
32、入错误可以再次输入。但为了保证用户密码安全,若连续输入密码错误超过5次就会锁定账号一段时间。Input输入为若干个串,至EOF结束。输入的第一个串是用户的正确密码,后面的串为模拟用户登录时的输入的密码。Output每次输入错误的密码,输出一个“Wrong!”,若输入的密码为正确的,输出一个“Welcome!”,并结束密码测试。若前5次输入的密码都是错误的,则后面的输入中不管是否有正确的密码都输出“Out of limited!”。Sample Inputabcdefg kkkkkkkk abcdefgSample OutputWrong!Wrong!Welcome!Answer#include
33、#includeint main() char a20,b20; int i,j=1; scanf(%s,a); while(scanf(%s,b)!=EOF) if(j0),后面有M组输入数据。每组数据以两个正整数m和n开始,满足0m,n=100,接下来为一个m行n列的矩阵A。Output输出为多组,每组输出A的转置矩阵AT。矩阵的输出为:每行两个元素之间用一个空格分开,每行最后一个元素之后为一个换行,在下一行开始输出矩阵的下一行。每两组输出之间用一个空行分隔开。Sample Input13 31 2 34 5 67 8 9Sample Output1 4 72 5 83 6 9Answer
34、#include int main() int a100100=0,M,m,n,i,j,k,b100100=0; scanf(%d,&M); for(k=0;kM;k+) scanf(%d %d,&m,&n); for(i=0;im;i+) for(j=0;jn;j+) scanf(%d,&aij); for(j=0;jn;j+) for(i=0;im;i+) bji=aij; if(i(m-1) printf(%d ,bji); else printf(%dn,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)=0注意:主函数已经给出,你只需要提交strT