首页 > 编程语言 > 详细

《C语言程序设计》 - 何钦铭

时间:2021-04-01 18:18:29      阅读:23      评论:0      收藏:0      [点我收藏+]

C语言程序设计 - 何钦铭

C语言程序设计 是一门实践性很强的课程,只能练会,学习者必须通过大量的编程训练,在实践中培养程序设计的基本能力,并逐步理解和掌握程序设计的思想和方法。C语言程序设计课程的教学重点应该是培养学生的实践编程能力

所有的C程序都有且只有一个main( )函数,main()函数是程序的主函数,C程序从main()函数处开始运行,当main()函数结束时,程序也就结束了

三种基本的控制结构:顺序、分支、循环

第一章 引言

1.1 一个C语言程序

所有的C程序都有且只有一个main()函数

1.2 程序与程序设计语言

标识符由字母、数字、下划线组成,其中第一个字符必须是字母或下划线

源程序:用程序设计语言编写的未经编译的程序

函数max求两个整数(作为参数)的较大值(作为返回值):

int max(int a, int b)	//函数头:函数类型 函数名(函数参数列表)
{
    int x;
    if (a>b)	x = a;
    else	x = b;
    return x;			//结束函数调用并返回x
}

1.3 C语言的发展历史与特点

C语言的特点:

1.结构化语言

2.易于移植

3.简洁紧凑,使用方便灵活

4.强大的处理能力

5.生成的目标代码质量高,运行效率高

1.4 实现问题求解的过程

调试最主要的方法是:设置断点并观察变量,单步跟踪

求1~100间所有偶数的和

#include <stdio.h>
int main()
{
  int sum = 0;
  int i;

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

  printf("%d\n",sum);
  return 0;
}

OR:

#include <stdio.h>
int main()
{
    int i,sum = 0;
    
    for (i = 1; i<=100; i++)
        if(i%2 == 0)	sum += i;
    printf("%d",sum);
    
    return 0;
}

习题

判断题:

技术分享图片

第二章 用C语言编写程序

2.3 计算分段函数

%f指定输出时保留6位小数,%,2f则指定输出时保留2位小数

格式控制字符串中:

  • int型数据使用%d
  • float型数据使用%f
  • double型数据使用%lf

调用数学函数,需加入#include<math.h>

技术分享图片
r(fahr = lower; fahr <=upper; fahr++)
    celsius = (5.0/9.0) * (fahr-32);	//语句1
	printf("%d %lf\n", fahr, celsius);	//语句2

循环体语句只包括语句1,而语句2被当作for的下一条语句,不参加循环,循环体语句只能是一条语句

实型数据的输出格式控制说明 %m.nf,指定了输出浮点型数据时保留n位小数,且输出宽度是m(包括符号位和小数点)。若数据的实际位数小于m,左端补空格;若大于m,按实际位数输出

从键盘输入一个正整数n,计算n!

//分析:n! = n*(n-1)*(n-2)*...*2*1

#include <stdio.h>
int main()
{
    int n;
    int i;
    int sum = 1;
    
    scanf("%d",&n);
    for (i=1;i<=n;i++)
    {
        sum = sum * i; 
    }
    printf("n! = %d",sum);
    return 0;
}

2.5 生成乘方表与阶乘表

/* 输入一个正整数n,生成一张2的乘方表,输入2的0次到2的n次的值,可以调用幂函数计算2的乘方	*/
#include<math.h>	//程序中调用了数学函数,需包含头文件math.h

power = pow(2,i);	//调用幂函数pow(2,i)计算2的i次方

//输入一个正整数n,生成一张阶乘表,输出0!到n!的值,要求定义和调用函数fact(n)计算n!,函数类型是double

//定义求n!的函数
double fact(int n)			//函数首部
{
    int i;
    double product;			//变量product用于存放结果(阶乘的值)


	//计算n!
	product = 1;
    for(i=1;i<=n;i++) 
    {
        product = product * i;
    }
	
	return product;				//将结果回送主函数
}

习题

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片 技术分享图片 技术分享图片 技术分享图片 技术分享图片
R7-1 日期格式化 (5 分)
世界上不同国家有不同的写日期的习惯。比如美国人习惯写成“月-日-年”,而中国人习惯写成“年-月-日”。下面请你写个程序,自动把读入的美国格式的日期改写成中国习惯的日期。

输入格式:
输入在一行中按照“mm-dd-yyyy”的格式给出月、日、年。题目保证给出的日期是1900年元旦至今合法的日期。

输出格式:
在一行中按照“yyyy-mm-dd”的格式给出年、月、日。

输入样例:
03-15-2017
输出样例:
2017-03-15
    
代码:
#include<stdio.h>
int main()
{
    int year,month,day;
   
    scanf("%d-%d-%d",&month,&day,&year);
    printf("%04d-%02d-%02d\n",year,month,day);
    
    return 0;
}
技术分享图片 技术分享图片 技术分享图片 技术分享图片 技术分享图片 技术分享图片
/*练习2-12 输出华氏-摄氏温度转换表 (15 分)
输入2个正整数lower和upper(lower≤upper≤100),请输出一张取值范围为[lower,upper]、且每次增加2华氏度的华氏-摄氏温度转换表。

温度转换的计算公式:C=5×(F?32)/9,其中:C表示摄氏温度,F表示华氏温度。

输入格式:
在一行中输入2个整数,分别表示lower和upper的值,中间用空格分开。

输出格式:
第一行输出:"fahr celsius"

接着每行输出一个华氏温度fahr(整型)与一个摄氏温度celsius(占据6个字符宽度,靠右对齐,保留1位小数)。

若输入的范围不合法,则输出"Invalid."。*/

