课程总结

课程总结报告

1●水仙花数

题意:求范围内水仙花数。

思路:①运用while循环,输入多组数据。

      ②用条件语句分情况讨论。

注意点:①用求余方法分别求出个、十、百位上的数字。

        ②两种特殊请况:1.只有一个数字时不加空格。

                        2.没有水仙花数时输出no。

代码:#include<iostream>

#include<cmath>

using namespace std;

int main()

{

    int m,n,i,x,y,z,a;

    while(cin>>m>>n)

    {

        int c=0;

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

        {

        x=i%10;

        y=i/10%10;

        z=i/100;

        a=x*x*x+y*y*y+z*z*z;

        if(a==i)

        {c++;

        if(c==1)

        cout<<a;

        else

        cout<<" "<<a;

        }

        }

        if(c==0)

        cout<<"no";

        cout<<endl;

    }

    return 0;

}

题解:一般地,输入函数,应与头文件对应,外循环用while语句对变量进行循环,然后用增1运算符改变数字,用if -else语句对条件控制,输出的结果。

2●素数

题意:判断满足表达式n^2+n+41的值是否全为素数。

思路:利用while外循环,if-else语句分情况讨论,利用题中表达式以及特殊条件,运用素数判断方法。

注意点:①特殊情况直接跳出。

        ②素数判断的方法

代码:#include<cstdio>

using namespace std;

int main()

{

    int x,y,a,b,c;

    while(scanf("%d%d",&x,&y))

    {

        if(x==0&&y==0)

        break;

        for(int i=x;i<=y;i++)

        {

            b=0,c=0;

            a=i*i+i+41;

            for(int j=2;j<a;j++)

            if(a%j==0)

            {

                b=1;

                break;

            }

            if(b==1)

            break;

        }

        if(b==1)

        printf("Sorry\n");

        else

        printf("OK\n");

    }

    return 0;

}

题解:以while语句为大循环,进行循环嵌套,由于素数判断的前提是满足表达式,故素数判断应放在循环内。

3●编程计算

题意:利用编程计算求A1的值。

思路:通过题给表达式推出A1表达式,通过循环嵌套一步步定义。

注意点:①双精度实型应用double。

        ②先求出表达式,后用编程语言表示。

        ③赋值号的运用,换行。

代码:#include<iostream>

#include<cstdio>

using namespace std;

int main()

{

    int n;

    double C,A0,B,sum;

    while(cin>>n)

    {

        cin>>A0>>B;

        sum=B+n*A0;

        for(int i=n;i>=1;i--)

        {

            cin>>C;

            sum=sum-2*C*i;

        }

        sum=sum/(n+1);

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

    }

    return 0;

}

题解:关键在于应用数学求出表达式,在编译成代码。

4●数组

题意:上M阶台阶有多少种走法。

思路:定义数组,给数组赋值,找出递增规律,带入循环。

注意点:采用动态规划算法。

代码:#include<iostream>

#include<cstdio>

using namespace std;

int a[100];

int main()

{

    a[1]=0;

    a[2]=1;

    a[3]=2;

    for(int i=4;i<=40;i++)

    a[i]=a[i-1]+a[i-2];

    int n,m;

    cin>>n;

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

    {

        cin>>m;

        cout<<a[m]<<endl;

    }

    return 0;

}

 

题解:考虑n阶台阶最后一次,走一步的话,前面就是m[n-1]种走法,走两步的话,前面就是m[n-2]种走法。

公式就是m[n]=m[n-1]+m[n-2]。

5●亲和数

题意:判断所给的两个数是否为亲和数。

思路:利用for循环求其约数。

注意点:约数包括1,不包括其自身。运用减1运算,递减运算。

代码:#include<iostream>

#include<cstdio>

using namespace std;

int main()

{

    int i,j,M,A,B,sum;

    cin>>M;

    while(M--){

        sum=0;

        cin>>A>>B;

    for(i=1;i<A;i++)

    {

        if(A%i==0)

        {

            sum+=i;

        }

    }

    if(sum==B)

    {

        cout<<"YES";

    }

    else

    {

        cout<<"NO";

    }

    cout<<endl;}

    return 0;

}

 

