C语言总结

经过这半年对C语言的学习,已经对C语言有了初步的了解。对这学期的学习进行总结。

第一章学习了数据类型。

1.常用数据包括常量与变量。

常量包括整形常量、实型常量、字符型常量、字符串常量。

变量需要进行定义,:

类型关键字 变量名

关键字是C语言预先规定的、具有规定意义的单词。

2.数据类型:

包括基本类型:整型、实行(浮点型)、字符型、枚举类型

构造类型、数组、结构体、共用体。

同时还有:指针类型、无类型。

3.计算变量或数据类型所占空间的大小

用sizeof()

例:

#include

main()

{

       printf("Data type Number of bytes\n");

       printf("char %d\n",sizeof(char));

}

结果:

Data type Number of bytes

char 1

4.

常见错误:

1:变量未定义就使用

2:忽视了变量大小写,使得定义的变量和使用的变量不同名

3:在可执行语句之后定义变量

4:在定义变量时,用于初始化的常量类型与定义的变量类型不一致

5:在定义变量时,对多个变量进行连续赋值

第二章 简单的算术运算和表达式

1.使用乘法时使用'*',除法时使用'/',并且使用除法使除数不能为零。

2.在C语言中,一个特殊的运算为取余运算

例:12%5==2

3.增1和减1

m=n++ - m=n;n=n+1;

m=++n - n=n+1;m=n;

4.宏常量及其替换

#define pi 3.1415926

之后 pi 就代表了这个数,pi 就可以参与有关这个数的运算。

5.const常量

定义在主函数内

int main()

{

      const double pi=3.1415926;

                      .  

                      .

}

6.强制转换类型和自动类型转换

float f=3.6;

int n=256;

double dw2.5;

n=f;

f=n;

d=f;

结果:n=3 f=3.000000 d=3.0000000

第三章:输入与输出

1.字符的输入与输出

getchar();输入

putchar();输出

2.

%d 输出带符号的十进制整数

%u 以无符号的十进制整数输出

%c 输出一个字符

%s 输出一个字符串

%% 输出%

3.输入:

scanf("%d%c%d",&data1,&op,&data2);

注:

1:输入时忘记加入'&'

2:输出时没有键入对应的格式转换符

3:用scanf()输入实型数据时在格式控制字符串中规定了精度。

第四章 选择控制结构

1.

 判断一个数能否同时被3和5整除

总时间限制: 1000ms 内存限制: 65536kB

描述

判断一个数n 能否同时被3和5整除

 

输入

输入一行,包含一个整数n。( -1,000,000 < n < 1,000,000)

输出

输出一行,如果能同时被3和5整除输出YES,否则输出NO

样例输入

15

样例输出

YES

源代码:

 

include

#include

using namespace std;

int main()

{

    int a;

    cin>>a;

    if((a%3==0)&&(a%5==0))

    cout<<"YES";

    else

    cout<<"NO";

    return 0;

}

 

2.计算邮资

总时间限制: 1000ms 内存限制: 65536kB

描述

根据邮件的重量和用户是否选择加急计算邮费。计算规则:重量在1000克以内(包括1000克), 基本费8元。超过1000克的部分,每500克加收超重费4元,不足500克部分按500克计算;如果用户选择加急,多收5元。

 

输入

输入一行,包含整数和一个字符,以一个空格分开,分别表示重量(单位为克)和是否加急。如果字符是y,说明选择加急;如果字符是n,说明不加急。

输出

输出一行,包含一个整数,表示邮费。

样例输入

1200 y

样例输出

17

源代码:

#include

#include

using namespace std;

int main()

