执行printf(?%c %s\\n?,*p,p);即以字符%c形式输出*p所对应的字符。此时p指 向数组中的第2个元素,即s[1],因此*p表示s[1]中的值,即’B’. 然后再以字 符串%s的形式输出以p中地址为首地址的整个字符串,此时p指向s[1],即 从s[1]开始,依次输出后面的字符串,因此又输出BCD
执行完循环体,转向执行表达式3,即p= p+1。p+1表示以p当前所指向的
位置起始,之后1个元素的地址,即s[2]的地址,然后将a[2]的地址赋给p。 s[2]的地址等价于s+2,因此循环条件p
执行printf(?%c %s\\n?,*p,p);即以字符%c形式输出*p所对应的字符。此时p指
向数组中的第3个元素,即s[2],因此*p表示s[2]中的值,即’C’. 然后再以字 符串%s的形式输出以p中地址为首地址的整个字符串,此时p指向s[2],即 从s[2]开始,依次输出后面的字符串,因此又输出CD
执行完循环体,转向执行表达式3,即p= p+1。p+1表示以p当前所指向的
位置起始,之后1个元素的地址,即s[2]的地址,然后将s[2]的地址赋给p。 s[2]的地址等价于s+3,因此循环条件p
执行printf(?%c %s\\n?,*p,p);即以字符%c形式输出*p所对应的字符。此时p指
向数组中的第4个元素,即s[3],因此*p表示s[3]中的值,即’D’. 然后再以字 符串%s的形式输出以p中地址为首地址的整个字符串,即输出D
执行完循环体,转向执行表达式3,即p= p+1。p+1表示以p当前所指向的
位置起始,之后1个元素的地址,即s[3]的地址,然后将s[3]的地址赋给p。 s[3]的地址等价于s+4,因此循环条件p
结构体 1.
#include
} a[2]={5, 7, 2, 9} ; main() {
printf(\}
运行结果是: 14
首先是定义结构体st,st中共有两个整型成员x,y。
然后定义一个st类型的数组a,a的长度为2,即数组中含有两个st类型的元素,分别是a[0]和a[1]. 对a进行初始化,此题是按照储存顺序进行初始化,即将5赋给a[0]中的x(即a[0].x=5);
将7赋给a[0]中的y(即a[0].y=7); 将2赋给a[1]中的x(即a[1].x=2); 将9赋给a[1]中的y(即a[1].y=9);
执行main函数,输出表达式a[0].y*a [1].x的值,即7*2的值
5 a[0].x a[0] 7 a[0].y 2 a[1].x a[1] 9 a[1].y 2. #include
{struct stu {int num;
char a[5]; float score;
}m={1234,?wang?,89.5}; printf(?%d,%s,%f?,m.num,m.a,m.score); }
运行结果是: 1234,wang,89.5 3.
#include
} cnum[2]={1, 3, 2, 7}; main( ) {
printf(?%d\\n?, cnum[0].y * cnum[1].x ); }
运行结果是:6 与第一题解法同
4.
#include
{ int a, b, c; }; main()
{ struct abc s[2]={{1,2,3},{4,5,6}}; int t;
t=s[0].a+s[1].b; printf(\
}
运行结果是:6
与第一题解法同
二、 程序填空
1.输入一个字符,判断该字符是数字、字母、空格还是其他字符。
main( ) { char ch; ch=getchar();
if( ch>=’a’&&ch<=’z’|| ch>=’A’&&ch<=’Z’ ) printf(\ else if( ch>=’0’&&ch<=’9’ )
printf(\else if( ch== ‘ ’ )
printf(\ else
printf(\
第1空:字符在计算机中以ASCII码的形式存储。所以当输入的字符,即ch中字符所对应的ASCII码的范围在英文字母的ASCII码的范围内即可,参照p377。由于英文字母又分为大写字母和小写字母,因此此处用一个逻辑或表达式,表示ch中是小写字母或者大写字母,都能使得表达式成立。ch>=97&&ch<=122|| ch>=65&&ch<=90
需要注意的是,对于本题区间所对应的表达式,不可写作97<=ch<=122,也不可写作’A’<=ch <=’Z’. 对于97<=ch<=122因为在计算此表达式时的顺序是从左向右,因此先计算97<=ch。无论ch中的取值如何,表达式97<=ch的值只有两种情况:0或1.所以无论是0还是1,都小于122,因此97<=ch<=122恒成立。
第3空,判断ch中是否为空格,也是通过ch中字符与空格字符的ASCII码来判断。在判断表达式的值是否相等时,用关系符号==;不要用赋值符号=。
2.下列程序的功能是从输入的整数中,统计大于零的整数个数和小于零的整数个数。用输入0来结束输入,用i,j来放统计数,请填空完成程序。 void main()
{ int n,i=0,j=0;
printf(?input a integer,0 for end\\n?); scanf(?%d?,&n);
while ( n或n!=0 ) {
if(n>0) i= i+1 ;
else j=j+1; }
printf(?i=M,j=M\\n?,i,j); }
此题用i来记录大于零的整数,用j记录小于零的整数。所以循环条件是n(或者n!=0)即当n不为0时执行循环体。在循环体中是一个选择语句。如果n>0,则令i加1,相当于令正整数的个数加1;否则(即n<0),令j加1,相当于令负整数的个数加1。
3.编程计算1+3+5+……+101的值
#include
for (i = 1; i<=101 ; i=i+2; )
sum = sum + i;
printf(\
for语句的一般形式详见p120.
表达式1为i = 1,为循环变量赋初值,即循环从1开始,本题从1到101,因此终值是101,表达式2是循环条件,用来控制循环的结束,因此循环条件为i<=101;表达式3为循环变量的自增,本题是
4.编程计算1+3+5…+99的值
main()
{ int i, sum = 0;
i=1;
while ( i<100 )
{ sum = sum + i;
I=i+2 ; } printf(\}
5.从键盘输入一个字符,判断它是否是英文字母。 #include