题解:对于每一组数据,对两个分别利用for循环求出它们包括1在内不包括自身的所有约数,然后求出和判断是否相等。

6●进制转换

题意:将十进制数转化为R进制

思路:运用递归方法运算。

注意点:注意进制之间如何转化。

代码:#include<iostream>

#include<cstdio>

#include<cstring>

using namespace std;

int main()

{

    int n,r,i;

    while(cin>>n>>r)

    {

        if(n<0)

        {

            cout<<"-";

            n=-n;

        }

        if(n==0)

        {

            cout<<'0'<<endl;

            continue;

        }

    int c=0,a[100];

    while(n)

    {

        a[c]=(n%r);

        c++;

        n/=r;

    }

    for(i=c-1;i>=0;i--)

    {

        if(a[i]>=10)

        {

            printf("%c",'A'+a[i]-10);

        }

        else cout<<a[i];

    }

    cout<<endl;

    }

    return 0;

}

 

题解:首先,我们要弄明白十进制的数是怎样转化为R进制的,然后再来谈程序语言的实现。

十进制的数转成二进制,最常用的方法,就是除R取余法,将十进制的数n除以R取其余数,这里得到的余数是R进制数的最后一位。比如:7转化为2进制,先用7%2得到的是1,这里的1是转化后的二进制数的最后一位,再接着,令n=n/R,即为除得的整数结果(注意,这里的n需要大于0,因为后续会产生重复的操作),同上例n=7/2=3;再同以上的方法将,3%2=1作为2进制数的倒数第二位。以此类推,2进制数的倒数第三位等于3/2%2=1;这时n=0了,循环到此终止,二进制的数为111(注意是从第1位读到最后一位),即是说,代码实现时需要逆序输出(这里很容易想到用数组来存取每一个余数)。逆序输出我们很熟悉,若R进制的数共有X位,令n=X-1;n往下移动一位一直到n=0,对数组进行输出。for循环可以方便的实现。到此一个十进制的数转化成10进制以内任意R进制功能就实现了。

 

在接下来,考虑11到16进制的转化,很明显,因为有了字母的引入。不能直接对于数组进行直接的输出。这里,可以使用switch case 或者是if语句。倒顺序的每次判断均输出一个结果,输出结束别忘了加上\n换行。

7●回文串

题意:输出正读和反读一样的字符串

思路:运用递归,循环,动态规划

注意点:正读反读相同

代码:#include<cstdio> 

#include<string.h>

int main(){

    int n,i,len,j;

    char s[100];

    scanf("%d",&n);

    getchar();

    while(n--){

        gets(s);

        len=strlen(s);

        i=0;j=len-1;

        while(i<j){

            if(s[i]!=s[j])

                break;

            i++;

            j--;

        }

        if(i>=j)

            printf("yes\n");

        else

            printf("no\n");

    }

    return 0;

}

题解:从中间向两边扩展。

8●数组

题意:输出第n年母牛数量

思路:递推公式:第n年成年母牛=第n-1年成年母牛+第n-3年小牛的数量;

注意点:递推。

代码:#include<iostream>

#include<cstdio>

using namespace std;

int a[55];

int main()

{

    int n;

    a[1]=1;

    a[2]=2;

    a[3]=3;

    a[4]=4;

    for(int i=5;i<=55;i++)

    {

        a[i]=a[i-1]+a[i-3];

    }

    while(cin>>n)

    {

        if(n==0)

        break;

        else

        cout<<a[n]<<endl;

    }

    return 0;

}

 

题解:递推公式:第n年成年母牛=第n-1年成年母牛+第n-3年小牛的数量;

9●字符串

题意:字符三角形

思路:每个样板三角形之间应空上一行,三角形的中间为空。

注意点: 注意两个输出之间是有换行了,也就是多一个换行。

代码:#include<iostream>

#include<cstdio>

using namespace std;

int main()

