复习题
题目描述 有一个圆,圆心坐标是(0,0),半径r=4.5,任意输入一个点的坐标(x,y),判断这个点是在圆内,圆周上,还是在圆外。 输入要求 两个浮点数x,y 输出要求 如果在圆内,输出in 如果在圆外,输出out 如果在圆上,输出on 假如输入 1.0 1.0 应当输出 in #include<stdio.h> #include<stdio.h> int cmp(const void*a,const void*b) { return *(int*)a-*(int*)b; } int main(){ int n,t,i,m=0,it[501]; while(scanf("%d %d",&n,&t)!=EOF){ m=0; for(i=0;i<n;i++) scanf("%d",it+i); qsort(it,n,sizeof(int),cmp); for(i=0;i<n;i++) if(it[i]>t)t+=2; else m++; t+=m; printf("%d\n",t);} return 0; } 题目描述 用下面公式求π的近似值。π/4≈1-1/3+1/5-1/7+…直到最后一项的绝对值小于10的-n次方为止(绝对值小于10的-n次方的这项不计算在内)。 输入要求 输入若干组精度要求n(3<=n<=8),n=0时退出,n超出范围输出“Error!”。 输出要求 输出各组不同精度要求的值。 假如输入 7 0 应当输出 3.141592 #include <stdio.h> #include <math.h> int main( ) { int k,s=1; double n,t,pi; scanf("%d",&k); while (k!=0) { if (k>=3 && k<=8) { n=1,t=1,pi=0; while((fabs(t))>pow(10,-k)) { pi=pi+t; n=n+2; s=-s; t=s/n; } pi=pi*4; printf("%lf\n",pi); } else printf("Error!\n"); scanf("%d",&k); } return 0; } 题目描述 著名意大利数学家斐波那契(Fibonacci)1202年提出一个有趣的问题。 某人想知道一年内一对兔子可以生几对兔子。他筑了一道围墙,把一对大兔关在其中。已知每对大兔每个月可以生一对小兔,而每对小兔出生后第三个月即可成为“大兔”再生小兔。问一对小兔一年能繁殖几对小兔? 输入要求 多个正整数n(1<=n<=80),表示需要求第n个月新增的兔子对数。 输出要求 对于输入的n,求第n个月新增的兔子对数。当n=0时输入结束,该数据不作处理。 假如输入 16 0 应当输出 987 #include <stdio.h> int main(){ #ifndef ONLINE_JUDGE freopen("in", "r", stdin); #endif // r[i][0] is the number of rabbits which born on current month // r[i][1] is the number of rabbits which are 2 months old // r[i][2] is the number of rabbits which are months old (old rabbits can fertility bunny) long long r[81][3] = {{0,0,1}}; for(int i=1; i<=80; i++){ r[i][1] = r[i-1][0]; r[i][2] = r[i-1][1] + r[i-1][2]; r[i][0] = r[i][2]; } int n; while(scanf("%d", &n), n){ printf("%lld\n", r[n][0]); } return 0; } 题目描述 输入三个自然数N,i,j(l≤i≤N,1≤j≤N),输出在一个N×N格的棋盘中,与格子(i,j)同行、同列、同一对角线的所有格子的位置。例如,n=4,i=2,j=3表示棋盘中的第二行第三列的格子,如:n=4,i=2,j=3表示了棋盘中的第二行第三列的格子,如下图: 当n=4,i=2,j=3时,输出的结果是: (2,1) (2,2) (2,3) (2,4) {同一行上格子的位置} (1,3) (2,3) (3,3) (4,3) {同列列上格子的位置} (1,2) (2,3) (3,4) {左上到右下对角线上的格子的位置} (4,1) (3,2) (2,3) (1,4) {左下到右上对角线上的格子的位置} 输入要求 只有1行,共3个数,分别为N(1≤N≤10000),i,j的值。 输出要求 按照题目描述的格式输出。 假如输入 4 2 3 应当输出 (2,1)(2,2)(2,3)(2,4) (1,3)(2,3)(3,3)(4,3) (1,2)(2,3)(3,4) (4,1)(3,2)(2,3)(1,4) #include<stdio.h> #include<string.h> int main(){ int N,a,b,c,d; while(scanf("%d%d%d",&N,&a,&b)!=EOF){ c=b-a; d=b+a; int i,j; for(i=1;i<=N;i++) printf("(%d,%d)",a,i); puts(""); for(i=1;i<=N;i++) printf("(%d,%d)",i,b); puts(""); for(i=1;i<=N;i++) if(i+c>=1&&i+c<=N) printf("(%d,%d)",i,i+c); puts(""); for(i=N;i>=1;i--) if(d-i>=1&&d-i<=N) printf("(%d,%d)",i,d-i); puts("");} return 0; } 题目描述 输入整数R,输出小于等于R的满足X2+Y2=Z2的所有正整数X,Y,Z。 输入要求 只有一个数:R(5≤R≤I000000)。 输出要求 只有一个数:表示共有多少组满足条件的勾股数。 假如输入 10 应当输出 2 #include<stdio.h> #include<math.h> int main() { int r,i=0,x,y,z; scanf("%d",&r); for(x=1;x<=r;x++){ for(y=1;y<=r;y++){ for(z=1;z<=r;z++){ if(x*x+y*y==z*z) i=i+1; } } } i=i*0.5; printf("%d",i); return 0; } 题目描述 桐桐在研究素数时,发现有些素数很特别,例如131,它是素数,同时,它又是回文数:从左边读和从右边读都是同一个数。桐桐想把不大于n的所有既是回文数又是素数的数求出来,你能帮助她吗? 输入要求 输入数据有多组,每组只有一个整数n(2≤n≤10^6)。 输出要求 输出满足题设条件的数,每行输出5个数。 假如输入 100 应当输出 2 3 5 7 11 #include<stdio.h> #include<math.h> int prime(int m); int isCircle(int m); int reverse(int i); int main( ) { int m,count; long n; while (scanf("%ld",&n)!=EOF){ count=0; for(m=2;m<=n;m++) { if(prime(m)!=0) { if(isCircle(m)) { if (count==0) printf("%d",m); else printf(" %d",m); count++; if (count==5) {printf("\n",m);count=0;} } } } if (count!=0) printf("\n",m); } return 0; } int prime(int m) { int i,n; if(m==1) return 0; n=sqrt(m); for(i=2;i<=n;i++) if(m%i==0) { return 0; } return 1; } int isCircle(int m) { int a; a=reverse(m); if(a==m) return 1; else return 0; } int reverse(int i) { int a,j=0; a=i; while(a) { j=j*10+a%10; a=a/10; } return j; } 题目描述 用泰勒展开式计算sin和cos值,当最后一项的绝对值小于0.00001时,累加结束 输入 输入两个正整数x和y,中间有一个空格 输出 sin(x)和cos(y),中间有一个空格 输入 30 30 输出 0.500000 0.866025 提示: const double PI=3.1415926; 弧度计算公式:x*PI/180, 其x代表你的输入; 代码 #include<stdio.h> const double PI=3.1415926; double mysin(double); double mycos(double); double myabs(double); int main( ) { double a,b; scanf_s("%lf%lf",&a,&b); printf("%.6lf\n",mysin(PI*a/180)); printf("%.6lf\n",mycos(PI*b/180)); return 0; } double mysin(double x) { double sum=x,x_pow=x,item=x; int n=1,s=1,a=1; while(myabs(item)>0.00001) { s=s*(n+1)*(n+2); x_pow*=x*x; a=(-1)*a; item =x_pow/s*a; sum+=item; n+=2; } return sum; } double mycos(double x) { double sum=1,x_pow=1,item; int n=0,s=1,a=-1; do { s=s*(n+1)*(n+2); x_pow*=x*x; item =x_pow/s*a; sum+=item; a=(-1)*a; n+=2; }while(myabs(item)>0.00001); return sum; } double myabs(double x) { return ((x>=0)?x:-x); } 题目描述 春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的: “水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比如:153=1^3+5^3+3^3。 现在要求输出所有在m和n范围内的水仙花数。 输入要求 输入数据有多组,每组占一行,包括两个整数m和n(100<=m<=n<=999) 输出要求 对于每个测试实例,要求输出所有在给定范围内的水仙花数,就是说,输出的水仙花数必须大于等于m,并且小于等于n,如果有多个,则要求从小到大排列在一行内输出,之间用一个空格隔开; 如果给定的范围内不存在水仙花数,则输出no; 每个测试实例的输出占一行。 假如输入 100 120 300 400 121 200 应当输出 no 370 371 153 提示 while (scanf_s("%d%d",&m,&n)!=EOF) #include <stdio.h> int main() { int m,n; while (scanf("%d%d",&m,&n)!=EOF) { int i,j,count=0,b[3],a[5],t; for (i=m; i<=n; i++){ b[0] = i/100; b[1] = i/10%10; b[2] = i%10; t = b[0]*b[0]*b[0]+b[1]*b[1]*b[1]+b[2]*b[2]*b[2]; if (i==t) a[count++] = i; } for (j=0; j<count-1; j++) printf("%d ",a[j]); if (count) printf("%d\n",a[count-1]); else printf("no\n"); } return 0; }
题目描述
有4个互不相同的数字,输出由其中三个不重复数字组成的排列。
输入要求
4个整数。
输出要求
所有排列。
假如输入
1 2 3 4
应当输出
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
1 2 4
1 4 2
2 1 4
2 4 1
4 1 2
4 2 1
1 3 4
1 4 3
3 1 4
3 4 1
4 1 3
4 3 1
2 3 4
2 4 3
3 2 4
3 4 2
4 2 3
#include<stdio.h> main() { int i,j,k,t,n,a[5]; scanf("%d%d%d%d",&a[1],&a[2],&a[3],&a[4]); for(i=4;i>0;i--) for(j=1;j<=4;j++) if(i!=j)for(k=1;k<=4;k++) if(k!=i&&k!=j)for(t=1;t<=4;t++) if(t!=k&&t!=i&&t!=j) printf("%d %d %d\n",a[j],a[k],a[t]); }
题目描述
输入N*N的矩阵,输出它的转置矩阵。
输入要求
第一行为整数N(1<=N<=10)。接着是一个N*N的矩阵。
输出要求
转置矩阵。
假如输入
2
1 2
1 2
应当输出
1 1
2 2
提示
1 #include <string.h> 2 #include <stdio.h> 3 main() 4 { 5 int i,j,n,a[100][100]; 6 scanf("%d",&n); 7 for(i=0;i<n;i++) 8 for(j=0;j<n;j++) 9 scanf("%d",&a[i][j]); 10 for(i=0;i<n;i++) 11 for(j=0;j<n;j++) 12 { 13 printf("%d",a[j][i]); 14 // 格式输出 15 if(j==n-1) // 如果j==n-1代表是数组最后一个元素 16 printf("\n"); // 如果是最后一个元素换行 17 else 18 printf(" "); // 如果不是最后一个元素, 输出空格 19 20 } 21 }
题目描述
编制程序,输入m,n(M>=n>=0)后,计算下列表达式的值并输出:
m!
n! (m-n)!
要求将计算阶乘运算的函数写为fact(n),函数返回值的类型为float
输入要求
m n
输出要求
对应表达式的值
假如输入
2 1
应当输出
2
提示
#include <stdio.h> float fact(int n) { if(n<=1) return 1.0; return n*fact(n-1); } int main() { int m,n; scanf("%d%d",&m,&n); printf("%.0lf\n",fact(m)/fact(n)/fact(m-n)); return 0; } |
题目描述
编制程序,统计文本stdin中字符$出现的次数,并将结果写入文件stdout
输入要求
字符文本
输出要求
$次数
假如输入
as$dfkjhkjkjdhf
asdfkj$lskdfj
werijweirjo$wie
应当输出
3
#include <stdio.h> int main() { char tmp[1000]; int sum = 0, i; while(gets_s(tmp)) // Ctrl+Z { i = 0; while(tmp[i]) { sum += tmp[i++]=='$'; } } printf("%d\n",sum); return 0; } |
题目描述
编制程序,输入n个整数(n从键盘输入,n>0),输出它们的偶数和。
输入要求
n
n个整数
输出要求
其中偶数的和
假如输入
10
1 2 3 4 5 6 7 8 9 10
应当输出
30
#include<stdio.h> int main() { int n,x; int sum = 0; scanf("%d",&n); while(n--) { scanf("%d",&x); if(!(x&1)) sum += x; } printf("%d\n",sum); return 0; } |
题目描述
编制函数del_char
函数原型为 void del_char(char *,char),函数的功能是删除a指向的字符串中值为ch的字符,例如从字符串"AscADef"中删除'A'后,字符串为"scDef"。
输入要求
需要删除的字符ch
需要处理的字符串
输出要求
处理后的字符串
假如输入
A
AscADef
应当输出
scDef
#include <stdio.h> void del_char(char *str,char ch) { int i=0, j=0; while(str[i]) { if(str[i]!=ch) str[j++] = str[i]; i++; } str[j] = 0; }
int main() { char ch, str[1000]; scanf("%c\n",&ch); gets(str); del_char(str,ch); puts(str);
return 0; } |
题目描述
编程,输入n后:输入n个数,根据下式计算并输出y值。
/ x2-sinx x<-2
y={ 2x+x -2<=x<=2
| ___________
\ √ X2+X+1 x>2
* 输出保留两位小数
输入要求
n
n个数
输出要求
y
假如输入
1
1
应当输出
3.00
#include<stdio.h> #include <math.h>
int main() { double x,y; int n; scanf("%d",&n); while(n--) { scanf("%lf",&x); if(x < -2) { y = pow(x,2.0)-sin(x); } else if(x <= 2) { y = pow(2.0,x)+x; } else { y = sqrt(pow(x,2.0)+x+1); } printf("%.2lf\n",y); } return 0; } |
题目描述
编制函数,其功能是在float类型一维数组中查找最大值、最小值,并将它们返回到调用程序。
* 输出保留两位小数
输入要求
n
n个浮点数
输出要求
最大值 最小值
假如输入
10
1.0
2.0
3.0
4.0
5.0
6.0
7.0
8.0
9.0
10.0
应当输出
10.00 1.00
#include <stdio.h> float Min(float * a,int n) { int i; float fMin = a[0]; for(i=1;i<n;i++) { if(fMin > a[i]) fMin = a[i]; }
return fMin; }
float Max(float * a,int n) { int i; float fMax = a[0]; for(i=1;i<n;i++) { if(fMax < a[i]) fMax = a[i]; }
return fMax; }
int main() { int i,n; float a[1000]; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%f",&a[i]); } printf("%.2f %.2f\n",Max(a,n),Min(a,n));
return 0; } |
题目描述
输入一行字符,分别统计出其中英文字母、数字、空格和其他字符的个数。
输入要求
一行字符
输出要求
统计值
假如输入
aklsjflj123 sadf918u324 asdf91u32oasdf/.';123
应当输出
23 16 2 4
#include <stdio.h> int main() { int nEnglish=0,nSpace=0,nNumber=0,nOther=0; int i=0; char chString[1000]; gets(chString); while('\0' != chString[i]) { if(chString[i]>='A'&&chString[i]<='Z' || chString[i]>='a'&&chString[i]<='z') { nEnglish ++; } else if(chString[i] == ' ') { nSpace ++; } else if(chString[i]>='0' && chString[i]<='9') { nNumber ++; } else { nOther ++; } i++; } printf("%d %d %d %d\n",nEnglish,nNumber,nSpace,nOther);
return 0; } |
题目描述
输入一个正整数n.求1+1/2!+1/3!+....+1/n!
要求定义并调用函数fact(n)计算n的阶乘,函数返回值的类型是点单精度浮点型。
* 输出保留4位小数
输入要求
正整数n
输出要求
数列之和
假如输入
2
应当输出
1.5000
#include <stdio.h>
float fact(int n) { static float res = 1.0; res *= n;
return res; }
int main() { int i,n; float res = 0; scanf("%d",&n); for(i=1;i<=n;i++) { res += 1.0/fact(i); } printf("%.4f\n",res);
return 0; }
1 #include<stdio.h> 2 int main(void) 3 { 4 int digit,other,letter,figur; 5 char ch; 6 int i; 7 digit=letter=other=figur=0; 8 printf("enter 10 characters:"); 9 for(i=1;i<=10;i++){ 10 ch=getchar(); 11 if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')) 12 letter++; 13 else if(ch>='0'&&ch<='9') 14 digit++; 15 else if((ch==' ')||(ch=='\n')) 16 figur++; 17 else 18 other++; 19 } 20 printf("letter=%d,digit=%d,other=%d,figur=%d\n",letter,digit,other,figur); 21 return 0; 22 }
|