《计算机科学》课程主页在:http://blog.csdn.net/sxhelijian/article/details/13705597
发现第9周的题目及参考没有公布,补上。
1、阅读程序
阅读下面的程序,写出运行结果,上机时运行程序,记录结果,从而能够理解指针的用法
(1)
#include<stdio.h> int main(){ char a[]="Hello World",*p; int i; i=8; p=a+i; printf("%s\n",p-2); return 0; }你认为运行结果为:_________________
实际运行的结果为:_________________
(2)
#include<stdio.h> int main(){ char *s="12134211"; int v[4]= {0,0,0,0},k,i; for(k=0; s[k]!='\0'; k++){ switch(s[k]) { case '1': i=0; break; case '2': i=1; break; case '3': i=2; break; case '4': i=3; break; } v[i]++; } for(k=0; k<4; k++) printf("%d ",v[k]); return 0; }你认为运行结果为:_________________
实际运行的结果为:_________________
(3)
#include<stdio.h> int main(){ char c; c=getchar(); while(c!='?'){ putchar(c); c=getchar(); } return 0; }如果从键盘输入abcde?fgh(回车)
你认为运行结果为:_________________
实际运行的结果为:_________________
(4)
#include<stdio.h> int main(){ int i,a[10]; for(i=9; i>=0; i--) a[i]=10-i; printf("%d%d%d",a[2],a[5],a[8]); return 0; }你认为运行结果为:_________________
实际运行的结果为:_________________
(5)
#include<stdio.h> int main(){ int i,k,a[10],p[3]; k=5; for(i=0; i<10; i++) a[i]=i; for(i=0; i<3; i++) p[i]=a[i*(i+1)]; for(i=0; i<3; i++) k+=p[i]*2; printf("%d\n",k); return 0; }你认为运行结果为:_________________
实际运行的结果为:_________________
(6)
#include <stdio.h> struct abc { int a,b,c; }; int main(){ struct abc s[2]={{1,2,3},{4,5,6}}; int t; t=s[0].a+s[1].b; printf("%d \n",t); return 0; }你认为运行结果为:_________________
实际运行的结果为:_________________
2、程序设计
#include <stdio.h> int main() { char s[80]; int n; gets(s); //下面写出代码,求输入的字符串s的长度n printf("len=%d",n); return 0; }请完成两个版本的程序:
(1)直接用字符串处理函数str???()处理;
(2)不能使用字符串处理函数,而是逐个“扫描”字符数组中的字符完成统计。
参考解答:
(1)直接用字符串处理函数str???()处理;
#include <string.h> int main() { char s[80]; int n; gets(s); //下面写出代码,求输入的字符串s的长度 n=strlen(s); printf("len=%d",n); return 0; }
(2)不能使用字符串处理函数,而是逐个“扫描”字符数组中的字符完成统计。
#include <stdio.h> #include <string.h> int main() { char s[80]; int n; gets(s); //下面写出代码,求输入的字符串s的长度 n=0; int i; for(i=0;s[i]!='\0';i++) n++; printf("len=%d",n); return 0; }
3、程序设计
下面的程序框架将从键盘上输入5名学生的信息,保存到结构体数组中,然后输出两门课都及格了的同学的学号和姓名。请补充完整程序。作为解决方案,在结构体中,用字符数组表示学号和姓名(设学号和姓名中间不出现空格)
#include <stdio.h> struct Student{ char num[13]; //12位学号,连同字符串后\0,共13位 char name[10]; //汉字占2字节,中文名不超过4个汉字 int c; //C语言课成绩 int law; //法律课成绩 }; int main( ) { struct Student stu[5];//定义结构体数组 //写出代码,从键盘上将5名学生的信息读入到结构体数组stu中 //写出代码,输出两门功课都及格了的同学的信息学号、姓名 return 0; }
参考解答:
#include <stdio.h> struct Student { char num[13]; //12位学号,连同字符串后\0,共13位 char name[10]; //汉字占2字节,中文名不超过4个汉字 int c; //C语言课成绩 int law; //法律课成绩 }; int main( ) { int i; //定义结构体数组 struct Student stu[5]; //写出代码,从键盘上将5名学生的信息读入到结构体数组stu中 for(i=0; i<5; i++) { scanf("%s%s%d%d",stu[i].num,stu[i].name,&stu[i].c,&stu[i].law); } //写出代码,输出两门功课都及格了的同学的信息学号、姓名 for(i=0; i<5; i++) { if(stu[i].c>=60 && stu[i].law>=60) printf("%s%s\n",stu[i].num,stu[i].name); } return 0; }