信息科技人 发表于 2024-7-3 20:43:02

电子科技大学+电子信息工程

# 第一章进入C语言程序世界

## 1.1 了解C语言的程序结构

一个完整的程序是由一个main()函数(有且仅有一个)和其他函数构成的。

### 1.1.1 C语言的程序结构分析

下面从简单的C语言程序实列入手,分析C语言程序的结构和特点。先看下面C程序的例题。

【例1.1】仅由main()函数构成的C语言程序。

程序代码如下:

```c
#include<stdio.h>

int main(void)/*主函数*/
{
        int a,b;/*声明部分,定义两个整型变量*/
        a=1;          /*给变量a赋初值1*/       
        b=a+1;    /*将a+1的值赋值给b*/
        printf("b=%d ",b); /*输出b的值*/
        return 0;
}
程序的运行结果为:
2
```

    说明:这个是一个完整的C程序,包含一个main()函数(也叫主函数),程序中用到的两个存放整型的变量a、b,必须先定义:int a,b;。int 表示定义为十进制整型变量。程序中的每一行结束时用分号“:”分隔,调用printf()函数可以完成数据的输出。/*...*/表示注释,只是对程序起到说明作用,程序执行时注释语句不执行,花括号{}表示main()函数的开始和结束。
    #include<stdio.h>时预编译处理命令。C语言规定,调用系统提供的标准库函数(如标准输出函数printf())时,必须在程序开头使用这种命令,将库函数的函数原型所在的头文件包含进来。#include\<stdio.h>表示将标准输入/输出的库函数包含进来,由于printf()时标准的输出库函数,所以改程序编写时要求加入#include<stdio.h>。

说明:这个是一个完整的C程序,包含一个main()函数(也叫主函数),程序中用到的两个存放整型的变量a、b,必须先定义:int a,b;。int 表示定义为十进制整型变量。程序中的每一行结束时用分号“:”分隔,调用printf()函数可以完成数据的输出。/\*...\*/表示注释,只是对程序起到说明作用,程序执行时注释语句不执行,花括号{}表示main()函数的开始和结束。#include\<stdio.h>时预编译处理命令。C语言规定,调用系统提供的标准库函数(如标准输出函数printf())时,必须在程序开头使用这种命令,将库函数的函数原型所在的头文件包含进来。#include\\\<stdio.h>表示将标准输入/输出的库函数包含进来,由于printf()时标准的输出库函数,所以改程序编写时要求加入#include\<stdio.h>。

【例1.2】仅由main()函数和其他函数构成的C语言程序。

```c
void myoutput(void)   // 自定义函数,名称是myoutput
{
    printf("\n*** hello! Howdo you do ?***\n");//输出字符串
}


int main(void)// 主函数
{
    myoutput();//调用自定义函数myoutput()
    printf("main run is ok\n");
    return 0;
}
```

## 1.2 简单的C语言程序

【例1.3】设计一个简单的C语言程序。 已知 a=3,b=5,求sum=2\*a+b;

```c
#include<stdio.h>
int main(void)
{
    int a,b,sum;
    a=3,b=5;
    sum = 2*a + b;
    printf("sum=%d \n",sum);

    printf(" main run is ok \n");
    return 0;
}
运行结果:sum=11
```

【例1.3】设计一个简单的C语言程序。 已知 a=3,b=5,求sum=2\*a+b;

***

# 第二章 编制C程序的基础知识

## 2.1常量与变量

常量:是一种在程序运行过程中其类型和值保持固定不变的量。如 123,0,5.60等。

变量:是一种在程序执行中可以改变、可以赋值的量。

变量的三要素:类型、名称、值。如 `int a,b,c;`

## 2.2 C语言的基本数据类型

数据类型:1.基本类型、2.指针类型、3.构造类型、4.空类型

1.基本类型:1.1整型、1.2字符型、1.3实型(单精度、双精度)、1.4枚举类型

2.指针类型

3.构造类型:数组类型、结构体类型、共同体类型

4.空类型

***

### 2.2.1 整型数据

2.2.2.1 整型常量(二进制、十进制、八进制、十六进制)

2.2.2.2 整型变量

***

【例2.2】整型变量的定义与使用。

```c
#include<stdio.h>

int main(void)
{
    int a,b;
    unsigned int t;
    a=1;
    b=-2;
    t=5;
    a=a+b;
    b=b+t;

    printf("a=%d ,b=%d \n",a,b);
    return 0;
}
运行结果:a=-1 ,b=3
```

【例2.3】整型数据的运算。

