课程设计

一.Problem A
1.简要题意:
成绩分类转化为等级。
2.解题思路:
输入数据,进行分部判断if-else,定义等级,输出。
3.代码及分析:
#include
#include
using namespace std;
int main()
{
    int score; //定义成绩
    while(cin>>score)
    {if (score>=90 && score <= 100) //90-100:A
        printf(“A\n”);//“\n”用作换行
    else if (score>=80 && score < 90)//80-90:B
        printf(“B\n”);
    else if (score>=70 && score < 80)//70-80:C
        printf(“C\n”);
    else if (score>=60 && score < 70)//60-70:D
        printf(“D\n”);
    else if (score>=0 && score < 60)//0-60:E
        printf(“E\n”);
    else printf(“Score is error!\n”);}
    return 0;
}
二.Problem B
1.简要题意:
输出在m到n闭区间范围内的水仙花数,并从小到大排序,中间空格。
2.解题思路:
输入多组数据,一组一行,分别定义百位,十位,个位上的数,分别计算出数值,带入公式,求出结果后判断。
3.代码及分析:
#include
#include
using namespace std;
int p[901];
int main()
{
int b=0,c=0,d=0,m,n,s=0;//定义b:百位数,c:十位数,d:个位数,s:水仙花数,在(m,n)的范围内。
while(cin>>m>>n)
{
s=0;
for(int a=m;a<=n;a++)//(初始,增值,循环)
{
b=a/100;//计算百位数
c=a/10%10;//计算十位数
d=a%10;//计算个位数
if(abbb+ccc+ddd)p[++s]=a;
}
if(s
0)cout<<“no”<<endl; //在范围内不存在的是NO
        else
for(int i=1;i<=s;i++)
{
if (is)cout<<p[i]<<endl;//如果符合要求就输出
else cout<<p[i]<<" “;
}
}
return 0;
}
三.Problem C
1.简要题意:
求n个整数中所有奇数的乘积。
2.解题思路:
输入n个数,用if语句判断n个数中的奇数,求出所有奇数的乘积,输出。
3.代码及分析:
#include
#include
using  namespace std;
int main()
{
    int i,n,sum,p;
    while(cin>>n)//多组输入
{
sum=1;//累乘的初始化是1,累加的初始化是0.
        for(i=0;i<n;i++)
        {
            scanf(”%d",&p);
            if(p%2
1) //判断是否为奇数
                sum*=p;
        }
        printf("%d\n",sum);//输出
    }
    return 0;
}
四.Problem D
1.简要题意:
输入一组数据n,判断n∧2+n+41是否为素数。
2.解题思路:
素数就是只能被1和自己本身除尽的数,这个方法就是在小于或等于自己的范围内连续取余,每一个都能整出,就让i从1连续+1,
3.代码及分析:
#include <stdio.h>
int main()
{
int n,x,y,fx,p=0;
while(scanf("%d %d",&x,&y)!=EOF)
{
if(x0&&y0)
{
break;
}//break结束程序,用{}
for(n=x;n<=y;n++)
{
fx=nn+n+41;//计算函数值
for(int i=2;i<=fx/2;i++)
{
if(fx%i0)//判断是否能整出
p++;
}
}
if(p
0) printf(“OK\n”);
else printf(“Sorry\n”);
p=0;
}
return 0;
}
五.Problem F
1.简要题意:
从2开始的递增有序偶数数列,没m个求出平均值。
2.解题思路:
先按条件分组,每组数计算平均值,最后对剩余数求平均值。
3.代码及分析:
#include<stdio.h>
void main()
{
int n,m,i,j,sum=0,k;
while(scanf("%d%d",&n,&m))//读取操作
{  
k=0;
     for(i=1;i<=n/m;i++)//先将n个数分成i个组,每组m个
{
        sum=0;
   if(i>1)
printf(" “);//规定输出格式,每个数之间用空格隔开
for(j=1;j<=m;j++)//将每个组里的数相加并求平均数
{
k=k+2;
sum+=k;
}
printf(”%d",sum/m);
}
if(n%m)
{           //分成i个组后剩余的数求平均数
sum=0;
      for(j=1;j<=n-n/m
m;j++)
 {
  k=k+2;
  sum+=k;
 }
 printf(" %d",sum/(j-1));}
printf("\n");
}
}
六.Problem H
1.简要题意:
母牛一年生一头小母牛,小母猪四年后年年生一头小母牛,计算第n年时母牛总数。
2.解题思路:
根据题意,先列出前几年的牛头数,试着找找规律:
第n年n=1 n=2 n=3 n=4 n=5 n=6 n=7 n=8 n=9
fn f1=1 f2=2 f3=3 f4=4 f5=6 f6=9 f7=13 f8=19 f9=28
 在列出这个序列的过程中,应当能找出规律。
  以n=6为例,fn=9头牛可以分解为6+3,其中6是上一年(第5年)的牛,3是新生的牛(因为第3年有3头牛,这3头在第6年各生一头牛)。
  我们可以得出这样一个公式:fn=fn-1+fn-3
  再理解一下,fn-1是前一年的牛,第n年仍然在,fn-3是前三年那一年的牛,但换句话说也就是第n年具有生育能力的牛,也就是第n年能生下的小牛数。
  编程序,求解这个公式就行了。
3.代码及分析:
#include
using namespace std;
int main()
{
int n;
while(cin>>n)
{
if(n==0)break;
int a,b,c,d; //分别代表一岁二岁三岁四岁及其以上的母牛的数目。
if(n<=4)cout<<n<<endl; //若n<=4,很容易得出总数为n
else{
n=n-4;
a=b=c=d=1;
for(int i=0;i<n;i++)
{
d=c+d;//当年大母牛数目d为前一年c和d的总和
c=b;//b母牛长了一岁到了c
b=a;//同上
a=d;//长成的母牛和原本的母牛共生出新的小母牛a个
}
cout<<a+b+c+d<<endl;
}
}
}
七.Problem G
1.简要题意:
去掉一个最低分,去掉一个最高分,求平均得分。
2.解题思路:
判断最大值最小值,去除,累加求平均值。
3.代码及分析:
#include<stdio.h>
int main()
{
int n,i;double s,x,max,min;
while(scanf("%d",&n))
{
scanf("%lf",&x);
s=max=min=x;
for(i=1;i<n;++i)
{
scanf("%lf",&x);
s+=x;//累加总成绩
max=(x>max)?x:max;//判断是否是最值
min=(x<min)?x:min;
}
printf("%.2lf\n",(s-max-min)/ (n-2));//输出
}
return 0;
}
八.Problem I
1.简要题意:
输入n个整数,按绝对值从小到大排序后输出。
2.解题思路:
用abs()取绝对值,sort()排序结合,输出空格。
3.代码及分析:
#include
#include
#include
using namespace std;
bool cmp(const int &a,const int &b)//布尔型变量是逻辑型变量的定义符,const常量,cmp是比较函数
{
return abs(a)>abs(b);
}
int main()
{
int a[110],n;
while(cin>>n&&n)
{
for(int i=0;i<n;i++)
cin>>a[i];
sort(a,a+n,cmp);//对给定区间所有元素排序
for(int i=0;i<n;i++)
cout<<a[i]<<(i!=n-1?’ ‘:’\n’);
}
return 0;
}
九.Problem J
1.简要题意:
有n个整数的有序数列,插入整数x,使序列仍然有序。
2.解题思路:
找到a[i]<=m<=a[j]的位置,把m插入到这个位置就可以了,顺序查找,从头开始比较,一直到a[i]>=m。
3.代码及分析:
#include <stdio.h>
int main(int argc, char *argv[])//argc: 整数,用来统计你运行程序时送给main函数的命令行参数的个数

  • argv[ ]: 指针数组,用来存放指向你的字符串参数的指针,每一个元素指向一个参数
    {
    int n,i,x,temp,flag;//temp是临时变量,flag变量,用于标识多个运算过程,运算结束后,判断是否进行了
    while(scanf("%d%d",&n,&x) && (n!=0 || x!=0))
    {
    flag=0;
    if(n0)
    {
    printf("%d\n",x);
    continue;//结束本次循环
    }
    for(i=0;i<n;i++)
    {
    scanf("%d",&temp);
    if(temp<x || flag
    1)
    printf("%d",temp);
    else
    {
    printf("%d %d",x,temp);
    flag=1;
    }
    if(i!=n-1)
    printf(" “);//输出空格
    }
    printf(”\n");//输出空格
    }
    return 0;
    }
    十.Problem K
    1.简要题意:
    至少需要多少张人民币,保证不找零。
    2.解题思路:
    想从大面值的处理,除100取整,再除50取整,再一次到最后,将数值求和。
    3.代码及分析:
    #include
    using namespace std;
    int main()
    {
    int n,m,i,a,b,c,d,e,f,s[100],p=0;
    while(cin>>m)
    {
    if(m==0)
    return 0;
    for(i=1;i<=m;i++)
    {
    cin>>n;
    s[i]=0;
    a=n/100;
    b=(n-100a)/50;
    c=(n-100
    a-50b)/10;
    d=(n-100
    a-50b-c10)/5;
    e=(n-100a-50b-c10-d5)/2;
    f=n-100a-50b-c10-d5-e*2;
    s[i]=a+b+c+d+e+f;
    a=0,b=0,c=0,d=0,e=0,f=0;
    p+=s[i];
    }
    cout<<p<<endl;
    p=0;
    }
    }
    十一.Problem L
    1.简要题意:
    输入数据的第一行是一个正整数n,表示测试实例的个数,后面紧跟着是n个字符串,判断是否为回文串。
    2.解题思路:
    输入n组数据,计算a字符串长度,将a的值倒序赋值给b,若相等,则为回文串。
    3.代码及分析:

include <stdio.h>

include <string.h>

int main (void)
{
int n;
while (scanf("%d",&n)!=EOF)//输入n组数据
{
int i,length,count;
char a[1000],b[1000];
while (n–)//输入n组数据
{
count = 0;//每次循环必须初始化 ,count()函数返回数组中元素的数目
scanf("%s",a);
length = strlen(a);//输入字符串并计算它的长度
for (i=0;i<length;i++) //把字符数组a的内容倒序赋值给b
b[i] = a[length-1-i];
for (i=0;i<length;i++)//计算a,b中相等元素的个数
if (b[i] == a[i])
count++;
if (count == length)//如果所有元素都相等则说明 a中元素倒序排列后仍相等
printf(“yes\n”);
else
printf(“no\n”);
}
}
return 0;
}
十二.Problem N
1.简要题意:
输入N行数据,每行6个整数,一个整数由时分秒组成,计算A+B的值,保证分秒的范围在0-59内。
2.解题思路:
对A B中的三组数据分别定义,分步计算后判断是否超出范围,后做处理。
3.代码及分析:
#include
using namespace std;
int main()
{
    int n,a,b,c,d,e,f,s,t,r;
    while(cin>>n)
    for(int i=1;i<=n;i++)//多组数据计算
    {
        cin>>a>>b>>c>>d>>e>>f;
        s=a+d;t=b+e;r=c+f;//计算
        if(r>=60)//判断
        {
            t=b+e+1;
            r=c+f-60;
        }
        if(t>=60)
        {
            t=b+e+1-60;
            s=a+d+1;
        }
        cout<<s<<" “<<t<<” “<<r<<endl;//中间输出空格
    }
    return 0;
}
十三.Problem P
1.简要题意:
输出A,B,计算A∧B结果的后三位数。
2.解题思路:
根据题中给出的范围,显然直接暴力求解行不通。让输出的是后三位,这里我们可以对每次幂运算后的结果与1000取余。
3.代码及分析:
#include
using namespace std;
int main()
{
int a,b,x,i;
while(cin>>a>>b,a!=0||b!=0)
{
x=1;
for(i=1;i<=b;i++)
x=(ax)%1000;
cout<<x<<endl;
}
return 0;
}
十四.Problem R
1.简要题意:
输入包含整数N的数据,然后输入N行数据,每行包含一个整数M,表示楼梯的级数,求不同走法的数目。
2.解题思路:
给定一个正整数int N,返回一个数,代表上楼的方式数。保证小于等于100。为了防止溢出,请返回结果Mod 1000000007的值。 我们走的最后一步,有几种可能。就是两种,一种是走一步,一种是走两步。
3.代码及分析:
#include
#include
using namespace std;
int main()
{
int N,m,a[41];
cin>>N;
a[1]=0;
a[2]=1;
a[3]=2;
for(int i=4;i<41;i++)//前三次没有规律,从第四次开始,后一次是前两次的之和。
{
a[i]=a[i-1]+a[i-2];
}
while(N–)
{
cin>>m,
cout<<a[m]<<endl;
}
return 0;
}
十五.Problem V
1.简要题意:
输入包括多个测试实例。
对于每个实例,首先是一个正整数n,(n <= 3000); 然后是2个数a0, an+1.接下来的n行每行有一个数ci(i = 1, …n);输入以文件结束符结束。对于每个测试实例,用一行输出所求得的a1(保留2位小数).
2.解题思路:
4个人分成两组,1和3则需对决3场,2和2则需对决4场。
拿5举例:1 4 分 PK4次 2 3 分 PK6次
那么我们就要把人数划分作为循环,一组为i 则另一组为n-i,只要存在i
(n-i)==k,则输出YES,否则NO
3.代码及分析:
#include
int main()
{
int n, i;
double a0, an1, c, sum;
while (~scanf(”%d", &n))//等价于 scanf("%d",&n)!=EOF)
{
scanf("%lf%lf", &a0, &an1);
sum = 0;
for(i = 0; i < n; i++)
{
scanf("%lf", &c);
sum += (n - i) * c;
}
printf("%.2lf\n", (n * a0 + an1 - 2 * sum) / (n + 1));
}
return 0;
}
总结:
本学期学习了C语言的数据类型、常量与符号常量、变量、 C语言的运算符和表达式、赋值运算符和赋值表达式、自增自减运算符以及逗号表达式等。了解了结构化程序的三种基本结构、C语句概述、 数据输出包括字符输出函数putchar()和格式输出函数printf()、数据输入包括字符输入函数getchar()和格式输入函数scanf(),还有一些简单的C语程序设计举列等。
C语言是计算机程序设计的重要理论基础,在我们以后的学习和工作中都有着十分重要的地位。要学好这种语言,仅仅学习课本上的知识是不够的,还要经常自己动手,有较强的实践能力。只有多动手,经常编写程序,才能发现我们学习上的漏洞和自己的不足,并在实践中解决这些问题,不断提高自己转化知识的能力。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值