c语言 习题答案2012.12.18
- 格式:docx
- 大小:32.95 KB
- 文档页数:24
练习二、1.(显示短句)#include <stdio.h>int main( ){printf("Programming in C is fun!");}2.(显示网格)#include <stdio.h>int main( ){printf("+---+---+\n");printf("| | |\n");printf("| | |\n");printf("+---+---+\n");}3.(求两个数的和与差)#include <stdio.h>int main( ){ int a, b, sum, diff;scanf("%d%d", &a, &b);sum=a+b;diff=a-b;printf("The sum is %d\n", sum);printf("The difference is %d\n", diff);}4.(求平方根)#include <stdio.h>#include <math.h>int main( ){double x, root;scanf("%lf", &x);root=sqrt(x);printf("The square root of %0.1f is %0.1f\n", x, root);} 5.(华氏温度转换为摄氏温度)#include <stdio.h>int main( ){double f, c;scanf("%lf", &f);c=5*(f-32)/9;printf("The temprature is %0.2f\n", c);}6.(计算旅途时间)#include <stdio.h>int main( ){int time1, time2, hours, mins;scanf("%d%d", &time1, &time2);if(time2%100-time1%100<0){ hours=time2/100-time1/100-1;mins=time2%100-time1%100+60;}else{hours=time2/100-time1-100;mins=time2%100-time1%100;}printf("The train journey time is %d hrs %d mins.\n", hours, mins);} 7.(数字加密)#include <stdio.h>int main( ){int number, digit1, digit2, digit3, digit4, newnum;scanf("%d", &number);digit4=(number/1000+9)%10;digit3=(number/100%10+9)%10;digit2=(number/10%100+9)%10;digit1=(number%10+9)%10;newnum=digit3+digit4*10+digit1*100+digit2*1000;printf("The encrypted number is %d\n", newnum);}8.(大写字母转换成小写字母)#include <stdio.h>int main( ){charch;scanf("%c", &ch);ch=ch+32;printf("%c\n", ch);}9.显示两级成绩#include <stdio.h>int main( ){int ri, repeat;int mark;scanf("%d", &repeat);for(ri=1; ri<=repeat; ri++){scanf("%d",&mark);if(mark<60)printf("Fail\n");elseprintf("Pass\n");}}10.找最小值#include <stdio.h> int main( ){int ri, repeat;int a, b, c, d, min;scanf("%d", &repeat);for(ri=1; ri<=repeat; ri++){scanf("%d%d%d%d", &a, &b, &c, &d); if(a<b&&a<c&&a<d)min=a;if(b<a&&b<c&&b<d)min=b;if(c<a&&c<b&&c<d)min=c;if(d<a&&d<b&&d<c)min=d;printf("min is %d\n", min);}}11.求三角形的面积和周长#include <stdio.h>#include <math.h>int main( ){int ri, repeat;float a, b, c, area, perimeter, s;scanf("%d", &repeat);for(ri=1; ri<=repeat; ri++){scanf("%f%f%f", &a, &b, &c);if(a+b>c&&a+c>b&&b+c>a){s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c)); perimeter=a+b+c;printf("area=%.2f;perimeter=%.2f\n",area,perimeter);}else{printf("These sides do not correspond to a valid triangle\n");} } } 12.判断数的符号#include <stdio.h>int main( ){int ri, repeat;int x, y;scanf("%d", &repeat);for(ri=1; ri<=repeat; ri++){scanf("%d",&x);if(x>0) y=1;else if(x==0) y=0;else y=-1;printf("%d\n",y);}}13. 计算个人所得税#include <stdio.h>int main( ){int ri, repeat;float rate, salary, tax;scanf("%d", &repeat);for(ri=1; ri<=repeat; ri++){scanf("%f", &salary);if( salary <= 850)rate = 0;else if(salary>850&& salary <= 1350 )rate = 0.05;else if(salary>1350&& salary <= 2850 )rate = 0.10;else if( salary>2850&& salary <= 5850 )rate=0.15;else rate=0.20;tax = rate * (salary-850);printf("tax=%0.2f\n", tax);}}14.显示水果的价格#include <stdio.h>int main( ){int ri, repeat;int choice;float price;scanf("%d", &repeat);for(ri=1; ri<=repeat; ri++){printf("[1] apples\n");printf("[2] pears\n");printf("[3] oranges\n");printf("[4] grapes\n");scanf("%d", &choice);switch(choice){case 1:price=3.00;break;case 2:price=2.50;break;case 3:price=4.10;break;case 4:price=10.20;break; default:price=0;break;}printf("price=%0.2f\n", price);}}15. 字母转换#include <stdio.h>int main( ){int ri, repeat;charch;scanf("%d", &repeat);for(ri=1; ri<=repeat; ri++){ch=getchar();if(ch>=65&&ch<=90) ch=ch+32; else if(ch>=97&&ch<=122) ch=ch-32; elsech=ch;putchar(ch);} }练习三1.求1+1/2+1/3+……+1/n#include <stdio.h>int main( ){int ri, repeat;int i, n;float sum;scanf("%d", &repeat);for(ri=1; ri<=repeat; ri++){scanf("%d", &n);sum=0;for(i=1;i<=n;i++)sum=sum+1.0/i;printf("%.3f\n", sum);}}2.求n!#include <stdio.h>int main( ){int ri, repeat;int i, n;double fact;scanf("%d", &repeat);for(ri=1; ri<=repeat; ri++){scanf("%d", &n);fact=1;for(i=1;i<=n;i++)fact=fact*i;printf("%.0f\n", fact);} }3.求x的n次幂#include <stdio.h>int main( ){int ri, repeat;int i, n;double x, mypow;scanf("%d", &repeat);for(ri=1; ri<=repeat; ri++){scanf("%lf%d", &x, &n);mypow=1;for(i=1;i<=n;i++)mypow=mypow*x;printf("%.2f\n", mypow);} }4.求1-1/2+1/3-1/4+……#include <stdio.h>int main( ){int ri, repeat;int i, n, flag;float sum;scanf("%d", &repeat);for(ri=1; ri<=repeat; ri++){scanf("%d", &n);sum=0;flag=1;for(i=1;i<=n;i++){sum=sum+flag*1.0/i;flag=-flag; }printf("%.3f\n", sum);}}5.求1+1/3+1/5+1/7+……#include <stdio.h>int main( ){int ri, repeat;int i, n, temp;float sum;scanf("%d", &repeat);for(ri=1; ri<=repeat; ri++){scanf("%d", &n);sum=1;for(i=1;i<=n-1;i++){sum=sum+1.0/(2*i+1);}printf("%.3f\n", sum); }}6.求1-1/3+1/5-1/7+……#include <stdio.h>#include <math.h>int main( ){int ri, repeat;int temp, flag;doubleeps, item, sum;scanf("%d", &repeat);for(ri=1; ri<=repeat; ri++){scanf("%le", &eps);sum=0;temp=1;flag=1;item=1.0;while(fabs(item)>=eps){sum=sum+item;temp=temp+2;flag=-flag;item=flag*1.0/temp;}printf("%.6f\n", sum);} }7.摄氏温度和华氏温度转换表(<x<都输出)#include <stdio.h>int main( ){int ri, repeat;int begin, c, end, f;scanf("%d", &repeat);for(ri=1; ri<=repeat; ri++){scanf("%d%d", &begin, &end);printf("Celsius Fahrenheit\n");for(c=begin;c<=end;c++){f=32+c*(9.0/5);printf("%d%10d\n",c,f);}}}8.求奇数和#include <stdio.h>int main( ){int ri, repeat;int x, sum;scanf("%d", &repeat);for(ri=1; ri<=repeat; ri++){scanf("%d", &x);sum=0;while(x>0){if(x%2!=0)sum=sum+x;scanf("%d",&x);}printf("%d\n", sum);} }9.求最大值#include <stdio.h>int main( ){int ri, repeat;int i , max, n, x;scanf("%d", &repeat);for(ri=1; ri<=repeat; ri++){scanf("%d", &n);scanf("%d",&x);max=x;for(i=1;i<=n-1;i++){scanf("%d",&x);if(x>max) max=x;}printf("%d\n", max);}}10.求整数的位数以及各位数之和#include <stdio.h>int main( ){ int ri, repeat;int number, sum;long in;scanf("%d", &repeat);for(ri=1; ri<=repeat; ri++){scanf("%ld", &in);sum=0;number=0;if(in<0) in=-in;do{sum=sum+in%10;in=in/10;number++;}while(in!=0);printf("number=%d, sum=%d\n", number, sum);}} 11.求2/1+3/2+5/3+8/5+...#include <stdio.h>int main( ){int ri, repeat;inti,n;floata,b,s,t;scanf("%d", &repeat);for(ri=1; ri<=repeat; ri++){scanf("%d", &n);s=0;a=2.0;t=0;b=1;for(i=1;i<=n;i++){t=a/b;s=s+t;a=a*1.0+b;b=a-b;}printf("%.2f\n",s);} }12.求a+aa+aaa+aa…a#include <stdio.h>void main(){int ri, repeat;int i, n;long int a, sn, tn;scanf("%d", &repeat);for(ri=1; ri<=repeat; ri++){scanf("%ld%d", &a, &n);sn=0;tn=a;for(i=1;i<=n;i++){sn=sn+tn;tn=tn*10+a;}printf("%ld\n",sn);} }13.判断素数#include <stdio.h>#include <math.h>int main( ){int ri, repeat;int flag, i, m, n;scanf("%d", &repeat);for(ri=1; ri<=repeat; ri++){scanf("%d", &m);flag=0;n=sqrt(m);for(i=2;i<=n;i++){if(m%i==0)break;if(i>n&&m!=1)flag=m;if(flag==m) printf("YES\n");else printf("NO\n");} }15.求1 + 1/2! +....+ 1/n!#include "stdio.h"int main( ){intri,repeat;inti,n;floats,t;scanf("%d",&repeat);for(ri=1;ri<=repeat;ri++){scanf("%d",&n);s=0;t=1;for(i=1;i<=n;i++){t=t*i;s=s+1.0/t; }printf("%0.4f\n",s);}}16.求各位数字的立方和等于它本身的数#include "stdio.h"int main( ){intri,repeat;int i, digit, m, n, number, sum;scanf("%d",&repeat);for(ri=1;ri<=repeat;ri++){scanf("%d%d", &m, &n);for(i=m;i<=n;i++){number=i;sum=0;do{digit=number%10;sum=sum+digit*digit*digit;number=number/10;}while(number!=0);if(sum==i) printf("%d\n", i);}}}17.统计素数并求和#include "stdio.h"#include "math.h"int main( ){intri,repeat;int count, digit, i, j, k, m, n, sum;scanf("%d",&repeat);for(ri=1;ri<=repeat;ri++){scanf("%d%d", &m, &n);sum=0;count=0;for(i=m;i<=n;i++){k=sqrt(i);for(j=2;j<=k;j++)if(i%j==0) break;if(j>k&&i!=1){digit=i;count++;sum=sum+digit;}}printf("count=%d, sum=%d\n", count, sum);}}练习41.求1 + 1/2! +....+ 1/n!#include "stdio.h"int main( ){intri,repeat;inti,n;double s;double fact(int n);scanf("%d",&repeat);for(ri=1;ri<=repeat;ri++){scanf("%d",&n);s= fact(n);printf("%0.4f\n",s);}}double fact(int n){ int i;doublesum,t;sum=0;t=1;for(i=1;i<=n;i++){t=t*i;sum=sum+1.0/t;}return sum;}2.求a+aa+aaa+aa…a#include <stdio.h>void main(){int ri, repeat;int i, n;long a, sn;longfn(long a, int n);scanf("%d", &repeat);for(ri=1; ri<=repeat; ri++){scanf("%ld%d", &a, &n);sn=0;for(i=1;i<=n;i++){sn=sn+fn(a,i);}printf("%ld\n",sn);}}longfn(long a, int n){int m;double sum;sum=a;for(m=2;m<=n;m++)sum=sum*10+a;return sum;}3.统计一个整数中数字的个数#include "stdio.h"int main( ){intri,repeat;int count;long in;intcountdigit(long number, int digit);scanf("%d",&repeat);for(ri=1;ri<=repeat;ri++){scanf("%ld",&in);if(in<0) in=-in;count=countdigit(in,2);printf("count=%d\n",count);}}intcountdigit(long number, int digit){int m=0;do{if(number%10==digit) m++;number=number/10;}while(number!=0); return m;}4.判断素数#include <stdio.h>#include <math.h>int main( ){int ri, repeat;intflag,n;int prime(int m);scanf("%d", &repeat);for(ri=1; ri<=repeat; ri++){scanf("%d", &n);flag=0;flag=prime(n);if(flag==1) printf("YES\n");else printf("NO\n");}}int prime(int m){ inti,t,s;s=sqrt(m);t=0;for(i=2;i<=s;i++)if(m%i==0) break;if(i>s&&m!=1) t=1;return t;}5.统计素数并求和#include "stdio.h"#include "math.h"int main( ){intri,repeat;int count, i, m, n, sum;int prime(int m);scanf("%d",&repeat);for(ri=1;ri<=repeat;ri++){scanf("%d%d", &m, &n);sum=0;count=0;for(i=m;i<=n;i++){sum=sum+prime(i);if(prime(i)!=0) count++;}printf("count=%d, sum=%d\n", count, sum); }}int prime(int m){ intk,s,b;k=sqrt(m);s=0;for(b=2;b<=k;b++)if(m%b==0) break;if(b>k&&m!=1) s=m;return s;}6.输出Fibonacci 序列#include "stdio.h"#include "math.h"int main( ){intri,repeat;int i, m, n;long f;long fib(int n);scanf("%d",&repeat);for(ri=1;ri<=repeat;ri++){scanf("%d%d", &m, &n);for(i=1;i<=n;i++){f=fib(i);if(f>=m&&f<=n)printf("%ld ",f);if(f>n) break;}printf("\n");}}long fib(int n){int a=1,b=1,k;long c=1;for(k=3;k<=n;k++){c=a+b;a=b;b=c; }return c;}7.求各位数字的立方和等于它本身的数#include "stdio.h"int main( ){intri,repeat;int i, m, n;int is(int number);scanf("%d",&repeat);for(ri=1;ri<=repeat;ri++){ scanf("%d%d", &m, &n);for(i=m;i<=n;i++)if(i==is(i))printf("%d ", i);printf("\n");}}int is(int number){ ints,sum =0;do{s=number%10;sum=sum+s*s*s;number=number/10;}while(number!=0);return sum;}8.将一个整数逆序输出#include <stdio.h>int main( ){int ri, repeat;long in, res;long reverse(long number);scanf("%d", &repeat);for(ri=1; ri<=repeat; ri++){ scanf("%ld", &in);res=reverse(in);printf("%ld\n", res);}}long reverse(long number) { ints,t;long sum=0;do{s=number%10;sum=sum*10+s;number=number/10; }while(number!=0);return sum;}练习51.简化的插入排序(调试示例error07_1)#include <stdio.h>int main(void){int i, j, n, x;int repeat, ri;int a[10];scanf("%d", &repeat);for(ri = 1; ri <= repeat; ri++){scanf("%d", &n);for(i = 0; i < n; i++)scanf("%d", &a[i]);scanf("%d", &x);for(i=0;i<n;i++){if(x<a[i]){j=n;while(j>i){a[j]=a[j-1];j=j-1;}a[j]=x;break;}else if(x>a[i])a[n]=x;}for(i = 0; i < n + 1; i++)printf("%d ", a[i]);putchar('\n');}}2.求平均值#include <stdio.h>int main(void){int i, n, sum;int repeat, ri;int a[10];double aver;scanf("%d", &repeat);for(ri = 1; ri <= repeat; ri++){ scanf("%d", &n);for(i = 0; i < n; i++)scanf("%d", &a[i]);sum=0;for(i=0;i<n;i++)sum=sum+a[i];aver=1.0*sum/n;printf("average = %.2f\n", aver);}}3.将数组中的数逆序存放#include <stdio.h>int main(void){int i, n, temp;int repeat, ri;int a[10];scanf("%d", &repeat);for(ri = 1; ri <= repeat; ri++){ scanf("%d", &n);for(i = 0; i < n; i++)scanf("%d", &a[i]);i=0;while(i<=n-1){temp=a[i];a[i]=a[n-1];a[n-1]=temp;n=n-1;i++;}n=i+n;for(i = 0; i < n; i++)printf("%d ", a[i]);printf("\n");}}4.求最大值及其下标#include <stdio.h>int main(void){int i, index, n;int ri, repeat;int a[10];scanf("%d", &repeat);for(ri = 1; ri <= repeat; ri++){scanf("%d", &n);for(i = 0; i < n; i++)scanf("%d", &a[i]);index=0;a[index]=a[0];for(i=0;i<n;i++)if(a[i]>a[index]) {a[index]=a[i];index=i;}printf("max = %d, index = %d\n", a[index], index);}}5.交换最小值和最大值#include <stdio.h>int main(void){int i, index, n, t;int repeat, ri;int a[10];scanf("%d", &repeat);for(ri = 1; ri <= repeat; ri++){scanf("%d", &n);for(i = 0; i < n; i++)scanf("%d", &a[i]);index=0;for(i=0;i<n;i++)if(a[i]<a[index])index=i;t=a[0];a[0]=a[index];a[index]=t;index=n-1;for(i=0;i<n;i++)if(a[i]>a[index])index=i;t=a[n-1];a[n-1]=a[index];a[index]=t;printf("After swap: ");for(i = 0; i < n; i++)printf("%d ", a[i]);printf("\n");}}6.选择法排序#include <stdio.h>int main(void){int i, index, k, n, temp;int repeat, ri;int a[10];scanf("%d", &repeat);for(ri = 1; ri <= repeat; ri++){ scanf("%d", &n);for(i = 0; i < n; i++)scanf("%d", &a[i]);for(k=0;k<n-1;k++){index=k;for(i=k+1;i<n;i++)if(a[i]>a[k]){index=i;temp=a[k];a[k]=a[index];a[index]=temp; }}printf("After sorted: ");for(i = 0; i < n; i++)printf("%d ", a[i]);printf("\n");}}7.在数组中查找指定的元素(改错题error07_2)#include <stdio.h>int main(void){int flag, i, n, x;int repeat, ri;int a[10];scanf("%d", &repeat);for(ri = 1; ri <= repeat; ri++){scanf("%d", &n);for(i = 0; i < n; i++)scanf("%d", &a[i]);scanf("%d", &x);flag=0;for(i=0;i<n;i++){if(x==a[i]){ flag=1;break;}}if(flag != 0)printf( "%d: a[%d]\n", x, i);elseprintf( "%d: not found\n", x);}}8.将字符串逆序存放(调试示例error07_4)#include <stdio.h>int main(void){int i, j, temp;char str[80];i = 0;while((str[i] = getchar( )) != '\n')i++;str[i] = 0;for(j=0;j<i;j++){temp=str[j];str[j]=str[i-1];str[i-1]=temp;i=i-1;}i=i+j;for(i = 0; str[i] != 0; i++) putchar(str[i]);}9.统计大写辅音字母#include "stdio.h"#define MAXLEN 80int main(void){char cc, ch;char str[MAXLEN];int count, flag, i, index;int repeat, ri;scanf("%d", &repeat); getchar();for(ri = 1; ri <= repeat; ri++){cc = getchar(); getchar();i = 0;while((ch = getchar()) != '\n'){ str[i++] = ch;}str[i] = 0;count=i;index=0;flag=0;for(i=0;i<count;i++){ch=str[i];if(cc==ch) flag=1;break;}for(i=count-1;i>=0;i--){ch=str[i];if(cc!=ch)index++;else break;}index=count-index-1;if(flag != 0)printf("index = %d\n", index);elseprintf("Not Found\n");}}10.统计大写辅音字母#include "stdio.h"#define MAXLEN 80int main(void){charch;char str[MAXLEN];int count, i;int repeat, ri;scanf("%d", &repeat); getchar();for(ri = 1; ri <= repeat; ri++){i = 0;while((ch = getchar()) != '\n'){ str[i++]=ch;}str[i] = 0;count=0;while(i>=0){if(str[i]>'A' && str[i]<='Z')if(str[i]!='E')if(str[i]!='I')if(str[i]!='O')if(str[i]!='U')count++;i--;}printf("count = %d\n", count);}}。