1.成绩转换为等级
题意:将百分制成绩转换成相应等级。
90-100为A;80-89为B;70-79为C;60-69为D;0-59为E;
思路:对应等级应为分情况判断,主体用判断语句。
细节:输入多组,每组一行,注意回车换行。
源码:
#include<stdio.h>
int main()
{
int t;
while(scanf("%d",&t)!=EOF)
if(t>=90&&t<=100)
printf("A\n");
else if(t>=80&&t<=89)
printf("B\n");
else if(t>=70&&t<=79)
printf("C\n");
else if(t>=60&&t<=69)
printf("D\n");
else if(t>=0&&t<=59)
printf("E\n");
else
printf("Score is error!\n");
}
2.水仙花数
题意:在给定的范围内找水仙花数。
思路:在指定范围内挑数,需要用循环来找,另外还需判断是否为水仙花数,所以用循环判断嵌套。
细节:注意输出数据之间的空格。
源码:
#include<stdio.h>
int main()
{
int m,n,i,a,b,c,j;
while(scanf("%d %d",&m,&n)!=EOF)
{
j=0;
for(i=m;i<=n;i++)
{
a=i/100;b=i/10%10;c=i%10;
if(i==a*a*a+b*b*b+c*c*c)
{
j++;
if(j==1)
printf("%d",i);
else
printf(" %d",i);
}
}
if(j==0)
printf("no");
printf("\n");
}
}
3.奇数乘积
题意:在给定的整数中找出奇数并求出它们的乘积。
思路:首先需要判断出奇数,然后奇数相乘得乘积,判断奇数只需除以二即可。
细节:注意输入输出格式。
源码:
#include<stdio.h>
int a[10000];
int main()
{
int n,i,b;
while(scanf("%d",&n)!=EOF)
{
b=1;
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
if(a[i]==1||a[i]%2!=0)
b=b*a[i];
}
printf("%d\n",b);
}
}
4.表达式值的判断
题意:给定表达式,判断表达式的值是否都为素数。
思路:首先需会判断素数,然后用求解的表达式的值进行判断。
细节:注意输入零时的处理。
源码:
#include<stdio.h>
int main()
{
int x,y,i,j,a,b;
while(scanf("%d %d",&x,&y)!=EOF)
{
b=0;
for(i=x;i<=y;i++)
{
a=i*i+i+41;
for(j=2;j<a;j++)
{
if(a%j==0)
b++;
}
}
if(b==0)
{
if(x==0&&y==0)
continue;
else
printf("OK\n");
}
else if(b!=0)
printf("Sorry\n");
}
}
5.多项式的前n项和
题意:给定多项式,求出该多项式的前n项和。
思路:利用嵌套表示出多项式,然后求解。
细节:注意多项式中正负的表示,小数的控制。
源码:
#include<stdio.h>
int main()
{
int m,n,i,j;
float a=0.0;
while(scanf("%d",&m)!=EOF)
{
for(i=1;i<=m;i++)
{
scanf("%d",&n);
for(j=1;j<=n;j++)
{
if(j%2==1)
{
a=1*1.0/j+a;
}
else
{
a=-1*1.0/j+a;
}
}
printf("%.2lf\n",a);
a=0;
}
}
return 0;
6.数列的平均值序列
题意:给定一定特点的数列,按照顺序求每定值数的平均值,得平均值序列。
思路:根据数列特点整理数列,然后嵌套向外抽数,求平均值。
细节:注意输入输出格式,注意代码的条理顺序。
源码:
#include<stdio.h>
int main()
{
int n,m,i,j,sum=0,k;
while(scanf("%d %d",&n,&m)!=EOF)
{ k=0;
for(i=1;i<=n/m;i++)
{ sum=0;
if(i>1) printf(" ");
for(j=1;j<=m;j++)
{
k=k+2;
sum+=k;
}
printf("%d",sum/m);
}
if(n%m)
{
sum=0;
for(j=1;j<=n-n/m*m;j++)
{
k=k+2;
sum+=k;
}
printf(" %d",sum/(j-1));}
printf("\n");
}
}
7.评委打分
题意:多个评委打分,去掉最高分和最低分,剩余分数求平均值即得选手成绩。
思路:利用嵌套找出最大值和最小值,然后剪掉,将剩余值相加求平均值。
细节:注意数据类型和小数点位数。
源码:
#include<stdio.h>
int main()
{
int i,a,b,c,d;
double m,n;
while(scanf("%lf",&n)!=EOF)
{
b=-1;c=101;d=0;
for(i=1;i<=n;i++)
{
scanf("%d",&a);
if(a>b)
b=a;
if(a<c)
c=a;
d=d+a;
}
m=d-b-c;
printf("%.2lf\n",m/(n-2));
}
}
8.母牛生小牛
题意:一头母牛,每年年初生一头小母牛,每头小母牛第四年开始每年年轻也生一头小母牛,求第n年共多少母牛。
思路:递推出公式,找每年母牛个数之间的关系,然后求解。
细节:注意特殊情况。
源码:
#include <stdio.h>
int a[60];
int main()
{
int n,i;
while(scanf("%d",&n)&&n!=0)
{
a[1]=1;
a[2]=2;
a[3]=3;
a[4]=4;
for(i=5;i<=60;i++)
{
a[i]=a[i-1]+a[i-3];
}
printf("%d\n",a[n]);
}
}
9.绝对值排序
题意:给定n个数,按照绝对值从大到小排序。
思路:先求出绝对值,然后比较绝对值大小,进而排序。
细节:注意n等于零时的处理以及输出的格式。
源码:
#include<stdio.h>
#include<math.h>
int a[1000];
int main()
{
int n,i,b,j;
while(scanf("%d",&n)!=EOF)
{
if(n==0)
break;
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
for(i=1;i<=n-1;i++)
{
for(j=i+1;j<=n;j++)
{
if(fabs(a[i])<fabs(a[j]))
{
b=a[i];
a[i]=a[j];
a[j]=b;
}
}
}
for(i=1;i<=n-1;i++)
{
printf("%d ",a[i]);
}
printf("%d\n",a[i]);
}
}
10.有序数列插入整数
题意:给定从小到大排列好的序列,另给一个整数,将整数插入序列,并使新的序列仍然有序。
思路:应用判断语句将插入的整数安置到正确位置,用循环语句将数组排列好。
细节:注意考虑各种情况,不要有漏。
源码:
#include<stdio.h>
int main()
{
int n,m,i,b;
int a[1000];
while(scanf("%d %d",&n,&m)!=EOF)
{
if(n==0&&m==0)
continue;
else
{
b=0;
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
for(i=1;i<=n;i++)
{
if(m<a[i]&&b!=1)
{
printf("%d %d",m,a[i]);
b=1;
}
else
printf("%d",a[i]);
if(i<n)
printf(" ");
}
printf("\n");
}
}
}
11.发工资人民币最少张数
题意:六种人民币面值,已知老师工资数,求最少准备多少张人民币才能在给老师发工资时不找零。
思路:要找最少人民币张数,需要从大面值的纸币找起,通过循环来找。
细节:注意输入输出格式。
源码:
#include<stdio.h>
int main()
{
int n;
while(scanf("%d\n",&n)!=EOF)
{
int i,a,b,c,d,e,f,s=0;
int k[1000];
if(n==0||n>=100)
continue;
for(i=0;i<n;i++)
scanf("%d",&k[i]);
for(i=0;i<n;i++)
{
a=k[i]/100;
f=(k[i]-a*100)/50;
b=(k[i]-a*100-f*50)/10;
c=(k[i]-a*100-b*10-f*50)/5;
d=(k[i]-a*100-b*10-c*5-f*50)/2;
e=k[i]-a*100-b*10-c*5-d*2-f*50;
s=s+a+b+c+d+e+f;
}
printf("%d\n",s);
}
}
12.回文串
题意:回文串是正读和反读都一样的字符串,判断读入字符串是否回文。
思路:将字符串拆开,两边向内两两比较。
细节:注意头文件以及字符串的表示。
源码:
#include<stdio.h>
#include<string.h>
int main()
{
int n,l,i,j;
char s[100];
while(scanf("%d",&n)!=EOF)
{
getchar();
while(n--)
{
gets(s);
l=strlen(s);
i=0;
j=l-1;
while(i<j)
{
if(s[i]!=s[j])
break;
i++;
j--;
}
if(i>=j)
printf("yes\n");
else
printf("no\n");
}
}
}
13.十进制转换
题意:给定十进制数,转换成R进制。
思路:根据进制转换进行倒推,其中十六进制需特别处理。
细节:注意特殊情况的处理,不要漏掉。
源码:
#include<stdio.h>
int main()
{
int m,n,i;
while(scanf("%d %d",&m,&n)!=EOF)
{
if(m<0)
{
printf("-");
m=-m;
}
if(n==0)
{printf("0\n");
continue;}
int c=0,a[100];
while(m)
{
a[c]=(m%n);
c++;
m/=n;
}
for(i=c-1;i>=0;i--)
{
if(a[i]>=10)
{printf("%c",'A'+a[i]-10);}
else
printf("%d",a[i]);
}
printf("\n");
}
return 0;
}
14.时间相加
题意:给定时分秒三个值,给出两组数据,求两组相加所得。
思路:按照时间六十进制从秒开始相加。
细节:注意进制转换。
源码:
#include<stdio.h>
int main()
{
int n,i;
int a1,a2,a3,b1,b2,b3,q,w,e;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
{scanf("%d %d %d %d %d %d",&a1, &a2, &a3, &b1, &b2, &b3);
q=a1+b1;
w=a2+b2;
e=a3+b3;
if(e>=60)
{e=e-60;
w++;
}
if(w>=60)
{w=w-60;
q++;
}
printf("%d %d %d",q,w,e);
printf("\n");
}
}
}
15.A的B次方
题意:给定A,B,求A的B次方最后三位。
思路:A的B次方即B个A相乘,用循环,然后借助求余来找最后三位。
细节:注意零时的特殊情况,不要有漏。
源码:
#include<stdio.h>
int main()
{
int n,m;
long long int k;
while(scanf("%d %d",&n,&m)!=EOF)
{
if(n==0&&m==0)
break;
else if(m==0)
printf("1\n");
k=1;
while(m--)
{
k=k*n;
k=k%1000;
}
printf("%lld\n",k);
}
}
总结:通过这些题目的练习,拓宽了对c语言的认识。首先,每个编码需要正确的对应头文件。其次,输入输出格式也应注意,没有回车换行不行,多一个空格也不行。然后,需要熟练掌握循环语句和判断语句,这样才能有条不紊的进行编程,防止思路乱掉。然后,给定的量不能定义错,标点符号也要用对。最后,还要注意是否超时。这么多细节,构成了c语言程序。因此,做c语言要细心。
众多题目包含了生活中方方面面的问题,是对实际应用的展示,足以说明它的实用性。越深入越觉得其博大精深,是必须用心学,细心学的东西。