```c
#include<stdio.h>

int main(void)
{
    int a,b;
    a=23767;
    b=a+1;

    printf("a=%d ,b=%d \n",a,b);
    return 0;
}
运行结果:a=23767 ,b=23768
```

### 2.2.2 实型数据

【例2.4】实型数据的不同表示。

```c
#include<stdio.h>

int main(void)
{
    float a=12.3;
    printf("a=%f \n",a);
    printf("a=%e \n",a);

    return 0;
}
运行结果:
                a=12.300000
                a=1.230000e+001
note:对于每一个变量都应在使用前加以定义。
```

【例2.5】实型变量的定义与使用。

```c
#include<stdio.h>
int main(void)
{
    float x=2,y=3,t;
    t=x;
    x=y;
    y=t;

    printf("x=%f y=%f \n",x,y);
    return 0;
}

运行结果:x=3.000000 y=2.000000
```

【例2.6】实型数据的舍入误差。

```c
#include<stdio.h>

int main(void)
{
    float a,b;
    a=123456.789e5;
    b=a+20;

    printf("b=%f \n",b);
    return 0;
}
运行结果:b=12345678848.000000
```

### 2.2.2 字符型数据

【例2.7】转义字符的使用。

```c
#include<stdio.h>
int main(void)
{
    printf("ab\tcde\n");
    printf("f\101\n");

    return 0;
}
运行结果:
ab      cde
fA
```

【例2.8】字符型变量与整型数的运算。

```c
#include<stdio.h>
int main(void)
{
    char a,b;
    a='a';
    b='b';

    printf("a=%d,b=%d \n",a,b);
    printf("a+1=%c,b+1=%c \n",a+1,b+1);
    return 0;
}
运行结果:
a=97,b=98
a+1=b,b+1=c
```

【例2.9】将小写字母转换成大写字母。

```c
#include<stdio.h>
int main(void)
{
    char c1,c2;
    c1='a';
    c2='b';
    c1=c1-32;
    c2=c2-32;
    printf("c1=%c c2=%c\n",c1,c2);
    return 0;
}
运行结果:
c1=A c2=B
```

## 2.3 C语言的常用运算符和表达式

### 2.3.1算术运算符及其表达式

【例2.10】算术运算符的使用。

```c
#include<stdio.h>
int main(void)
{
    int x,y;

    x=-3+4*5-6;
    y=-3*4%-5/5;/* 相当于-12%-5结果为-2,再计算-2/5,结果为0 */

    printf("x=%d y=%d ",x,y);
    return 0;
}
运行结果:
x=11 y=0
```

### 2.3.2 赋值运算符及其表达式

【例2.11】复合的赋值运算符的应用。

```c
#include<stdio.h>
int main(void)
{
    int x,y;

    x=-3+4*5-6;
    y=-3*4%-5/5;/* 相当于-12%-5结果为-2,再计算-2/5,结果为0 */

    printf("x=%d y=%d ",x,y);
    return 0;
}
运行结果:
x=11 y=0
```

### 2.3.3自增和自减预算符和强制类型运算发

【例2.12】强制类型转换符的使用。

```c
int main(void)
{
    int a,x,y,b,z,k;
    a=5;
    x=a++;
    y=a;
    printf("x=%d,y=%d\n",x,y);

    b=5;
    z=++b;
    k=b;
    printf("z=%d,k=%d",z,k);

    return 0;
}
运算结果:
x=5,y=6
z=6,k=6
```

【例2.13】强制类型转换符的使用。

```c
#include<stdio.h>
int main(void)
{
    float x;
    int y;
    x=3.6;
    y=(int)x;
    printf("x=%f,y=%d\n",x,y);
    return 0;
}
运行结果:
x=3.600000,y=3
```

【例2.13】综合应用实例。

```c
#include<stdio.h>
int main(void)
{
    int a,b,c;
    float x,y,z;
    a=b=1;
    b+=2;// 相当于b=b+2
    x=a++; // 先引用a的值赋值给x, a再自增为2
    y=--b; // b先自减1,再赋值给y
    z=-(--b);
    c=(int)z; // 强制类型转换
    printf("x=%f,y=%f,z=%f \n",x,y,z);
    printf("a=%d,b=%d,c=%d \n",a,b,c);
    return 0;
}
运行结果:
x=1.000000,y=2.000000,z=-1.000000
a=2,b=1,c=-1
```

【例2.14】赋值运算和逗号运算的使用。

```c
#include<stdio.h>
int main(void)
{
    int a,b,c;
    float x;
    b=1;
    a=b+(c=2);
    x=(a++,b+a,c);
    printf("x=%f,a=%d,b=%d,c=%d \n",x,a,b,c);
    return 0;
}
运行结果:
x=2.000000,a=4,b=1,c=2
```

