sum+=j;
if(sum==k)
printf("%ld*%ld*%ld=%ld=from%ldto%ld\n",n,n,n,sum,i,j);
}
}
12)完善程序:
下面程序的功能是打印100以内个位数为6且能被3整除的所有数。
#include"stdio.h"
voidmain()
{inti,j;
for(i=0;i<10;i++)
{j=i*10+6;
if()continue;
printf("%d",j);}
}
13)阅读程序,写出程序的输出结果。
#include
voidmain()
{intk=1;charc='A';
do
{switch(c++)
{case'A':
k++;break;
case'B':
k--;
case'C':
k+=2;break;
case'D':
k=k%2;continue;
case'E':
k=k*2;break;
default:
k=k/3;
}
k++;
}while(c<'F');
printf("k=%d\n",k);
}
14)写出程序的输出结果。
#include
voidmain()
{inti=1;
while(i<=15)
if(++i%3!
=2)
continue;
else
printf("%d",i);/*该语句是否在循环中?
*/
printf("\n");/*该语句是否在循环中?
*/
}
15)编程将一个键盘输入的正整数分解质因数。
例如:
输入90,打印出90=2*3*3*5。
16)猴子吃桃问题:
几个猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。
第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
以后每天早上都吃了前一天剩下的一半多一个。
到第10天早上想再吃时,见只剩下一个桃子了。
编程求第一天共摘了多少桃子。
(提示:
采取逆向思维的方法,从后往前推断。
)
/*有1020个西瓜,第一天卖一半多两个,以后每天卖剩下的一半多两个,问几天以后能卖完?
*/
main()
{
intday=0,x1=1020,x2;
while(x1)
{x2=x1/2-2;
x1=x2;
day++;
}
printf("day=%d\n",day);
system("pause");
}
第2部分数组
1、单项选择题
1)以下对数组的初始化方法中,正确的是。
A、inta[]='A','B','C';B、inta[5]={0,1,2,3,4,5};
C、chara={'A','B','C'};D、inta[]={0,1,2,3,4,5};
2)若要判断两个字符串str1和str2是否相等,应选用的函数是。
A、strcat(str1,str2)B、strcpy(str1,str2)
C、strcmp(str1,str2)D、strstr(str1,str2)
3)以下对字符数组初始化的方法中,错误的是。
A、charstr[]={"Hello"};B、charstr[]="Hello";
C、charstr[]={Hello};D、charstr[]={'H','e','l','l','o','\0'};
4)若给出以下定义,则正确的叙述为。
charx[]="abcdefg";
chary[]={'a','b','c','d','e','f','g'};
A、数组x和数组y等价B、数组x和数组y的长度相同
C、数组x的长度大于数组y的长度D、数组x的长度小于数组y的长度
5)若二维数组a有m列,则在a[i][j]前的元素个数为。
A、j*m+i;B、i*m+j;C、i*m+j-1;D、i*m+j+1;
6)若已定义:
intw[10];则在下面表达式中不能表示w[2]的地址的是。
A、w+2B、&w[2]C、&w[0]+2D、w+=2
7)以下对二维数组a的正确说明是。
A、inta[3][]={3,4,2,6,9,2,7,5};B、floata(3,4);
C、inta[][4]={3,4,2,6,9,2,7,5};D、inta[10]={10*1};
8)不正确的字符串赋值或赋初值方式是。
A、charstr[]={'s','t','r','i','n','g','\0'};B、charstr[7]={'s','t','r','i','n','g'};
C、charstr1[10];str1="string";D、charstr1[]="string",str2[]="12345678";
9)若有以下说明和语句,则输出结果是。
p51
chars[12]="abook!
";
printf("%.4s",s);
A、abook!
B、abo
C、abook!
□□□(□代表空格)D、因格式描述不正确,没有确定的输出
10)若有以下说明和语句,则输出的结果是。
charsp[]="\x69\082\n";
printf("%d",strlen(sp));
A、3B、1C、2D、4
11)若两个静态数组A和数组B进行如下初始化,则。
staticcharA[]="ABCDEF";
staticcharB[]={'A','B','C','D','E','F’};
A、A和B完全相同B、A和B只是长度相等
C、A和B不相同,A是字符串,不是数组D、A数组长度比B数组长
12)下列程序的输出结果是。
voidmain()
{intk=3,a[2];
a[0]=k;k=a[1]*10;
printf("%d\n",k);
}
A、10B、30C、33D、不定值
13)要定义一个连续10个字节的存储空间,以下定义正确的是。
A、charss[10];B、intss[10];C、floatss[10];D、doubless[10];
14)有一数组intnum[][4]={11,12,13,14,15,16,17,9,8,7,6,5},执行语句scanf("%d",&num[2][3]);时键盘输入值为0,则数组中的值应为。
A、11,12,13,14,0,0,0,0,0,0,0,0B、11,12,13,14,15,16,17,9,8,7,6,0
C、11,12,13,14,15,16,17,0,8,7,6,5D、11,12,13,14,15,16,17,9,8,7,6,5
15)有一数组如下定义
inta[6]={1,2,3,4,5};
执行for(i=0;i<6;i++)
printf("%d",a[i]);输出的结果是。
A、123456B、12345随机值C、123450D、123455
16)执行以下程序,若输入数据为:
abcd1234efgh,则程序的输出结果是。
voidmain()
{charstr[13];
scanf("%s",str);
printf("%s\n",str);
}
A、abcdB、abcd1234C、efghD、abcd1234efgh
17)若有声明语句“intM[10],N[3][3];”,则以下对数组元素赋值的操作中,未出现越界访问的是。
A、N[0][3]=0B、M[10]=0C、N[3][0]=0D、M[-1]=0
18)已定义一个数组str存放字符串,要从键盘上接收一串字符到str中,正确的方法是。
A、gets(str);B、gets(&str);C、scanf("%c",str);D、scanf("%s",&str);
19)有一数组charstr[60],要将windows存放到此数组的正确语句是。
A、get(str);B、scanf("%s",str);C、scanf("%s",&str);D、puts(str);
20)C语言中,存储字符串"ABC"占用的字节数(即函数sizeof(a)的值)和字符串长度(即函数strlen("ABC")的值)分别是。
A、3、4B、4、3C、3、3D、4、4
21)设有说明:
“charstr[100];”,并假设已输入一个字符串至str数组中,则输出该字符串的printf函数调用语句的格式为。
A、printf("%d\n",&str);B、printf("%c\n",str);
C、printf("%s\n",str);D、printf("%s\n",&str);
22)下列描述正确的是。
A、数组名就是本数组在存储空间中的起始地址
B、数组名就是一个符号,在程序中没有实际的意义
C、数组名就是存放数组中的第一个元素的存储单元
D、在程序中数组不能单独使用,必须带[]使用
23)命题“当两个字符串s1和s2相等时为真,否则为假”的C语言表达式为。
A、s1==s2B、s1=s2C、!
strcmp(s1,s2)D、strcmp(s1,s2)
24)有一数组inta[8]={1,2,3,4,5,6,7,8},在执行scanf("%d",&a[a[5]%3+1]);时键盘输入值为0,则数组中的值为。
A、12045678B、12305678
C、12340678D、10345678
25)若有以下说明和语句,则输出结果是。
charstr[]="\"c:
\\abc.dat\"";
printf("%s",str);
A、符串中有非法字符B、\"c:
\\abc.dat\"C、"c:
\abc.dat"D、"c:
\\abc.dat
26)有以下语句:
intb;charc[10];则正确的输入语句是。
A、scanf("%d%s",&b,&c);B、scanf("%d%s",&b,c);
C、scanf("%d%s",b,c);D、scanf("%d%s",b,&c);
27)以下程序运行后的输出结果是。
voidmain()
{intp[8]={11,12,13,14,15,16,17,18},i=0,j=0;
while(i++<7)
if(p[i]%2)j+=p[i];
printf("%d\n",j);
}
A、42B、45C、56D、60
28)以下程序运行后的输出结果是。
voidmain()
{
chara[7]="a0\0a0\0";
inti,j;
i=sizeof(a);/*sizeof()是求a数组存储空间的库函数*/
j=strlen(a);
printf("%d%d\n",i,j);
}
A、22B、76C、72D、62
29)以下能正确定义一维数组的选项是。
A、inta[5]={0,1,2,3,4,5}B、chara[]={0,1,2,3,4,5};
C、chara={'A','B','C'};D、inta[5]="0123";
30)以下叙述中错误的是。
A、对于double类型数组,不可以直接用数组名对数组进行整体输入或输出
B、数组名代表的是数组所占存储区的首地址,其值不可改变
C、当程序执行中数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息
D、可以通过赋初值的方式确定数组元素的个数
31)以下能正确定义一维数组的选项是。
A、intnum[];B、#defineN100
intnum[N];
C、intnum[0…100];D、intN=100;
intnum[N];
32)若有定义语句"staticcharstr[4][12]={"thank","you","very","much!
"};"则str数组中存储'\0'的数组元素有个。
A、4B、1C、31D、27
33)为了判断两个字符串s1和s2是否相等,应当使用。
A、if(s1==s2)B、if(s1=s2)
C、if(strcpy(s1,s2))D、if(strcmp(s1,s2)==0)
2、填空题
1)执行以下程序段后,b[0]、b[1]、b[2]的值为。
intb[3]={0,1