一、判断题(每小题1分,共15分)
1.标准C中,只有数值型数据才能进行4则混合运算。
2.标准C中,_a是合法的自定义标识符。
3.有定义:float f表达式f+=(int)3.6%2”不符合C语言语法。
4.标准C中,逻辑运算的结果只有是1表示满足条件,而结果是0表示不满足条件。
6.以下运算符排列顺序满足按照优先级从高到低的排列:‘&&’、‘!’、‘==’、‘-’。
7.语句for()是非法的。
8.在C语言程序中可以由多个源文件构成,每个源文件都可以有自己的main()函数。
9.while和do-while的主要区别是后者至少无条件执行一次。
10.数组名代表数组的首地址是常量,所以将实参数组名表示地址传给形参数组名是错误的。
11.当函数没有返回值类型时,表示函数类型为void。
12.C语言中,指针变量作函数参数时,它们不是采取单向值传递的方式。
13.一个函数中只允许有一条return语句。
14.在C语言中,如果没有说明变量的存储类型是auto类型的。
15.由于指针中所存放的地址都是整数,所以整型指针和浮点型指针可以相互赋值。
二、填空题(每空1分,共15分)
1. 若a=4b=5,c=6则表达式c==(b=-a)中c的值是 (1) 。
2. 计算表达式的值:
4&&-4的值: (2) ;
设int a=3,b=4,c=5,则表达式a||b+c&&b==c的值: (3) ;
设x=2.5, a=7, y=4.7,则表达式x+a%3*(int)(x+y)%2/4的值: (4) ;
设a=12,则表达式a*=a/5的值: (5) ;
3. 若int x = 4,y = 6,z = 0;有循环while(x = y) {z ++;y--;}
则循环语句执行完后,z值为 (6) 。
4. 变量的指针就是指该变量的 (7) 。
5. 若有定义int (*p)[4],则标识符p是 (8) ;若有定义int *p[4],则标识符p是 (9) ;
6. 已有定义:char *p[ ]={“France”,“Chinese”,“Russia”,“America”};则语句printf(“%s”,p[2]);printf(“%c”,*(p[1]+2));printf(“%c”,*(*(p+1)+1));
的输出结果分别为: (10) 、 (11) 、 (12) 。
7. 已有定义: int x=65若格式化输出结果为“A, 65”,则对应的格式化输出语句为printf(“ (13) , (14) ”, x, x)。
8. 已定义:int a[][2]={1, 2, 3, 4, 2, 6, 7, 2};则a[3][0]= (15) 。
三、简答题(每题4分,共12分)
1、简述选择语句if和else语句对与switch语句的区别。
2、简述在循环语句中,break和continue的区别。
3、若int a[5],*p=a;简述*p++和(*p)++的区别。
四、下列各程序中每个程序各有2个错误,指出错误语句,写出对应正确语句(每小题4分,共16分)
五、程序填空题:下列程序中缺少若干条语句,在对应的下划线上填上合适的语句,每一个下划线只填一条语句(每小题6分,共24分)
六、阅读下列程序,写出运行结果(第一小题4分,第二小题6分,共10分)
七、编程题(8分)
编译程序,其功能是比较字符串的大小( 不允许 用系统提供的字符串比较函数strcmp)。要求是:
(1) 通过主函数调用一个函数strcompare来实现。
(2) 要求函数strcompare实现两个字符的比较:如第一个字符小于第二个字符则返回一个负值;如两个字符相等则返回0值;如第一个字符大于第二个字符则返回一个正值。
(3) 并输出两个字符串中相同部分的子串。
《C语言程序设计基础》试卷参考答案
一、判断题(每小题1分,共15分)
1~5 ; 6~10 ; 11~15
二、填空题(每空1分,共15分)
(1) 6 (2) 1 (3) 1 (4) 2.5 (5) 24 (6) 6
(7)地址 (8) 行指针,指向有四个元素的一维数组
(9)指针数组名,该数组有四个元素,每个元素都是指针
(10)Russia (11)i (12)h (13) %c (14) %d (15)7
三、简答题(每题4分,共12分)
1、if总是判断其后面的表达式的值是否为非零值,如是非零值则执行其后面的语句或由{}括起来的复合语句,否则执行else后面的语句。而switch语句则根据其后面表达式的可数值来判断,执行switch语句体内与其中的一个case:常量值相等语句后面的语句。执行break语句后,跳出switch语句体。
2、break是终止整个循环过程;continue是终止本次循环。
3、*p++首先取a[0]的值,然后p指向a[1];(*p)++使得a[0]的值自增1,但p保持不变。
四、下列各程序中每个程序各有2个错误,指出错误语句,写出对应正确语句(每小题4 分,共16分)
1、 (1)缺#include ; (2)scanf(“%f”,a)改为 scanf(“%f”,&a)
2、 (1)缺sum=0(2)for(i=1i<=3i++) 改为for(i=0i<3i++)
3、 (1)p1=p2 改为 *p1=*p2 (2)swap(&a, *p) 改为swap(&a, p)
4、 (1)在if(m<0)语句后添加else if(m==0) a=1(2) 添加 return(a)
五、程序填空题:下列程序中缺少若干条语句,在对应的下划线上填上合适的语句,每一个下划线只填一条语句(每小题6分,共24分)
1、 (1)x=0(2)if(n==x) (3)s++或s=s+1
2、 (4)&num[i] (5)max<num[i]? (6)num[i]!=0
3、 (7)n-i-1 (8)a[j]>a[j+1] (9)a[j+1]=temp
4、 (10)count=0(11)n%10 (12)n>0或n!=0或n
六、阅读下列程序,写出运行结果(第一小题4分,第二小题6分,共10分)
1、 #*#*#*
2、 main i=1 j=2 k=2
sub i=1 j=2 k=1 x=2
sub i=1 j=2 k=1 x=3
七、编程题(8分)
#include
main()
{
int i,j, flag=0
char str1[90],str2[90]
gets(str1)
gets(str2)
i=0
do{
flag=strcompare(str1[i],str2[i])
i++
}while(str1[i]!=’’ &&str2[i]!=’’ &&flag=0)
if(flag<0)printf(“%s小于%s ”,str1,str2)
else if(flag==0) printf(“%s 等于%s ”,str1,str2)
else printf(“%s大于%s ”,str1,str2)
printf(“两个字符串中相同的字串为:”)
j=0
i--后3句可用str1[i]=’’printf(“%s”,str1)代替//用str2也可以。
while(j<i){printf(“%c”,str1[i])j++} span=""></i){printf(“%c”,str1[i])j++}>
}
int strcompare(char c1,char c2)
{
int v
v=c1-c2
return v
}
#include<fstream>
#include
<string.h>
#include
<iostream>
#include
<conio.h>//用getch()
using
namespace
std
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌Student类﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
class
Student
{
public:
char
name[20]
char
Class[20]
char
Id[20]
int
Cnum
//C课程得分
int
Mnum
//数学课程得分
int
Enum
//英语课程得分
int
Gnum
//体育
int
sum
//总分
int
ave
//平均分
Student
*
Next
void
Input()
{
cout<<"\t\t请输入学生的姓名:"
cin>>name
cout<<"\t\t请输入学生的班级:"
cin>>Class
cout<<"\t\t请输入学生的学号:"
cin>>Id
cout<<"\t\t请输入C++的成绩:"
cin>>Cnum
cout<<"\t\t请输入数学课程的成绩:"
cin>>Mnum
cout<<"\t\t请输入英语课程的成绩:"
cin>>Enum
cout<<"\t\t请输入日语的成绩:"
cin>>Gnum
sum=Cnum+Mnum+Enum+Gnum
ave=(Cnum+Mnum+Enum+Gnum)/4
}
void
ReadFile(istream
&
in)
{
in>>name>>Class>>Id>>Cnum>>Mnum>>Enum>>Gnum>>ave>>sum
}
void
Show()
{
cout<<"姓名:"<<name<<endl<<"班级:"<<Class<<endl<<"学号:"<<Id<<endl<<"C++:"<<Cnum<<endl
<<"数学:"<<Mnum<<endl<<"外语:"<<Enum<<endl<<"日语:"<<Gnum<<endl<<"平均成绩:"<<ave<<endl<<"总成绩:"<<sum<<endl<<endl<<endl
}
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌Studentmassage类﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
class
Studentmassage
{
public:
Studentmassage()
~Studentmassage()
void
ShowMenu()
void
Find()
void
Save()
void
ModifyItem()
void
RemoveItem()
void
Swap(Student
*,Student
*)
void
Sort()
int
ListCount()
void
Display()
{
for(Student
*
p=Head->Nextp!=Endp=p->Next)
p->Show()
cout<<"输入任意字符!继续……"
getch()
}
void
AddItem()
{
End->Input()
End->Next=new
Student
End=End->Next
cout<<"添加成功!"<<endl
cout<<"输入任意字符!继续……"
getch()
}
private:
Student
*
Head,*
End
ifstream
in
ofstream
out
Student
*FindItem(char
*
name)
{
for(Student
*
p=Headp->Next!=Endp=p->Next)
if(!strcmp(p->Next->name,name))return
p
return
NULL
}
Student
*FindID(char
*
Id)
{
for(Student
*
p=Headp->Next!=Endp=p->Next)
if(!strcmp(p->Next->Id,Id))return
p
return
NULL
}
Student
*FindCLASS(char
*
Class)
{
for(Student
*
p=Headp->Next!=Endp=p->Next)
if(!strcmp(p->Next->Class,Class))return
p
return
NULL
}
}Grade
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌构造函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
Studentmassage::Studentmassage()
{
Head=new
Student
Head->Next=new
Student
End=Head->Next
in.open("sort.txt")
if(!in)
cout<<"这是一个新系统,无学生信息。请先输入。"<<endl
else
{
while(!in.eof())
{
End->ReadFile(in)
if(End->name[0]=='\0')break
End->Next=new
Student
End=End->Next
}
in.close()
cout<<"\t\t读取学生信息成功!"<<endl
}
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌析构函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
Studentmassage::~Studentmassage()
{
Save()
for(Student
*
tempHead->Next!=End)
{
temp=Head->Next
Head->Next=Head->Next->Next
delete
temp
}
delete
Head,End
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌菜单﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void
Studentmassage::ShowMenu()
{
cout<<"〓〓〓〓〓〓〓〓〓〓
☆
学
生
成
绩
管
理
系
统
☆
〓〓〓〓〓〓〓〓〓〓"<<endl
cout<<"〓〓〓〓〓〓〓★★★★★
★★★★★★★
★★★★★〓〓〓〓〓〓〓"<<endl
cout<<"〓〓〓〓〓〓〓〓〓★
☆
1.增加学生成绩
☆
★〓〓〓〓〓〓〓〓〓"<<endl
cout<<"〓〓〓〓〓〓〓〓〓★
☆
2.显示学生成绩
☆
★〓〓〓〓〓〓〓〓〓"<<endl
cout<<"〓〓〓〓〓〓〓〓〓★
☆
3.排序统计成绩
☆
★〓〓〓〓〓〓〓〓〓"<<endl
cout<<"〓〓〓〓〓〓〓〓〓★
☆
4.查找学生成绩
☆
★〓〓〓〓〓〓〓〓〓"<<endl
cout<<"〓〓〓〓〓〓〓〓〓★
☆
5.删除学生成绩
☆
★〓〓〓〓〓〓〓〓〓"<<endl
cout<<"〓〓〓〓〓〓〓〓〓★
☆
6.修改学生信息
☆
★〓〓〓〓〓〓〓〓〓"<<endl
cout<<"〓〓〓〓〓〓〓〓〓★
☆
0.安全退出系统
☆
★〓〓〓〓〓〓〓〓〓"<<endl
cout<<"\n\t\t\n\t\t请选择:"
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌查找函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void
Studentmassage::Find()
{
char
name[20]
,Id[10],Class[20]
int
x
Student
*
p=NULL
cout<<"\n\t\t*********************************\n"
cout<<"\t\t※
1.按学生的姓名查找\n\t\t※
2.按学生学号查找\n\t\t※
3.按学生班级查找"
cout<<"\n\t\t*********************************\n请选择:"
cin>>x
switch(x)
{
case
1:{cout<<"\t\t请输入要查找的学生的姓名:"cin>>name
if(p=FindItem(name))
{
p->Next->Show()
cout<<"输入任意字符!继续……"
getch()
}
else
{
cout<<"\t\t没有找到该姓名的学生!"<<'\n'<<endl
cout<<"输入任意字符!继续……"
getch()
}
}break
case
2:
{
cout<<"\t\t请输入要查找的学生的学号:"cin>>Id
if(p=FindID(Id))
{
p->Next->Show()
cout<<"输入任意字符!继续……"
getch()
}
else
{
cout<<"\t\t没有找到该学号的学生!"<<'\n'<<endl
cout<<"输入任意字符!继续……"
getch()
}
}break
case
3:{cout<<"\t\t请输入要查找的学生的班级:"cin>>Class
if(p=FindCLASS(Class))
{
p->Next->Show()
cout<<"输入任意字符!继续……"
getch()
}
else
{
cout<<"\t\t没有找到该班级的学生!"<<'\n'<<endl
cout<<"输入任意字符!继续……"
getch()
}
}break
}
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌修改信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void
Studentmassage::ModifyItem()
//修改信息
{
char
ID[20]
Student
*
p=NULL
cout<<"\t\t请输入要修改的人的学号:"cin>>ID
if(p=FindID(ID))
{
cout<<"\t\t已找到学生的信息,请输入新的信息!"<<endl
p->Next->Input()
cout<<"修改成功!"<<endl
cout<<"输入任意字符!继续……"
getch()
}
else
{
cout<<"\t\t没有找到!"<<endl
cout<<"输入任意字符!继续……"
getch()
}
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌删除信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void
Studentmassage::RemoveItem()
//
删除信息
{
char
ID[20]
Student
*
p=NULL,*temp=NULL
cout<<"\t\t请输入要删除的学生的学号:"cin>>ID
if(p=FindID(ID))
{
temp=p->Next
p->Next=p->Next->Next
delete
temp
cout<<"\t\t删除成功!"<<endl
cout<<"输入任意字符!继续……"
getch()
}
else
{
cout<<"\t\t没有找到!"<<endl
cout<<"输入任意字符!继续……"
getch()
}
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void
Studentmassage::Swap(Student
*p1,
Student
*p2)
{
Student
*temp=new
Student
strcpy(temp->name,p1->name)
strcpy(temp->Id,p1->Id)
temp->Cnum=p1->Cnum
temp->Mnum=p1->Mnum
temp->Enum=p1->Enum
temp->sum=p1->sum
strcpy(p1->name,p2->name)
strcpy(p1->Id,p2->Id)
p1->Cnum=p2->Cnum
p1->Mnum=p2->Mnum
p1->Enum=p2->Enum
p1->sum=p2->sum
strcpy(p2->name,temp->name)
strcpy(p2->Id,temp->Id)
p2->Cnum=temp->Cnum
p2->Mnum=temp->Mnum
p2->Enum=temp->Enum
p2->sum=temp->sum
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
int
Studentmassage::ListCount()//统计当前的记录总数
{
if(!
Head)
return
0
int
n=0
for(Student
*
p=Head->Nextp!=Endp=p->Next)
{
n++
}
return
n
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void
Studentmassage::Sort()//对当前学生进行排序
{
cout
<<"Sorting..."<<endl
Student
*p=NULL,*p1=NULL,*k=NULL
int
n=Studentmassage::ListCount()
if(n<2)
return
for(p=Head->Nextp!=Endp=p->Next)
for(k=p->Nextk!=Endk=k->Next)
{
if(p->sum>k->sum)
{
Studentmassage::Swap(p,k)
}
}
cout
<<"排序完成!"<<endl
getch()
return
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌保存函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void
Studentmassage::Save()
{
out.open("sort.txt")
for(Student
*p=Head->Nextp!=Endp=p->Next)
out<<p->name<<"\t"<<p->Class<<"\t"<<p->Id<<"\t"
<<p->Cnum<<"\t"<<p->Mnum<<"\t"<<p->Enum<<"\t"<<p->Gnum<<"\t"<<p->ave<<"\t"<<p->sum<<'\n'
out.close()
}
void
code()
//密码
{
char
s1[20]="123",s2[20]
cout<<"请输入密码:"
while(cin>>s2)
{
if(!strcmp(s1,s2))
{
Grade.ModifyItem()break
}
else
cout<<"你输入的密码不正确,请重新输入:"
}
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌主函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
int
main()
{
int
x,i=0
bool
quit=false
cout<<"\t\t§§§§§§§§§§§§§§§§§§§§§§§§§§"<<endl
for(i=0i<3i++)
cout<<"\t\t◎\t\t\t\t\t\t
◎"<<endl
cout<<"\t\t◎★★★★【
欢迎进入学生成绩管理系统
】★★★★◎"<<endl
for(i=0i<3i++)
cout<<"\t\t◎\t\t\t\t\t\t
◎"<<endl
cout<<"\t\t§§§§§§§§§§§§§§§§§§§§§§§§§§\n"<<endl
cout<<"请按任意键开始……"
getch()
while(!quit)
{
system("cls")
Grade.ShowMenu()
cin>>x
switch(x)
{
case
0:cout<<"★★★★感谢您的使用★★★★"<<endlquit=truebreak
case
1:Grade.AddItem()break
case
2:Grade.Display()break
case
3:Grade.Sort()break
case
4:Grade.Find()break
case
5:Grade.RemoveItem()break
case
6:code()break
}
}
return
0
}
我稍微改了下,应该可以用~
额~~你们一定要C编吗~C++不可以嘛?
只说一下思路实在写不出来再追问
最好能自己解决
第一题:
就是一个杨辉三角问题
用双循环
外循环是行数(用
i
表示)
从0到n
(n自己输入)
内循环是列数(用
j
表示)
从0到2*i-1
然后就是赋
值
很多种方式
比如你定义一个
字符变量
C
给它赋值为A
然后每次都用C给数组赋值
然后让C加1
方法很多
(数组是字符二维数组,
用
之前要初始化一下
给数组都赋值为
空格)
第二题:
定义两个二维数组
一个一维数组
按照题目要求
先把每个同学的成绩和名字分别存放到两个二维数组里面
同样是双循环
然后再用双循环
把每个同学成绩加起来放到一维数组里面
然后接下来就是对一位数组内容进行排序
排序过程中
也要将名字的那个二维数
组同样排序
因为一维数组中的总分顺序和二维数组中的姓名顺序是一样的
比如
要将第二个同学的成绩和第五个同学的成绩交换
那么就要
将总分交换
再将姓名交换
不然分就不对人了
第三题:
题目没明白什么意思
第四题:
用循环从第一个元素判断到最后一个元素
定义4个变量存储
数字
大写
小写
空格出现的次数
查一下ASCII码
数字好像是48-57
大写字母是
65-90
小写是
97-122
判断元素内容的ASCII在哪个范围
哪个变量就加1