您的位置:首页 > 编程语言 > C语言/C++

C语言回顾(二、顺序程序及大数相加)——iOS开发基础

2015-06-19 18:36 387 查看
说明:

在学习UI高级知识之前,将利用最近十来天的时间回顾一下C语言,主要按照《C程序设计(谭浩强版)》来回顾。

整理一些知识点(不是细节,知识个人觉得较重要或易忘的)以及挑一些课后题目或经典习题编写代码练习。

第3章 最简单的C程序设计——顺序程序设计

1、转义字符:将“\”后面的字符转变成另外的含义

[thead]
[/thead]
转义字符字符值
\’; \”; \?一个单撇号(’);双撇号(“);问号(?)
\\一个反斜线,若输出两个反斜线那么要输入\\\\
\a; \b; \f; \n; \r警告;退格;换页;换行;回车
\t; \v;水平制表符;垂直制表符
\o,\oo,\ooo; \xh;八进制对应ASCII字符;十六进制对应ASCII字符
说明:

水平制表符:将当前位置移到下一个tab位置;

垂直制表符:将当前位置移到下一个垂直制表对齐点

2、 整型在存储单元中的存储方式是:用整数的补码形式存放

最左边一位表示符号0为正,1为负

3、 sizeof:各种变量类型所占字节数

4、强制转换类型:(类型名)(表达式)

(int)x+y; //表示只将x转换为整型,然后与y相加


5、 控制语句:

break:终止switch语句或循环语句

continue:结束本次循环语句

goto:转向语句,在结构化程序中基本不用

空语句:就一个分好(;),可以用来作为流程的转向点(流程从程序其 他地方转到此语句),也可用来作为循环语句中的循环体

6、赋值过程中的类型转换

赋值运算符两侧类型不一致,但都是算术类型时,系统会自动进行转换,规则如下

(1)int i = 3.56;结果i的类型为3,0.56被舍弃

(2)float f = 23;那么23转为实数23.0存储

(3)float赋给double,数值不变,有效位数扩展到15位

(4)double赋给float,双精数转单,取6-7位有效数字。注意双精数的大小不能超出float变量的数值范围。否则出错

(5)i = ‘A’;即i = 65

(6)多字节整型赋给少字节整型或字符变量时,只将其低字节原封不动地送到被赋值的变量(发生截断

总结:整型数据之间的赋值,按照存储单元中的存储形式直接传送。实型数据之间以及整型与实型之间的赋值,是先转换后赋值。

7、初始化:一般变量初始化不是在编译阶段完成的(只有在静态存储和外部变量的初始化是在编译阶段完成)

exp
int a = 3;


相当于
int a;a = 3


8、C语言本身不提供输入输出语句,输入和输出操作是由C标准函数库中得函数来实现的。

9、规范化的额指数形式:把小数部分中小数点前的数字为0,小数点后第1位数不为0的表示形式成为规范化的指数形式。

0.12345*10^1就是1.2345的规范化,程序中表示0.12345e001

9、printf输出函数

(1)%m.nf 指定数据宽度和小数位数

(2)%-m.nf输出的数据向左对齐,右端不空格

(3)%e,指数形式输出,VC++中自动给数字部分小数位6位,指数部分占5列,如e+002,e占1列,指数符号占1列,指数占3列

printf("%e",123.456);


输出
1.234560e+02


不同系统不同,以上结果是Xcode6.3结果

(4)%u 无符号十进制输出

(5)%g/%G 选用%f或%e格式中输出宽度较短的一种格式,不输出无意义的0。用G时,若以指数形式输出,指数以大写表示

10、getchar() 没有参数,只接收一个字符

char a,b,c;
    a = getchar();
    b = getchar();
    c = getchar();
    putchar(a);
    putchar(b);
    putchar(c);


输入 abc
输出 abc


若输入a后按Enter,那么会导致换行符赋值给b,b复制给c

输入
a
b
输出
a
b


在用键盘输入信息时,并不是在键盘上敲一个字符,该字符就立即送到计算机的,而是先暂存在键盘的缓冲器中,只有按了Enter以后才一起送到计算机中,然后按照先后顺序赋给变量。

11、putchar函数是输出字符的函数,不能输出整数;

例如putchar(66)->结果是B

12、练习:

大数相加

求 123456789123456789123456+12345678901234567890

利用数组

#include <stdio.h>
#include <string.h>
#define N 200

int main()
{
    char s1
,s2
;
    int a
={0},b
={0},i = 0;
    unsigned long l1 = 0,l2 = 0,k,c;
    puts("请输入两个较大的数字(Note:输完一个按一次回车):");
    gets(s1);                     //输入字符串
    gets(s2);
    l1=strlen(s1);
    l2=strlen(s2);
    if(l1<l2) {
        k=l2;
    }
    else {
        k=l1;
    }
    c=k;
    for(i=0;i<l1;k--,i++)
    {
        a[k]=s1[l1-1-i]-'0';
    }
    for(k=c,i=0;i<l2;k--,i++)
    {
        b[k]=s2[l2-1-i]-'0';
    }
    printf("\n");
    for(i=(int)c;i>=0;i--)
    {
        a[i]+=b[i];
        if(a[i]>=10)
        {
            a[i]-=10;
            a[i-1]++;
        }
    }   //相加
    printf("此两数相加之和为:");
    if(a[0]!=0) 
    {
        for(i=0;i<=c;i++)
            printf("%d",a[i]);
    }
    else 
    {
        for(i=1;i<=c;i++) 
            printf("%d",a[i]);
    } 
    printf("\n");
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: