《计算机科学》课程主页在: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;
}