1.
#include<stdio. h>
void main ()
{
int k=10000;
do
{
k++;
printf (“%d\n",k) ;
}while (k>10000);//不是死循环,因为%d有范围,超限后为负数,所以退出循环
2.
#include<stdio. h>
void main ()
{
int s=36;
while(s);//因为有;是死循环
--s;
printf("%d\n",s);
}
3.执行语句: for ( i =1;i+ +<4:):后,变量 i 的值是
A .3 B .4 C. 5 D.不定
4.char h ,* s =& h :可将字符 A 通过指针存入变量 h 中的语句是
A .* s = A ;
B .* s =' A ';
C . s = A ;
D . s =' A ';
5.若有说明: int * p , m =5, n ;以下程序段正确的是
A . p =& n ;
scanf ("% d ",& p );
B . p =& n ;
scanf ("% d ",*p );
C . scanf ("% d ",& n );
* p = n ;
D . p =& n ;
* p = m ;
6.有以下程序
main()
{
int i =1, j =1, k =2;
if (( j ++||k ++)&& i ++)
printf ("% d ,% d ,% d\n ", i , j ,k );
}
执行后输出结果是(
A .1,1,2
C. 2,2,2
B .2,2,1
D .2,2,3
7.已知变量 a 被定义为 int 型变量,以下定义并初始化指针变量 p 的语句中正确的
A.int p=a;
B.int *p=*a;
C.int p=&a;
D.int *p=&a;
8.若有下列定义,则对 a 数组元素地址的正确引用是
int a [5],* p = a ;
A .*( p +5)
C. a +2
B.*p+2
D.*&a[5]
9.若有定义语句: char s [10]="1234567\0\0";,则 strlen ( s )的值是()
A .7 B.8 C.9 D.10
10.以下叙述中错误的是(.)
A .用户定义的函数中可以没有 return 语句
B .用户定义的函数中可以有多个 return 语句,以便可以调用一次返回多个函
数值
C .用户定义的函数中若没有 return 语句,则应当定义函数为 void 类型
D .函数的 return 语句中可以没有表达式
答案:CBDC DCAB
3,i++<4 已经加了,所以为5
4.A和C字符A没加引号,D。s为地址
5.A和B没有n的值 cC,没有初始化,不能指向n
6.或运算,左边为真时,右边不运行
7.注意定义并初始化,所以D对
8.A和D超限,B,*p指内容,加2,
10.return语句一次只能返回一个值
11.当运行以下程序时,程序的输出结果足:
void fun(int *y)
{
printf("*y= %d\n",*y);
*y=10;
printf("*y=%d\n",*y);
}
void main()
{
int x=20;
printf("x=%d\n",x);
fun(&x);
printf("x= %d\n",x);
}
x=20
*y=20
*y=10
x=10
fun(&x)是对xs的值进行了修改
12.
#include <stdio.h>
struct st
{
int x:
int *y;
}*p;
int dt[4]={ 10,20,30,40};
struct st aa[4]= {50,&dt[0],60,&dt[ 1],70,&dt[2],80,&dt[3]};
}void main()
{
P=aa;
printf("%d\n",++p->x);
printf("%d\n",(++p)->x);
print("%d、n",++(*p->y);
}
51
60
21
本题的优先级为()> -> > ++ > *
++p->x等价于++(p->x)
++(*p->y)等价于 ++(*(p->y))
13.函数 fun 的功能是:将形参 n 所指变量中,个位上为偶数的数去除,剩余的数按原来从高位到低位的顺序组成一个新的数,并通过形参指针 n 传回所指变量。例如,输入一个数:27638496,新的数:为739。
# inelude < stdio . h >void fun ( unsigned long * n)
{unsigned long x =0, i ;int t ;i =1;while (*n)
{t =* n %________;if ( t %2!=_________);
{
x = x + t * i ;i = i *10;
}
*n=*n/10;
}
*n=___________;
}void main()
{unsigned long n =-1;while ( n >99999999|| n <0)
{
printf (" Please input (0< n <100000000):");scanf ("% ld ",& n );
}fun (& n );printf (" nThe result is :% ld ' in ". n );
}
答案:1.10 2.0 3.x
14.下面程序的功能是删除字符串 s 中的空格。
# include " stdio . h "void main ()
{char * s =" Beijing ligong daxue ";int i , j ;for ( i = j =0; s [ i ]!='\0'; i ++)
{if ( s [ i ]!='')
________________else
_________________s [ j] =' O ';
printf("%s",s);
}
答案:s[j++]=s[i]; s[j]=s[i];