第三章简单程序设计
3.1 流程结构和语句
1 . 三种流程结构
顺序结构,选择结构,循环结构——程序在逻辑上执行的流程。
●顺序结构:按语句在源程序中出现的次序依次执行;
●选择结构:根据一定的条件有选择地执行或不执行某些语句。
●循环结构:在一定条件下重复执行相同的语句。
所有的流程控制都是由语句实现的,且任何一个表达式都可作为一个语句使用,成之为表达式语句
2. 表达式语句
任何表达式通过在其末尾加一个“;”,可使表达式成为一个语句,形式为:
表达式;
其中“;”是C语句的组成部分,表示一个语句结束。表达式语句能够独立出现在程序中,而表达式则不能独立出现。
例如:x=y+1 是表达式
x=y+1;是语句
习惯上把赋值表达式语句如:x=y+1;新为赋值语句。函数调用也是表达式,因此:
printf(“hellow”)是表达式;
printf(“hellow”);是语句,习惯上称为输出语句。
scanf(“%d%d”,&x,&y);函数调用表达式语句(输入语句)
3. C的语句概述
C的一个“说明”也必须以分号结束,也称为语句,因此C的语句分说明语句和执行语句两类。
说明语句可以出现在程序中任何块(函数或复合语句)的外面——称为外部说明或块内——称为局部说明(在执行语句的前面)。
外部说明必须放在一个源程序文件中所有函数定义的外面;局部说明包括类型定义、变量和函数说明,其作用是描述程序中被处理数据(变量或函数)的名称和类型供解释程序使用。
执行语句只能出现在函数体内且处于局部说明的后面,执行语句完成对数据的处理和对程序流程的控制。
常用的程序结构为:
常量说明
类型说明
变量说明/*外部说明*/
返回类型函数名(参数表)
{ 变量说明/*局部说明*/
执行语句
}
C的执行语句共有六种:
●表达式语句
●复合语句
●标号语句
●选择语句(if和switch)
●循环语句(while,for,do-while)
●转移语句(break,continue,goto,return)
3.2标准的文件输入与输出函数
一个C的源程序要能够从外部设备(文件)输入数据并将执行(或处理)的结果输出到外部设备上。
C语言的输入和输出操作是通过调用C标准函数库中的函数来实现的,标准函数库是由C编译程序提供的。以编译后的目标代码形式存储的函数的集合。用户程序可根据需要按规定的格式调用其中的函数来完成相应的功能。C语言中从标准输入和输出文件(设备)中进行读(写)的四个标准函数是:
格式输出函数printf、格式输入函数scanf、字符输入函数getchar和字符输出函数putchar。其他函数以后讲。
3.2.1字符输入和输出函数
1.字符输入函数getchar
函数原型为:int getchar(void)
其中int说明函数的返回值的类型,void说明函数没有参数,该函数的调用格式为:
getchar()
系统将输出设备和输入设备都看成文件,标准输入设备(键盘)和标准输出设备(显示器)是由字符的序列(字符流)组成的文本文件,称为输入流和输出流。
getchar每调用一次则从终端(键盘)读取一个字符。这个字符的字符码就是getchar 的返回值(即函数值),其类型为由unsigned char 转换的int。例如:c=getchar();
执行时键入字符a赋值后变量c的值为97即字符‘a’的值。
输入文件的结束标志称为文件尾。DOS系统中键入ctrl+z时产生文件结束标志。getchar遇到文件结束标志时返回值EOF,EOF是在头文件〈stdio.h〉中定义的符号常量,其值通常为-1。程序中如果要测试getchar()的值是否文件尾应使用EOF而不用-1,这样做可使程序不依赖于某个特定环境。
2.字符输出函数putchar
函数原型为:int putchar(char ch )
putchar函数将所要输出的字符码转换为unsigned char送到标准输出设备中去,返回值是被输出的字符,如果出错则返回EOF,调用形式为:
putchar(ch)
其中ch为实际参数,可以是char、short或int类型的表达式,其值是要被输出字符的字符码。每调用一次则将字符c输出到标准输出设备上。例如:int i=7;
char ch;
说明:
(1)下面四个语句是等价的,同为输出一个响铃字符:
putchar(i);putchar(7);putchar(…\07?);putchar(…\a?);
(2)下面三个语句分别输出字符a,3和换行
putchar(…a”);
putchar(…3?);
putchar(…\n?);
注:putchar(3) 输出是?而不是整数3。
(3)putchar(((c=getchar())>=?a?&&c<=?z?)?c-…a?+?A?:c);
该语句先输入一个字符存入变量c,如果c是小写字母则将其转换成大写字母后输出,否则直接输出原字符。
注意:凡是程序中调用了输入、输出库函数,必须在函数第一次调用之前写上#include
3.2.2格式输出函数(printf)
getchar和putchar函数用于输入和输出单个字符,输入和输出过程中不进行格式上的任何转换。
printf和scanf函数在数据的输入和输出过程中能够将计算机内部形式的数据和输入输出任务上的数据相互转换,称为格式输出和格式输入。
1.printf函数的原型
int printf(char format,args)
参数的数目可变,中间用“,”分隔,是要被转换并写到输出设备的数据。函数的返回值是实际输出字符的数目。
2.调用形式
printf(格式字符串,输出参数1,输出参数2,……,);
调用printf函数时至少要给出第一个参数,即格式字符串。格式字符串式是用“”括起来的字符串;输出参数1,…输出参数n是n个表达式,可以为任何基本类型,
也可以是指针或枚举类型(较少使用)。输出数据项的数目任意,末尾加“;”表示printf函数通常作为语句使用。
printf函数将参数的值按格式字符串规定的格式从内部形式转换成外部字符形式并输出设备,返回值是实际输出字符的数目。例如:
printf("%d%8.3f",i,x);
参数中的格式为"%d %8.3f"。i和x是要输出的数据%d表示i要用十进制整数形式输出,宽度为数据实际宽度。%8.3f表示x要用小数形式浮点数格式输出,输出总宽度为8个字符,其中小数部分保留3位,若i=15,X=-8.2 该语句输出为
15 -8.200
3. 格式字符串
格式字符串包含两种字符:普通字符和用于转换说明的字符,普通字符照原样输出,转换说明用于说明数据输出格式。其形式为:
%[域宽]转换字符
一个转换说明以%开头。域宽部分是可选的,用于指定输出数据的宽度。每个转换说明对应于一个输出参数,该参数被转换成由转换说明规定的数据格式后输出。
普通字符通常用作输出提示信息,它可以与转换说明交替出现,例如printf("i=%d,x=%8.3f\n",i,x);
输出为:i=15,x= -8.200
ANSI C的转换字符及其规定的输出格式见教材p44。
注:如果%后面是一个%字符,则标准C无此定义,将它作为普通字符输出。
在%和转换字符之间可以加域宽说明,用于指定输出时的对齐方向、输出数据的域宽度、小数部分的位数等要求。用于域宽说明的字符列于下表中,域宽说明可以是其中之一或多个字符的组合。
表3.1 printf域宽说明字符
换说明对应的参数决定的。例如:
printf("%.*s",max,s);
该语句执行时从串s中打印至多max个字符。
域宽说明示例见教材p45
注意(1):printf函数根据格式串中的转换说明来决定输出数据的数目和类型,如果转换说明项数多于参数个数,或参数类型不正确,则会输出错误的数据(不报语法错);如果输出参数的数目多于转换说明项数则多余的参数不被输出。
例. Printf(“%d%d,%d”,3,4);
结果为:%d,3
例:int i=-6;
double x=5.7,y=123.4567;
printf("%-4d,%g",i,y,x);
输出形式为:
-6 ,123.457
(2)printf中参数右结合,如设int i=1;
则 printf("%d,%d,%d",++i,++i,++i);输出结果为4,3,2
printf("%d,%d,%d",i++,i++,i++);输出结果为3,2,1
3.2.2 格式输入函数(scanf)
1. scanf函数的原型
int scanf(char *format,args)
scanf函数是具有int类型返回值(返回读入参数的个数)的函数。第一个参数format是格式字符串,它指出输入数据的数目、类型和格式,args为指向存放输入数据的变量的指针,输入参数的数目可变。
2. scanf函数的调用格式
scanf(格式字符串,输入参数1,…输入参数n);
scanf函数是printf函数的逆过程,它从标准输入设备(键盘)读入字符流,并按照格式字符串中转换字符规定的格式转换成相应类型的值后赋予由输入参数所指的变量。format串可以包含如下字符:
(1)空格或制表符,它们被忽略
(2)非%普通字符,它需要输入流中有同样的非空白字符与之匹配
(3)以%为开头以转换字符为结尾的转换说明符,常见的转换字符与printf类似(4)在%与转换字符之间可以有下列选项
·赋值抑制符*
·说明最大域宽的整数
·指出参数所指变量类型的字母 h,l或L
具体形式为:
格式字符与printf中使用方式相同,把输入数据分为整型(int *用d、o、x 指定)、字符型(char *,用c指定)、实型(float *,用f,e指定)。
在整型和实型中可再加长度修正说明符:加h(短整型)、加l(长整型)、加L(高精度型)、m(注意没有n)用以指定输入数据的宽度。
输入参数1至输入参数n可以为简单变量的地址或字符串变量的地址,简单变量的地址用变量前面加取地址运算符&表示,字符串变量的地址用字符数组名(或指向字符串变量的指针)表示。
scanf函数被正确执行时返回被转换并赋值的数据项的数目,遇到文件尾或出错时返回EOF。
例如:
int i;
float x;
char name[10];
scanf("%d %f %s",&i,&x,name);
输入:25 61.37e-1program
注意:
?输入字符串时不加双引号,因双引号也会作为字符号的内容。
?不能用赋值语句给数组赋值如:name="program" 因为name不是变量而是一
个地址常量。
?不能将scanf(%d",&i)写成scanf(“%d",i)也不能将scanf("%s",name)写
成scanf("%s",&name);
3 .输入形式
(1)构成一个被转换数据的字符序列称为一个输入域,输入域为下面三种情况之一。
●以输入流中当前字符开始直到第一个空白字符之前。
●根据转换说明不能被转换的字符之前。
●指定域宽用完。
输入域之间一般可用空白字符(空白、换行、制表符)隔开,整型、浮点型或字符型后的字符型数据不用空白字符分隔(注意字符型数据同样不用单引号),在整型、
浮点型或字符型后的字符串数据可以有或无空白符(因为字符串前无前导空白符),当遇到空白符时表示一个字符串结束(见后面内容)。
例1 int i;
char c;
scanf("%d%c",&i,&c);
执行时输入:1234a
则i被赋值1234,c为'a'.
但若输入1234 a,则i 值同上,c为' '
若要读入一个非空白字符了可用下面形式:
scanf("%d%1s",&i,&c);
输入:1234 a,则i为1234,c为'a'。
例2 char c1,c2;
scanf("%c%c",&c1,&c2);
输入:12
则c1为'1',c2为'2'
例3:int day,year;
char month[10];
scanf("%d,%s%d",&dat,month,&year);
执行时输入:25 dec 1996
输入流还可以是时下列形式
25Dec 1996(回车)
但不能为
25 Dec1996
例4.Char name[20];
scanf(“%s”,name);
执行时输入programming language(回车)
则字符串“programming”将被赋予name。
注:用gets函数时,串中可含有空格,此时以回车键表示输入的结束。
(2)当键入回车时scanf开始执行,当固定格式字符串中的转换说明项或者某个输入域与转换说明项不能匹配时scanf停止执行,返回已成功匹配且被赋值的输入数据个数;当遇到文件结尾时返回EOF。
注意:当下一次调用scanf时从上一次scanf调用以被匹配转换的最后一个字符的后面那一个字符开始读取。
例1.int i,j;float x,y;
scanf(“%d%d”,&i,&j,&x);
scanf(“%f”,&y);
执行时输入
1234 56.7 89
执行第一个scanf调用时i被赋值为12,j为34,x未被赋值。Scanf返回值为2;输入流中的56.7未被读取,该指针处于34后面的第一个空格字符。执行第2个scanf 时,将56.7赋予y,89多余,scanf返回值为1。
注意:转换说明应与输入参数所指变量的类型一致,否则,输入数据不是所需要的结果;转换说明项个数也应与输入参数个数相同,如果转换说明项个数少于输入参数个数,右边多出的输入参数所指变量将不被赋值,反之,数据不存放。
例2.int i,j;
scanf(“%d%d”,&i,&j);
执行时输入12a
则i为12,j未被赋值,scanf返回值为1。
(3)当scanf的格式字符串包含有普通字符时,在输入流中相应位置必须有相同的字符与之匹配;对于空白字符,格式字符串的一个空白字符可以与输入流中0个或多个连续的空白字符匹配;对于非空白字符的普通字符则要求一一对应。
设i,j,k为int类型。
例1.Scanf(“%d %d %d”,&i,&j,&k);
执行是应输入
1020 30
其中10,20,30之间可以是一个或多个空白字符、制表符或换行符。
例2.Scanf(“%d,%d,%d”,&i,&j,&k);
执行时应输入
10,20,30
其中10,20,30之间必须有且仅有一个逗号。
例3.Scanf(“i=%d;j=%d;k=%d”,&i,&j,&k)
输入应输入
i=10;j=20;k=30
4.转换说明中的可选项
scanf转换说明中的可选项有指定域宽的整数:h、l、L、*。如果一个输入域前面有空行,scanf全自动跳过空行直到发现输入域。
①指定域宽的整数:如果说明了域宽,则输入域直到域宽用完时为止。
例1.int i,j;
scanf(“%3d%d”,&i,&j);
执行时输入1234 5678。
整数123被赋值i,4被赋值j。
例2.char name[20]
scanf(“%8s”,name);
若输入abcdefghi则字符串“abcdefgh”被赋给数组name。
②h,l,L:如果参数是short *(而不是int *),则转换字符d、i、n、o、u 和x的前面要加h ;如果参数是long * 则加l ;如果参数是double * (而不是float *)则转换字符e,f和g的前面要加l;如果参数是long double *,则加L。
例1.short i;
long j;
double x;
scanf(%hd%ld”,&i,&j);
scanf(“%lf”,&x);
例2. long double y;
scanf(“%lf”,&y);
③ *:如果指定了*,则输入域被跳过,不赋值。*指出按转换说明匹配相应的输入域。但转换结果不被赋值给任何变量,因此称为“虚读”。虚读用于从输入流中有选择的读取部分内容。
例如:double v1,v2,v3;
scanf(“%lf%*d%lf%*d%lf%*d”,&v1,&v2,&v3);
执行时输入:22 33 44 55 66
11.0赋予v1,33.0赋予v2,55.0赋予v3;输入域22,44,66被跳过。
3.3 简单程序设计举例
一个简单的c程序仅包含一个main函数且程序流程是顺序结构,程序的执行部分通常含三种基本操作的语句,即输入、输出、赋值语句或用于计算的其他表达式语句。
程序中出现的任何变量必须进行变量说明;如果有常量最好定义成符号常量;如果需要将处理结果暂时保存还要说明所须的辅助变量。
例1.从终端输入一个字符,如果是小写字母,则转换成大写后输出,否则原样输出。
#include
void main(void)
{int c;
pintf(“intput a charctor:”);
c=getcher();
c>=‘a’&&c<=‘z’?putcher(c+‘A’-‘a’):putchar(c);
putcher(‘\n’);
}
注意:用 putchar和printf输出换行的参数不同,前者是‘\n’而后者是”\n”.
程序中的输入提示很重要,一个没有输入提示的程序在运行时用户不知道何时应输入何值。
例2 输入一个字符,输出该字符的字符码、该字符的前导字符(字符码域少1)及后续字符(字符码增1)、字符码。
#include
void main(void)
{int c ,c1,c2;
printf(“intput a charctor:”);
c=getcher();
c1=c-1;
c2=c+1;
printf(“The value of ‘%c’is %4d\n”,c,c);
printf(“%c:%d--%c:%d--%c:%d\n”,c1,c1,c,c,c2,c2);
}
输入s并回车则输出
The value of ‘s’ is 115
r :114—s:115—t:116
例3 输入三个浮点数,找出其中的最大值
#include
void main(void)
{float a,b,c,m;
printf(input three number :”);
scanf(“%f%f%f”,&a,&b,&c);
m=(a>b)?a:b;
m=(m>c)?m:c;
printf(“max=%.2f\n”,m);
}
例4 输入无符号短整数k和p,将k的低字节作为结果的高字节,p的低字节作为结果的低字节组成一个新的无符号数。
#include
main()
{unsigned short k,p,t;
printf(input k[hex:],p[oct.] :”);
scanf(“%hx%ho”,&k,&p);
t=(p&0xff)|(k&0377)<<8;/*t为保存结果的辅助变量*/
printf(“new=%hx\n”,t);
}
作业:P52 2.7 2.10 2.11 2.15 2.17 2.22 2.14
P98 3.5 3.6 3.8
程序设计基础 一、判断题 1.整型变量有Byte、Integer、Long类型3种。 2.Byte类型的数据,其数值范围在-255~255之间。 3.Visual Basic的Double类型数据可以精确表示其数值范围内的所有实数。 4.在逻辑运算符Not、Or、And中,运算优先级由高到低依次为Not、Or、And。 5.关系表达式是用来比较两个数据的大小关系的,结果为逻辑值。 6.一个表达式中若有多种运算,在同一层括号内,计算机按函数运算→逻辑运算→关系运算→算术运算的顺序对表达式求值。 7.赋值语句的功能是计算表达式值并转换为相同类型数据后为变量或控件属性赋值。 8.用DIM定义数值变量时,该数值变量自动赋初值为0。 9.函数InputBox的前3个参数分别是输入对话框的提示信息、标题以及默认值。 10.函数MsgBox的前3个参数分别表示默认按钮、按钮样式以及图标样式。 二、选择题 1.Integer类型数据能够表示的最大整数为________ 。 A、275 B、215-1 C、216 D、216-1 2.货币类型数据小数点后面的有效位数最多只有________ 。 A、1位 B、6位 C、16位 D、4位 3.输入对话框InputBox的返回值的类型是________ 。 A、字符串 B、整数 C、浮点数 D、长整数 4.运算符“\”两边的操作数若类型不同,则先________ 再运算。 A、取整为Byte类型 B、取整为Integer类型 C、四舍五入为整型 D、四舍五入为Byte类型 5.Int( Rnd * 100 ) 表示的是________ 范围内的整数。 A、[0,100] B、[1,99] C、[0,99] D、[1,100] 6.下列程序段的输出结果是________ 。 a=10: b=10000: x=log(b)/log(a): Print "lg(10000)=";x A、lg(10000)=5 B、lg(10000)=4 C、4 D、5 7.返回删除字符串前导和尾随空格符后的字符串,用函数________ 。 A、Trim B、Ltrim C、Rtrim D、mid 8.Print语句的一个输出表达式为________ ,则输出包括日期、时间信息。 A、Date B、Month C、Time D、Now 9. 语句Print "5*5" 的显示结果是________ 。 A、25 B、"5*5" C、5*5 D、出现错误提示 10.语句“Form1.Print Tab(10);"#"”的作用是在窗体当前输出行________ 。 A、第10列输出字符“#” B、第9列输出字符“#” C、第11列输出字符“#” D、输出10个字符“#” 三、填空题 1.语句“Dim C As________”定义的变量C,可用于存放控件的Caption的值。 2.长整型变量(Long类型)占用________ 个字节。 3.表达式Right(String(65, Asc("abc")), 3)的值是________。 1
第四章数组参考答案 一、选择题:1、 B 2、C 3、D 4、C 5、C 6、B 7、D 8、B 9、B 10、A 二、填空题: 1、首地址 2、按行存放 3、一个字符 4、′\0′ 5、字符数组名或字符串 6、9 0 7、6 8、j-1 str[j-1] 9、62 10、s1[i]=s2[i]; 三、改错题 1、错误语句:int a[3][ ]={2,4,6,8,10,12,14,16,18}; 正确语句:int a[ ][3]={2,4,6,8,10,12,14,16,18}; 2、错误语句:if (str[2]>string) string=str[2]; 正确语句:if (strcmp(str[2],string)>0) strcpy(string,str[2]); 3、错误语句:char c[5]={'C','h ','i','n','a '}; 正确语句:char c[6]={'C','h ','i','n','a '};或char c[ ]={“China”}; 4、错误语句:int a[3]={3*0} ; 正确语句:int a[4]; 5、错误语句:scanf(“%d%d%d”,&a); 正确语句:for (i=0; i<3; i++) scanf(“%d”,&a[i]); 或scanf(“%d%d%d”, &a[0], &a[1], &a[2]); 四、编程题 1、用数组来处理,求解Fibonacci数列前40项:1,1,2,3,5,8,13,21…。 #include
1.结构化程序包括的基本控制结构只有三种,即顺序结构、选择结构与循环结构。 对象之间进行通信的构造叫做消息,A正确。多态性是指同一个操作可以是不同对象的行为,D 错误。对象不一定必须有继承性,C错误。封装性是指从外面看只能看到对象的外部特征,而不知道也无须知道数据的具体结构以及实现操作,B错误。 2.对象之间进行通信的构造叫做消息。多态性是指同一个操作可以是不同对象的行为。对象不一定必须有继承性。封装性是指从外面看只能看到对象的外部特征,而不知道也无须知道数据的具体结构以及实现操作。 继承是面向对象的方法的一个主要特征,是使用已有的类的定义作为基础建立新类的定义技术。广义的说,继承是指能够直接获得已有的性质和特征,而不必重复定义它们,所以说继承是指类之间共享属性和操作的机制。 3.整数类实例包括: 十进制常量用0~9表示,不能以0开头; 八进制常量用0~7表示,必须用0开头; 十六进制常量用0~9和A~F(a~f)表示,必须以0x或0X开头。0x518。 0.518是浮点数实例,518E-2为科学计数法表示的浮点数实例。 "-518"是字符串实例, 字符实例的一般形式是用一对单引号括起来的一个字符。另外ASCII码中还有一些控制字符,C 语言中用转义字符的形式来书写这些常,转义字符一反斜杠(\)开始,后面跟1个字符或字符序列。'518'单引号中有三个字符,错误。"5"双引号为字符串,错误。'nm'单引号中有两个字符,错误。'\n'为换行符,属于字符类实例,正确。 4.数据流图从数据传递和加工的角度,来刻画数据流从输入到输出的移动变换过程。数据流图中的主要图形元素有:加工(转换)、数据流、存储文件(数据源)等。
第4章习题解答 一、选择题 1.在C语言中,函数返回值的类型最终取决于 A)函数定义时的函数首部所说明的函数类型B)return语句中表达式值的类型C)调用函数时主调函数所传递的实参类型D)函数定义时形参的类型 解析:函数返回值类型最终取决于定义函数时所定义的函数类型。 答案:A 2.设函数Fun()的定义形式为: void Fun(char ch, float x){} 则以下对函数Fun()的调用语句中,正确的是。 A)Fun("abc", 3.0); B)t = Fun('D', 16.5); C)Fun('65', 2.8); D)Fun(32, 32); 解析:选项A中"abc"是字符串,与形参不匹配:由于Fun函数的返回值类型为void,所以选项B中进行了赋值操作是不正确的;在选项C中,'65'是不合法的字符形式,单引号中应该是单个字符。只有选项D才是合法的函数调用形式。 答案:D 3.有以下程序: /* 文件路径名:ex4_1_3\main.c */ #include
单选题 1、关于C语言中的函数,下列描述正确的是() A.函数的定义可以嵌套,但函数的调用不可以嵌套 B.函数的定义不可以嵌套,但函数的调用可以嵌套 C.函数的定义和函数的嵌套均不可以嵌套 D.函数的定义和函数的调用均不可以嵌套 答案:B 解析:函数的定义不可以嵌套,但函数的调用可以嵌套 2、定义一个函数:exce((v1, v2), (v3,v4,v5),v6); 在该函数调用时,实参的个数为()个 A.3 B.4 C.5 D.6 答案:A 解析:(v1, v2), (v3,v4,v5)和v6一共三个实参 3、关于C语言中print()函数与scanf()函数,下列描述中正确的是() A.printf()函数可以向任何地方输出数据 B.printf()只向控制台输出数据 C.scanf()只能输入英文字母和数字 D.scanf()函数可以识别输入的空格 答案:B 解析:printf()是向控制台输出的函数 4、在C语言中,内部函数需要添加的关键字是() A.extern B.static C.this D.auto 答案:B 解析:在定义内部函数时,需要在函数的返回值类型前面添加static关键字(又称为静态函数)。 5、当调用时,会调用内部函数 A.当调用时,会调用内部函数 B.当调用时,会调用外部函数 C.当调用时,会调用两次,先调用内部函数再调用外部函数 D.都不调用,会报错 答案:A 解析:当内部函数与外部函数重名时,会优先调用内部函数 6、在C语言中,声明外部函数需要添加的关键字是() A.extern B.static C.this
答案:A 解析:声明外部函数的方式是在函数的返回值类型前面添加extern关键字 7、关于C语言中的局部变量,下列描述中错误的是() A.局部变量就是在函数内部声明的变量 B.局部变量只在函数内部有效 C.局部变量只有当它所在的函数被调用时才会被使用 D.局部变量一旦被调用,其生存周期持续到程序结束 答案:D 解析:当函数调用结束时局部变量就会失去作用 8、关于C语言中的全局变量,下列描述中正确的是() A.全局变量的作用域一定比局部变量的作用域范围大 B.静态类别变量的生存周期贯穿于整个程序的运行期间 C.函数的形参都属于全局变量 D.未在定义语句中赋初值的auto变量和static变量的初值都是随机值 答案:B 解析:选项1不对:如果程序中只有一个主函数,则在整个程序运行中,局部变量都在起作用; 选项3不对:除了C++的引用类型参数,所有函数的形参都是局部变量; 选项4不对:static变量定义时就存储地全局区,初始化为0; 9、当全局变量与局部变量重名时,那么在调用时() A.局部变量会被屏蔽 B.全局变量会被屏蔽 C.都不会调用,系统会报错 D.会调用两次,先调用局部变量,再调用全局变量 答案:B 解析:当局部变量与全局变量重名时,全局变量会被屏蔽。 10、在C语言中,关于变量的作用域,下列描述中错误的是() A.局部变量只在整个函数的运行周期中有效 B.全局变量的作用域为整个程序的运行周期 C.当全局变量与局部变量重名时,局部变量会屏蔽掉全局变量 D.全局变量会覆盖掉所有与它重名的局部变量 答案:D 解析:当全局变量与局部变量重名时,全局变量会被屏蔽掉 11、在C语言中,如果在一个函数的复合语句中定义了一个变量,则该变量() A.只在该复合语句中有效,在该复合语句外无效 B.在该函数中任何位置都有效 C.在本程序的原文件范围内均有效 D.此定义方法错误,其变量为非法变量 答案:D 解析:1、2与3错:函数复合语句中定义的变量在该复合语句中引用;但如果函数含有该变量,则在函数中可以引用该变量 4对:在C++中在复合语句中定义变量为合法,但在C语言中是非法的 12、C语言程序的基本单位是()。
第二章简单的VB程序设计习题 一、选择题 1. 假定已在窗体上画了多个控件,并有一个控件是活动的,为了在属性窗口中设置窗体的属性,预先执行的操作是 ()。 (A)单击窗体上没有控件的地方(B)单击任一个控件 (C)不执行任何操作(D)双击窗体的标题栏 2. 在VB中最基本的对象是(),它是应用程序的基石,是其它控件的容器。 (A)文本框(B)命令按钮 (C)窗体(D)标签 3. 有程序代码如下:text1.text=“visual basic”则:text1、text和“visual basic”分别代表()。 (A)对象,值,属性(B) 对象,方法,属性 (C)对象,属性,值(D) 属性,对象,值 4. VB是一种面向对象的程序设计语言,()不是面向对象系统所包含的三要素。 (A)变量(B)事件(C)属性(D)方法 5. VB的一个应用程序至少包括一个()文件,该文件存储窗体上使用的所有控件对象和有关的()、 对象相应的()过程和()代码。 (A)模块、方法、事件、程序(B)窗体、属性、事件、程序 (C)窗体、程序、属性、事件(D)窗体、属性、事件、方法 6. 在VB6.0环境已有应用程序的情况下,要重新建立一个工程的操作是()。 (A)单击工具栏上的“添加工程”按钮 (B)在工程资源管理器窗口上单击右键,在弹出的快捷菜单中选择“新建工程”选项 (C)选择“文件”菜单中的“新建工程” (D)选择“视图”菜单中的“新建工程” 7. 为了把窗体上的某个控件变为活动,应执行的操作是()。 (A)单击窗体的边框(B)单击该控件的内部 (C)双击该控件(D)双击窗体 8. 确定一个控件在窗体上的位置的属性是()。 (A)Width和Height (B)Width或Height (C)Top和Left (D)Top或Left 9. 确定一个窗体或控件的大小的属性是()。 (A)Width和Height (B)Width或Height (C)Top和Left (D)Top或Left 10. 对于窗体,下面()属性可以在程序运行时进行设置。 (A)MaxButton (B)BorderStyle (C)Name (D)Left 11. 要使Print方法在Form_Load事件中起作用,要对窗体的()属性进行设置。 (A)BackColor (B)BorderStyle (C)AutoRedraw (D)Caption 12. 要使标签控件显示时不覆盖其背景内容,要对()属性进行设置。 (A)BackColor (B)BorderStyle (C)ForeColor (D)BackStyle 13. 要使对象看得见而不可操作,要对()属性设置。 (A)Enabled (B)Visible (C)BackColor (D)Caption 14. 文本框没有()属性。
C 语言课后习题答案-第四版- 谭浩强(1-7) 第一章 #include printf("The largest number is %d\n",max); return 0; } 第3 章 #include p=1000; r5=0.0585; r3=0.054; r2=0.0468; r1=0.0414; r0=0.0072; p1=p*((1+r5)*5); // 一次存5 年期 p2=p*(1+2*r2)*(1+3*r3); // 先存2 年期,到期后将本息再存3 年期 p3=p*(1+3*r3)*(1+2*r2); // 先存3 年期,到期后将本息再存2 年期 p4=p*pow(1+r1,5); // 存1 年期,到期后将本息存再存1 年期,连续存5 次p5=p*pow(1+r0/4,4*5); // 存活期存款。活期利息每一季度结算一次 printf("p1=%f\n",p1); // 输出按第1 方案得到的本息和 printf("p2=%f\n",p2); // 输出按第2 方案得到的本息和 printf("p3=%f\n",p3); // 输出按第3 方案得到的本息和 printf("p4=%f\n",p4); // 输出按第4 方案得到的本息和 printf("p5=%f\n",p5); // 输出按第5 方案得到的本息和 return 0; } #include C程序设计第四版谭浩强完整版课后习题答案集团标准化办公室:[VV986T-J682P28-JP266L8-68PNN] C程序设计(第四版)(谭浩强)第一章课后习题答案 P006 向屏幕输出文字. #include<>代码均调试成功,若有失误大多不是代码问题.自已找找. int main() { printf("Welcome to \n"); return 0; } P008 求两个数的和. #include<> int main() { int a,b,sum; a=5; b=4; sum=a+b; printf("The sum is %d .\n",sum); return 0; } P008 调用函数比较两个数的大小. #include<> int main() { int max(int x,int y); int a,b,c; scanf("%d,%d",&a,&b); c=max(a,b); printf("The max is %d .\n",c); return 0; } int max(int x,int y) { int z; if (x>y) z=x; else z=y; return(z); } P015 三个数的大小.(数字0表示课后练习题) #include<> int main() { int a,b,c,d; int max(int x , int y , int z); printf("Please input 3 numbers :\n"); scanf("%d %d %d",&a,&b,&c); d=max(a,b,c); printf("The max is :%d .\n",d); } int max(int x , int y , int z) { int m; if (x>y && x>z) m=x; if (y>x && y>z) m=y; if (z>y && z>x) m=z; return (m); } 1、输入函数scanf的参数错误,应该为:scanf("%f",&k); 2、|1234 1234 | 3、ff10 4、1,3,1 5、原字符串左边加空格再加字符串本省,字符个数总和为5个 6、scanf("%d,%d,%c,%c",&a1,&a2,&c1,&c2); 7、 printf("a+b=%d\n",a+b); printf("a-b=%d\n",a-b); printf("a*b=%d\n",a*b); printf("a/b=%d\n",a/b); printf("(float)a/b=%f\n",(float)a/b); printf("a%b=%d\n",a%b); 8、 void main() { float r; float s,c; printf("please input the number:"); scanf("%f",&r); if(r>=0) { s = 3.14*r*r; c = 2*3.14*r; printf("s = %f, c = %f\n",s,c); } else printf("you input number is error!"); } 9 void main() {int n; printf("please input the number:"); scanf("%d",&n); if(n>=100 && n <= 999) printf("%d%d%d",n%10,(n/10)%10,n/100); else printf("you input number is error!"); } 10、 void main() { int i,j,k; scanf("%d,%d,%d",&i,&j,&k); ((i%2 != 0?1:0) + (j%2 != 0?1:0)+(k%2 != 0?1:0)) == 2?printf("YES\n"):printf("NO\n"); } 11、 void main() 第2章简单的C#程序设计 一.选择题 1.C#中程序的入口方法是【】方法。 A) main B) Main C) begin D) Program 2.假设变量x的值为25,要输出x的值,下列正确的语句是【】。 A) System.Console.writeline(“x”);B) System.Console.WriteLine(“x”); C) System.Console.WriteLine(“x={0}”,x);D) System.Console.WriteLine(“x={x}”); 3.要退出应用程序的执行,应执行下列的【】语句。 A) Application.Exit(); B) Application.Exit; C) Application.Close(); D) Application.Close; 4.关于C#程序的书写,下列不正确的说法是【】。 A) 区分大小写 B) 一行可以写多条语句 C) 一条语句可以写成多行 D) 一个类中只能有一个Main()方法,因此多个类中可以有多个Main()方法。 5.公共语言运行库即【】。 A) CRL B) CLR C) CRR D) CLS 6..NET平台是一个新的开发框架,【】是.NET的核心部分。 A) C# B) .NET Framework C) https://www.doczj.com/doc/8118378925.html, D) 公共语言运行库 7.C#应用程序项目文件的扩展名是【】。 A) csproj B) cs C) sln D) suo 8.C#应用程序解决方案文件的扩展名是【】。 A) csproj B) cs C) sln D) suo 9.运行C#程序可以通过按【】键实现。 A) F5B) Alt+F5 C) Ctrl+F5 D) Alt+Ctrl+F5 10.C#语言中类模块代码文件的扩展名是【】。 A) csproj B) cs C) sln D) suo 11.构建桌面应用程序需要.NET提供的类库是【】。 A) https://www.doczj.com/doc/8118378925.html, B) Windows Form C) XML D) https://www.doczj.com/doc/8118378925.html, 12.C#中导入某一命名空间的关键字是【】。 A) use B) using C) import D) include 13..NET Framework将【】定义为一组规则,所有.NET语言都应遵守这个规则,才能创建可以与其他语言互操作的应用程序。 A) JIT B) CLR C) MSIL D) https://www.doczj.com/doc/8118378925.html, 14.在https://www.doczj.com/doc/8118378925.html,中,在【】中可以查看当前项目的类和类的层次信息。 A) 解决方案资源管理器B) 类视图窗口 C) 对象浏览器窗口D) 属性窗口 15.在.NET Framewor中,MSIL是指【】 A) 接口限制B)中间语言C) 核心代码D) 类库16.【】是独立于CPU的指令集,它可以被高效地转换为本机机器语言。 C程序设计(第四版)(谭浩强)第一章课后习题答案 P006 1.1 向屏幕输出文字. #include int z; //z属于局部变量,可与主函数中相同名字. if (x>y) z=x; else z=y; return(z); //z作为整个程序的出口值,赋给主函数中的c. } #include 第四章 什么是算术运算什么是关系运算什么是逻辑运算 解:略。 C语言中如何表示“真”和“假”系统如何判断一个量的“真”和“假” 解:设有一个逻辑表达式,若其结果为“真”,则以1表示;若其结果为“假”,则以0表示。但是判断一个逻辑量的值时,以0代表“真”,以非0代表“假”。例如3&&5的值为“真”,系统给出3&&5的值为1。 写出下面各逻辑表达式的值。设a=3,b=4,c=5。 (1) a+b>c&&b==c (2) a||b+c&&b-c (3) !(a>b)&&!c||1 (4) !(x=a)&&(y=b)&&0 (5) !(a+b)+c-1&&b+c/2 解: (1) 0 (2) 1 (3) 1 (4) 0 (5) 1 有3个整数a、b、c,由键盘输入,输出其中最大的数。 解: 方法一 #include <> main() { int a,b,c; printf("请输入3个整数:"); scanf("%d,%d,%d",&a,&b,&c); if(a main() { int a,b,c,temp,max; printf("请输入3个整数:"); scanf("%d,%d,%d",&a,&b,&c); temp=(a>b)a:b; /* 将a和b中的大者存人temp中 */ max=(temp>c)temp:c; /* 将a和b中的大者与c比较,取最大者*/ printf("3个整数的最大数是%d\n”,max); }C程序设计第四版谭浩强完整版课后习题答案
C语言程序设计第二版第四章第七章课后答案
第2章 简单的C#程序设计 习题
C程序设计(第四版)(谭浩强)完整版_课后习题答案
c语言程序设计第四版第四章答案谭浩强
最新C++程序设计基础课后答案--第四章