C语言程序设计2015A卷-

Python026

C语言程序设计2015A卷-,第1张

一、判断题(每小题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