《自考计算机基础与程序设计习题.ppt》由会员分享,可在线阅读,更多相关《自考计算机基础与程序设计习题.ppt(28页珍藏版)》请在三一办公上搜索。
1、,2007年10月高等教育自学考试,共 26 页 第 2 页,各种类型的常量 按照数据类型划分,3-2各种类型的常量,直接常量,整型常量,实型常量,字符型常量,字符常量,字符串常量,符号常量,常量,#define N 5,整型常量的3种表示形式:十进制:以非0打头,+,-,09 例:20八进制:以0打头,+,-,07 例:020十六进制:以0 x打头,+,-,09,AF(af).(0是零)例:0 x20,共 26 页 第 3 页,各种类型的常量,3-2各种类型的常量,直接常量,整型常量,实型常量,字符型常量,字符常量,字符串常量,符号常量,常量,实型常量的2种表示形式:小数形式:指数形式:,E
2、(e)前必须有数字,阶码必须是整型数,共 26 页 第 4 页,各种类型的常量,3-2各种类型的常量,直接常量,整型常量,实型常量,字符型常量,字符常量,字符串常量,符号常量,常量,一对单引号括起来的一个字符字符常量的2种表示形式:可显示字符:a-z转义字符:n,t,0 x41,一对双引号括起来的多个字符字符串常量:”abc”,”ant”,循环,for(i=1;i10;i+)printf(“%d”,i);,i=1;while(i10)printf(“%d”,i);i+;,循环有for,do-while和while三种语句,i=1;do printf(“%d”,i);i+;while(i10);
3、,循环一般包括:循环初始,循环条件(满足就循环,不满足就跳出),步长(让循环趋于终止的变化),循环体(反复执行的语句),注意:1)for循环初始做为第一个表达式,是for语句的一部分,而while和do-while是写在循环之外2)for循环的步长做为第三个表达式,是for语句的一部分,而while和do-while是做为循环体3)三个循环条件的位置不同,但是含义都相同,满足就循环,不满足就终止,循环,注意:哪些语句是循环体,只有循环体语句才会在满足循环条件时,反复被执行,for(i=1;i10;i+)printf(“%d”,i);printf(“%d”,i);,for(i=1;i10;i+)
4、printf(“%d”,i);printf(“%d”,i);,for(表达式1;表达式2;表达式3)语句1;,循环体的语句1,如果超过一条语句,用 括起来.否则只认为紧跟的第一条语句是循环体,while(循环条件)语句1;,do 语句1;while(循环条件),看到For,while,先看它们后面有没有,有则的范围是循环体,没有则仅后面跟的第一条是循环体,循环,main()char str=a2bc5def8g43h,*p;int count=0;p=str;for(;*p!=0;p+)if(*p=0,读程序和写程序时,都要注意区分这点,看到while,for首先确认循环体的范围,If语句也是
5、默认是一条语句,如果超过一条加所以,如果if(else)后面有,说明满足条件执行这些语句,否则仅执行第一条,由上往下,由内向外,循环,void sort(int a,int n)int k,t,mk;for(k=1;lkaj+1)mk=aj;aj=aj+1;aj+1=mk;printf(“”);,读程序和写程序时,都要注意区分这点,看到while,for首先确认循环体的范围,两个for,一个if的语句范围?,由上往下,由内向外,例:输出100以内的素数?,#include“math.h”main()int n,j,k;for(n=2;nk)printf(“%4d”,n);,6 数组,做填空题,
6、1.理清自己解决这个问题的处理流程,1)弄清已给出程序的变量的含义,2.找出缺少的是哪些部分,2)猜测已给出程序的处理流程,和自己的处理流程对比,3)有时,填空的部分有可能是重要的步骤,也有可能是不重要,容易忽视的步骤.比如:变量的初始化;循环的循环控制变量初始,循环条件,循环步长,循环体,如果是选择填空,难度会大一些.你可以将可选项一 一放入,然后看哪个能实现这个功能,还可以对给出的答案进行一部分排除.如果是空白填空,难度会小一些,注意有时只是填一些容易忽视的不太重要的步骤,6 数组,已知数组x中存放一个递增数列,输入一个整数w,将它插入到数组中,使之仍为一个递增数列.,int x11;,插
7、入一个任意输入的整数w,假设是45,算法:,1)从后往前,找w应该插入的位置,将比w大的数往后移动一格,用循环,int k=9 to 0,如果akw,则ak+1=ak,否则跳出循环,2)把w填入ak+1,递增序列,数组的应用,第17题在findmax函数中求出数组的最大值以及最大值在数组中的下标,m是最大值的下标,算法:1)max存最大值,maxid存最大值下标2)max初始为第一个元素,maxid=03)max逐一和数组元素比较,如果aimax,则max=ai,maxid=i 这是一个循环i=0 to 10,这个题,唯一的改变是它没有max,只保存maxid最后,amaxid就是最大值,in
8、t*k=k是一个指向m的指针变量,p=0,pt可知t是循环次数,a0 a1 a2 a3 a4 a5,数组的应用,求最大公约数(能被两个数都整除的最大数),辗转相除法:gcd(a,b)=gcd(b,a%b),直到余数0为止,b就是最大公约,举例:求15,6的最大公约,(15,6)余数 3(6,3)余数 03就是最大公约,步1:用第一个数a除第二个数b,得到余数c步2:判断余数c,如果余数不为0,把第二个数b做为第一个数a,把余数c作为第二个数b,转步1.否则,转步3步3:第二个数就是最大公约数,算法:,C是表示余数,数组的应用,1)scanf(“%d”,printf(“%d”,a);,scanf
9、(“%5d”,可以设定总长,不能设定精度,2)printf(“%5.2d”,a);/*总占5位,小数2位,不足左补空格*/,scanf(“%ld”,3)对于double类型,输入一定用ld,scanf(“%lf”,b=(3*a+5)/(2*a),数组的应用,1)Char str6;/定义数组时要指定数组长度,或者通过初始来确定长度.char str=a,b;,用%s,表示输入一个字符串,字符数组名就代表一个地址.所以直接用数组名 scanf(“%s”,str);,2)字符数组输入方法.,3)判断字符串结束用0,0的ASCLL 码是0所以*k!=0 等价*k!=0 这个是正确的,Str是数组名,
10、始终代表第一个元素地址,不能改变,str+出错,for(k=str;*k!=0;k+),6 数组,做读程题,1.弄清程序变量的含义,从上往下逐条阅读程序,2.对于循环,从最外层循环开始,循环控制变量从头到尾代入计算结果,3.写程序结果,注意要写标准,间隔、符号等都要全对,才有分,6 数组,22题,1.getchar()从键盘获得一个字符,赋予c,3.c1=c-1;c-1就是c的前一个字符.c+1就是c的后一个字符,2.c=c-32,大写字母比小写字符小32,c是G,4.c1表示c的前一个字符,当c是A,c1=c+25;一共26个英文字符,A+25是Z.即本来A前没有了,做个循环让Z成为A的前一
11、个,同样A做为Z的后一个字符.c2=c2-25,Printf(“%ct%ct%c”,c1,c,c2);,%c说明输入字符,%d输出整数,t说明输出一个Tab即中间空7个空格,F G H,6 数组,23题,这是一个双重循环,从外到内逐层代入,1)sort(x,5),说明a=x,m=5,for(j=1;jak+1)t=ak;ak=ak+1;ak+1=t;,当j=1;k=0 to k4,2 15 2 6 152 6 3 15K=0;a0a1,交换K=1;a1a2,交换K=2;a2a3,交换K=3;a3a4,不交换,2 6 3 15 18,6 数组,23题,这是一个双重循环,从外到内逐层代入,1)so
12、rt(x,5),说明a=x,m=5,for(j=1;jak+1)t=ak;ak=ak+1;ak+1=t;,当j=2;k=0 to k3,2 3 6 15 18,当j=3;k=0 to k2,2 3 6 15 18,当j=4;k=0 to k1,2 3 6 15 18,寻找规律:将前5个数排列成有序数,sort(x,5),6 数组,23题,规律:从第4个数开始,将5个数排列成有序数,sort(x+3,5),6 数组,23题,什么时候输出回车?,0%5,5%5,%4d占4位,不足左补空格,右对齐,2 3 6 9 12 14 15 18 7 10,for(k=0;k10;k+)printf(“%4d
13、”,xk);if(k%5=0)printf(“n”);,循环体范围?,K:09,K能被5整除,输出回车,6 数组,24题,12,注意qx没有变,*qx+,qx=x+1;,*(qx+2),*与+优先级同,右结合.等价*(qx+),3,qx+1,+*qx,9,等价+(*qx),12 3 9,数组的应用,用多项式的叠加来近似求 pi就是,1.每一项用t表示,其分子用s表示,分母用n表示2.分子s=13.分母n=i!,求阶乘是一个循环 循环从1开始,直到最后一项的绝对值小于,用多项式的叠加来近似求e,循环的终止条件:该项t小于10-7,7-3 函数的调用,举例:计算,步骤1:初始化exp=0;项t=1
14、;分子s=1;分母n;定义一个循环控制变量i,n=i!,exp 代表e,即结果,步骤2:叠加是一个循环过程,循环条件是大于10的-7次,while(循环条件)exp加t 重新计算t=s/n;n是i!,求i!有两种方法 i+;,7-3 函数的调用,举例:计算,int f(int n)int multip=1,i;for(i=1;i1e-7)exp=exp+t;n=f(i);t=s/n;i+;printf(“e=%f”,exp);,步骤1:初始化exp=0;项t=1;分子s=1;分母n=i!;定义一个循环控制变量i,exp 代表e,即结果,步骤2:叠加是一个循环过程,while(循环条件)exp加
15、t 重新计算t=s/n;其中n=f(i)i+;,e=2.718254,7-3 函数的调用,举例:计算,main()double exp=0,t=1,s=1;int n=1,i;i=1;while(t1e-7)exp=exp+t;n=n*i;t=s/n;i+;printf(“e=%f”,exp);,步骤1:初始化exp=0;项t=1;分子s=1;分母n=i!;定义一个循环控制变量i,exp 代表e,即结果,步骤2:叠加是一个循环过程,步骤3:while(循环条件)exp加t 重新计算t=s/n;其中n=n*i i+;,e=2.718254,i从1,2,3.所以连续将i乘起来就是1*2*3*4,利
16、用叠加的过程,用连续的i像乘求阶乘,举例:已知矩阵A,编程实现矩阵的转置,二维数组元素的引用,main()int a34=2,3,5,8,1,0,1,2,4,5,7,6;int i,j;for(i=0;i=2;i+)for(j=0;j=3,j+)bji=aij;,int a34 初始化 int b43算法:1)输入A1)转置:将数据逐行逐列的复制过去2)输出结果:B,外循环:int i=0 to 2 控制行 i+,内循环:int j=0 to 3 控制列 bji=aij j+,a01 b?,数据结构:,main()int a54,b45;int i,j;for(i=0;i5;i+)for(j=0;j4;j+)scanf(“%d”,