选择题部分
(1)下述程序的输出结果是( )
main()
{
int x=-1,y=4,k;
k=x++<=0&&!(y–<=0);
printf("%d,%d,%d",k,x,y);
}
A: 0,0,3
B: 0,1,2
C: 1,0,3
D: 1,1,2
正确答案:C
我的选择:D
解析:
j=++i;(i的值先加1,再赋给j,j在输出)
j=i++;(先将i的值赋给j,j的值不变,i的值加一)
所以x++<=0;是真的所以k=1;
x=0;y=3;
故结果选C.
(2)设有:int a=1,b=2,c=3,d=4,m=2,n=2; 执行(m=a>b)&&(n=c>d)后n的值是( )。
A: 0
B: 2
C: 3
D: 4
正确答案:B
我的选择:A
解析:有运算符的优先来看,>比=要先进行,又因为c<d所以为假
故可以得出n=0
(3)执行语句for(i=1;i++<4;) ;后变量i的值是( )。
A: 3
B: 4
C: 5
D: 不定
正确答案:C
我的选择:A
解析:明确i++的含义,然后再利用循环求出执行完语句最后的变量的值。
(4)若有定义:int a=7; float x=2.5,y=4.7; 则表达式x+a%3*(int)(x+y)%2/4的值是( )。
A: 2.500000
B: 2.750000
C: 3.500000
D: 0.000000
正确答案:A
我的选择:B
解析:根据运算符的法则来算。
总结以上题知识点
C语言中规定了运算符的优先级,还规定了运算符的结合性。
(1)、在表达式求值时,先按运算符的优先级别顺序执行。
(2)、如果在一个运算对象的两侧的运算符的优先级别相同,则按规定的“结合方向”处理。
(3)、算数运算符时自左至右,赋值运算符是自右至左。其他复杂的在遇到的时候可以适当的查一下表。
(5)下面程序段的运行结果是__________。
char *s=“abcde”;
s+=2; printf(“%s”,s);
A: cde
B: 字符’c’
C: 字符’c’的地址
D: 无确定的输出结果
正确答案:A
我的选择:B
解析:
(6) 若有以下定义和赋值语句,则对b数组的第i行第j列(假设i,j已正确说明并赋值)元素的非法引用为______________。
int b[2][3]={0}, (*p)[3];
p=b;
A: ((p+i)+j)
B: *(p[i]+j)
C: (p+i)+j
D: ((p+i))[j]
正确答案:C
我的选择:D
解析:指针如何表示数组,及其互换的。
(7)请读程序:
main()
{
int x=1, y=0, a=0, b=0;
switch(x)
{
case 1:
switch(y)
{case 0:a++;break;
case 1:b++;break;
}
case 2:
a++; b++; break;
}
printf(“a=%d, b=%d\n”, a, b);
}
上面程序的输出结果是( )。
A: a=2,b=1
B: a=1,b=1
C: a=1,b=0
D: a=2,b=2
正确答案:A
我的选择:C
解析:注意后面的分号,看是否有语句结束。
(8)错误的转义字符是()
A: ‘\091’
B: ‘\’
C: ‘\0’
D: ‘’’
正确答案:A
我的选择:B
解析:A项只是个单纯的斜杠,转义符一般成对出现或者后面有0且无其他数字。
判断题
(1)数组定义后,数组名表示该数组所分配连续内存空间中第一个单元的地址,即首地址。(正确)
(2)数组定义后,只能引用单个的数组元素,而不能一次引用整个数组。(正确)
思路解析: 数组定义后,每个位置上都有相应的数组元素了。
(3)若有定义int a[]={2,4,6,8,10},a[1]和a++表示的含义相同。(错误)
**思路解析:**不相同的,a[1]=4而,a++=2
(4)数组初始化时,初始值个数小于数组元素的个数,C语言自动将剩余的元素初始化为初始化列表中的最后一个初始值。(错误)
思路解析: 初始值的个数小于数组元素的个数,C语言不会自动将剩余元素初始值化为初始值列表中的最后一个初始值,而是自动补零。
(5)对于定义int a[5];可以通过语句scanf("%d",a);输入全部元素的值。(错误)
思路解析: %d是表示整型,但若要输入全部数组元素不能用此方式。
(6)在C语言中能逐个地使用下标变量,也能一次引用整个数组。(错误)
思路解析:不能一次引用整个数组
(7)数组名就是一个指针常量,指向数组的首元素(或者说代表了数组的首地址)。(错误)
思路解析:数组名不是指针,是元素首地址
编程题
(1)求因子
要求:键盘输入一个正整数,输出该正整数的所有因子,每行一个,隔一行输出一个。输出的因子从小到大。
样例输入:
10
样例输出:
1
2
5
10
正确代码:
#include<stdio.h>
int main()
{
int a,i,b;
scanf("%d",&a);
for(i=1;i<=a;i++)
{
if(0==a%i)
{
printf("%d\n",i);
}
}
return 0;
}
思路:
首先应该明白因子是什么?
其次如何能确保输出的是循环,循环的要求又是什么;
然后就是这样算出来,考虑限制条件,i的初值一定不能是0;
(2)求一个给定的m×n矩阵各行元素之和。
输入格式:
输入第一行给出两个正整数m和n(1≤m,n≤6)。随后m行,每行给出n个整数,其间
以空格分隔。
输出格式:
每行输出对应矩阵行元素之和。
输入样例:
3 2
6 3
1 -8
3 12
输出样例:
9
-7
15
正确代码:
#include<stdio.h>
int main()
{
int m,n,i,j;
scanf("%d%d",&m,&n);
int a[m][n],sum[m]={
0};
for(i=0