05-0. 求序列前N项和(15)
本题要求编写程序,计算序列 2/1+3/2+5/3+8/5+... 的前N项之和。注意该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子。
输入格式:
输入在一行中给出一个正整数N。
输出格式:
在一行中输出部分和的值,精确到小数点后2位。题目保证计算结果不超过双精度范围。
输入样例:20
输出样例:
32.66
#include<stdio.h> #include<stdlib.h> int main() { int N; while(scanf("%d",&N)==1) { double a=2,b=1; double sum=0.0; for(int i=1;i<=N;i++) { sum+=a*1.0/b; a=a+b; b=a-b; } printf("%.2lf ",sum); } }
05-1. 约分最简分式(15)
分数可以表示为“分子/分母”的形式。编写一个程序,要求用户输入一个分数,然后将其约分为最简分式。最简分式是指分子和分母不具有可以约分的成分了。如6/12可以被约分为1/2。当分子大于分母时,不需要表达为整数又分数的形式,即11/8还是11/8;而当分子分母相等时,仍然表达为1/1的分数形式。
输入格式:
输入在一行中给出一个分数,分子和分母中间以斜杠“/”分隔,如: 12/34
表示34分之12。分子和分母都是正整数(不包含0,如果不清楚正整数的定义的话)。
提示:在scanf的格式字符串中加入“/”,让scanf来处理这个斜杠。
输出格式:
在一行中输出这个分数对应的最简分式,格式与输入的相同,即采用“分子/分母”的形式表示分数。如 5/6
表示6分之5。
60/120
输出样例:
1/2
#include<stdio.h> #include<stdlib.h> int Div(int n,int m) { if(n<m) { int temp=n; n=m; m=temp; } int rem=n%m; while(rem) { n=m; m=rem; rem=n%m; } return m; } int main() { int n,m; char c; while(scanf("%d%c%d",&n,&c,&m)==3) { int div=Div(n,m); printf("%d/%d ",n/div,m/div); } }
05-2. 念数字(15)
输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出“fu”字。十个数字对应的拼音如下:
0: ling 1: yi 2: er 3: san 4: si 5: wu 6: liu 7: qi 8: ba 9: jiu
输入格式:
输入在一行中给出一个整数,如: 1234
。
提示:整数包括负数、零和正数。
输出格式:
在一行中输出这个整数对应的拼音,每个数字的拼音之间用空格分开,行末没有最后的空格。如 yi er san si
。
-600输出样例:
fu liu ling ling
#include<stdio.h> #include<stdlib.h> #include<string.h> char num[10][10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"}; int main() { int n; while(scanf("%d",&n)==1) { int flag=0; if(n<0) { printf("fu"); n=-n; flag=1; } char a[100]; sprintf(a,"%d",n); for(int i=0;i<strlen(a);i++) { if(flag==1) { printf(" %s",num[a[i]-48]); } if(flag==0) { flag=1; printf("%s",num[a[i]-48]); } } printf(" "); } }
05-3. 求a的连续和(15)
输入两个整数a和n,a的范围是[0,9],n的范围是[1,8],求数列之和S = a+aa+aaa+...+aaa...a(n个a)。 如a为2、n为8时输出的是2+22+222+...+22222222的和。
输入格式:
输入在一行中给出两个整数,先后表示a和n。
输出格式:
在一行中输出要求的数列之和。
输入样例:2 4输出样例:
2468
#include<stdio.h> #include<stdlib.h> #include<string.h> int main() { int a,n; while(scanf("%d%d",&a,&n)==2) { int i,d=a*n,temp=0; int arr[100]; for(i=0;i<n;i++) { d=a*(n-i)+temp; arr[i]=d%10; temp=d/10; } long long sum=0,pro=1; for(i=0;i<n;i++) { sum+=arr[i]*pro; pro*=10; } if(temp!=0) printf("%d",temp); printf("%lld ",sum); } return 0; }
06-0. 混合类型数据格式化输入(5)
本题要求编写程序,顺序读入浮点数1、整数、字符、浮点数2,再按照字符、整数、浮点数1、浮点数2的顺序输出。
输入格式:
输入在一行中顺序给出浮点数1、整数、字符、浮点数2,其间以1个空格分隔。
输出格式:
在一行中按照字符、整数、浮点数1、浮点数2的顺序输出,其中浮点数保留小数点后2位。
输入样例:2.12 88 c 4.7输出样例:
c 88 2.12 4.70
#include<stdio.h> #include<stdlib.h> int main() { double d1,d2; int i; char c,c1,c2; while(scanf("%lf%d%c%c%c%lf",&d1,&i,&c1,&c,&c2,&d2)==6) { printf("%c %d %.2lf %.2lf ",c,i,d1,d2); } return 0; }
06-1. 简单计算器(20)
模拟简单运算器的工作。假设计算器只能进行加减乘除运算,运算数和结果都是整数,4种运算符的优先级相同,按从左到右的顺序计算。
输入格式:
输入在一行中给出一个四则运算算式,没有空格,且至少有一个操作数。遇等号”=”说明输入结束。
输出格式:
在一行中输出算式的运算结果,或者如果除法分母为0或有非法运算符,则输出错误信息“ERROR”。
输入样例:1+2*10-10/2=输出样例:
10
代码:
#include<stdio.h> #include<stdlib.h> #include<string.h> int main() { int a[10000]; char b[10000]; int i,num,c,cnt1=0,cnt2=0,flag=1; do { scanf("%d%c",&num,&c); a[cnt1++]=num; b[cnt2++]=c; }while(c!='='); int res=a[0],j=0; for(i=1;i<cnt1;i++) { j=i-1; if(b[j]!='+'&&b[j]!='-'&&b[j]!='*'&&b[j]!='/') { flag=0; break; } if(b[j]=='*') { res*=a[i]; } else if(b[j]=='-') { res-=a[i]; } else if(b[j]=='/') { if(a[i]==0) { flag=0; break; } res/=a[i]; } else if(b[j]=='+') { res+=a[i]; } } if(flag==0) printf("ERROR "); else printf("%d ",res); }
06-2. 字符串字母大小写转换(10)
输入一个以#结束的字符串,本题要求将小写字母全部转换成大写字母,把大写字母全部转换成小写字母,其它字符不变。
输入格式:
输入在一行中给出一个长度不超过40的、以#结束的非空字符串。
输出格式:
在一行中按照要求输出转换后的字符串。
输入样例:Hello World! 123#输出样例:
hELLO wORLD! 123
#include<stdio.h> #include<stdlib.h> #include<string.h> int main() { char a[100]; char ch; int cnt=0,i; do { scanf("%c",&ch); a[cnt++]=ch; }while(ch!='#'); for(i=0;i<cnt-1;i++) { if(a[i]>='A'&&a[i]<='Z') { a[i]=a[i]+32; continue; } if(a[i]>='a'&&a[i]<='z') { a[i]=a[i]-32; continue; } } for(i=0;i<cnt-1;i++) printf("%c",a[i]); printf(" "); }
06-3. 单词长度(15)
你的程序要读入一行文本,其中以空格分隔为若干个单词,以‘.’结束。你要输出每个单词的长度。这里的单词与语言无关,可以包括各种符号,比如“it's”算一个单词,长度为4。注意,行中可能出现连续的空格;最后的‘.’不计算在内。
输入格式:
输入在一行中给出一行文本,以‘.’结束。
提示:用scanf("%c",...);
来读入一个字符,直到读到‘.’为止。
输出格式:
在一行中输出这行文本对应的单词的长度,每个长度之间以空格隔开,行末没有最后的空格。
输入样例:
It's great to see you here.
输出样例:
4 5 2 3 3 4
#include<stdio.h> #include<stdlib.h> #include<string.h> int main() { char a[100000]; char ch; int cnt=0,i,j; scanf("%c",&ch); while(ch!='.') { a[cnt++]=ch; scanf("%c",&ch); } int len=strlen(a); int lea[1000],t=0; for(i=0;i<len;i++) { if(a[i]!=' ') { j=i+1; while(a[j]!=' '&&j<len) { j++; } lea[t++]=j-i; i=j; } } for(i=0;i<t;i++) { if(i==0) printf("%d",lea[0]); else printf(" %d",lea[i]); } printf(" "); }
版权声明:本文为博主原创文章,未经博主允许不得转载。