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
{ 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
int i, sum = 0;
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
printf(\ c=getchar();
if(c>= ‘A’ &&c<= ‘Z’ || c>=‘a’ &&c<= ‘z’) printf(\\\n\ else printf(\}
6. 下面程序的功能是在a数组中查找与x值相同的元素所在位置,请填空。 #include
printf(“input 10 integers:”); for(i=0;i<10;i++)
scanf(“%d”,&a[i]);
printf(“input the number you want to find x:”);
scanf(“%d”, &x );
for(i=0;i<10;i++)
if( x==a[i] ) break;
if( i<10 )
printf(“the pos of x is:%d\\n”,i);
else printf(“can not find x!\\n”); }
7.程序读入20个整数,统计非负数个数,并计算非负数之和。 #include
{ int i, a[20], s, count; s=count=0; for(i=0; i<20; i++) scanf(“%d”, &a[i] ); for(i=0; i<20; i++)
{ if( a[i]<0 ) continue ; s+=a[i] ; count++; }
printf(“s=%d\\t count=%d\\n”, s, count”); }
8. 输入一个正整数n (1 #include int i, index, k, n, temp; /* 定义1个数组a,它有10个整型元素*/ printf(“Enter n: \ printf(“Enter %d integers: \ for(i = 0; i < n; i++) scanf(\ for(k = 0; k < n-1; k++){ /* 对n个数排序 */ index = k; for( ) if( ) index = i; } printf(\ for(i = 0; i < n; i++) /* 输出n个数组元素的值 */ return 0;} 四、 程序改错 一、 下面每个程序的划线处有语法或逻辑错误,请找出并改正,使其得到符合题意的执行结果。 1.求1?2?3?4???n main() { long int sum; / /若定义变量的语句有错误,常见考点有两个:(1)变量的类型,(2)在定义用于存放运算结果的变量时,一定要赋初值。一般赋值0或者循环初值。 int n,i=1; scanf(\ //若scanf语句有错误,常见考点有两个:(1)格式声明符号要与后面欲赋值的变量的类型一致,此题%d与n的类型int一致(详见p69-78);(2)变量的前面要有地址符号& printf(“\\n”); while(i { sum=sum*i; // 若不为sum赋初值,则此处无法计算sum*i。 i++; } printf(\ //若printf语句有错误,常见考点有1个:格式声明符号要与后面欲输出的变量的类型一致,此题%d与sum的类型long int不一致,应改为%ld