{

    char a;

    int b,j,i,flag=1;

    while(cin>>a) 

    {

        if(a=='@') break;

        else

        {

            cin>>b;

            if(flag)

            flag=0;

            else

            cout<<endl;

            for(i=1;i<=b;i++)

            {

                if(i==b)

                {

                    for(j=1;j<=2*b-1;j++) cout<<a;

                }

                else

                {

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

                    {

                        if(j==b+1-i||j==b+i-1) cout<<a;

                        else if(j<b+i-1) cout<<" ";

                        else break;

                    }

                }

                cout<<endl;

            }

            

        }

    }

    return 0;

}

 

题解:每个样板三角形之间应空上一行,三角形的中间为空。

10●求值

题意:求后两位数值

思路:求出后两位的值,假设未知数加到给的数字上,再整除给定的数

注意点:格式和for语句

代码:#include<iostream>

using namespace std;

int main()

{

    int a,b,i,c;

    while(cin>>a>>b)

    {

        c=0;

        if((a==0)&&(b==0))

        {

            break;

        }

        a=a*100;

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

        {

          if((a+i)%b==0)

          {

              c=c+1;

              if(c==1)

              {

                if(i<10)

                {

                    cout<<0<<i;

                }

                else

                {

                    cout<<i;

                }

              }

              else

              {

                  if(i<10)

                  {

                      cout<<" "<<0<<i;

                  }

                  else

                  {

                      cout<<" "<<i;

                  }

              }

          }

        }

        cout<<endl;

    }

    return 0;

}

题解:求出后两位的值,假设未知数加到给的数字上,再整除给定的数。

11●素数

题意:将一个偶数拆成两个素数和。

思路:把小于n/2的素数i都求出来,然后求对应的n-i是不是素数

注意点:素数的表达。

代码:#include<iostream>

#include<cstdio>

#include<cmath>

using namespace std;

int main()

{

    int n,s,a[10000];

    for(int i=3;i<=10000;i++)

    {

        a[i]=i;

    }

    for(int i=2;i<=10000;i++)

      for(int j=2*i;j<=10000;j+=i)

      {

          a[j]=0;

      }

    while(scanf("%d",&n)!=EOF&&n)

    {

        s=0;

        for(int i=3;i<n/2;i++)

        {

            if(a[i]+a[n-i]==n)

            s++;

        }

        cout<<s<<endl;

    }

    return 0;

}

12●进制转换

题意:将数转化为不同进制

思路:利用不同进制关系转化。

注意点:进制直接转化值不同。

代码:#include<iostream>

#include<cstdio>

using namespace std;

int main()

{

    int n,s1,s2,s3;

    while(cin>>n&&n!=0)

    {

        s1=n%10+(n/10)%10+(n/100)%10+n/1000;

        s2=n%12+(n/12)%12+(n/144)%12+n/1728;

        s3=n%16+(n/16)%16+(n/256)%16+n/4096;

        if(s1==s2&&s2==s3)

        {

            cout<<n<<" ";

            cout<<"is a Sky Number."<<endl;

        }

        else

        {

            cout<<n<<" ";

            cout<<"is not a Sky Number."<<endl;

        }

    }

    return 0;

}

13●运算

题意:分别表示整数的和与积。

思路:运用for循环,if条件句分情况讨论

注意点:为零时的特殊情况。

代码:#include<iostream>

#include<cstdio>

#include<cmath>

using namespace std;

int main()

{

    int n,m,a,s;

    while(cin>>n>>m)

    {

        if(n==0&&m==0)

        break;

        s=0;

        for(int i=-9999;i<n/2;i++)

        {

            a=n-i;

            if(a*i==m)

            {

                s++;

                cout<<"Yes";

                break;

            }

        }

        if(s==0)

        cout<<"No";

        cout<<endl;

    }

    return 0;

}

14●数列

题意:将一个整数x插入已知数列

思路:第一步:如果m的值比最后一个值都要大,显而易见,m就成为数组的最后一位数。

第二步:如果m的值不比最后一个值大,通过i的值来控制m和数组中的每一个数来比较,直到m的值大于数组中值时,就把m的值赋值给该数的下一位,插入进去。

注意点:数列有序。

代码:#include<stdio.h>

int main()

