C语言作业题

上传人:xgs****56 文档编号:9783247 上传时间:2020-04-08 格式:DOC 页数:103 大小:852.31KB
返回 下载 相关 举报
C语言作业题_第1页
第1页 / 共103页
C语言作业题_第2页
第2页 / 共103页
C语言作业题_第3页
第3页 / 共103页
点击查看更多>>
资源描述
1005货币兑换Description给出人民币对美元、欧元、日元的当日汇率,求给定金额的人民币能兑换成外币的金额,求给定金额的外币能兑换成人民币的金额。要计算的外币有三种:美元、欧元、日元。Input输入有三行。第一行依次为美元、欧元、日元外币汇率,用空格分开。汇率用100外币为单位,精确到小数点后4位,如668.5200表示“100美元=668.5200人民币”。汇率浮动范围为(0,10000)。第二行为外币金额x,第三行为人民币金额y。x,y均为整数,且0x,y10000。Output输出为两行。第一行是金额为x的美元、欧元、日元兑换成人民币的金额,用空格分开。第二行是金额为y的人民币兑换成美元、欧元、日元的金额,用空格分开。所有金额精确到小数点后两位。Sample Input668.5200 908.0685 7.9852 1500 1500 Sample Output10027.80 13621.03 119.78 224.38 165.19 18784.75 HINT了解浮点数据类型的精确度和输出控制。#include int main() double a,b,c;double x;double y;scanf (%lf%lf%lf,&a,&b,&c);scanf (%lf,&x);scanf (%lf,&y);printf (%.2lf %.2lf %.2lfn,x*0.01*a,x*0.01*b,x*0.01*c);printf (%.2lf %.2lf %.2lfn,y/a*100,y/b*100,y/c*100);return 0;1006求字符的值Description从键盘输入3个字符(不含双字节字符),分别输出每个字符的十进制值(ASCII码)、八进制值和十六进制值。Input输入为3个字符。Output输出为3行。每一行为每个字符(对应输入顺序)的十进制、八进制和十六进制值,用空格分隔开。每个输出的值占3个字符,不足3个字符前面补0。Sample Input0 ASample Output048 060 030 032 040 020 065 101 041 HINT了解字符值的存储和整型的关系。#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);printf(%.3d %.3o %.3xn,c,c,c);return 0;1007奇数还是偶数?Description输入一个整数,判读它是奇数还是偶数。Input输入只有一行,为一个100以内的正整数。Output输出为一行。若输入为偶数则输出“even”,奇数输出“odd”。Sample Input30Sample OutputevenHINT用整数运算可以解决,练习“?:”表达式。法1:#include int main()int a;(0a)&(a100);scanf (%d,&a);if(a%2=0)printf (evenn);else printf (oddn); return 0;法2:#include #include int main() int a; scanf(%d,&a); if(a0) return a%2=0?printf(evenn):printf(oddn);1008绝对值Description求整型数据和浮点型数据的绝对值。Input输入两个数,第一个是整数,第二个是浮点数。Output输出为两行,第一行为整数的绝对值,第二行为浮点数的绝对值,注意浮点数的绝对值不输出无意义的0。Sample Input-1 1 Sample Output1 1 HINT求绝对值可以用标准库函数来完成,也可以自己判断。注意浮点数的输出格式。求绝对值的函数在哪个头文件?貌似很多人会搞错,包括很多编书的人!#include #include #include int main() int a,b; double c,d; scanf(%d,&a); b=abs(a); scanf(%lf,&c); d=fabs(c); printf(%dn,b); printf(%gn,d); /%g 按%f,%e,两者中较短的输出,不输出无意义的0 return 0;/fabs-math.h/abs-stdlib.h1009简单的打折计算Description商店规定:消费满n元,可以打八八折。设某件商品标价m元,输入购买的件数x,计算出需要支付的金额(单位:元),精确到分。Input输入只有一行,三个整数m、n和x,且0xmn1000。Output输出金额,精确到分。Sample Input95 300 4Sample Output334.40HINT了解浮点型的输出控制,注意整型和浮点型混合运算过程中的数据类型转换。法1:#include #include int main() int m,n,x; (0x)&(xm)&(mn)&(n=n) s=m*x*0.88;else s=m*x; printf (%.2f,s);return 0;法2:#include #include int main() int m,n,x; float s; scanf(%d %d %d,&m,&n,&x); while(0x)&(xm)&(mn)&(n=n) s=m*x*0.88; else s=m*x; printf (%.2f,s); break; return 0;法3:#include #include int main() int x; float m,n,z; scanf(%f%f%d,&m,&n,&x); while(0x)&(xm)&(mn)&(n1000) z=m*x; if(zn) z=0.88*z; printf(%.2f,z);break; /breeak 可换为return 0;代表结束1010判断闰年Description输入一个正整数的年份,判断是否为闰年。Input输入只有一行,为一个10000以内的正整数。Output输出为一行。若输入为闰年则输出“Yes”,否则输出“No”。Sample Input2010Sample OutputNoHINT了解逻辑运算符和关系运算符。闰年的定义:能被4整除,但不能被100整除;或能被400整除#include #include int main() int x;scanf(%d,&x);(0x&x10000); if(x%4=0&x%100!=0) printf(Yesn); else if (x%400=0) printf(Yesn); else printf(Non);return 0;法2:#include #include int main () int y; scanf(%u,&y); while(y0&y10000)if(y%4=0)&(y%100!=0)|(y%400=0) printf(yes); else printf(no);return 0;1011GHacker的解谜过关游戏DescriptionGHacker最近痴迷于一个新上市的解谜游戏,其中一关的过关是破解一个字符串S。经过3天的冥思苦想,GHacker成功的搞明白了这其中的奥秘,把串S中的整数取出来求和,就可以过关了。但是GHacker的数学实在糟糕。他无法在短暂的时间内算出来,只好求助Jackie。Jackie观察到虽然每次出现的数字不同,但是其它的符号并不会变化。于是Jackie编写了一个非常短的程序,帮助GHacker把这一关过了。Input输入为串S,只有一行。Output串S中用非数字(09)分隔开的非负整数之和,不会超出int类型的数据范围。Sample Input13?:7514,54.487=(438922x159?392)%032n111cdef120$95;Sample Output447899HINTscanf()可以解决这个问题,注意转义字符和格式控制字符。#include #include int main() int a,b,c,d,e,f,g,h,i,j,k,l; scanf(%d?:%d,%d.%d=(%dx%d?%d)%dn%dcdef%d$%d;,&a,&b,&c,&d,&e,&f,&g,&h,&i,&j,&k); l=a+b+c+d+e+f+g+h+i+j+k; printf(%d,l); return 0;1012水仙花数Description如果一个三位十进制数等于其各位数字的立方和,则称这个数为水仙花数。如:13+53+33=153。Input一个整数x,100=x=999。Outputx是水仙花数,则输出“YES”,否则为“NO”。Sample Input153Sample OutputYESHINTAppend Code法1:#include #include #include int main() int c,a,b,x,m,sum; scanf (%d,&x); c=x/100; m=x%100; a=m/10; b=m%10; if(c*c*c+a*a*a+b*b*b=x) printf(YESn); else printf (NOn); return 0;法2:#include #include int main() int a,b,c,z; scanf(%d,&z); while (z=100&z=999) a=z/100; b=z%100/10; c=z%100%10; if(z=a*a*a+b*b*b+c*c*c) printf(YES); else printf(NO); return 0; 1021 A+B Problem (II) : Input/Output PracticeDescription计算a+b,0=a,b1000。Input输入的第一行是一个整数N,后面有N对整数a和b,每对a和b占一行,a,b用空格分开。Output每行输出一个a+b的和,顺序与输入对应。Sample Input2 1 2 10 20Sample Output3 30HINTN给出了测试样例数,用for循环处理方便。Append Code法1:#include #include int main() int n,i,j; scanf(%d,&n); int an2; for(i=0;in;i+) for(j=0;j2;j+) scanf(%d,&aij); for(i=0;in;i+) printf(%dn,ai0+ai1); return 0;法2:#include #include int main() int a,b,N; scanf (%d,&N); int cN2; for (a=0;aN;a+) for(b=0;b2;b+) scanf (%d,&cab); for (a=0;aN;a+) printf(%dn,ca0+ca1); return 0;1022 A+B Problem (III) : Input/Output PracticeDescription计算a+b,0=a,b1000。Input输入有多对整数a和b组成,每对a和b占一行,a,b用空格分开。当测试样为0 0时表示输入结束,0 0不参与运算。Output每行输出一个a+b的值,顺序与输入对应。Sample Input1 2 10 20 0 0 Sample Output3 30 HINT练习break的使用。Append Code#include #include int main() int a,b; while (scanf(%d %d,&a,&b) /while(scanf(%d %d,&a,&b)&(a!=0&b!=0)不正确,当输入a=0,b=1时也会终止 if(a=0&b=0) break; printf(%dn,a+b); return 0;(未看)1054 Matrix Problem (II) : Array PracticeDescription求两个矩阵A、B的和。根据矩阵加法的定义,只有同阶的矩阵才能相加。可以确保所有运算结果都在int类型的范围之内。Input输入数据为多个矩阵,每个矩阵以两个正整数m和n开始,满足0m,n=100,接下来为一个m行n列的矩阵A。当输入的m和n均为0时,表示输入数据结束Output对输入的矩阵两两相加:第1个和第2个相加、第3个和第4个相加按顺序输出矩阵相加的结果:每行两个元素之间用一个空格分开,每行最后一个元素之后为一个换行,在下一行开始输出矩阵的下一行。若输入的矩阵不为偶数个,最后剩余的矩阵不产生任何输出。不满足矩阵加法定义的数据输出“Not satisfied the definition of matrix addition!”每两组输出之间用一个空行分隔开。Sample Input3 3 1 2 3 4 5 6 7 8 9 3 3 9 8 7 6 5 4 3 2 1 3 3 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 1 1 0 0 0Sample Output10 10 10 10 10 10 10 10 10 Not satisfied the definition of matrix addition!HINT矩阵的加法就是对应位置上的元素相加。Append Code#include #include int main() int m,n,i,j,t,s,k; int a100100,b100100,c100100; for(k=0;k+) scanf(%d%d,&m,&n); if(m=0|n=0) return 0; if(k!=0) printf(n); for(i=0;im;i+) for(j=0;jn;j+) scanf(%d,&aij); scanf(%d%d,&s,&t); if(s=0|t=0) return 0; for(i=0;is;i+) for(j=0;jt;j+) scanf(%d,&bij); if(m=s&n=t) for(i=0;im;i+) for(j=0;jn;j+) cij=aij+bij; for(i=0;im;i+) for(j=0;jn;j+) if(j=0) printf(%d,cij); else printf( %d,cij); printf(n); else printf(Not satisfied the definition of matrix addition!n); return 0;(未看)1055 Matrix Problem (III) : Array PracticeDescription求两个矩阵A、B的乘积C=AB。根据矩阵乘法的定义,只有A的列数和B的行数相同才能相乘。可以确保所有运算结果都在int类型的范围之内。Input输入数据为多个矩阵(最少2个),每个矩阵以两个正整数m和n开始,满足0m,n=100,接下来为一个m行n列的矩阵A。当输入的m和n均为0时,表示输入数据结束。Output对输入的矩阵两两相乘:第1个和第2个相乘、第1个和第2个相乘的结果和第3个相乘按顺序输出矩阵相乘的结果:每行两个元素之间用一个空格分开,每行最后一个元素之后为一个换行,在下一行开始输出矩阵的下一行。若前k个矩阵相乘的结果和第k+1个矩阵无法相乘(即不满足矩阵乘法定义),则输出“Not satisfied the definition of matrix multiplication!”。然后用第k+1个矩阵去和第k+2个矩阵相乘。最后一个矩阵只做乘数。每两组输出之间用一个空行分隔开。Sample Input2 3 1 1 1 1 1 1 3 3 1 2 3 4 5 6 7 8 9 3 1 0 0 0 0 0 Sample Output12 15 18 12 15 18 0 0 HINT矩阵的乘法就是一行乘以一列加起来做一个元素。Append Code#include #include #include int main() int m,n,m1,n1,i,j,k,l=0; int a102102,b102102,c102102; memset(a,0,sizeof(a); memset(b,0,sizeof(b); memset(c,0,sizeof(c); scanf(%d %d,&m,&n); for(i=0;im;i+) for(j=0;jn;j+) scanf(%d,&aij); m1=m; n1=n; while(scanf(%d%d,&m,&n)!=EOF) if(m=0&n=0) break; i=0; while(im) for(j=0;jn;j+) scanf(%d,&bij); i+; if(n1=m) for(i=0;im1;i+) for(j=0;jn;j+) for(k=0;km;k+) cij=cij+aik*bkj; /矩阵的乘法就是一行乘以一列加起来做一个元素。 m1=m1; n1=n; memset(a,0,sizeof(a); memset(b,0,sizeof(b); if(l!=0) printf(n); l=1; for(i=0;im1;i+) for(j=0;jn1;j+) if(j=0) printf(%d,cij); else printf( %d,cij); aij=cij; printf(n); memset(c,0,sizeof(c); else if(l!=0) printf(n);/ l=1; printf(Not satisfied the definition of matrix multiplication!n); memset(a,0,sizeof(a);/每两组输出之间用一个空行分隔开。 for(i=0;im;i+) for(j=0;jn;j+) aij=bij; memset(b,0,sizeof(b); memset(c,0,sizeof(c); m1=m; n1=n; return 0;1099简单的整数排序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 9HINT排序前必须把所有的整数都存储下来。因为只有最多1000个数,1秒的时间足够任何排序算法运行处结果来。Append Code法1:#include#include #define N 1000int main() int n,i,temp,aN,j; scanf(%d,&n); for(i=0;in;i+) scanf(%d,&ai); for(i=0;in-1;i+) for(j=i+1;jaj) temp=ai; ai=aj; aj=temp; int first=0; for(i=0;in;i+) if(first=1) printf( ); printf(%d,ai); first=1;/先输出空格,再输出数字 return 0;法2:#include #include #include#include #define N 1000int main() int first=0,n,i,temp,aN,j;/定义整形 scanf(%d,&n);/输入n,后面跟n个数字 for(i=0;in;i+)/for循环 scanf(%d,&ai); for(i=0;in-1;i+) for(j=0;jaj+1) temp=aj; aj=aj+1;/i与j互换 aj+1=temp; for(i=0;in;i+) if(first=1)/使输出的格式符合提议 printf( ); printf(%d,ai); first=1; return 0;1201编写函数:你交换了吗?之一 (Append Code)Description从标准输入读取两个整数a、b,按先小后大的次序输出。那么a、b的输出顺序与输入顺序是否一致呢?即,输出相对于输入是否交换过位置。注意:a和b相等时不产生交换。-用C语言编写函数实现,append.c中函数原型为:int is_swapped(int * a, int * b);功能:返回值是0或者1。其它的就不告诉你了,猜猜看-。用C+编写函数实现,append.cc中函数原型为:bool isSwapped(int &a, int &b);功能:返回一个布尔值(true或false)。函数的调用格式见“Append Code”。Input两个较小的整数a,b,用空格分开。Output输出有两种情况:1) “a b NO”, 当a,b没有交换过2) “b a YES”, 当a,b交换过Sample Input5 3Sample Output3 5 YESHINT参看系统首页上的“Append Code”使用说明,讨论版(Web Board)上也有。Append Codeappend.c,append.cc,int main()int a, b;scanf(%d%d, &a, &b);if(is_swapped(&a, &b)printf(%d %d YES, a, b);elseprintf(%d %d NO, a, b);#include #include int is_swapped(int * a, int * b) int temp; if (*a=*b) return 0; else temp =*a; *a=*b; *b=temp; return 1;int main() int a, b; scanf(%d%d, &a, &b); if(is_swapped(&a, &b) printf(%d %d YES, a, b); else printf(%d %d NO, a, b);1202编写函数:你交换了吗?之二 (Append Code)Description从标准输入读取两个整数a、b,按先小后大的次序输出。那么a、b的输出顺序与输入顺序是否一致呢?即,输出相对于输入是否交换过位置。注意:a和b相等时不产生交换。-用C语言编写函数实现,append.c中函数原型为:int is_swapped(int * a, int * b);功能:返回值是0或者1。其它的就不告诉你了,猜猜看-。用C+编写函数实现,append.cc中函数原型为:bool isSwapped(int &a, int &b);功能:返回一个布尔值(true或false)。函数的调用格式见“Append Code”。Input两个较小的整数a,b,用空格分开。Output输出有两种情况:1) “a b NO”, 当a,b没有交换过2) “b a YES”, 当a,b交换过Sample Input5 3Sample Output3 5 YESHINT参看系统首页上的“Append Code”使用说明,讨论版(Web Board)上也有。Append Codeappend.c,append.cc,int main()int a, b;scanf(%d%d, &a, &b);if(is_swapped(&a, &b)printf(%d %d YES, b, a);elseprintf(%d %d NO, a, b);法1:#include #include int is_swapped(int * a, int * b)/指针 int temp;/*指针取内容 if (*a=*b) return 0; else/&取地址符 temp =*&a;/&取地址符 *&a=*&b;/*取内容 *&b=temp; / return 1;int main() int a, b; scanf(%d%d, &a, &b); if(is_swapped(&a, &b) printf(%d %d YES, b, a); else printf(%d %d NO, a, b);法2:#include #include int is_swapped(int * a, int * b)return ab?1:0;int main() int a, b; scanf(%d%d, &a, &b); if(is_swapped(&a, &b) printf(%d %d YES, b, a); else printf(%d %d NO, a, b); return 0;1215编写函数:字符串的复制 之一 (Append Code)Description将输入的一个字符串s拷贝输出。-编写一个函数str_cpy()求一个串的拷贝:原型:char * str_cpy(char * t, char * s);功能:把串s复制到串t中,返回值是串t。函数的调用格式见“Append Code”。-Invalid Word(禁用单词)错误:在解决这个题目时,某些关键词是不允许被使用的。如果提交的程序中包含了下列的关键词之一,就会产生这个错误。被禁用的头文件:string.h、stdlib.h。被禁用的库函数:strcpy()、strncpy()、memcpy()等。Input输入为多行。每行为一个字符串s。s的字符总数不超过100个。Output串s的复制。输出两遍,一遍是测试返回值,一遍是测试str。Sample Input2 Look! 5 I love china! Sample Output2 Look! 2 Look! 5 I love china! 5 I love china! HINTstr_cpy()的返回值参考标准库函数strcpy()、strstr()、strchr()的设计思路:返回指向目标串的指针。Append Codeappend.c,int main()char sMAX_STR_LEN, strMAX_STR_LEN, *p;while(gets(s) != NULL)p = str_cpy(str, s);puts(p);puts(str);return 0;#include #define MAX_STR_LEN 122char * str_cpy(char * t, char * s) int i=0; int k; while (*s!=0) /*while (*t+=*s+) t-; while (*t+=*s+) t=s;*/ *t+=*s+; i+;*t=0;for (k=1;k=i;k+)t-;return t;/hhkjkjint main() char sMAX_STR_LEN, strMAX_STR_LEN, *p; while(gets(s) != NULL) p = str_cpy(str, s); puts(p); puts(str); return 0;1216编写函数:字符串的复制 之二 (Append Code)Description将输入的一个字符串s拷贝输出。-编写一个函数str_cpy()求一个串的拷贝:原型:char * str_cpy(char * t, char * s, int n);功能:把串s的前n个字符复制到串t中,返回值是串t。如果串s的字符个数不足n个,则全部复制。函数的调用格式见“Append Code”。-Invalid Word(禁用单词)错误:在解决这个题目时,某些关键词是不允许被使用的。如果提交的程序中包含了下列的关键词之一,就会产生这个错误。被禁用的头文件:string.h、stdlib.h。被禁用的库函数:strcpy()、strncpy()、memcpy()等。Input输入为多行。每行为一个非负整数n和一个字符串s,两者用一个空格分隔。s的字符总数不超过100个。Output串s前n个字符的复制。输出两遍,一遍是测试返回值,一遍是测试str。Sample Input2 Look! 5 I love china!Sample OutputLo Lo I lovI lov HINTstr_cpy()的返回值参考标准库函数strcpy()、strstr()、strchr()的设计思路:返回指向目标串的指针。Append Codeappend.c,int main()int n;char sMAX_STR_LEN, strMAX_STR_LEN, *p;while(scanf(%d, &n) != EOF & getchar()gets(s);p = str_cpy(str, s, n);puts(p);puts(str);return 0;#include #define MAX_STR_LEN 200char * str_cpy(char * t, char * s, int n) int i=0,k;/ while(*s!=0&in)/控制只输出n个值 *t+=*s+;/对应的值相等 i+;/ *t=0;/ for(k=1;k=i;k+)/ t-;/ return t;/int main() int n; char sMAX_STR_LEN, strMAX_STR_LEN, *p; while(scanf(%d, &n) != EOF & getchar() gets(s); p = str_cpy(str, s, n); puts(p); puts(str); return 0;1219体重正常吗?Description体重指数计算器是体重与身高之比值,知道它很重要,可以了解你的健康情况,你的体重是不是标准体重、超重和肥胖等。编写一个体重指数计算器,只需要输入身高与体重,即可计算出体重指数。体重指数(BMI-Body Mass Index)是评估体重与身高比例的参考指数,它的计算公式为:体重(kg)除以身高(m)的平方。判断结论为:BMI=40极度超重Input输入为多行,每行包含2个实数:第一个是身高(以cm为单位)、第二个是体重(以kg为单位),两个数据均为正数。两者之间用一个空格隔开。Output输出为多行,每行与上述输入一一对应。每行输出的第一个实数是体重指数,保留2位小数。然后是一个空格,接着是判定结论:lower:体重偏低health:健康体重heavy:超重super heavy:严重超重extra heavy:极度超重。Sample Input168 80 185 85Sample Output28.34 heavy 24.84 health HINT注意:输入的身高是以cm为单位的;计算BMI时,身高是以m为单位的。#include #include int main() double h,w,s; while(scanf(%lf %lf,&h,&w)!=EOF) s=w/(h/100)*(h/100); if(s=19&s=25&s=30&s=40) printf(%.2lf extra heavyn,s); return 0;1221打印字母菱形图案Description输出N(N为奇数)行由字母组成的菱形,第1行为字母A,第2行为BCD,第三行为CDEFG,以此类推。菱形上下对称。Input一个奇数N。0N18。OutputN行字母组成的菱形图案。Sample Input7Sample Output A BCD CDEFGDEFGHIJ CDEFG BCD AHINTAppend Code#in
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案


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

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


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