【例2.15】定义一个符号常量PI表示Π,        求圆的面积。

```c
#include<stdio.h>
int main(void)
{
    int r;
    float s;
    r=1;
    s=PI*r*r;
    printf("s=%f ",s);
    return 0;
}
运行结果:
s=3.141590
```

【例2.16】整型、实型、字符型数据变量的定义与使用。

```c
#include<stdio.h>
int main(void)
{
    int a,b;
    long int n;
    float x,y;
    char c1;
    a=1;
    b=-2;
    x=1.2;
    y=2.1;
    n=128765;
    c1='a';
    printf("\n");
    printf("a=%d b=%d \n",a,b);
    printf("x+y=%f ",x+y);
    printf("n=%ld\n",n); //“%ld”表示输出的数据为long int型数据
    printf("c1=%c c1=%d",c1,c1);
    return 0;
}
运行结果:
a=1 b=-2
x+y=3.300000 n=128765
c1=a c1=97
```

# 第三章 编制C程序的基础知识

## 3.1 结构化程序设计的三种基本结构

### 1.顺序结构

程序语句是按顺序书写的,语句的执行也是顺序执行的。

### 2.选择结构

当程序执行到某一语句时,要进行条件判断从两条或两条以上执行路径中选择一条,因此又称为分支结构。

### 3.循环结构

当满足某种条件循环条件时,将一条或多条语句重复的执行若干次,直到不满足循环条件为止。循环结构有两种:1.当型循环结构,2.直到型循环结构。

【例3.1】分析一下程序的结构并体会程序的执行过程。

```c
#include<stdio.h>
int main(void)
{
    int a,b,c;
    float x,y;
    a=b=c=2;
    x=3.0;
    y=a*x+b*x*x+c;
    printf("y=%f\n",y);
    return 0;
}
运行结果:
y=26.000000
```

## 3.2 数据的输入与输出

### 3.2.1 格式输出函数printf()

【例3.2】   已知圆的半径r=1.5,求圆的周长 length = 2Πr。

```c
#include<stdio.h>
int main(void)
{
    float r,length,pi=3.14159;
    r=1.5;
    length = 2*pi*r;
    printf("r=%7.2f,length=%7.2f\n",r,length);
    return 0;
}
运行结果:
r=   1.50,length=   9.42
```

【例3.3】printf()函数典型格式输出应用 。

```c
#include<stdio.h>
int main(void)
{
    int a=100;
    float b=123.4567;
    printf("a=%d,a=%5d,a=%-5d,a=%2d \n",a,a,a,a);
    printf("b=%f,%10f\n",b,b);
    printf("b=%10.2f,%-10.2f,%.2f\n",b,b,b);
    printf("a+b=%f\n",a+b);

    return 0;
}
运行结果:
a=100,a=100,a=100,a=100
b=123.456703,123.456703
b=    123.46,123.46    ,123.46
a+b=223.456696
```

### 3.2.2 格式化输入函数scanf()

【例3.4】多种类型数据的输入。

```c
#include<stdio.h>
int main(void)
{
    int a;
    float b;
    char c;
    printf("input a b c :");
    scanf("%d %f %c",&c,&b,&c);
    printf("a=%d,b=%.3f,c=%c ",a,b,c);
    return 0;
}
输入:1234 1234.5678 c
运行结果:a=0,b=1234.568,c=c
```

【例3.5】按照指定的域宽截断输入数据。

```c
#include<stdio.h>
int main(void)
{
    int a;
    float b,c;
    scanf("%2d%3f%4f",&a,&b,&c);
    printf("a=%d,b=%f,c=%f\n",a,b,c);
    return 0;
}
输入: 12345678987654321
运行结果:a=12,b=345.000000,c=6789.000000
```

【例3.6】空格作为默认的数据输入分隔符 。

```c
#include<stdio.h>
int main(void)
{
    int a;
    float b,c;
    scanf("%d%f%f",&a,&b,&c);
    printf("a=%d,b=%f,c=%f\n",a,b,c);
    return 0;
}
输入:12 345 6789
运行结果:
a=12,b=345.000000,c=6789.000000
```

### 3.2.3 单个字符输入/输出函数( getchar()/putchar() )

【例3.7】键盘输入一个大写字母,要求以小写字母输出 。

```c
#include<stdio.h>
int main(void)
{
    char c1,c2;
    c1=getchar();
    putchar(c1);
    putchar('\n');
    printf("c1=%c,c1=%d\n",c1,c1);

    c2=c1+32;
    printf("c2=%c,c2=%d\n",c2,c2);
        return 0;
}
输入:A
运行结果:
A
c1=A,c1=65
c2=a,c2=97
```

