课程设计论文


班级:______数学类3班____________学号:_2018212819____

 

报告人姓名:___崔珊________  

 

实验地点: _______山东农业大学东校区教学楼413________

 

完成起止日期: __2019年1月1日至2019年1月4日__
一、
题意:输入一个百分制的成绩t,将其转换成对应的等级,具体转换规则如下:
         90~100为A;
         80~89为B;
         70~79为C;
         60~69为D;
          0~59为E;
解题思路:按题目要求用分支语句,将成绩分类
题目代码:

#include<iostream>

#include <cstdio>

using namespace std;

int main()

{

    int score;

    while(cin>>score)                     //多组输入

    if (score>=90 && score <= 100)      //分支语句分类

        printf("A\n");                     //按题目要求换行操作

    else if (score>=80 && score < 90)

        printf("B\n");

    else if (score>=70 && score < 80)

        printf("C\n");

    else if (score>=60 && score < 70)

        printf("D\n");

    else if (score>=0 && score < 60)

        printf("E\n");

    else printf("Score is error!\n");

    return 0;

}
二、

题意:

每一组数据都包含两个时间,将两个时间相加。

解题思路:

分别定义两个数组,将两个时间对应的时分秒输入数组中保存,然后将两个数组中相对位置的对应元素相加,然后输出相加后的数。

解题细节:

在分跟秒对应的数据相加后要是超过60要往前进一位数。

题目代码:

#include<stdio.h>

#include<string.h>

int main()

{

       int n,a[3],b[3],i;

       scanf("%d",&n);

       while(n--)

       {

              for(i=0;i<3;++i)

        scanf("%d",a+i);

              for(i=0;i<3;++i)

        scanf("%d",b+i);

              for(i=2;i>=0;--i)

              {

                     a[i]+=b[i];

                     if(i!=0&&a[i]>=60)

                     {

                            a[i]-=60;

                            ++a[i-1];

                     }

              }

              for(i=0;i<2;++i)

              {

                     printf("%d ",a[i]);

              }

              printf("%d\n",a[i]);

       }

}
三、

题意:

在每个老师工资额知道的前提下,最少要准备多少张人民币,才能在老师发工资的时候不用找零。

解题思路:

依次输入每个老师的工资,然后用工资除以100,然后用所得的余数除以50,再用余数除以10,再用余数除以5,再用余数除以2,这样最后就可以计算出每个老师的工资需要多少张人民币,然后把每个老师所需的数量相加,就可以得出最后的结果。

解题细节:

一定要从面额大的人民币数算起,不能颠倒。

题目代码:

#include<cstdio>

#include<iostream>

using namespace std;

int main()

{

    int n;

    while(scanf("%d",&n),n)

    {

        int d,ans=0;

        for(int i=0;i<n;i++)

        {

            scanf("%d",&d);

            ans+=d/100;d%=100;

            ans+=d/50;d%=50;

            ans+=d/10;d%=10;

            ans+=d/5;d%=5;

            ans+=d/2;d%=2;

            ans+=d;

        }

        printf("%d\n",ans);

    }

    return 0;

}
四、

题意:

将一个整数插入到已经排好顺序的序列中,使新的数列仍然有序。

解题思路:

将排好序的序列利用循环语句分成比输入的整数大的一部分跟比整数小的一部分,然后先将小的一部分挨个输出,再输出该整数,然后再把大的一部分挨个输出。

解题细节:

先要判断序列的个数是否在0-100之间或者序列的个数跟输入的整数是否都为零,还要注意输出的时候两个数之间要有空格。

题目代码:

#include<iostream>

#include<cstdio>

#include<iomanip>

using namespace std;

int main()

{

    int x,n,i,j,a[110];

    while(cin>>n>>x&&(n||x))

    {

        for(i=0;i<n;i++)

        {

            cin>>a[i];

        }

        for(i=0;i<n;i++)

        {

            if(x<a[i])

            break;

        }

        for(j=0;j<i;j++)

        {

            cout<<a[j]<<" ";

        }

        cout<<x;

        for(j=i;j<n;j++)

        {

            cout<<" "<<a[j];

        }

        cout<<endl;

    }

    return 0;


五、

题意:

求多项式1-1/2+1/3-1/4……的和

解题思路:

先用循环语句将从1开始的每个数字取倒数并保存在数组中,然后用条件语句判断是否为偶数,若为偶数,则取相反数,最后加和输出。

结题细节:

注意某些数值需要用浮点数定义而不能用整数。

题目代码:

#include <stdio.h>

int main(){

    double sum;

    int z, n, i;

    scanf("%d", &z);

    while ( z-- ){

        scanf("%d", &n);

        sum = 0;

        if ( n&1 ){

            sum += 1;

            for ( i=2; i<n; i+=2 ){

                sum += -1.0/i+1.0/(i+1);

            }

        }

        else {

            for ( i=1; i<n; i+=2 ){

                sum += 1.0/i-1.0/(i+1);

            }

        }

        printf("%.2lf\n", sum);

    }

    return 0;

}
六、

题意:

输入数据的第一行是一个N(N <= 200),表示有N个数据,接下来的N行每一行为一个11位的手机号码

解题思路:

      定义字符串,先输入N个数据,然后再逐个分析,输入十一位数字,先输出6然后当输入第七个数时再输出,然后每输出一组数据换行。

题目代码:

#include <iostream>

 

using namespace std;

 

int main()

 

{

 

    int N;

 

    char Lu[12];

 

    cin >> N;

 

    while (N--)

 

    {

 

        for (int i = 1; i <= 11; i++)

 

            cin >> Lu[i];

 

        cout << 6;

 

        for (int i = 7; i <= 11; i++)

 

            cout << Lu[i];

 

        cout << endl;

 

    }

 

    return 0;

 

}
七、

题意:去掉一个最高分和一个最低分,然后计算平均得分,输出选手的得分。

解题思路:先将所有成绩从小到大排序,然后从第二大元素加到倒数第二大的元素,用这个和除以n-2,就是平均值了

题目代码:

        #include<iostream>

#include <algorithm>

using namespace std;

int main()

{

    int n,i,j;

               int a[100];

                  double sum;

                  while(cin>>n)

              {

                     sum=0.0;

                     for(i=0;i<n;i++)

                  {

                           cin>>a[i];

                     }

                   sort(a,a+n);

                   for(j=1;j<n-1;j++)

                   {

                         sum+=a[j];

                     }

                printf("%.2f\n",sum/(n-2));

                    }

                    return 0;

}
八、
题意:给一整数和一字符,输出一个等边三角形。

解题思路:循环控制输出,设置变量控制空格。

注意:三角形右侧不含有空格,字符@表示结束。

题目代码:

#include<iostream>

using namespace std;

int main()

{

    char a;int n,i,j,flag=0;

    while(cin>>a>>n)

    {

        if(a=='@') break;

        if(flag)

        cout<<endl;//每个图形中间输出换行//

        flag=1;

        for(i=1;i<=n-1;i++)

        {

            for(j=1;j<=n+i-1;j++)

            {

                if(j==n-i+1||j==n-1+i)

                cout<<a;

                else cout<<" ";

            }

            cout<<endl;

        }//用n+i-1控制j,去掉多余空格//

        for(j=1;j<=2*n-1;j++)

        cout<<a;

        cout<<endl;

 

}

}

九、

题意:一个4位数其十进制,十二进制,十六进制各位数之和都为相同的数,则其位sky数,判断一个4位数是否是sky数。

解题思路:进制转换并判断。

注意:要满足3个条件,任一不满足都不行,输入0表示结束。

题目代码:

#include<iostream>

using namespace std;

int main()

{

    int n,m,r, a,b,c,d, x,y,z;

    while(cin>>n)

    {

        if(n==0) break;

        m=n;

        x=0;y=0;z=0;

        a=n%10;

        b=(n%100)/10;

        d=n/1000;

        c=n/100-d*10;

        x=a+b+c+d;//十进制//

        while(n)

        {

            r=n%12;

            n=n/12;

            y+=r;

        }//十二进制//

        n=m;

        while(n)

        {

            r=n%16;

            n=n/16;

            z+=r;

        }//十六进制//

        if(x==y&&x==z) cout<<m<<" is a Sky Number."<<endl;

        else cout<<m<<" is not a Sky Number."<<endl;
}
十、
题意:春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的:
“水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比如:153=13+53+3^3。
现在要求输出所有在m和n范围内的水仙花数。
解题思路:
用EOF控制多组输入,先把这个三位数的各个位的数字赋给三个变量,这三个变量的立方和等于原数本身。用k控制空格的输出。
注意:
注意空格不要多余。

题目代码:
#include<stdio.h>
using namespace std;
int main(){
int m,n,i,a,b,c,k;
while(scanf("%d %d",&m,&n)!=EOF){
k=0;
for(i=m;i<=n;i++){
a=i/100;
b=i/10-a10;
c=i-a100-b10;
if(i==(aaa+bbb+cc*c)){
if(k0){
printf("%d",i);k++;
}
else {
printf(" %d",i);
k++;
}
}
}
if(k0)printf(“no\n”);
else printf("\n");
}
return 0;
}


十一、
题意:对于表达式n^2+n+41,当n在(x,y)范围内取整数值时(包括x,y)(-39<=x<y<=50),判定该表达式的值是否都为素数。
解题思路:
判定素数n,设置函数,用n除以2到n的平方根取余是否为0判断是否为素数。Boolen型控制来降低时间复杂度。
注意:
要注意程序的时间复杂度、输出的大小写。

题目代码:
#include<math.h>
using namespace std;
int ss(int n)
{
for(int i=2;i<=sqrt(n);i++){
if(n%i0){
return 0;
}
}
return 1;
}
int main(){
int x,y,n,s;
bool flag;
while(cin>>x>>y){
if(x0&&y==0)break;
if(x>=-39&&x<y&&y<=50){
flag=false;
for(int i=x;i<=y;i++){
n=i*i+i+41;
if(ss(n)==0){
flag=true;
break;
}
}
}
if(flag)cout<<“Sorry”<<endl;
else cout<<“OK”<<endl;
}
return 0;
}

十二、

题意:
“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。请写一个程序判断读入的字符串是否是“回文”。
解题思路:
   可以将其看作为一个字符串,应用字符串与字符数组的关系判断正反向是否相同。
*注意:输入字符串可以考虑用gets,并注意gets的头文件#include<string.h>
题目代码:
#include<iostream>
#include<string.h>
using namespace std;
char a[105][105];
int main()
{
    int i,n,x,j,t=0;
    cin>>n;
    for(i=0;i<=n;i++)
    {
        gets(a[i]);
    }
    for(i=1;i<=n;i++)
    {
        x=strlen(a[i]);
        t=0;
        for(j=0;j<x;j++)
        {
            if(a[i][j]!=a[i][x-j-1]) t=1;
        }
        if(t==0) cout<<"yes"<<endl;
        else cout<<"no"<<endl;
    }
}
十三、
题意:
A-B求的是两个集合的差,就是做集合的减法运算。(当然,大家都知道集合的定义,就是同一个集合中不会有两个相同的元素,这里还是提醒大家一下)
解题思路:
   可以将A B两个集合的元素作为两个数组的元素,应用查找,如果B中有A中的元素可以将A中该元素变为0,后将A中元素不为0的输出。
 *注意:此种方法要单独考虑A 中B中是否含有0元素。
 *排序可以应用sort函数
 //可以将程序优化,先排序后查找,排序后查找可以减少循环。
题目代码:
#include<iostream>
#include<algorithm>
using namespace std;
int a[105],b[105],c[105];
int main()
{
    int m,n,i,y,t,o,j;
    while(cin>>n>>m)
    {
        if(n==0&&m==0) break;
        y=0;
        for(i=0;i<n;i++)
        {
            cin>>a[i];
            if(a[i]==0) y=1;
        }
        for(i=0;i<m;i++)
        {
            cin>>b[i];
            if(y==1&&b[i]==0) y=2;
        }
        if(y==1) cout<<0<<" ";
        t=0;
        o=0;
        for(i=0;i<n;i++)
        {
            for(j=0;j<m;j++)
            {
                if(a[i]==b[j]) a[i]=0;
            }
            if(a[i]!=0)
            {
                c[o]=a[i];
                o++;
                t=1;
            }
        }
        sort(c,c+o);
        for(i=0;i<o;i++)
        cout<<c[i]<<" ";
        if(y!=1&&t==0) cout<<"NULL";
        cout<<endl;
    }
}

十四、
题意:
求A^B的最后三位数表示的整数。
说明:A^B的含义是“A的B次方”
解题思路:
应用for循环表示A^B。
*注意每输入一组都要将表示乘积的c=1。
题目代码:
#include<iostream>
using namespace std;
int main()
{
    int a,b,i,c;
    while(cin>>a>>b)
    {
        if(a==0&&b==0) break;
        c=1;
        for(i=0;i<b;i++)
        c=(c*a)%1000;
        cout<<c<<endl;
    }
}

十五、
题意:
大家都知道,手机号是一个11位长的数字串,同时,作为学生,还可以申请加入校园网,如果加入成功,你将另外拥有一个短号。假设所有的短号都是是 6+手机号的后5位,比如号码为13512345678的手机,对应的短号就是645678。
现在,如果给你一个11位长的手机号码,你能找出对应的短号吗?
解题思路:
可以将该十一位数字串看做一个有十一位的数,后六位就可用a[i]除以100000取余表示,而前边加一个6可以将余数+600000或者先输出数字6。
  *注意:当为极限值时会用int表示不了,用long long 定义数组。
题目代码:
#include<iostream>
using namespace std;
long long a[202];
int main()
{
    int n,i;
    while(cin>>n)
    {
        for(i=0;i<n;i++)
        {
            cin>>a[i];
        cout<<600000+a[i]%100000<<endl;
        }
    }
}

总结:
  刚开始学C语言的时候,很迷茫,在此之前从没有接触过C语言,有点摸不着头脑。可是在上机过后,我觉得编程是很有趣的一件事。我知道要学好C语言不容易,可是我决定完成这件不容易的事。
要学好C语言就要先懂得最基本的语法知识,看课本是必需的。我觉得看不懂也没关系,尽力去理解就好了,在对知识有了一个大致的了解过后,就要上机实践。学习C语言一定要动手,只看不做,眼高手低是不行的。
最开始可以打书上的例题,熟悉程序,慢慢的开始试着编程。在编程时要理清自己的思路,然后再转换成C语言中的语言,这个时候就更要动手了,只有通过上机操作才能验证自己程序的正确性。执行程序,不要害怕错误,其实,我觉得错误是好的,知道了自己所学知识的不足,并根据提示改
正程序中发生的错误,一种成就感油然而生,觉得自己的付出都是值得的。
良好的编程习惯是学好C语言的重要因素,只有勤动手,多动脑才能学好C语言,光说不练是不行的。
在学习的时候,不会的一定要问明白,可以求助于老师,同学,不要自己一个人钻牛角尖,浪费时间又学不到东西。
上课的时候一定要认真听,老师讲的肯定是最重要的,错过了就是一大笔损失,认真听讲才可以提高学习效率。
我觉得在编程之前,要把自己的想法写在纸上,如果是简单一点的程序不需要这样,如果程序比较复杂,就写下来,这样可以让思路更加清晰。
输入程序时一定要认真,不要把“,”与“;”混淆,用scanf的时候不要忘记“&”,用“switch”要记得“break”,用if,while的时候注意不要加“;”,“{}”“()”一定要配对,不要多也不要少一半,“=”与“==”的区别要清楚,要勤查优先级,要记住一些基本的,例如两个值之间的调换怎么写等等。
在编程时除了要认真谨慎之外,更重要的是掌握基本的知识,例如if语句与switch语句的区别,它们都是条件语句,用来执行判断功能,但是什么时候用if什么时侯用switch应该弄清楚:若条件分支多但是条件的值是一个确定的值时就用switch。反之,在大多数情况下就用if。又如各种循环的应用,及循环之间的嵌套都要能灵活应用。还要注意一些细小的琐碎的知识,如C语言规定的标识符,大小写字母间的ASCII代码值相差32,强制类型转换符,自增自减运算符,符合运算符,逗号运算符等。
学习C语言需要的是坚持下去的毅力,认真对待每次错误的耐心,还有孜孜不倦的努力。拥有一个良好的心态,相信自己,你就会发现学好C语言不再困难!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值