{

    int n, m, str[100], i;

    while(scanf("%d %d", &n, &m)!=EOF){

        if(n<0 || n>100){

            continue;

        }

        else if(n==0 && m==0){

            break;

        }

        else{

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

                scanf("%d", &str[i]);

            }

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

                if(str[i]<=m){

                    if(i==(n-1)){

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

                    }

                    else{

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

                    }

                }

                if(m<str[i]){

                    printf("%d ", m);

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

                        if(i==(n-1)){

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

                        }

                        else{

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

                        }

                    }

                    break;

                }

            }

        }

    }

    return 0;

}

15●求幂次

题意:求A^B最后三位表示的整数

思路:采用循环相乘求解,这样效率不算太高。根据公式 m ^ ( x + y ) = m ^ x * m ^ y 对指数进行二分,再结合递归求解。

注意点:循环结构,递归求解。

代码:#include<iostream>

#include<cstdio>

using namespace std;  

int main()

{  

    int a,b,i,p;  

    while(cin>>a>>b)

   {  

        if(a==0&&b==0) break;            

        p=a%1000;  

        a=1;  

        for(i=1;i<=b;i++)

        {  

             a=a%1000;  

             a=a*p;              

         }  

         printf("%d\n",a%1000);  

    } 

    return 0; 

}

本课程总结:

C语言特点

 

1、语言简洁、紧凑,使用方便灵活

 

2、运算符丰富

 

3、数据结构丰富,具有现代化语言的各总数据结构

 

4、具有结构化的控制语句

 

5、语法限制不太严格,程序设计自由度大

 

6、C语言允许直接访问物理地址,可实现汇编语言的大部分功能

 

7、生成目标代码的质量高,程序执行效率高

 

8、程序可执行性好

 

 

C语言程序结构

 

1.C程序是由函数构成的。一个C源程序至少包含一个主函数(main或主程序)和若干个其它函数(子函数或子程序)

 

2.一个函数由两部分程序组成:说明部分和函数体

 

3.一个C程序总是从main函数开始执行,不论main函数放在程序中的什么位置。程序的流程是通过主函数main调用其它子函数,或子函数间的相互调用

 

4.C程序书写格式自由,一行内可以写多条语句,但每一语句必须用分号(“;”)结束

 

5.C语言本身没有输入/输出语句,而是用函数完成相应操作

网页制作代码+课程总结;旅游网站 CSS代码@charset "utf-8"; body { font-size: 12px; color: #666; text-align: center; margin: 0px; padding: 0px; } #container{ text-align:left; padding:0px; width:1400px; position:relative; margin-top:0px; margin-right:auto; margin-bottom:0px; margin-left:auto; } #top{ padding-top:15px; height:90px; } #logo{ margin:0px; padding:0px; float:left; width:365px; text-align:right; } .pic{ vertical-align:middle; padding-right:20px; } #ss{ float:left; width:835px; text-align:right; height:35px; padding-top:0px; padding-right:200px; padding-bottom:0px; padding-left:0px; margin:0px; } #daohang{ margin-top:5px; margin-right:0px; margin-bottom:0px; margin-left:195px; float:left; text-align:right; padding:0px; height:38px; width:840px; } #daohang ul{ margin:0px; padding:0px; list-style:none; } #daohang ul li{ text-align:center; float:left; width:90px; } #daohang a{ background-image:url(images/bj01.jpg); display:block; margin:0px; padding-top:10px; padding-right:0px; padding-bottom:13px; padding-left:0px; } #daohang a:link,#daohang a:visited{ color:#FFF; text-decoration:none; } #daohang a:hover{ color:#333; text-decoration:underline; } #banner{ background-image:url(images/pic.jpg); background-repeat:no-repeat; height:160px; text-align:center; padding-top:400px; padding-right:0px; padding-bottom:0px; padding-left:0px; margin:0px; } #banner img{ padding:0px 5px 0px 5px;} .daohang { font-size: 16px; color: #09F; background-color: #060; text-align: center; display: block; } #footer{ color: #000; background-image: url(images/bj03.jpg); background-repeat: repeat-x; text-align: center; padding: 30px 0px 29px 0px; font-size: 16px; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值