#include <stdio.h>

int main() {
    int lower, upper;
    double F;
    double C;
    scanf("%d %d", &lower, &upper);
    if (lower <= upper && upper <= 100 && lower > 0) {
        printf("fahr celsius\n");
        for (lower; lower <= upper; lower = lower+2) {
            F = lower;
            C = 5.0*(F-32)/9;
            printf("%d%6.1f\n", (int)F, C);
        }
    } else {
        printf("Invalid.");
    }

    return 0;
}
/*
练习2-13 求N分之一序列前N项和 (15 分)
本题要求编写程序,计算序列 1 + 1/2 + 1/3 + ... 的前N项之和。

输入格式:
输入在一行中给出一个正整数N。

输出格式:
在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后6位。题目保证计算结果不超过双精度范围。

输入样例:
6
输出样例:
sum = 2.450000
*/

#include <stdio.h>
int main()
{
    int N,i;
    double S;
    
    scanf("%d",&N);
    for(i=1;i<=N;i++)
    {
        S = S + 1.0/i;
    }
    printf("sum = %lf",S);
    
    return 0;
}

第三章 分支结构

3.1 简单的猜数游戏

/*输入你所猜的整数,

%c 表示要读入一个字符,而空格本身也是一个字符,因此空格会被作为输入字符

字符输入函数 getchar(),调用这个函数可以从键盘输入一个字符

ch = getchar();			//功能是从键盘输入一个字符,并赋值给变量ch

第四章 循环结构

else和 if 的匹配准则:else与最靠近它的、没有与别的 else 匹配过的匹配

分情况使用for语句和while语句:

  • for语句:适用于题目中制定了循环次数的

  • while语句:其他情况

do-while语句:先执行循环体,后判断循环条件(适合于先循环、后判断循环条件的情况)

do {

? 循环体语句

} while (表达式);

break语句

break语句的作用是强制循环结束,一旦执行了break语句,循环提前结束,break语句应该和if语句配合使用,即条件满足时,才执行break跳出循环

continue语句

continue语句的作用是跳过循环体中continue后面的语句,继续下一次循环

break语句和continue语句的区别在于,break结束循环,而continue知识跳过语句继续循环。break除了可以中止循环外,还用于switch语句,而continue只能用于循环

对嵌套循环初始化时,一定要分清内外层循环

4.5 循环结构程序设计

if(循环次数已知)
    使用 for 语句
else			//循环次数未知
    if(循环条件在进入循环时明确)
        使用 while 语句
    else		//循环条件需要在循环体中明确
        使用 do-while 语句

第五章 函数

函数定义的一般形式为:

函数类型	函数名	(形式参数表)		//函数首部,由函数类型、函数名、形式参数表组成
    //函数类型一般指函数结果返回的类型,一般与return语句中表达式的类型一致
    //形参表中给出函数计算所要用到的相关已知条件,以类似变量定义的形式给出,格式为:	类型1	形参1,类型2	形参2,...
    //形参表中各个形参之间用逗号分隔,每个形参前面的类型必须分别写明。函数的形参的数量可以是一个,也可以是多个,或者没有形参
    //函数不能嵌套定义
{
    函数实现过程
}

函数首部后面不能加分号,它和函数体一起构成完整的函数定义

函数体:函数体体现函数的实现过程,由一对大括号内的若干条语句组成,用以计算,或完成特定的工作,并用return语句返回运算的结果(return语句只能返回一个值),return类型和函数类型一致

return是普通变量,不是形参,它只是函数实现过程中要用到的工作单元,只有必须从主调函数中得到的已知条件,才定义为形参,其他需要的工作单元都定义成普通变量

5.1.3 函数的调用

充分理解函数调用与返回的实现过程,对学好函数程序设计是至关重要的

1.函数的调用过程

? 任何C程序执行,首先从主函数main()开始,如果遇到某个函数调用,主函数被暂停执行,转而执行相应的函数,该函数执行完后将返回主函数,然后再从原先暂停的位置继续执行

2.函数调用的形式

->函数名(实际参数表)

实际参数(简称实参)可以是变量、常量、表达式

对于实现计算功能的函数,函数调用通常出现在两种情况下:

  • 赋值语句

    volume = cylinder(radius, height);
    
  • 输出函数的实参

    printf("%f",cylinder(radius, height));
    

3.参数传递

函数定义时,位于其首部的参数被称为形参,

//计算圆柱体积
#include <stdio.h>
int main(void)
{
    double height, radius, volume;
    double cylinder(double r, double h);
    printf(" Enter radius and height:");
    scanf("%lf %lf", &radius, &height);
    
    volume=cylinder (radius, height);
    printf("Volume=%.3f\n",volume);
    return 0;
}

double cylinder (double r,double h)
{
    double result;
    
    result=3.1415926*r*r*h;		//计算圆柱体积
    return result;				//返回结果
}
    

《C语言程序设计》 - 何钦铭

原文:https://www.cnblogs.com/ztw1002/p/14606819.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!