C语言第6章1
C语言全国计算机二级等级考试教程第六章字符(章节带习题)(ppt文档)
12 3<CR> 1 2 3<CR> 1 2 3<CR>
⊙ 如下的语句为数值数据和字符数据进行混合输入:
int a1,a2; char c1,c2; scanf(“%d%c%d%c”,&a1,&c1,&a2, &c2); 正确的读入形式: 10A 20B<CR> A和20之间必须有间隔符,间隔符的个数不限 此时变量a1接受的是10,c1接受的是‘A’, a2接受的是20,c2接受的是‘B’,
输出:putchar() 输入:getchar()
例如: char ch=‘A’; putchar(ch);
A
putchar(‘Y’); Y
例如: char ch; ch=getchar();
给字符变量接受字符
6.4 程序举例
例6.1 以下程序输出26个大写字母和它们的ASCII代码,每行输出两组数据。
第6章 字符型数据
6.1 字符型常量 6.2 字符变量 6.3 字符的输入和输出 6.4 程序举例
6.1 字符型常量
6.1.1 字符常量
字符常量:是用单引号括起来的一个字符。
例如
‘A’ ‘C’ ‘t’ ‘!’ ‘?’
说明
‘B’ ‘b’
是不同的字符常量
‘ ’ 单引号内是空格,也是合法的字符常量
例如
‘\n’ 回车换行符
‘\t’ 横向跳格符
‘\v’ 竖向跳格符
‘\r’ 回车符
‘\f’ 换页符
‘\b’ 退格符
‘\0’ 空值
‘\\’ 表示反斜杠
‘\‘’ 表示单引号
‘\“’ 表示双引号
‘\ddd’ 三位八进制数所代表的字符
C语言第6章习题解答
第6章函数和模块设计【习题6-1】更正下面函数中的错误。
(1)返回求x和y平方和的函数。
(2)返回求x和y为直角边的斜边的函数。
sum_of_sq(x,y) hypot(double x,double y){ {double x,y; h=sqrt(x*x+y*y);return(x*x+y*y); return(h);} }程序如下:/*c6_1(1).c*/ /*c6_1(2).c*/(1) (2)double sum_of_sq(double x,double y) double hypot(double x,double y) { {return(x*x+y*y); double h;} h=sqrt(x*x+y*y);return(h);}【习题6-2】说明下面函数的功能。
(1)itoa(int n,char s[ ])(2)int htod(char hex [ ]){ { int i,dec=0;static int i=0,j=0; for(i=0;hex[i]!='\0';i++)int c; { if(hex[i]>='0'&&hex[i]<='9') if(n!=0) dec=dec*16+hex[i]-'0';{ if(hex[i]>='A'&&hex[i]<='F') j++; dec=dec*16+hex[i]-'A'+10;c=n%10+'0'; if(hex[i]>='a'&&hex[i]<='f') itoa(n/10,s); dec=dec*16+hex[i]-'a'+10;s[i++]=c; }} return(dec);else }{ (3)void stod(int n)if(j==0) s[j++]='0'; { int i;s[j]='\0'; if(n<0){ putchar('-');n=-n;} i=j=0; if((i=n/10)!=0) stod(i);} putchar(n%10+'0');} }功能:(1)(略)(2)(略)【习题6-3】编写已知三角形三边求面积的函数,对于给定的3个量(正值),按两边之和大于第三边的规定,判别其能否构成三角形,若能构成三角形,输出对应的三角形面积。
大学C语言程序设计 第六章
2.函数表达式: 2.函数表达式: 函数表达式
功能:将函数作为表达式的一部分。 功能:将函数作为表达式的一部分。 如: c=2*max(a,b); 要点:要求函数带回一个确定的值,以参加表达式的运算。 要点:要求函数带回一个确定的值,以参加表达式的运算。
3.一个函数作为另一个函数的参数: 3.一个函数作为另一个函数的参数: 一个函数作为另一个函数的参数
若不需要函数带回任何值,可使用: 若不需要函数带回任何值,可使用:
void printstar(){ …} } void print_message(){…} print_message(){ }
例exp6_5:函数返回值的类型与其定义的 exp6_5:函数返回值的类型与其定义的 类型不符的情况。 类型不符的情况。
一函数的定义重点二函数的调用重点1函数的一般调用2函数的嵌套调用3函数的递归调用三数组作为函数的参数难点四局部变量与全局变量难点五变量的存储类别难点六内部函数与外部函数1概述2函数定义的方法重点3函数的参数难点4函数的返回值难点1c程序的基本结构回顾2什么是函数
第六章
[教学要求] 教学要求]
函
数
1.理解函数的功能。 理解函数的功能。 2.掌握函数定义的一般形式(重点)。 掌握函数定义的一般形式(重点)。 掌握函数的形参与实参的对应关系、 3.掌握函数的形参与实参的对应关系、参数传递方法及函数返回值 的概念(难点) 的概念(难点) 。 掌握函数调用的基本方法(重点) 4.掌握函数调用的基本方法(重点) 。 掌握函数嵌套调用的一般过程(重点) 5.掌握函数嵌套调用的一般过程(重点) 。 了解函数递归调用的几种形式。 6.了解函数递归调用的几种形式。 掌握数组名作为函数的参数的一些特点(难点) 7.掌握数组名作为函数的参数的一些特点(难点) 。 8.掌握局部变量与全局变量的概念及它们的使用特点(难点) 。 掌握局部变量与全局变量的概念及它们的使用特点(难点) 掌握动态存储变量与静态存储变量的含义,会正确识别和使用。 9.掌握动态存储变量与静态存储变量的含义,会正确识别和使用。 10.了解内部函数与外部函数的含义。 10.了解内部函数与外部函数的含义。
第6章C语言程序设计
6.2函数
C语言中又规定在以下几种情况时可以省去主调函数中对 被调函数的函数说明。
本章目录
6.1函数分类 6.2函数
6.3 函数调用
6.4函数和数组 6.5变量的作用域 6.6变量的存储类别 6.7内部函数和外部函数
6.1函数分类 C语言中可从不同的角度对函数分类。
1. 从函数定义的角度,函数分为库函数和用户定义函数。
(1)库函数 由C系统提供,用户无须定义, 不必在程序中作类型说 明,需在程序前包含有该函数原型的头文件即可在程序中直接 调 用。如printf()、scanf()、getchar()、putchar ()等函数 均属库函数。 (2)用户定义函数 由用户按需要写的函数。用户自定义的函数在主调函数中对其 进行类型说明。
6.2函数
例6.2比较两个小朋友的个子,输出个子较高的。 float max(float a,float b) { if(a>b)return a; else return b; } void main() { float x,y,z; printf("input two numbers:\n"); scanf("%f,%f",&x,&y); z=max(x,y); printf("max=%f\n",z);
改例6.2如下:
6.2函数
main() { float max(float a,float b); float x,y,z; printf("input two numbers:\n"); scanf("%f,%f",&x,&y); z=max(x,y); printf("max=%f\n",z); } float max(float a,float b) { if(a>b)return a; else return b; }
C语言等级考试 第六章重点汇总
度可由编译器根据初始值表中的初值个数来确定。
如:int a[]={1,3,5,7,9}; 由于初始值表中包含5个数据,所以a数组的长度隐含地
确定为5。需要注意的是:如果没有初始值表或初始值表
中初值个数少于数组实际长度时,则在定义数组时,其长 度是不能省略的。同时,在不指定数组长度的情况下进行
数组定义时,在初始值表中必须要列出所有元素的初值。
[案例6.7]从键盘为一个5*5整型数组赋值,找出其中的 最小值不能感显示出来。 程序如下: main() {int x[5][5], i, j, min; for(i=0;i<5;i++) for(j=0;j<5;j++) scanf(“%d”,&x[i][j]); min=x[0][0]; for(i=0;i<5;i++) for(i=0;i<5;i++) if(min> x[i][j]) min=x[i][j]; printf(“The min is:%d\n”,min); }
[案例6.4]从键盘输入20个不同整数,并检查整数10是否包含 在这些数据中,若是的话,它是第几个被输入的? 程序为: main( ) { int i, a[20]; for(i=0;i<20;i++) scanf(“%d”,&a[i]); for(i=0;i<20;i++) {if(a[i]==10) {printf(“10 is the position %d\n”,i+1); break; } } }
6.1.2一维数组元素的引用
1. 引用数组中的任意一个元素的形式:
数组名[下标表达式]
高树芳C语言程序设计--第六章
[解决方案]设置一个长度为10的类型为整型的数组
存储老题的年龄。
程序代码
5
6.1 一维数组的定义与使用
相关知识: 1.数组的概念 同类型的一组数据。 2.数组的维数 下标的个数 3.一维数组的定义 类型 数组名[常量表达式] 4.一维数组元素的引用 数组名[下标],如:a[1]
6
6.1 一维数组的定义与使用
案例6-10 输出中文大写数字 [案例任务] C语言的字符串知识
[解决方案]使用两维字符数组存储汉字的“壹”
和“拾”等字符串数据。
程序代码
28
6.3字符数组及字符串
相关知识: C语言的字符串知识应用: 数字转换为中国大写汉字数字字符。
29Biblioteka 编写C程序,输入8个整数,将其逆序输出,同 时要输出它们的和。
10
6.2 二维数组的定义与使用
案例6-4 求二维数组中最大数 案例6-5 整数四则运算测试程序
11
6.2 二维数组的定义与使用
案例6-4 求二维数组中最大数
[案例任务]
对于如下3×4的矩阵: 1 2 3 4 6 9 5 4 -10 10 0 -5 编程求出其中的最大值,并输出其所在的行 号和列号。
24
6.3字符数组及字符串
[课堂训练6-4] 统计字符数组中某类字符的个数。设有 一个长度不超过30的字符串s,统计其 中数字字符、大写字母、小写字母、其 它字符的个数。
25
6.3字符数组及字符串
案例6-9字符串处理函数 [案例任务] 从键盘输入两个字符串s1,s2,要求使用 字符串的常用处理函数strlen、strcat、 strcpy、strcmp等。
[解决方案]见流程图。
程序代码
C语言 — 第六章 数组(大学使用教程)
数组常用的循环形式
法一 int i,a[100]; for(i=0;i<100;i++) a[i]=i; 法二 int i,a[100]; for(i=0;i<=99;i++) a[i]=i;
C程序中常用的是第一种方法。 程序中常用的是第一种方法。 此法中,循环变量的终值是“小于”而非“等于” 此法中,循环变量的终值是“小于”而非“等于” 数组长度!否则将导致“越界”的发生。 数组长度!否则将导致“越界”的发生。
数
组
• 数组是一组有序的同类型数据 。 • 数据称为数组的元素。 数据称为数组的元素。
6
数组的用处
保存大量同类型的相关数据 – 如矩阵运算,表格数据等 如矩阵运算,
数组的特点
快速地随机访问 一旦定义, 一旦定义,不能改变大小
7
§6.1 数组的定义与初始化
数组的定义 : 数组在使用前要进行定义: 名称、类型、维数、 数组在使用前要进行定义 名称、类型、维数、大小 定义格式: 定义格式: 类型标识符 数组名[常量表达式1][常量表达式2]…… 数组名[常量表达式1][常量表达式2] 1][常量表达式2]
如有数组 int a[5]; 其中数据为:2、4、23、6、78 其中数据为: 、 、 、 、 则存放情况如下: 则存放情况如下:
12
数组在内存 中的首地址
2000 2002
2的低位字节 的低位字节 2的高位字节 的高位字节 4的低位字节 的低位字节 4的高位字节 的高位字节
a[0] a[1] a[2] a[3] a[4]
即a=2000
2004 2006 2008
int a[5]={ 2,4, 23,6,78 };
c语言网络教室第六章答案
c语言网络教室第六章答案c语言网络教室第六章答案6-1. 求满足条件的等差数列前4项成绩: 10 / 折扣: 0.8有一正整数等差数列,其前四项之和是m ,前四项之积是n ,编程,输入m 和n ,输出此数列的前四项,若不存在这样的等差数列,则输出No output输入:m,n输出:满足条件数列的前四项#include"stdio.h"int main(){int m,n,a,d,p=0;scanf("%d %d",&m,&n);if(m%2==0){for(a=1;a<=m/4;a++)for(d=0;d<=(m-4)/6;d++)if(2*a+3*d==m/2&&a*(a+d)*(a+2*d)*(a+3*d)==n){printf("%d,%d,%d,%d\n",a,a+d,a+2*d,a+3*d); p=1;}}if(p==0) printf("No output\n");}6-2. 求整数平方的回文数成绩: 10 / 折扣: 0.8输入正整数m 和n ,输出[m, n] 闭区间中满足下列条件的正整数及其平方:正整数的平方具有对称性质(也称为回文数), 如:11 的平方是121 。
若该区间不存在这样的正整数,则输出:No output输入:m,n输出:满足条件的正整数及其平方#include"stdio.h"int main(){int m,n,i=0,j,k=1,x,y,a[10],p=0,q=1;scanf("%d %d",&m,&n);for(x=m;x<=n;x++){y=x*x;while(y/k>=1) {a[i]=y/k%10; k*=10; i++;}for(j=0;j<i;j++) if(a[j]!=a[i-j-1]) q=0;if(q==1) {printf("%d,%d\n",x,y); p=1;}i=0; k=1; q=1;}if(p==0) printf("No output\n");}6-3. 打印数字菱形成绩: 10 / 折扣: 0.8输入n 值,输出如下例(n=4 )所示的数字菱形。
C语言程序设计教程 第6章
模块设计的原则
模块独立
规模适当
层次分明
2017/8/21
功能专一
12
独立性原则表现在模块完成独立的功能 , 和其它模块间的关系简单 , 各模块可以单独调 试。修改某一模块 , 不会造成整个程序的混乱。
每个模块有特定功能
每个模块完成一个相对独立的特定子功能。在对任务逐步 分解时,要注意对问题的综合。例如, 一些模块的相似的 子任务,可以把它们综合起来考虑,找出它们的共性,把它 们做成一个完成特定任务的单独模块。
返回值
另外请注意这样的判断,如写成‘ 最好只使用局部变量,这样将方便调试。 如果不需返回则可 调用函数时输入参数的格式要与之相同 return 0; A‟<capital<„Z‟是不行 注意不要与已有库函数重名 的 2017/8/21
24
“函数”的主要知识点
函数的定义 函数的参数和返回值 函数的调用 嵌套和递归 变量的作用域
2017/8/21
18
例6.2 设计算法:找出a,b两数中的较大者,并输出
分析: 这个问题分三个步骤: • 输入两个数; • 找出其中的大数; • 输出大数。
2017/8/21
19
开始
输入a,b
0 a<b 非0 交换a,b 输出a
结束
2017/8/21
图6.3 找出a,b两数中的较大者算法流程图
2017/8/21
34
函数返回值
函数返回值通过return语句获得 函数返回值的类型就是函数的类型 return y; 将变量y的值返回给调用者 return y+3; 将表达式的值返回给调用者
2017/8/21 35
return 的数据类型与函数的类型矛盾时,自动 将数据转换成函数的类型
C语言程序设计 第6章
#include <stdio.h> #include <stdlib.h> main( ) { int a[10]; /*定义数组*/ int k,j; float ave,s; k=0;s=0.0; for(j=0;j<10;j++) /*用数组存放10个随机整数*/ a[j]=rand()%50; printf("数组中的值:"); for(j=0;j<10;j++) /*输出10个随机整数*/ printf("%6d",a[j]); printf("\n"); for(j=0;j<10;j++) { if(a[j]%2==0) /*如果数组元素的值为偶数*/ {s+=a[j];k++;} /*累加及偶数个数计数*/ } if(k!=0) {ave=s/k; printf("偶数的个数:%d\n偶数的平均植:%f\n",k,ave);} }
(2)定义一个二维数组a[N][5],数组每行存放一名 学生的数据,每行前4列存放学生4门单科成绩,第5列 存放学生的总分。 (3)输入N个学生的单科成绩,存入二维数组a中。 (4)通过变量sum累加计算每位学生的总分,然后 赋值给每行的最后一个元素。 (5)输出数组第5列上的值,即为每个学生的总分。
for(i=0;i<N;i++) { sum=0; for(j=0;j<4;j++) /*计算当前学生的总分*/ sum+=a[i][j]; a[i][4]=sum; } for(i=0;i<N;i++) /*输出每个学生的总分*/ printf("第%d个学生的总分为:%d\n",i+1,a[i][4]); }
C语言程序设计-第三版-谭浩强主编第6—8章课后习题答案
C语言程序设计-第三版-谭浩强主编第6—8章课后习题答案第六章循环语句6.1输入两个正数,求最大公约数和最小公倍数.#includevoidmain(){inta,b,num1,num2,temp;printf(\请输入两个正整数:\\n\canf(\if(num1temp=num1;num1=num2;num2=temp;}a=num1,b=num2;while(b!=0){temp=a%b;a=b;b=temp;}printf(\它们的最大公约数为:%d\\n\printf(\它们的最小公倍数为:%d\\n\}编译已通过6.2输入一行字符,分别统计出其中英文字母,空格,数字和其它字符的个数.解:#includevoidmain(){charc;intletter=0,pace=0,degit=0,other=0;printf(\请输入一行字符:\\n\while((c=getchar())!='\\n'){if(c>='a'&&c<='z'||c>'A'&&c<='Z')letter++;eleif(c=='')pace++;eleif(c>='0'&&c<='9')digit++;eleother++;}printf(\其中:字母数=%d空格数=%d数字数=%d其它字符数=%d\\n\digit,other);}6.3求(n)=a+aa+aaa++aaa之值,其中a是一个数字,n表示a的位数。
解:voidmain(){inta,n,count=1,n=0,tn=0;printf(\请输入a和n的值:\\n\canf(\printf(\while(count<=n){tn=tn+a;n=n+tn;a=a某10;++count;}printf(\\\n\}6.4求(即1+2!+3!+4!++20!)voidmain(){floatn,=0,t=1;for(n=1;n<=20;n++){t=t某n;=+t;}printf(\\\n\}阶乘利用递归,再求和:#includeuingnamepacetd;longFunc(intn){ if(1==n)returnn;if(n>1)returnn某Func(n-1);}main(){long=0;inti=1;while(i<=6){=+Func(i);i++;}cout<6.5求voidmain(){intk,N1=100,N2=50,N3=10;float1=0.0,2=0.0,3=0.0;for(k=1;k<=N1;k++)/某计算1到100的和某/{1=1+k;}for(k=1;k<=N2;k++)/某计算1到50各数平方和某/{2=2+k某k;}for(k=1;k<=N3;k++)/某计算1到10各数倒数之和某/{3=3+1.0/k;}printf(\总和=%8.2f\\n\}已通过intmain(){intk=1,i=11,j=51;float=0.0;while(k<=10){=+k+k某k+1.0/k;while(k==10&&i<=50){=+i+i某i;while(i=50&&j<=100){ =+j;j++;}i++;}k++;}}6.6所谓“水仙开数”是指一个3位数,其个位数字立方和等于该数本身。
计算机二级C语言 第6章 字符型数据
以下是关于转义字符的几点说明: 1.转义字符常量只代表一个字符。 2.反斜杠后的八进制数可以不用0开头,如 ‘\141’代表的就是字符常量‘a’。 3.反斜杠后的十六进制数只能以小写字母x 开头,不允许用大写X,也不能用0x开头, 如‘\x41’是代表字符常量‘A’。 重点提示: ※重点提示:转义字符常量,均以一个“\”开 头。若要输出一个\字符,则输出格式应 为’\\’。
字符形式 \n \t \b \r \f \\ \’ \’’ \ddd \xhh
功能 回车换行,将光标从当前位置移到下一行开头 横行跳格,相当于TAB键,光标从当前位置跳到下一个TAB位置 退格,光标从当前位置向左退一格 回车不换行,光标从当前位置移到本行开头 换页,将光标从当前位置移到下一页开头 反斜杠字符“\” 单引号字符(撇号) 双引号字符 1~3位八进制数代码对应的字符 1~2位十六进制数代码对应的字符
第6章 字符型数据
本章要点: 本章要点 6.1 字符型常量 6.2 字符变量 6.3 字符的输入和输出
6.1 字符型常量
6.1.1 字符常量 字符常量是用一对单引号括起来的一个字符。如‘a’、‘B’、 ‘>’、‘?’等都是字符常量。作为字符常量的小写字 母a,在程序中写成‘a’,以便和标识符a区别开来。 关于字符常量,以下有几点说明: (1)其中单引号只是作为定界符使用,并不是字符常量的 组成部分,也就是说在输出字符常量时,一对单引号并不 被输出。 (2)单引号中的大写字母和小写字母代表不同的字符常量, 如‘A’和‘a’是不同的字符常量。 (3)被一对单引号括起来的字符不允许是单引号或反斜杠, 即‘’’或‘\’。
说明:putchar函数的参数可以是表达式,因此 上述程序的第3、4、5行可以简化为一条语句: putchar(getchar()); 该语句中的putchar参数是函数getchar。 重点提示:本小节主要介绍C语言中数据输入 ※重点提示 输出的实现方法。这些输入输出规则比较繁琐, 用法不当就得不到预期的结果,不少编程人员由 于没掌握好这方面的知识而浪费了大量时间来调 试程序。当然,初学者不可能一下子掌握所有细 节,可以重点掌握最常用的一些规则,其他部分 可在需要的时候随时查阅。建议读者通过上机实 践来巩固所学知识。
单片机原理及应用教程c语言版第6章mcs51单片机的定时器计数器
方波周期T
定时时间t:
周期为1000µs的方波要求 t =周期/2 = 1000/2 = 500(µs)
定时时间t
对应计数值:N = t/机器周期 = 500/1 = 500
N=500>256,所以选择模式1。
模式字:
TMOD=0000 0001B = 0x01 (3)计算初值X
X = 65536 – N = 65036 = 0xfe0c
6.1.2 MCS-51单片机定时器/计数器的工作原理
• 控制信号TRx=1时,定时器启动。 • 当定时器由全1加到全0时计满溢出,TFx=1,
向CPU申请中断;同时,定时器从0开始继续 计数。
6.2 定时器/计数器T0、T1
主要内容
6.2.1 T0、T1的特殊功能寄存器 6.2.2 T0、T1的工作模式 6.2.3 T0、T1的使用方法
计数信号由片内振荡电路提供,振荡脉冲n分 频送给计数器,每个机器周期计数器值增1。 • C/T =1 ,为计数器
计数信号由Tx引脚、和P1.0)输入,每输入一有 效信号,相应的计数器中的内容进行加1
计数器的最高计数频率为:fosc/24 1)每1个输入脉冲的下降沿使计数器计1个数 2)每1个机器周期对引脚采样1次,当上1个机器 周期采样为高、本机器周期采样为低为1个下降沿。
6.2.2 T0、T1的工作模式
信号源
振荡器 12分频 C/T=0
0
T0(P3.4)
TR0 GATE (P3.2)
C/T=1 1
& +
运行控制
TL0 TH0 (8位) (8位)
计数器
TF0 中断
溢出中断
图6-6 T0模式1原理结构
6.2.2 T0、T1的工作模式
《C语言程序设计》第6章习题答案
1、选择题(1)A(2)C(3)A(4)B(5)B(6)D(7)D(8)B(9)D(10)B2、填空题(1)a=10,b=20a=20,b=10(2)**pp=603、程序设计题(1)#include<stdio.h>char *month_name(int n);void main(){int n;printf("\nPlease enter 1 integer:");scanf("%d",&n);printf("%d month :%s\n",n,month_name(n));}char *month_name(int n){static char*name[]={"illegal month","Jan","Feb","Mar","Apr","May","Jun","July","Aug","Sept","Oct","Nov","Dec"};return ((n<1||n>12)?name[0]:name[n]);}(2)#include<stdio.h>#define N 10sort(int data[]){int i,j,min_a,temp;for(i=0;i<N;i++){min_a=i;for(j=i+1;j<N;j++)if(*(data+j)<*(data+min_a))min_a=j;if(min_a!=i){temp=*(data+min_a);*(data+min_a)=*(data+i);*(data+i)=temp;}}}main(){int i,j,data[N],temp;int min_a;printf("\nPlease input %d int:\n",N);for(i=0;i<N;i++)scanf("%d",&data[i]);sort(data);printf("After sorted:\n");for(i=0;i<N;i++)printf(" %d",data[i]);}(3)#include <stdlib.h>void reverse(char *c);void main(){char str[80];puts("Please enter 1 string\n");gets(str);reverse(str) ;puts("After reversed\n");puts(str);}void reverse(char *c){char *p,*q,temp;int size=0;for(p=c;*p!='\0';p++)size++;size=size/2;for(q=c,p--;q<c+size;q++,p--){temp=*q;*q=*p;*p=temp;}}(4)#include<stdio.h>#include<string.h>void sort(char *keyword[],int size);void print(char *keyword[],int size)void main(){char *keyword[]={"if","else","case","switch","do","whlie","for","break","continue"};sort(keyword,9);print(keyword,9);}void sort(char *keyword[],int size){int i,j,min_location;char *temp;for(i=0;i<size-1;i++){min_location=i;for(j=i+1;j<size;j++)if(strcmp(keyword[min_location],keyword[j])>0) min_location=j;if(min_location!=i){temp=keyword[i];keyword[i]=keyword[min_location];keyword[min_location]=temp;}}}void print(char *keyword[],int size){int i;for(i=0;i<size;i++)printf("\n%s",*(keyword+i));}(5)#include<stdio.h>void fun_char(char str1[],char str2[],char str3[]);void main(){char str1[80],str2[80],str3[80],c,i;printf("\nPlease enter 2 string:");scanf("%s%s",str1,str2);fun_char(str1,str2,str3);printf("Third string is %s.",str3);}void fun_char(char *str1,char *str2,char *str3){int i,j,k,flag;i=0,k=0;while(*(str1+i)!='\0'){j=0;flag=1;while(*(str2+j)!='\0'&&flag==1){if(*(str2+j)==*(str1+i)) flag=0;j++;}if(flag){*(str3+k)=*(str1+i); k++;}i++;}*(str3+k)='\0';}(6)#include<stdio.h>int count_word(char *str);void main(){char str1[80],c,res;puts("\nPlease enter a string:");gets(str1);printf("There are %d words in this sentence",count_word(str1)); }int count_word(char *str){int count ,flag;char *p;count=0;flag=0;p=str;while(*p!='\0'){if(*p==' ')flag=0;else if(flag==0){flag=1;count++;}p++;}return count;}(7)#include<stdio.h>#include<string.h>char *encrypt(char *string);char *decrypt(char *string);main(){char item[80];char *point;char *pEncrypted;char *pDecrype;printf("Please enter the string need to encrypt:\n");gets(item);point=item;pEncrypted=encrypt(point);printf("\nThe string after encrypted is:\n%s\n",pEncrypted); pDecrype=decrypt(pEncrypted);printf("\nThe string after decrypted is:\n%s\n",pDecrype);free(pEncrypted);free(pDecrype);}char *encrypt(char *string){char *q,*t;q=(char *)malloc(sizeof(char)*80);if(!q){printf("No place to malloc!");return 0;}t=q;while(*string!='\0'){*q=*string-2;string++;q++;}*q='\0';return t;}char *decrypt(char *string){char *q,*t;q=(char *)malloc(sizeof(char)*80); if(!q){printf("No place to malloc!");return 0;}t=q;while(*string!='\0'){*q=*string+2;string++;q++;}*q='\0';return t;}。
C语言第6章
16
#include “stdio.h” main() {int m,n; char ch; while((ch=getchar())!=‘\n’)
{if(ch>=‘a’&&ch<=‘z’) ch=ch-32;
putchar(ch); } putchar(‘\n’); }
运行时若输入: abcd1234EFgh 则输出: ABCD1234EFGH
又如’a’与“a”的存储方式分别为:
a 占一个字节
与 a \0 占两个字节 4
字符串的输出 方法一:直接输出。如printf(“How are you”); 方法二:采用格式符号%s输出。此是后话! 在C语言中没有字符串变量!下面的作法是错
误的: char c; c=“hello”; 因此,在C语言中字符串往往采用数组存放, 这也是后话!
{if(i%2==0) printf(“\n”); ch=i+65; printf(“c=%c ascii=%d } }
”,ch,ch);
15
例2、编程将用户从终端输入的一行字符中所有小写 字母转换成大写字母,其它字符不变。
分析:我们要对用户输入的每一个字符进行判别, 若为小写字母(在’a’~’z’之间),则应将其转换为大 写字母(字符-32),其它字符不变。 ①输入一行字符(用while((ch=getchar())!=‘\n’)来 接受输入); ②用循环对输入的字符一个一个地判别,若为小 写字母,则转换,否则不变; ③对转换后的字符进行显示(用putchar(ch))。 具体程序如下:
值就是-1。它的输入方法就是打^Z↙(见教材
P73)。
19
例4、把一串密码译成正文,密码以字符@表示结束。译码 规则如下:
大学C语言实用教程(课件)-第6章-指针
int *p=&a;
// p指向a
printf("a=%p b=%p c=%p p=%p\n",&a,&b,&c,&p); printf("p=%p *p=%d\n",p,*p);
p--;
}
// p指向a前面的存储单元
printf("p=%p *p=%d\n",p,*p);
2. 指针与整数相加减 指针加减一个整数n可以使指针移动,可以访问新地址。
char c= 'A',*pc=&c; float a=3.0,*pa=&a;
指针变量指向变量示意图
pa FF74 FF70 FF71 FF72 FF73 FF74 a 3.0 FF75 FF76 FF77 FF78 pc FF7C FF79 FF7A FF7B c A FF7C
② 赋值方法 先定义指针,然后用赋值语句将所指变量的地址赋给它。例如 char c,*pc;
4. 两个同类型指针相减
x[0]
如果两个同类型指针之间所存储的数据的 x[2] 类型也与指针相同(通常是数组的情况),则相 减的结果是这两个指针之间所包含的数据个数。 x[3]
x[4]
x[1]
【例】两个同类型指针相减。 #include <stdio.h> void main() { float x[10]; float *p,*q; p=&x[2]; q=&x[8]; printf("q-p=%d\n",q-p); }
6.1.2 指针和指针变量
1.指针和指针变量的概念
变量的指针:该变量在内存中的地址。 指针变量:专门用来存放变量地址的特殊变量。 在不致引起混淆的情况下,把指针变量简称为指针。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第 17 页
作业 • 复习 • 做课后习题 • 预习
共 42 页
第 18 页
用途:
1. 与if语句一起构成循环结构。 2. 改变程序自上而下的执行顺序。
缺点:滥用goto语句,可使程序无规律、可读性差。
共 42 页 第 6 页
例1 求和 s=1+2+· · · · · · +100 #include "stdio.h" main( ) { int i=1,s=0; L1: if(i<=100) { s=s+i; i++ ; goto L1; } printf("s=%d\n",s); }
s=s*i 语句 i=i+1 表达式 i<=n? =0?
非零 零
scanf(" %d ",&n);
do
{ s*=i;
i++; } while (i<=n) ; printf("%d!=%ld\n",n,s); }
共 42 页 第 14 页
不能省略
例6 用迭代法求a的算数平方根。公式 :xn=0.5*(xn-1+a/xn-1)
C 语言程序设计
第六章
共 42 页
第念和逻辑思维 • 掌握循环程序设计的方法
共 42 页
第 2 页
本周教学重难点
1.循环程序设计的要点
循环初值,循环条件,循环体设定
2.C语言循环程序设计的三种结构
for, while, do- while
共 42 页
第 3 页
确定初值为x0, 取a/2为x0的初值,迭代结束条件:|x1-x0|<=10-5.
输入a x1=a/2
x0=x1 语句 x1=(x0+a/x0)/2
|x1-x0 =0? 表达式
|>10-5 ?
零
非零
输出a,x1
#include <stdio.h> #include <math.h> main() {float a,x0,x1; scanf("%f",&a); x1=a/2; do { x0=x1; x1=(x0+a/x0)/2; }while (fabs(x1-x0)>1e-5); printf("sqrt(a)=%f\n",x1); } 共 42 页 第 15 页
思考:删除i++;后果? 调换i++;与求和语句的后果?
printf("%d",sum);
}
共 42 页 第 10 页
例3
求级数12+22+32+….前10项之和
i=1,sum=0
#include "stdio.h" main() { int i=1,sum=0; while (i<=10) { sum=sum+i*i; i++; } printf("%d",sum); }
共 42 页 第 16 页
小 结
1.循环程序设计的要点
循环初值,循环条件,循环体设定
2.程序设计的一般步骤 • 分析给定问题的详细步骤,总结出解决问题的一 般方法; • 画出程序流程图或写出程序草案;
• 编制程序;
• 输入程序、进行语法检查;
• 运行、测试程序(使用多组数据进行测试)。
共 42 页
s=0
输入正数x x!=0
非零
零
s=s+x
输入正数x 输出s
共 42 页
结束 第
12 页
6.3 do—while循环语句
1.do—while循环语句的形式 do 语句 while(表达式);
说明: (1)do—while循环语句首先 执行循环体,然后计算表达式 并检查循环条件,所以循环体 至少执行一次。 表达式 非零 零
循环的基本概念
问题1: y n
n 1 100
什么是循环? 为什么要使用循环?
做99次加法
问题分解 循环控制
问题2:求学生平均成绩 分数相加后除以科数 问题3:找出数x中能同时被3和7整除的数 找数 循环是有规律的重复操作。将复杂问题分解 为简单的操作过程,程序只对简单过程描述, 这些过程的多次重复就可完成对问题的求解。 重复的频繁性决定了循环在程序设计中必不可 少!
2. 执行过程
语句
(2)退出do—while循环的条 件与退出while循环的条件相 同。
先执行语句,后判断条件
共 42 页 第 13 页
例5 用do-while型循环求n!
S=1×2×3×……×(n-1) ×n
i=1,s=1 输入n
#include <stdio.h> main() { int i=1,n ; long s=1;
共 42 页 第 4 页
C提供四种循环控制:
特点: if--goto 循环 while循环 for循环 do while循环
难点: 先判断后循环 先循环后判断
共 42 页
第 5 页
6.1
if-goto 语句循环 标号;
一般形式: goto
标号:语句
其中:标号用标识符表示。不能用整数作标号
零
语句
先判断条件,后执行语句
共 42 页 第 9 页
例1 求
n
n 1
100
i=1,sum=0 零 i<=100? 非零 sum=sum+i i=i+1
#include "stdio.h" main() { int i=1,sum=0;
while (i<=100)
{ sum=sum+i; i++; }
开始
输入m,n
非零
m==n
零
m<n
非零
零
c=m m=n n=c
m=m-n
运行结果: S=?
输出m
共 42 结束 页 第 8 页
6.2
while循环语句
1.while循环语句的形式 while(表达式) 语句 2.执行过程
注意: 循环体若包含一个以上语 句,应该用花括号括起来(使 用复合语句)。 循环体内应注意设置修改 循环条件的语句。否则循环 无法终止。 表达式的值为0、循环体 内遇break、return、goto语 句可结束循环执行。 表达式 非零
零 i<=10? 非零 sum=sum+i*i i=i+1
共 42 页
第 11 页
例4
输入一批正数,输入0时表示输入结束, 求这些正数的和。
开始
#include "stdio.h" main( ) { int s=0, x; scanf("%d",&x); while( x!=0 ) { s=s+x; scanf("%d",&x); } printf("s=%d\n",s); } 思考:取消循环内的输入语句后果?
开始
i=1,s=0
零
i<=100
非零
s=s+i ,i++
输出s
运行结果: S=?
结束
共 42 页 第 7 页
例2 求两个整数的最大公约数(GCD)
#include "stdio.h" main( ) { int m,n,c; scanf(“%d%d”,&m,&n); L1: if(m==n) goto L2; if(m<n){ c=m; m=n; n=c; } m=m-n; goto L1; L2:printf(“The GCD is:%d",m); }
注意:当while后的表达式为真时,while语句和 do—while语句的结果相同,否则不同。 main( ) main( ) {int i , s=0; {int i , s=0; scanf("%d"&i); scanf("%d",&i); do while(i<=10) { s=s+i; { s=s+i; i++; } i++; } while(i<=10) ; printf("s=%d\n", s); printf("s=%d\n", s); } } 输入:1 打印:55 输入:1 打印:55 输入:11 打印:0 输入:11 打印:11