1.假定a和b为int型变量,则执行下述语句组后,b的值为( )。
a=1;
b=10;
do
{
b-=a;
a++;
} while (b--<0);
(1)9 (2)-2 (3)-1 (4)8
2设有变量说明语句
int a=1,b=0;
则执行以下程序段的输出结果为( )。
switch (a)
{
case 1:
switch (b)
{
case 0:printf("**0**");break;
case 1:printf("**1**");break;
}
case 2:printf("**2**");break;
}
printf("\n");
(1)**0** (2)**0****2** (3)**0****1****2** (4)有语法错误
3.以下合法的数组说明是( )。
(1)char a[6]="string";
(2)int a[5]={0,1,2,3,4,5};
(3)char a="string";
(4)INT a[]={0,12,3,4,5};
4.下述程序代码中有语法错误的行是( )。
int i,ia[10],ib[10]; /*第一行*/
for (i=0;i<=9;i++) /*第2行*/
ia=0; /*第3行*/
ib=ia; /第4行*/
(1)第1行 (2)第2行 (3)第3行 (4)第4行
5.若已定义
int a[9],*p=a;
并在以后的语句中未改变p的值,则不能表示a[1]地址的表达式是( )。
(1)p+1 (2)a+1 (3)a++ (4)++p
答案:
1.(4) 2.(2) 3.(4) 4.(4) 5.(3)
所谓水仙花数是指一个三位正整数,其各位数字的立方之和等于该正整数。例如编写程序,求得并输出全部水仙花数的个数。请填空完善程序。
#include
main()
{
int hun,ten,one; /*百位数、十位数、个位数*/
int num,count=0;
for (num=100;_____(1)_____;num++)
{
hum=________(2)_________;
ten=________(3)_________;
one=________(4)_________;
if (____________________)
<
{
printf("]",num);
count++;
}
}
printf("\n");
printf("No.=%d\n",count);
}
(1) num<1000(或num<=999)
(2) num/100
(3) (num-hun*100)/10
(4) num
(5) num==hun*hun*hun+ten*ten*ten+one*one*one
(或hun*100+ten*10+one== hun*hun*hun+ten*ten*ten+one*one*one)
请写出执行下述程序的输出结果。
#include
main()
{
int i=100,j=34,k=-63,m=4;
int u=-15,v=71,w=27;
i+=j;
j-=k;
k*=-m;
m/=3*j-1;
u%=v-2*w;
printf("i=%d,j=%d,k=%d,m=%d,u=%d",i,j,k,m,u);
答案:i=134,j=97,k=252,m=0,u=-15
阅读下述程序,写出运行结果。
#include
main()
{
int a,y;
a=10;
y=0;
do
{
a+=2;
y+=a;
printf("a=%d,y=%d\n",a,y);
if (y>20)
break;
} while (a=14);
printf("a=%d\n",a);
}
答案:
a=12 y=12
a=16 y=28
a=16
提示:首先第一次的结果不用说了?需要的话,请先把C的书再读一遍先!
a=12 y=12
接着大家要看仔细,if(y>20) break;难点在此,意思是当上面的Y>20时结束这一段,再去判断While的条件,所以这里会接着加,a=12+2=14 y=14+12=26 ok!26>20,我们去判断while的条件吧,a=14,此时a就正好=14,再次循环·a=14+2=16 y=12+16=28,然后28>20跳出,a不等于14再次跳出,执行最后一句输出,a=16.
#include
main()
{
static int a[5][5]={
{1,2,3,4,0},
{2,3,4,0,6},
{3,0,1,7,5},
{0,0,2,4,1},
{8,4,3,2,7} };
int i,j;
for (i=0;i<5;i++)
{
for (j=0;j<5;j++)
{
if (a[j]==0)
break;
printf("M",a[j]);
}
printf("\n");
}
答案:
1 2 3 4
2 3 4
3
8 4 3 2 7
个人解析下:
首先我们从for (j=0;j<5;j++)看起,往下是
{
if (a[j]==0)
break;
printf("M",a[j]);
}
提示: 把a[5][5]二维数组中的每列中从左至右第一个为零的数之前的数输出!
for (i=0;i<5;i++) 就是5行
#include
#include
fun(char *w,int n)
{
char t,*sl,*s2;
s1=w;
s2=w+n-1;
while (s1 {
t=*s1++
*s1=*s2--
*s2=t;
}
}
main()
{
char *p;
p="1234567";
fun (p,strlen(p));
puts(p);
}
答案:1711717
提示: 主要是认清楚S1=? S2=? 首先 S1=W,这S1存的是字符串W的首地址,而S2=W+N-1=P+7-1 OK,也就是W中最后一个字符的地址·
阅读下列函数说明和C函数,将应填入__(n)__处的字句写在答题纸的对应栏内。
[函数1.1说明]
函数palindrome(chars[])的功能是:判断字符串s是否为回文字符串,若是,则返回0,否则返回-1。若一个字符串顺读和倒读都一样时,称该字符串是回文字符串,例如:“LEVEL”是回文字符串,而“LEVAL”不是。
[函数1.1]
int palindrome(char S[])
{ char *pi,*pj;
pi=S;pj=s+strlen(S)-1:
while ( pi pi++; pj--;
}
if(__ (2)__)return-1;
else return 0;
}
[函数1.2说明]
函数f(char *str,char del)的功能是;将非空字符串str分割成若干个子字符串并输出,del表示分割时的标志字符。
例如若str的值为“33123333 435”,del的值为‘3’,调用此函数后,将输出三个子字符串,分别为“12”、“4”和“5”。
[函数1.2]
void f(char*str,char del)
{ int i,j,len;
len = strlen(str);
i = 0;
while (i while (__(3)__) i++; /*忽略连续的标志字符*/
/*寻找从str开始直到标志字符出现的一个子字符串*/
j = i + 1;
while (str[j] !=del && str[j] !=’\0’) j++;
__ (4)__="\0"; /*给找到的字符序列置字符串结束标志*/
printf(" %s\t",&str): ’
__ (5)__;
}
}
答案:
(1)*pi == *pj
(2)pi (3)str== del
(4)str[j]
(5) i = j+1
提示: 首先看第一题 条件:pi=S;pj=s+strlen(S)-1:pi就是首地址啦,pj就是末地址啦,我们需要把第一个和最后一个比较,第二和倒二比···....OK,那while ( pi 第二题,有注释哦·不懂就提出来·不过偶想大家都会滴·