{

   int we,mo;

   char op;

   cin>>we>>op;

   if(we<=1000)

        mo=8;

   else

       if(we%500!=0)

        mo=((we-1000)/500+1)*4+8;

        else

        mo=(we-1000)/500*4+8;

   if(op=='y')

   {mo=mo+5;

   cout<

   else

   cout<

   return 0;

}

3.简单计算器

总时间限制: 1000ms 内存限制: 65536kB

描述

一个最简单的计算器,支持+, -, *, / 四种运算。仅需考虑输入输出为整数的情况,数据和运算结果不会超过int表示的范围。

 

输入

输入只有一行,共有三个参数,其中第1、2个参数为整数,第3个参数为操作符(+,-,*,/)。

输出

输出只有一行,一个整数,为运算结果。然而:

1. 如果出现除数为0的情况,则输出:Divided by zero!

2. 如果出现无效的操作符(即不为 +, -, *, / 之一),则输出:Invalid operator!

样例输入

1 2 +

样例输出

3

提示

可以考虑使用if和switch结构。

源代码:

#include

#include

using namespace std;

int main()

{

 int num1,num2;

 char op;

 cin>>num1>>num2>>op;

 switch(op)

 {

  case'+':

  cout<

  break;

  case'-':

  cout<

  break;

  case'*':

  cout<

  break;

  case'/':

  if(num2!=0)

  {

   cout<

   }

   else

   cout<<"Divided by zero!"<

   break;

  default:

  cout<<"Invalid operator!"<

  }

}

第五章:循环结构

1.含k个3的数

总时间限制: 1000ms 内存限制: 65536kB

描述

输入两个正整数 m 和 k,其中1 < m < 100000,1 < k < 5 ,判断 m 能否被19整除,且恰好含有k个3,如果满足条件,则输出YES,否则,输出NO。 

 

例如,输入: 

43833 3 

满足条件,输出YES。

 

如果输入:

39331 3 

尽管有3个3,但不能被19整除,也不满足条件,应输出NO。

 

输入

m 和 k 的值,中间用单个空格间隔。

输出

满足条件时输出 YES,不满足时输出 NO。

样例输入

43833 3

样例输出

YES

源代码:

#include

#include

using namespace std;

int main()

{

    int m,k,a,b,c=3,n=0;

    cin>>m>>k;

    a=m;

    while(a!=0)

    {

        b=a%10;

        if(b-c!=0)

        n=n;

        if(b-c==0)

        ++n;

        a=a/10;

    }

    if(m%19==0&&n==k)

    cout<<"YES";

    if(m%19!=0||n!=k)

    cout<<"NO";

    return 0;

}

2.

津津的储蓄计划

总时间限制: 1000ms 内存限制: 65536kB

描述

津津的零花钱一直都是自己管理。每个月的月初妈妈给津津300元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同。

 

为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里,到了年末她会加上20%还给津津。因此津津制定了一个储蓄计划:每个月的月初,在得到妈妈给的零花钱后,如果她预计到这个月的月末手中还会有多于100元或恰好100元,她就会把整百的钱存在妈妈那里,剩余的钱留在自己手中。

 

例如11月初津津手中还有83元,妈妈给了津津300元。津津预计11月的花销是180元,那么她就会在妈妈那里存200元,自己留下183元。到了11月月末,津津手中会剩下3元钱。

 

津津发现这个储蓄计划的主要风险是,存在妈妈那里的钱在年末之前不能取出。有可能在某个月的月初,津津手中的钱加上这个月妈妈给的钱,不够这个月的原定预算。如果出现这种情况,津津将不得不在这个月省吃俭用,压缩预算。

 

现在请你根据2004年1月到12月每个月津津的预算,判断会不会出现这种情况。如果不会,计算到2004年年末,妈妈将津津平常存的钱加上20%还给津津之后,津津手中会有多少钱。

 

输入

包括12行数据,每行包含一个小于350的非负整数,分别表示1月到12月津津的预算。

输出

包括一行,这一行只包含一个整数。如果储蓄计划实施过程中出现某个月钱不够用的情况,输出-X,X表示出现这种情况的第一个月;否则输出到2004年年末津津手中会有多少钱。

样例输入

样例 #1:

290

230

280

200

300

170

340

50 

90 

80 

200

60

 

样例 #2:

290 

230 

280 

200 

300 

170 

330 

50 

90 

80 

200 

60

样例输出

样例 #1:

-7

 

样例 #2:

1580

源代码:

#include

#include

using namespace std;

int main()

{

    float m=0,s=0;

    int j,a;

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

    {

  cin>>a;

        s=s+300-a;

        if(s>=100)

        {

            j=s/100;

            s=s-j*100;

            m=m+j*100;

        }

        if(s<0)

        {

            cout<<-i;

   return 0;

        }

 }

    

        s=s+m*1.2;

        cout<

    return 0;

}

3.粘墙“三角形”

总时间限制: 1000ms 内存限制: 32767kB

描述

输入一些正整数(≤26),编程输出以这些正整数为边长的附着墙而立的字母三角形。

 

输入

几个正整数

输出

每个正整数对应的图案。每组图案之间空一行。

样例输入

3

7

样例输出

a a

a ab

aabc

 

a a

a ab

a abc

a abcd

a abcde

a abcdef

aabcdefg

源代码:

#include

#include

#include

using namespace std;

int b[27];

int main()

{

    int i,j,n,q;

 char m='a';

 n=(int)m;

 for(int h=1;h<27;h++)

 {

  cin>>b[h];

  for(i=1;i<=b[h];i++)

  {

   for(j=1;j<=b[h]+1;j++)

   {

   

    if(j==1)

    cout<<"a";

    for(q=0;q

    {

     if(j==b[h]+1-q&&i>=q+1)

     cout<<(char)(n-q-1+i);

     if(i==b[h]-q&&i

     cout<<" ";

    }

   }

   cout<

  }

  cout<

 }

 

    return 0;

}

第六章 数组

1:一维数组

1.与指定数字相同的数的个数

总时间限制: 1000ms 内存限制: 65536kB

描述

输出一个整数序列中与指定数字相同的数的个数。

 

输入

输入包含三行:

第一行为N,表示整数序列的长度(N <= 100);

第二行为N个整数,整数之间以一个空格分开;

第三行包含一个整数,为指定的整数m。

输出

输出为N个数中与m相同的数的个数。

样例输入

3

2 3 2

2

样例输出

2

源代码:

 

#include

#include

using namespace std;

int main()

{

    int n,m,j=0;

    int a[101];

    cin>>n;

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

    {

        cin>>a[i];

    }

    cin>>m;

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

    {

        if(a[i]==m)

        ++j;

    }

    cout<

    return 0;

 

}

2.寻找配对数

总时间限制: 1000ms 内存限制: 65536kB

描述

在给定的n个互不相等的正整数中,寻找可以形成a*b=c的等式(a,b,c互不相等)的数目。比如在12,32,6,1,2,8,4中,只有2*4=8, 2*6=12, 4*8=32三对。

 

注意:给出的正整数互不相同。正整数的最大值为2^32-1,正整数的最大个数为1000.

 

输入

第一行输入总共的正整数数目n(n<=1000)

接下来的一行输入n个正整数,正整数之间用一个空格隔开。

输出

输出其中满足a*b=c等式的数目。

样例输入

7

8 6 3 4 10 5 2

样例输出

3

源代码:

#include

#include

using namespace std;

int main()

{

 int n,i,j,k,m,s=0;

 cin>>n;

 int a[1001]={0};

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

 cin>>a[i];

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

 {  

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

    {

    for(m=k+1;m<=n;m++)

  {

    if(a[j]*a[k]==a[m]||a[j]*a[m]==a[k]||a[m]*a[k]==a[j])

    s++;

  }

  }

 } 

 cout<

 return 0;

 }

3.

数组逆序重放

总时间限制: 1000ms 内存限制: 65536kB

描述

将一个数组中的值按逆序重新存放。例如,原来的顺序为8,6,5,4,1。要求改为1,4,5,6,8。

输入

输入为两行:第一行数组中元素的个数n(1

输出

输出为一行:输出逆序后数组的整数,每两个整数之间用空格分隔。

样例输入

5

8 6 5 4 1

样例输出

1 4 5 6 8

源代码:

#include

#include

using namespace std;

int main()

{

    int n;

    cin>>n;

    int a[101];

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

    {

        cin>>a[i];

    }

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

    cout<

    cout<

    return 0;

 

}

2:二维数组:

1.有趣的跳跃

总时间限制: 1000ms 内存限制: 65536kB

描述

一个长度为n(n>0)的序列中存在“有趣的跳跃”当前仅当相邻元素的差的绝对值经过排序后正好是从1到(n-1)。例如,1 4 2 3存在“有趣的跳跃”,因为差的绝对值分别为3,2,1。当然,任何只包含单个元素的序列一定存在“有趣的跳跃”。你需要写一个程序判定给定序列是否存在“有趣的跳跃”。

 

输入

一行,第一个数是n(0 < n < 3000),为序列长度,接下来有n个整数,依次为序列中各元素,各元素的绝对值均不超过1,000,000,000。

输出

一行,若该序列存在“有趣的跳跃”,输出"Jolly",否则输出"Not jolly"。

样例输入

4 1 4 2 3

样例输出

Jolly

源代码:

#include

#include

#include

#include

int a[4000],b[4000];

using namespace std;

int main()

{

 int n,i,sum=0;

 cin>>n;

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

 cin>>a[i];

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

 {

  if(a[i]

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

         else

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

 }

 sort (b,b+n);

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

 {

  if(b[i]==i)

         sum=sum+1;

         else

         sum=sum;

 }

 if(sum==n-1)

 cout<<"Jolly"<

 else

 cout<<"Not jolly"<

 return 0;

}

2.计算矩阵边缘元素之和

总时间限制: 1000ms 内存限制: 65536kB

描述

输入一个整数矩阵,计算位于矩阵边缘的元素之和。所谓矩阵边缘的元素,就是第一行和最后一行的元素以及第一列和最后一列的元素。

 

输入

第一行分别为矩阵的行数m和列数n(m < 100,n < 100),两者之间以一个空格分开。

接下来输入的m行数据中,每行包含n个整数,整数之间以一个空格分开。

输出

输出对应矩阵的边缘元素和

样例输入

3 3

3 4 1

3 7 1

2 0 1

样例输出

15

源代码:

#include

int a[100][100];

using namespace std;

int main()

{

 int m,n,s=0;

 cin>>m>>n;

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

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

   cin>>a[i][j];

 for(int p=1;p<=m;p++)

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

  {

   if(p==1||q==1||p==m||q==n)

   s=s+a[p][q];

  }

 cout<

    return 0;

}

3.字符数组

反反复复

查看 提交 统计 提问

总时间限制: 1000ms 内存限制: 65536kB

描述

Mo和Larry发明了一种信息加密方法。他们首先决定好列数,然后将信息(只包含字母)从上往下依次填入各列,并在末尾补充一些随机字母使其成为一个完整的字母矩阵。例如,若信息是“There's no place like home on a snowy night”并且有5列,Mo会写成:

 

t o i o y

h p k n n

e l e a i

r a h s g

e c o n h

s e m o t

n l e w x

注意Mo只会填入字母,且全部是小写形式。在这个例子中,Mo用字母“x”填充了信息使之成为一个完整的矩阵,当然他使用任何字母都是可以的。

 

Mo根据这个矩阵重写信息:首先从左到右写下第一行,然后从右到左写下第二行,再从左到右写下第三行……以此左右交替地从上到下写下各行字母,形成新的字符串。这样,例子中的信息就被加密为:toioynnkpheleaigshareconhtomesnlewx。

 

你的工作是帮助Larry从加密后的信息中还原出原始信息(包括填充的字母)。

 

输入

第一行包含一个整数(范围2到20),表示使用的列数。

第二行是一个长度不超过200的字符串。

输出

一行,即原始信息。

样例输入

5

toioynnkpheleaigshareconhtomesnlewx

样例输出

theresnoplacelikehomeonasnowynightx

源代码:

#include

#include

using namespace std;

int main()

{

    char A[100][100];

    int col, i, j, row, index=0;

    string str;

    cin >> col >> str;

    row = (int)str.size()/col;

    if (str.size()%col != 0) 

 row++;

    for (i=0; i

        if (i%2 == 0){

            for (j=0; j

                A[i][j] = str[index++];

        }

        else{

            for (j=col-1; j>=0; j--)

                A[i][j] = str[index++];

        }

    }

    for (j=0; j

        for (i=0; i

            cout << A[i][j];

    cout << endl;

    return 0;

}

你可能感兴趣的:(C语言总结)