写在最前面,一下内容 全凭理解总结。若有错误 请谅解,若有问题 可以找我 一、数据类型
二、输入输出
1、 输出:printf函数 printf(格式控制,输出表列) 示例:printf(“ a=%d b=%c”,a,b)
该函数有两个参数 (简单说明了基本格式,详细请看 C程序设计 69---74页) 1、格式控制(定义输出的格式 如:%d %c) ○
2、输出表列(定义输出的数据:可以是变量,常量,或者表达式。 如: a , b) ○
这里的 a ,b 变量 是按照 当前定义的 输出格式 的 顺序 以及 格式 输出的。 如:a 对应 %d,b对应 %c 。 a 的值先于b的值输出。
示例:printf(“ a=%d b=%c”,a,b) 假设a=5 b=66。输出结果为 : a=5 b=B
2、 输入: scanf 函数 scanf(格式控制,地址列表) (详细请看:75--78 )
1) 格式控制(定义输入数据的格式 如: %d %c)
2) 地址列表(定义输入数据 存入的地址: 如:&a 或 指针 或 数组名 ) 示例:
#include <stdio.h> main() { int a,b; int *p=&a;
scanf("%d%d",p,&b);
printf("a=%d,b=%d\n",a,b); }
输入: 5 10 结果:
a变量的输入通过 指针 b 变量的输入通过 求址 (&)
3、字符数据的输入输出:
字符的输出:putchar ( ) 函数 括号内 可带入变量,可填入字符常量,ASCII 值。 如: int i=97; putchar(97); putchar(‘a’); putchar(i);
结果都是输出 字符: a 。
字符的输入:getchar() 函数 从键盘捕获一个输入
如:
char a;
a=getchar();
printf(“%c”,a);
输入: E 结果
三、顺序结构
我的理解是 从上往下执行 无选择结构 无循环结构 即是 顺序结构。 没什么好说的。
四、选择结构
实现选择结构的语句:if 、switch。
同时 配合 关系运算符 关系表达式 逻辑运算符 逻辑表达式 实现 选择结构。 (详见. 91-95 页)
关系运算符: > , >= , < , <=, ==(等于) , !=(不等于)。
关系表达式:用关系运算符将两个数值或数值表达式链接起来的式子。 如:a>b+c ; 逻辑运算符:&&(与),||(或) ,!(非)
逻辑表达式:用逻辑运算符将数值,或变量,或表达式连接在一起的式子。
如:a &&c<d 逻辑表达式 执行以后 会返回一个值。0 或 1, 遵循非“0”既真的原则。
运算符的优先次序: 从下到上 !(非)的优先级 最高。
1、if 语句:
格式:(建议按照下面的格式书写 逻辑为 真或假 时的 语句可以很清晰的看出) 缩减型格式: if () { } else {}
if (逻辑表达式)
{
当逻辑表达式 返回 真时执行的语句// { } 内 为语句块里面可以书写各种合法语句, 假如再往里面写 if语句 于是if嵌套出现了
}
else {
当逻辑表达式 返回 假 时执行的语句
}
例如:
#include <stdio.h>
main()
{ int a;int *p=&a;
scanf("%d",p); if (a>0&&a<=100) { printf("Right\n"); } else
{
printf("The Number Is Out
Of Range\n!"); 输入: 110 结果
} 程序包含了: 变量定义,指针,输入,输出,if选择。 输入:80 结果}
if 的嵌套 自行查看。 2、switch: 格式: switch(表达式) {
case 常量1: 语句1;break; case 常量2: 语句2;break; ……………..
case 常量n: 语句n;break; default : 语句 n+1; }
1、 switch后面括号内的”表达式”,其值的类型 应为整数型( 包括字符型)。 2、 { } 内 为 switch的= 语句块 当()内表达式的值 = 语句体中的某一个 变量的
值时,语句体从 当前 相等的常量 处开始执行 直到 执行到 break 或 语句块结束。
3、 default 当 (表达式)内的值 都不符合case 后的常量 则执行 default 后的语句 4、 以上说明了 当 表达式内的值 符合某个 case后的常量 则 该case 既 语句块开始执行的位置 若 无符合的项 则从 default 开始执行 语句 示例:
#include <stdio.h> main() {
char a; switch(a) {
'A':printf("
分
数
在
输入 E
scanf("%c",&a);
}
结果: 输入 A
}
printf("\n");
case
90~100");break;
case 'B':printf("分数在80~90");break; case 'C':printf("分数在70~80");break; case 'D':printf("分数在60-70");break; case 'E':printf("<60,你挂了?");break;
default :printf("不知道你说了什么");
输入 A B C D E 以外的字母
若语句中没有 break 语句会一直执行下去 直到遇上break 或 所有语句执行完成 以上即为 if 和 switch的小结
五、循环结构
实现循环的语句: while,do…while,for
1、while 循环 :
while (条件表达式)
{
循环体 //由语句构成
}
当 (表达式)内的条件 成立 时 执行 循环体。 当 条件 不满足时 结束循环。 示例:
#include <stdio.h>
main()
{
int i=0,sum=0;
while(i<=10)
{
}
printf("sum=%d\n",sum);
}
结果:
sum += i; i++;
2、do...while循环 :
do
{
循环体 //由语句构成
}
while( 条件表达式 );
do while 循环 与 while循环 大体上没什么区别
区别: while 循环当条件满足时才开始执行循环体。
do while 循环 最少 会执行一次循环体,即使条件不满足。
示例:
#include <stdio.h>
main()
{
int i=2,sum=0;
do
{
printf("我被执行了一次哦!\n");
}while(i<0);
}
结果:虽然 i=2,并且 while 的条件是 i<0;
.不满足循环的条件 但是 循环体内的语句还是被执行了。
3、for 循环:
for ( 循环变量赋初始值 ; 循环条件; 循环变量增长)
{
循环体 // 由语句构成
}
循环变量赋初始值: 循环体内的 循环变量的初始值。
循环条件: 判断是否循环的条件 满足执行循环 不满足跳出循环。
循环变量增长:完成一次循环后执行的语句, 语句一般用作使 循环变量增加 1。 示例:
#include <stdio.h>
main()
{
int i; for(i=0;i<=15;i++) { if(i!=0&&i%4==0) //if控制换行 当i能整除4时 执行下面的语句 { } printf("\n"); //输出 \n 换行
//当i 能整除4时 for循环 已经执行了4次循环也就是 输出了4个数字
//这个时候换行,实现了每输出4个数字换行。i 与循环次数、输出次数。是有一定联系的。
} } printf("%d ",i); //for 循环的输出语句。 printf("\n"); // 循环结束后换行 让 press any key to continue 换行
可以将上述 程序 COPY 到Visual C++ 中运行。
运行结果:
程序 有 if 判断, 有for 循环。 不理解if控制换行的,可以删掉 if 语句块,理解下for循环。
以上为循环的简单介绍 (具体详见 115-120页);
4、循环的嵌套
在循环的循环体中 加入另一个循环 就构成了循环嵌套 示例:
#include <stdio.h>
main()
{
}
结果: int i,j; for(i=1;i<3;i++) //第一层循环 { } printf("第%d章\n",i); { } printf(" 第%d节for(j=1;j<4;j++) //第二层循环
\n",j);
5、认清循环体
C语言中 语句的结束 是以分号 ; 为标志的。 看看下面的两个循环。 #include <stdio.h> main() { } 结果: int i,j;
for(i=0;i<3;i++) { }
printf("第%d次循环
#include <stdio.h> main() { } 结果:
int i,j;
for(i=0;i<3;i++); { }
printf("第%d次循环
\n",i); \n",i);
看似相同的语句,执行结果不同。区别在于:
两个for 循环 最后的括号后有无分号 ; 剩下的语句都是一样的 for(i=0;i<3; i++) { } 格式的 循环体在 花括号内 { } for(i=0;i<3; i++) ; 格式的 循环体在 为空[说明循环体为空] 所以 只输出了一次。
至于为什么显示3次呢? 循环体为空 但 循环结束后执行的语句还是会执行 i 仍然会增加到3 。
红线部分 红线部分
六、一维数组
数组是 一组有序数据的集合 ,数组的每一个元素都属于同一个 数据类型。
定义数组: 类型符 数组名[ 常量表达式 ] ;
如: int a[20]; 定义个一个int(整型)的数组 数组所含元素 是 20个。
注意: 数组不能动态定义,如 int i=2,a [i] ; 这样是不可以的。即 [ ] 中不能放入变量 应该是常量。
数组的引用: 如: 数组 int a [10] 中 10 为数组的长度 含有元素 a[0],a[1]
,
a[2],........a[9]。 引用数组是 没有a[10] 的。[ ] 内的数字 称为数组的下标。 它是从 0 开始的。
数组的初始化:初始化,即在定义式数组是给数组元素赋值。照抄书上的 4 种初始化方法。
(1)定义数组时对 全部 或 个别 数组元素赋值。
如 : int a[5]= {0,1,2,3,4 } ; 在等号的右边 将数组各元素 按顺序 放在 花括号 { } 内 用 逗号 , 分割。 可以全部赋值 也可以对一部分赋值 如: int a[5]={0,1,2} 这样赋值 剩下的数组元素 系统会默认 赋值 0。
(2)定义数组时 不指定长度
int a[]={0,1,2,3,4,5,6,7} 数组长度 为 8。
一维数组举例:
#include <stdio.h>
main()
{
}
七、二维数组
定义二维数组: 数据类型符 数组名[ 常量表达式 ]
例如:int a[3][4]; 它有 3行 4 列 共 12个元素。
.可以将它理解为 一维数组中 每个元素都是一个数组。 将它看着一个一维数组: 含有 a[0] , a[1] , a[2] 三个元素。 每个元素的值 都是一个包含4个元素的数组。 a[0]---- a[0][0] a[0][1] a[0][2] a[0][3]
a[1]---- a[1][0] a[1][1] a[1][2] a[1][3]
a[2]---- a[2][0] a[2][1] a[2][2] a[0][3]
二维数组的赋初值: (书上 151页)
(1) 分行赋初值 :
如:int a[3][4]={ {1,2,3,4 } , {5,6,7,8 } , {9,10,11,12 } } ;
一个大括号将所有元素包含, 里面的括号{} 第一个{} 对于 第一行的元素 即 a[0][0]~~~a[0][3]。剩下的依次类推。
int a[5],i; for(i=0;i<5;i++) { } for(i=0;i<5;i++) { } printf("%d\n",a[i]); scanf("%d",&a[i]); 结果: 第一个 for循环 控制输入 scanf(“%d”,&a[i]); &a[i] 求得a[i] 的地址。 循环依次改变 i的值 scanf 也就依次取得a[i]数组的值。 输出循环同理。
(2) 将所有元素写在一个大括号内
如:int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12} 效果和第一个相同 但不好阅读 第一种界限更清晰
(3) 对部分元素赋初值
如:int a[3][4]={ {1 } , {2,3} , {4,5,6,7} } ; 剩下 未赋初值的元素 系统自动赋值 0。
(4) 不指定长度 赋初值
如: int a[][4]={ 1,2,3,4,5,6,7,8,9,10,11,12} 但是 第二维 的数组长度不能省略 系统会自动判断 第一维数组的长度。
二维数组的示例:
#include <stdio.h>
int main()
{
int i , k, a[ ][2]={9,6,4,2,1,5};
for (i=0;i<3;i++)
{
for (k=0;k<2;k++)
{
printf("%3d",a[i][k]);
}
printf("\n");
}
}
输出结果: int a[ ][2]={9,6,4,2,1,5}; 定义二维数组 属于不指定长度 定义 由定义的方法 可知 二维数组含有 3行 2列。 所以用两个for循环 输出 第一个循环 负责 行向下移动 输出 第二个循环 负责 列向右循环输出
第二篇:大一上学期C语言期末复习总结和模拟试题带答案
易错点
C语言中易犯的错误
对初学C语言的人来说,经常会出一些连自己都不知道错在哪里的错误.看着有错的程序,不知该如何改起,一些C编程时常犯的错误,写给各位学员以供参考.
****************************************************************************************
1.书写标识符时,忽略了大小写字母的区别.
main() {
int a=5;
printf("%d",A); }
编译程序把a和A认为是两个不同的变量名,而显示出错信息.
C认为大写字母和小写字母是两个不同的字符.习惯上,符号常量
名用大写,变量名用小写表示,以增加可读性.
****************************************************************************************
2.忽略了变量的类型,进行了不合法的运算.
main() {
float a,b;
printf("%d",a%b); }
%是求余运算,得到a/b的整余数.整型变量a和b可以进行求余
运算,而实型变量则不允许进行"求余"运算.
****************************************************************************************
3.将字符常量与字符串常量混淆.
char c; c="a";
在这里就混淆了字符常量与字符串常量,字符常量是由一对单
引号括起来的单个字符,字符串常量是一对双引号括起来的字符序
列.C规定以"\"作字符串结束标志,它是由系统自动加上的,所
以字符串"a"实际上包含两个字符:'a'和'\',而把它赋给一
个字符变量是不行的.
**************************************************************************************** 4.忽略了"="与"=="的区别.
在许多高级语言中,用"="符号作为关系运算符"等于".
如在BASIC程序中可以写
if (a=3) then ?
但C语言中,"="是赋值运算符,"=="是关系运算符.如:
if (a==3) a=b;
前者是进行比较,a是否和3相等,后
者表示如果a和3相等,把
b值赋给a.由于习惯问题,初学者往往会犯这样的错误.
**************************************************************************************** 5.忘记加分号.
分号是C语句中不可缺少的一部分,语句末尾必须有分号.
a=1 b=2
编译时,编译程序在"a=1"后面没发现分号,就把下一行"b
=2"也作为上一行语句的一部分,这就会出现语法错误.改错时,
有时在被指出有错的一行中未发现错误,就需要看一下上一行是否
漏掉了分号. {
z=x+y; t=z/100;
printf("%f",t); }
对于复合语句来说,最后一个语句中最后的分号不能忽略不写
**************************************************************************************** 6.多加分号.
对于一个复合语句,如: {
z=x+y; t=z/100;
printf("%f",t); };
复合语句的花括号后不应再加分号,否则将会画蛇添足.
又如:
if (a%3==0); I++;
本是如果3整除a,则I加1.但由于if (a%3==0)后多加了分号
,则if语句到此结束,程序将执行I++语句,不论3是否整除a,I都
将自动加1.
再如:
for (I=0;I<5;I++); {scanf("%d",&x); printf("%d",x);}
本意是先后输入5个数,每输入一个数后再将它输出.由于for
()后多加了一个分号,使循环体变为空语句,此时只能输入一个数
并输出它.
****************************************************************************************
7.输入变量时忘记加地址运算符"&".
int a,b;
scanf("%d%d",a,b);
这是不合法的.Scanf函数的作用是:
按照a,b在内存的地址将a,
b的值存进去."&a"指a在内存中的地址.
**************************************************************************************** 8.输入数据的方式与要求不符.
①scanf("%d%d",&a,&b);
输入时,不能用逗号作两个数据间的分隔符,如下面输入不合法:
3,4
输入数据时,在两个数据之间以一个或多个空格间隔,也可用回车
键,跳格键tab.
②scanf("%d,%d",&a,&b);
C规定:如果在"格式控制"字符串中除了格式说明以外还有其它
字符,则在输入数据时应输入与这些字符相同的字符.下面输入是
合法的:
3,4
此时不用逗号而用空格或其它字符是不对的.
3 4 3:4
又如:
scanf("a=%d,b=%d",&a,&b); 输入应如以下形式: a=3,b=4
****************************************************************************************
9.输入字符的格式与要求不一致.
在用"%c"格式输入字符时,"空格字符
"和"转义字符"都作为 有效字符输入.
scanf("%c%c%c",&c1,&c2,&c3);
如输入a b c
字符"a"送给c1,字符" "送给c2,字符"b"送给c3,因为%c
只要求读入一个字符,后面不需要用空格作为两个字符的间隔.
****************************************************************************************
10.输入输出的数据类型与所用格式说明符不一致.
例如,a已定义为整型,b定义为实型
a=3;b=4.5;
printf("%f%d\n",a,b);
编译时不给出出错信息,但运行结果将与原意不符.这种错误尤其
需要注意.
****************************************************************************************
11.输入数据时,企图规定精度.
scanf("%7.2f",&a);
这样做是不合法的,输入数据时不能
规定精度. **************************************************************************************** 12.switch语句中漏写break语句. 例如:根据考试成绩的等级打印出百分制数段. switch(grade) { case 'A':printf("85~100\n"); case 'B':printf("70~84\n"); case 'C':printf("60~69\n"); case 'D':printf("<60\n"); default:printf("error\n"); 由于漏写了break语句,case只起标号的作用,而不起判断作用. 因此,当grade值为A时,printf函数在执行完第一个语句后接着执 行第二,三,四,五个printf函数语句.正确写法应在每个分支后 再加上"break;".例如 case 'C':printf("60~69\n");break; **************************************************************************************** 13.忽视了while和do-while语句在细节上的区别. (1)main() {int a=0,I; scanf("%d",&I); while(I<=10) {a=a+I; I++; } printf("%d",a); } (2)main() {int a=0,I; scanf("%d",&I); do {a=a+I; I++; }while(I<=10); printf("%d",a); } 可以看到,当输入I的值小于或等于10时,二者得到的结果相同. 而当I>10时,二者结果就不同了.因为while循环是先判断后执行 ,而do-while循环是先执行后判断.对于大于10的数while循环一 次也不执行循环体,而do-while语句则要执行一次循环体. ****************************************************************
************************ 14.定义数组时误用变量. int n; scanf("%d",&n); int a[n]; 数组名后用方括号括起来的是常量表达式,可以包括常量和符号常 量.即C不允许对数组的大小作动态定义. **************************************************************************************** 15.在定义数组时,将定义的"元素个数"误认为是可使的最大下 标值. main() {static int a[10]={1,2,3,4,5,6,7,8,9,10}; printf("%d",a[10]); } C语言规定:定义时用a[10],表示a数组有10个元素.其下标值由0 开始,所以数组元素a[10]是不存在的. **************************************************************************************** 16.初始化数组时,未使用静态存储. int a[3]={0,1,2}; 这样初始化数组是不对的.C语言规定只有静态存储(static)数组 和外部存储 (exterm)数组才能初始化.应改为: static int a[3]={0,1,2}; **************************************************************************************** 17.在不应加地址运算符&的位置加了地址运算符. scanf("%s",&str); C语言编译系统对数组名的处理是:数组名代表该数组的起始地址 ,且scanf函数中的输入项是字符数组名,不必要再加地址符&.应 改为:scanf("%s",str); **************************************************************************************** 18.同时定义了形参和函数中的局部变量. int max(x,y) int x,y,z; {z=x>y?x:y; return(z); } 形参应该在函数体外定义,而局部变量应该在函数体内定义.应改 为: int max(x,y)
int x,y;
{int z;
z=x>y?x:y;
return(z); }
试题一
一、单项选择题(共30分,每题1分)C1. 下列不正确的转义字符是A.\\ B.\‘ C.074 D.\02. 不是C语言提供的合法关键字是
A.switch B.cher C.case D.default
3.正确的标识符是( )A.?a B.a=2 C.a.3 D.a_3 4.下列字符中属于键盘符号的是A.\ B.\n C.\t D.\b .下列数据中属于“字符串常量”的A.ABC B.“ABC” C.‘ABC’ D.‘A’6.char型常量在内存中存放的是A.ASCII码 B.BCD码 C.内码值 D.十进制代码值
7.设a为5,执行下列语句后,b的值不为2的是( ) A.b=a/2 B.b=6-(——a) C.b=a%2 D.b=a>3?2:2 8.在以下一组运算符中,优先级最高的运算符是( )
A.<= B.= C.% D.&&
9.设整型变量i的值为3,则计算表达式i——i后表达式的值是() A.0 B.1 C. 2 D.表达式出错
10.设整型变量a,b,c均为2,表达式a+++b+++c++的结果是( ) A.6 B.9 C.8 D.表达式出错
11.若已定义x和y为double类型,则表达式x=1,y=x+3/2的值是( )
A.1 B.2 C.2.0 D.2.5 12.设a=1,b=2,c=3,d=4,则表达式:a<b?a:c<d?a:d的结果是( ) A.4 B.3 C.2 D.1 13.设a为整型变量,不能正确表达数学关系:10<a<15的C语言表达式是()
A.10<a<15 B.a= =11 || a= =12 || a= =13 || a= =14
C.a>10&&a<15 D.!(a<=10)&&!(a>=15)
14.若有以下定义:char a、 int b 、 float c 、 double d,则表达式a*b+d-c值的类型为()
A.float B.int C.char D.double
15.表达式“10!=9”的值是( ) A.true B.非零值 C.0 D.1
16.循环语句 for (x=0,y=0; (y!=123)|| (x<4);x++);的循环执行( )
A.无限次 B.不确定次 C.4次 D.3次
17.在C语言中,下列说法中正确的是( )
A. 不能使用“do while”的循环 B.“do while”的循环必须使用break语句退出循环
C.“do while”的循环中,当条件为非0时将结束循环
D.“do while”的循环中,当条件为0时将结束循环。
18.设a,b为字符型变量,执行scanf(“a=%c,b=%c”,&a,&b)后使a为‘A’,b为‘B’,从键盘上的正确输入是( )
A.‘A’ ‘B’ B.‘A’,‘B’ C.A=A,B=B D.a=A,b=B 19.设i,j,k均为int型变量,执行完下面的for循环后,k的值为( )
for (i=0,j=10;i<=j;i++,j——)k=i+j;
A.10 B.9 C.8 D.7 20.设有定义:char
s[12]={“string”};则printf (“%d\n”,strlen(s));的输出是( )
A.6 B.7 C.11 D.12 21.合法的数组定义是()
A.int a[]={“string”}; B.int a[5]={0,1,2,3,4,5}; C.char a={“string”}; D.char a[]={0,1,2,3,4,5}
22.函数调用strcat(strcpy
(str1,str2),str3)的功能是() A. 将字符串str2复制到字符串str1中后再将字符串str3连接到字符串str1之后
B. 将字符串str1复制到字符串str2中后再连接到字符串str3之后 C. 将字符串str1复制到字符串str2中后再复制到字符串str3之后 D. 将字符串str2连接到字符串str1中后再将字符串str1复制到字符串str3中
23.设有如下定义,则正确的叙述为( )
char x[]={“abcdefg”}; char y[]={‘a’,‘b’,‘c’,‘d’,‘e’,‘f’,‘g’}; A.数组x和数组y等价
B.数组x和数组y的长度相同 C.数组x的长度大于数组y的长度
D.数组x的长度小于数组y的长度
24.设有单精度变量f,其值为13.8.执行语句“n=((int)f)%3;”后,n的值是()
A.4 B.1 C.4.333333 D.4.6
25.执行语句“f=(3.0,4.0,5.0),(2.0,1.0,0.0);”后,单精度变量f的值是( )
A.3.0 B.5.0 C.2.0 D.0.0
26.设a、b均为整型变量,下列表达式中不是赋值表达式的是( ) A.a=3,4,
5 B.a=3*2 C.a=a&&b D.a=b=4
27.表达式“1?(0?3:2): (10?1:0)”的值为( ) A.3 B.2 C.1 D.0 28.sizeof(double)的结果值是( )A.8 B.4 C.2 D.出错
29.指出下面正确的输入语句是( )
A.scanf (“a=b=%d”,&a,&b); B.scanf(“a=%d,b=%f”,&m,&f);
C.scanf(“%3c”,c); D.scanf(“%5.2f,&f);
30.若有以下定义和语句,且0<=i<5,则( )是对数组元素地址的正确表示
int a[]={1,2,3,4,5},*p,i;
p=a;
A.&
(a+i) B.&p C.a++ D.&p[i]
二、填空(20分,每空1分)1.在内存中存储“A”要占用( 2 )个字节,存储‘A’要占用( 1 )字节。 2.符号常量的定义方法是(#define 符号常量 常量 )。
3.能表述“20<x<30或x<-100”的C语言表达式是( (x>20 && x<30) || x<-100 )。
4.结构化程序设计方法规定程序或程序段的结构有三种:顺序结构、(分支结构 )和( 循环结构 )。
5.C语言共提供了三种用于实现循环结构的流程控制语句,它们是( while )、( do-while )和( for )。
6.若在程序中用到“putchar”,应在程序开头写上包含命令
(.#include “stdio.h” ),若在程序中用到“strlen()”函数时,应在程序开头写上包含命令( # include “string.h” )。
7.设有定义语句“static int a[3][4]={{1},{2},{3}}”,则a[1][1]值为( ),a[2][1]的值为( )。
8.“*”称为( 指针运算符 )运算符,“&”称为( 地址运算符 )运算符。
9.赋值表达式和赋值语句的区别在于有无( 分号 )号。 10.用{}把一些语句括起来称为( .复合语句 )语句
11.设a=12、b=24、c=36,对于“scanf (”a=%d,b=%d,c=%d“,&a,&b,&c);”,输入形式应为(a=12,b=24,c=36 )
12.表达式“sqrt(s*(s-a)*(s-b)*(s-c));”对应的数学式子为( ) 13.C语言编绎系统在判断一个量是否为“真”时,以0代表“假”,以( 非0 )代表“真” 三、读程序(30分) 1. main()
{ int a=10,b=4,c=3; if (a<b) a=b; if (a<c) a=c;
printf(“%d,%d,%d”,a,b,c);}
2. main( ) {int y=9;
for (;y>0;y——)
if (y%3= = 0) {printf (“%d”,——y);continue;} 3. main() { int x,y;
for (y=1,x=1;y<=50;y++)
{ if (x>=10) break; if (x%2= =1) { x+=5;continue;} x-=3; }
printf (“%d”,y)4. main() { static int a[][3]={9,7,5,3,1,2,4,6,8};
int i,j,s1=0,s2=0; i,j,s1=0,s2=0;
for (i=0;i<3;i++) for (j=0;j<3;j++) { if (i= =j )s1=s1+a[i][j]; if (i+j= =2) s2=s2+a[i][j]; }
printf (“%d\n%d\n”,s1,s2);} 5. main()
{static char a[]={‘*’,‘*’,‘*’,‘*’,‘*’}; int i,j,k; for (i=0;i<5;i++) {printf (“\n”); for (j=0;j<i;j++) printf (“%c”,‘ ’);
for (k=0;k<5;k++) printf (“%c”,a[k]); } } 6. int fac(int n)
{static int f=1; f=f*n; return(f);}
main()
{int i;
for (i=1;i<=5;i++)
printf (“%d!=%d\n”,i,fac(i));}
四、编写程序(20分) 1. 编一个程序,输入X的值,按下列公式计算并输出Y的值 2. 编程序按下列公式计算e的值(精度为1e-6)
e=1+1/1!+1/2!+1/3!+??1/n! 参考答案:
一、单项选择题(共30分,每题1分)
1.C 2. B 3. D 4. A 5. B 6.
A 7. C 8. C 9. A 10. A 11.
C 12. D 13. A 14. D 15. D 16.
C 17. D 18. D 19. A 20. B 21.
D 22. A 23. C 24. B 25. D 26.
D 27. B 28. A 29. B 30. C ;}二、填空(20分,每空1分) 1.2,1
2.#define 符号常量 常量 3.(x>20 && x<30) || x<-100 4.分支结构,循环结果 5.while do for
6.#include “stdio.h” # include “string.h” 7.a[1][1]=0 , a[2][1]=0
8.* 指针运算符, &地址运算符
9.分号;
10.复合语句
11.a=12,b=24,c=36 13.非0
三、读程序(30分) 1.结果:10,4,3 2.结果:8 5 2 3.6 4.18 10 5.***** 6.5!=120
四、编写程序(20分1. Main() {int x,y; scanf (“%d”,&x);
if (x<=1) y=x; (x<=1) y=x; else if (x>1&&x<10) y=2*x-1; else y=3*x-11;
printf (“x=%d,y=%d\n”,x,y);
}bsp; }
2.Main()
B、"a" C、"\n"
{float E; int n; s=0;E=1;
试题二
一、单项选择题(每小题2分,共50
分)
1、一个C程序的执行是从___A__。
A、本程序的main函数开始,到main
函数结束
B、本程序的main函数开始,到本
程序文件的最后一个函数结束
C、本程序文件的第一个函数开始,
到本程序文件的最后一个函数结束
D、本程序文件的第一个函数开始,
到本程序main函数结束
2、C语言程序的基本单位是___C___。
A、程序行
B、语句
C、函数 D、字符
3、请选出可用作C语言用户标识符的
一组标识符___B___。
A、void B、a3_b3 C、For D、2a
define _123
-abc DO
WORD IF
ase sizeof
4、假定x和y为double型,则表达
式(x=2,y=x+5/2)的值是__C__ 。
A、4.500000
B、4
C、4.000000 D、2.000000
5、下列可以正确表示字符型常量的是
___D__。
A、297
D、'\t'
6、在C语言中,要求运算数必须是整
型的运算符是__D__。
A、/ B、++
C、*= D、%
7、C语言中,复合语句的构成是将一
系列语句置于__C__。 A、begin与end之间 B、方框号“[ ]”之间
C、花括号“{ }”之间
D、圆括号“( )”之间
8、有如下程序段,对应正确的数据输
入是___A___。
float x,y;
scanf(”%f%f”, &x,&y);
printf(”a=%f,b=%f”, x,y);
A、2.04<回车>
B、2.04,5.67<回车>
5.67<回车>
C、A=2.04,B=5.67<回车>
D、2.045.67<回车>
9、以下程序段的输出结果是___D__。
int a=5678;
printf(”%2d\n”, a);
A
、提示出错、无结果
B、56
C、78
D、5678
10、已知:char ch='A';则下列表达
式的值是__B__。
ch = (ch>='A'&&ch<='Z') ?
(ch+32) : ch;
A、A B、a C、
Z D、z
11、下列描述,正确的是___B__ 。
A、表达式3.91%5是合法的
B、用b=89作为while循环的条
件是合法的
C、逗号表达式是没有值和类型的
D、字符型变量和int型变量的操
作完全不同
12、阅读以下程序:
main() B、把x和y按从小到大排列 {int x; C、无确定结果 scanf("%d",&x); D、交换变量x和变量y的值 if(x--<5) printf("%d",x); 16、以下程序的输出结果是 ___A__ 。 else printf("%d",x++); main() } {int a, b; 程序运行后,如果从键盘上输人5, for(a=1, b=1; a<=100; a++) 则输出结果是__B__ 。 {if(b>=10) break; A、3 B、 4 if (b%3==1) C、 5 D、 6 13、下列程序的运行结果是___C__。 #include ”stdio.h” main() { int k; k=3; switch(k) { case 1: printf(”%d\n”, k++); case 2: printf(”%d\n”, k++); case 3: printf(”%d\n”, k++); case 4: printf(”%d\n”, k++); break; default: printf(”Full!\n”); } } A、3 B、4 C、3 D、4 4 4 14、设a、b、c、d、m、n均为int型变量,且a=5、b=6、c=7、d=8、 m=2、n=1,则逻辑表达式(m==a<b)&&(n==c<d) 的值为__A__。 A、0 B、 1 C、2 D、 3 15、设x、y和temp均为long int型变量,则以下语句: {temp=x; x=y; y=temp;} 的功能是__D__。 A、把x和y按从大到小排列 { b+=3; continue; } }
printf("%d\n",a); } A、4 B、6 C、5 D、101 17、执行以下程序后输出的结果是___D__。 main()
{ int y=10; do {y--;}
while(--y); printf("%d\n",y--);}
A、-1 B、1 C、8 D、0
18、执行以下程序后输出的结果是___B__。 main()
{int i, j, w=0; for(i=4; i; i--) for(j=1;j<=2;j++) w=w+i*j; w=i*j;
printf("%d\n",w); } A、4 B、0 C、1 D、30 19、以下程序运行后,输出结果是__C__。 main() { int n[5]={3,3,3},i,k=2; for(i=0;i<k;i++)
n[i]=n[i]+1; printf("%d\n",n[k]);
}
A、4 B、9 C、9 6 1 C、3 D、不确定的值 D、3 5 7 20、以下程序的输出结果是 __A__ 。 23、若定义:float x=3.14159,*p=&x; f ( int a) 则printf("%f\n",*p++);的输出 {int b=0; 结果为__C__ 。 static int c = 3; A、无确定值 b++; c++; B、x的地址 return(a+b+c); C、3.14159 } main() {int a = 2, i; for(i=0;i<3;i++) printf("%d\n",f(a)); } A、 7 B、 7 C、 7 D、 7 8 9 10 7 9 11 13 7 21、设C程序如下: #define ABC(x) x*x #include"stdio.h" main() {int a=3,b; b=ABC(a+1); printf("b=%d", b); } 上述程序运行输出的结果是__D_ 。 A、b=4 B、b=a+1 C、b=16 D、b=7 22、以下程序的输出结果是__B__。 main() {int i, a[10]; for(i=9;i>=0;i--) a[i]=10-i; printf("%d %d %d",a[1],a[6],a[9]); } A、1 6 9 B、9 4 1 D、4.14159 24、以下程序的输出结果是___B__ main() {char b[]="Language"; char *p=b; printf("%c ",*(b+2)); p=p+7; printf("%c\n",*p++); } A、2 7 B、n e C、a g D、n u 25、下列程序的输出结果是___A__。 #include "stdio.h" main() { int a[]={1,2,3,4,5,6,7,8,9,0}, i, s, *p; p=a;s=0; for(i=0;i<=9;i++) s+=*p++; printf("%d\n", s); } A、45 B、44 C、0 D、9 二、判断题(每小题1分,共10分) 1.语句int *point;中的point是指针变量名。( T ) 2.主函数和其它函数之间可以相互调用。( F ) 3.puts( )和gets( )函数只能输入或输出一个字符。( F ) 4. 可以对字符型数组元素进行整体输入、输出。( T )
5.do-while语句构成的循环不能用数的三位数的个数,请选择填空。
其他语句构成的循环来代替。 #include<stdio.h> ( F ) void main()
6.在一个函数内的复合语句中定义的 { int i, j, k, w, count = 0;
变量可以在本函数范围内有效。 for( (3) ; i<=9; i++) (F ) 7.函数必须有返回值,否则不能使用函数。( F ) 8.for(;;);语句相当于while(1);语句。( T ) 9.C程序的执行总是从第一个定义的函数开始。( F ) 10.C语言中的关键字专门用作语言的特定成分,而不能作为一般标识符使用。( T ) 三、程序填空题(每空2分,共10分) 1、下面程序完成判断某一个数m是否为素数,如果是则输出"m is a prime!",否则就输出"m is not a prime!",请选择填空。 main() { int i, m; scanf("m=%d", &m); for(i=2; i<m; i++) { if(m%i==0) { printf("%d is not a prime!\n", m); (1) } else (2) } if(i==m) printf("%d is a prime!\n", m); } (1)、 A、break B、continue C、break; D、continue; (2)、 A、break B、break; C、continue D、continue; 2、以下程序的功能是:求出用数字0至9组成没有重复数字且是13倍 for(j=0;j<=9; j++) for(k=0; k<=9;k++)
if( (4) ) { w =
i*100+j*10+k; if( (5) ) count++; } printf("\n count=%d\n", count); } (3)、 A、i=0 B、i=1 C、i=9 D、i=-1 (4)、 A、i!=j B、i!=j ||j!=k C、i!=j&& j!=k D、i!=j&& j!=k && k!=i (5)、 A、w%13=0 B、w/13=0 C、w%13==0 D、w/13==0 四、编程题(第1小题12分,第2小题18分,共30分) 1、从键盘输入一个4位数的正整数n,将该数反序输出。例如,若输入的是
1357,则输出的是7531。 要求:1)利用VC++编译系统进行
调试、运行
2)对输入的正整数n的合
法性进行检查 3)将源程序以“编程题
1.c”为文件名保存在
网络盘(K:盘)的考生文件夹上,用其它文件名保存或保存在其他
地方均不能得分
2、已知一组字符串a[27]="jjyyzzabcdefgJJYYZZABCDEFG"; 请编一程序,将其 中的小写字母换成其前一个字母,即z换成y,y换成x,...,b换成a,若是a则换成z。然后对数组a[27]从小到大排序,并输出排序后的字符串。
要求:1)利用VC++编译系统进行调试、运行
2)先输出原字符串(即未做任何改变的字符串),最后输出排序后
的字符串
3)将源程序以“编程题
2.c”为文件名保存在网络盘(K:盘)的考生文件夹上,用其它文件名保存或
保存在其他地方均不能得
分