## 3.3 顺序结构程序设计举例

【例3.8】 实现华氏温度与摄氏温度转换。输入一个华氏温度,要求输出摄氏温度。华氏温度转化成摄氏温度的公式为C=5/9(F-32),取两位小数。

```c
#include<stdio.h>
int main(void)
{
    float F,c;
    scanf("%f",&F);
    printf("F=%f\n",F);
    c=5.0/9*(F-32);
    printf("c=%.2f\n",c);
    return 0;
}
输入:12
运行结果:
F=12.000000
c=-11.11
```

【例3.9】 编写一个简单的译码程序。译码规律是:用原来的字母后的第n个字母替代原来的字母(假定其后面的第n个字母在字母z之前)。

```c
#include<stdio.h>
int main(void)
{
    char c1,c2,c3,c4,c5,c6,c7;//定义字符变量
    int n;
    printf("n=");
    scanf("%d",&n);
    c1='c';
    c2='h';
    c3='i';
    c4='n';
    c5='e';
    c6='s';
    c7='e';
    printf("源码是:%c%c%c%c%c%c%c\n",c1,c2,c3,c4,c5,c6,c6,c7);//输出源码
    c1+=n;
    c2+=n;
    c3+=n;
    c4+=n;
    c5+=n;
    c6+=n;
    c7+=n;
    printf("译码是:%c%c%c%c%c%c%c\n",c1,c2,c3,c4,c5,c6,c7);
        return 0;
}
输入:6
运行结果:
input:chiness
output:inotkyk
```

【技能训练一】 编写程序,计算小明考试的总分和平均分(已知物理、数学、化学、英语成绩)。

```c
#include<stdio.h>
int main(void)
{

        return 0;
}
运行结果:

```

【技能训练二】 printf()函数的使用。若a=1,b=2,x=1.2,y=2.1,n=128765,c1='a',

想得出以下的输出格式和结果,请写出程序(包括定义变量类型和输出)。

a= 1b= 2

x=1.200000,y=2.100000

y-x= 0.90,x+y= 3.30

n=    128765

c1='a'   or97

```c
#include<stdio.h>
int main(void)
{
    int a,b;
    long int n;
    float x,y;
    char c1;
    a=1;
    b=2;
    x=1.2;
    y=2.1;
    n=128765;
    c1='a';

    printf("\n");
    printf("a=%2d b=%2d \n",a,b);
    printf("x=%8.6f,y=%8.6f\n",x,y);
    printf("y-x=%5.2f,x+y=%5.2f\n",y-x,x+y);
    printf("n=%9ld\n",n);
    printf("c1='%c' or %d\n",c1,c1);
        return 0;
}
运行结果:
a= 1 b= 2
x=1.200000,y=2.100000
y-x= 0.90,x+y= 3.30
n=   128765
c1='a' or 9s
```

*   习题

```c
问题1:阅读以下程序代码,当输入数据的形式为:25,13,10,正确的输出结果是多少?
#include<strdio.h>
int main(void)
{

    int x,y,z;
    scanf("%d,%d,%d",&x,&y,&z);
    printf("x+y+z=%d\n",x+y+z);
    return 0;
}

输入:25,13,10
输出:x+y+z=48
```

```c
问题2:以下程序执行的结果是多少?
#include<strdio.h>
int main(void)
{
    int n=2,m=2;
    printf("%d,%d\n",++m,n--);
    return 0;
}
输出:3,2
```

```c
问题3:以下程序执行的结果是多少?
#include<strdio.h>
int main(void)
{
    int a=2,b=5;
    printf("a=%%d,b=%%d\n",a,b);// scanf()中的“%%”表示输出%本身。
    return 0;
}
输出:a=%d,b=%d
```

```c
问题4:执行下列程序时输入:2468101,程序执行的结果是多少?
#include<strdio.h>
int main(void)
{
        int x,y;
    scanf("%2d%*2d%2d",&x,&y);//"%*d"表示虚度一个十进制整数,将其放弃而不存储
    printf("x=%d y=%d\n",x,y);
    printf("x+y=%1d\n",x+y);
    return 0;
}
输出:
        x=24 y=10
        x+y=34
```

```c
问题5:执行下列程序时输入:aceg,程序执行的结果是多少?
#include<strdio.h>
int main(void)
{
    char x,y;
    x=getchar();
    y=getchar();
    putchar(x);
    putchar('\n');
    putchar(y);
    return 0;
}
输入:aceg
输出:
        a
        c
```
页: [1]
查看完整版本: 电子科技大学+电子信息工程