谁知道哪有关于C语言的练习题?

 2025-01-20 01:54:01  阅读 259  评论 0

摘要:C 程序设计试题库C语言概述练习题1.一个C程序的执行是从( ) A.本程序的main函数开始,到main函数结束B.本程序文件的第一个函数开始,到本程序文件的最后一个函数结束C.本程序的main函数开始,到本程序文件的最后一个函数结束D.本程序文件的第一个函数开始,到本程序main函数结束2

C 程序设计试题库C语言概述练习题

1.一个C程序的执行是从( )

A.本程序的main函数开始,到main函数结束

谁知道哪有关于C语言的练习题?

B.本程序文件的第一个函数开始,到本程序文件的最后一个函数结束

C.本程序的main函数开始,到本程序文件的最后一个函数结束

D.本程序文件的第一个函数开始,到本程序main函数结束

2.以下叙述正确的是:( )

A.在C程序中,main函数必须位于程序的最前面

B.程序的每行中只能写一条语句

C.C语言本身没有输入输出语句

D.在对一个C程序进行编译的过程中,可发现注释中的拼写错误

3.以下叙述不正确的是:( )

A.一个C源程序可由一个或多个函数组成

B.一个C源程序必须包含一个main函数

C.C程序的基本组成单位是函数

D.在C程序中,注释说明只能位于一条语句的后面

4.C语言规定:在一个源程序中,main的位置( )

A.必须在最开始

B.必须在系统调用的库函数后面

C.可以任意

D.必须在最后

5.一个C语言程序是由( )

A.一个主程序和若干子程序组成

B.函数组成

C.若干过程组成

D.若干子程序组成

6.C源程序的基本单位是____________

7.一个C源程序中至少包括一个____________

8.在一个C源程序中,注释部分两侧的分界符分别为____________ 和____________

9.在C语言中,输入操作是由库函数____________ 完成的,输出操作是由库函数____________ 完成的

c语言模拟练习题

一、 判断题(2×8=16分)

1、Printf()函数总是从新行的起始位置开始打印。 ( )

2、所有的变量在使用前都必须予以申明。( )

3、在申明变量时必须给出变量的类型。( )

4、C语言认为变量number和NuMbEr是相同的。( )

5、打印三行输出的C语言程序必须用三条printf语句。( )

6、求余运算符%只能用于两个整数操作数。( )

7、switch选择结构中必须有default子句。( )

8、如果x>y或a<b为真,那么表达式(x>y&&a<b)为真。( )

二、 选择题(3×16=48分)

1、下面实现换行功能的格式符为 。( )

A. t B. n C. a D. k

2. C语言程序由什么组成?(单选)

A. 子程序 B. 主程序和子程序 C. 函数 D. 过程

3. 下面哪个表达式的值为4.

A. 11/3 B. 11.0/3

C. (float)11/3 D. (int)(11.0/3+0.5)

4. 该源程序执行后,屏幕上显示什么?

void main()

{

int a

float b

a=4

b=9.5

printf("a=%d,b=%4.2fn",a,b)

}

A. a=%d,b=%fn B. a=%d,b=%f

C. a=4,b=9.50 D. a=4,b=9.5

5. 若有以下说明语句:

char s='092'

则下面哪一项是正确的.

A. 使s的值包含2个字符 B. 说明语句不合法

C. 使s的值包含6个字符 D. 使s的值包含4个字符

6.若k,g均为int型变量,则以下语句的输出为哪一项?

int k,g

k=017

g=111

printf("%d,",k)

printf("%xn",g)

A. 15,6f B. f,6f C. f,111 D. 15,111

7. 在C语言的if语句中,用作判断的表达式为___。

A. 关系表达式 B. 逻辑表达式

C. 算术表达式 D. 任意表达式

8. 请问:下面这个程序段的输出是什么?

int a,b,c

a=7b=8c=9

if(a>b)

a=b,b=cc=a

printf("a=%d b=%d c=%dn",a,b,c)

A. a=7 b=8 c=7 B. a=7 b=9 c=7

C. a=8 b=9 c=7 D. a=8 b=9 c=8

9. 下面这个程序的输出是什么?

#include <stdio.h>

main()

{

int y=10

while(y--)

printf("y=%dn",y)

}

A. y=0 B. while构成死循环 C. y=1 D. y=-1

10. 若有以下说明和语句,则输出结果是___。

char str[]=""c:abc.dat""

printf("%s",str)

A. 字符串中有非法字符 B. "c:abc.dat"

C. "c:abc.dat" D. "c:abc.dat"

11. 如果要把常量327存入变量a中,a不能定义成哪些类型?

A. int B. char C. long D. float

12. C语言中,预处理总是以 符号开头。 ( )

A. ¥ B.# C. @ D. ◇

13. C语言中,double类型的数据占 个字节的空间。( )

A. 1 B.2 C. 4 D. 8

14. 下面语句执行完后,b的值为 。 ( )

int a=b=10

b=10+(a++)

A. 10 B.19 C. 20 D. 21

15. 这段程序中的常量有: (多选) ( )

#define PI 3.14

void main()

{

int sum

sum = 10 + 15

printf("sum=%dn",sum)

printf("result is 25n")

}

这段程序中常量有:

A. 10 B. sum C. 15

D. 25 E. main F. PI

16. 指出下面错误的表达式:(多选) ( )

A. a+b=5 B. 56=a11 C. i=i++

D. 5.6+6.2%3.1 E. 12 F. a=5,b=6,c=7

三、 填空题(3×8=24分)

1、C语言程序都是从 函数开始执行。

2、函数体用 开始,用 结束。

3、C语言的语句都以 结束。

4、执行循环结构中的 语句能够立即执行下一次循环。

5、执行循环结构或switch结构中的 语句能够立即退出该结构。

6、输出字符串的格式化符为 。

7、C语言中数组名表示数组的 。

C语言试题啊,求大神帮忙答案啊!

1 C 2 C 3 B 4 D

1

这是一个if else 语句,首先你要明白,if的内嵌语句 是第一个分号之前的,因为在C语言中分号是一个分号 就是一个语句.第一个if 的内嵌语句是(y!=10)if(!ok1)a=1因为X<Y成立,所以与这个if配对的else不必再做,接着做这个if的内嵌语句,Y不等于10成立,接着做!ok1,因为ok1值为5所以!ok1为假,跳出做a=1.做完以后接着输出a=1既可选C

2

第一句定x=1

做if语句,x=2?不成立,所以不做if的内嵌语句printf("ok")而是做与if相应的else语句if(x<2)printf("%

dn",x)else printf("Quit")x<2成立,所以做这个if 语句,输出x,x的值为1,选C

3

条件运算符的做法是括号内为真执行逗号前的,为假执行逗号后的.所以exp?意思是如果exp不等于0(为真)执行表达式1,否则执行表达式2

4

首先要知道条件运算符是自右至左的结合方式,所以可以理解为k<a?k:(c<b?c:a),从右往左算,先算括号内的,结果为C.再算k<a?k:c得出结果为C

好好算下,不要心急,我是大一刚学过C语言,这些题都做过的.南大题库里就有.

大一C语言期末考试求题库

题号:1

以下正确的说法是( )

选项:

a、用户若需要调用标准库函数,调用前必须重新定义

b、用户可以重新定义标准库函数,若如此,该函数将失去原有意义

c、用户系统根本不允许用户重新定义标准库函数

d、用户若需要调用库函数,调用前不必使用预编译命令将该函数所在文件包括到用户源文件中,系统自动寻找该文件

本题答案为d,无论是标准库函数还是什么函数,都是函数,都允许用户重新定义和使用,使用的时候只需要用#include <XX.h>包括进来就可以了,也就是预编译命令。其中#include就是预编译命令。

题号:2

以下正确的函数定义形式是( )

选项:

a、double fun(int x,int y)

b、double fun(int x

c、int y)

d、double fun(int x,int y)

e、doubel fun(int x

f、int y)

函数的定义规则是这样的:<函数返回类型><函数名>(函数参数用逗号隔开){函数体}

函数声明的规则是这样的:<函数返回类型><函数名>(函数参数用逗号隔开);

综上所述,该题没有正确答案,唯一接近正确答案的为ad。

题号:3

以下不正确的说法为( )

选项:

a、在不同函数中可以使用相同名字的变量

b、形式参数是局部变量

c、在函数内定义的变量只在本函数范围内有效

d、在函数内的复合语句中定义的变量在本函数范围内有效

C中有一个关键字为extern,专门把局部变量转为全局变量,所以C是错误的。

本题答案为C

题号:4

建立函数的目的之一,以下正确的说法是( )

选项:

a、提高程序的执行效率

b、提高程序的可读性

c、减少程序的篇幅

d、减少程序文件所占内存

本题答案为a,

函数的增加,

b会使得程序的可读性增加,这个可以理解,模块化了,当然可读性增加了

c,多次调用一个函数即可,不用重复的写代码,这个也可以理解

d,重复的代码既然少了,整个程序的大小自然也小了,当然减少了程序文件所占的内存

至于a的效率提高了,这个不对,因为函数多了,会频繁的进行压栈出栈的操作,加大cpu的工作负荷,整个程序的效率变低了。

题号:5

C语言规定,函数返回值的类型是由( )所决定。

选项:

a、return语句中的表达式类型

b、调用该函数时的主调函数类型

c、调用该函数是系统临时指定

d、在定义该函数时所指定的函数类型

这个可以参考第二题,函数的定义规则,当然是由定义的时候确定的了。

本题答案为d。

题号:6

凡是函数中未指定存储类别的局部变量,其隐含的存储类别为( )

选项:

a、auto

b、static

c、extern

d、register

这个题目容易,没有指定当然是自动指定的了。

本题答案为a。

另外一个小知识,我们平常看到的int a,b,c;实际上省略了auto,全部应该是 auto int a,b,c;

题号:7

以下程序的运行结果是( )void sub (int x,int y,int *z){*z=y-x}main(){int a,b,csub

(10,5,&a)sub(7,a,&b)sub(a,b,&c)printf("%4d,%4d,%4d",a,b,c)}

选项:

a、5, 2, 3

b、 -5, -12, -7

c、 -5, -12, -17

d、 5, -2, -7

void sub (int x,int y,int *z)

{

*z=y-x

}

main()

{

int a,b,c

sub(10,5,&a)执行完这句a的值为-5;

sub(7,a,&b)执行完这句b的值为-12;

sub(a,b,&c)执行完这句c的值为-7

printf("%4d,%4d,%4d",a,b,c)

}

答案为b;

题号:8

若用数组名作为函数调用的实参,传递给形参的是( )

选项:

a、数组的首地址

b、数组第一个元素的值

c、数组中全部元素的值

d、数组元素的个数

本题答案为a

数组名为数组的首地址,也是数组第一个元素的值的地址。数组名是一个地址。

题号:9

若使用一位数组名作为函数实参,则以下正确的说法是( )

选项:

a、必须在主调函数中说明此数组的大小

b、实参数组类型与形参数组类型可以不匹配

c、在被调函数中,不需要考虑形参数组的大小

d、实参数组名与形参数组名必须一致

本题答案为a,

必须在主调函数中定义该数组的大小。也就是该数组大小应该被提前设定好。

int a[10]可以作为参数,int a[x]不可以作为参数。

题号:10

如果在一个复合语句中定义了一个变量,则有关该变量正确的说法是( )

选项:

a、只在该复合语句中有效

b、只在该函数中有效

c、在本程序范围内均有效

d、为非法变量

答案为

大一C语言编程题?

一、单项选择题(共10题,每题2分,共20分。在备选答案中选择一个最佳答案。多选、错选、不选不得分)

1、不是C语言基本数据类型的是( )。

A、指针类型B、整型

C、字符型D、实型

2、设有:int a=3, b= 4, c= 5,x , y表达式0 &&(x=a)&&(y=b)的值为()。

A、1 B、0C、3D、4

3、设有语句 int a=3 则执行了语句 a+=6后,变量a 的值为( )。

A、18B、-3C、9 D、12

4、执行以下程序段后,输出的y值为( )

void main()

{ int a[]={2,4,6,8,10}

int y, *p

p=&a[0]

y=*p printf(“%d”,y)

}

A、2 B、4C、6D、8

5、有定义语句:float a[4]则分配给数组a的内存空间为( )字节。

A、 20 B、 12 C、 16 C、10

6、以下描述错误的是( )。

A、break语句可用于while语句。

B、break语句和continue语句的作用是一样的。

C、在循环语句中使用break语句是为了跳出循环,提前结束循环。

D、在循环语句中使用continue语句是为了结束本次循环,而不终止整个循环。

7、C语言中规定,if语句的嵌套结构中,else总是( )。

A、与最近的if 配对 B、与第一个if 配对

C、按缩进位置相同的if配对 D、与最近的且尚未配对的if 配对

8、说明语句“int (*p)( )”的含义是( ) 。

A、p是一个指向一维数组的指针变量。

B、p是指针变量,指向一个整型数据。

C、p是一个指向函数的指针,该函数返回一个int型数据。

D、以上都不对。

9、以下对二维数组c的正确声明是 ( ) 。

A、int c[3][ ] B、int c(3,4)

C、int c(2)(2) D、int c[3][2]

10、下述程序段执行后输出结果为( )。

int x=100, y=200

printf ("% d", (x, y))

A、100 B、200 C、100,200 D、编译出错

二、填空题(共7题,共10空,每空1分,共10分。将答案填在题中横线上)

1、C语言提供的三种逻辑运算符是 && 、|| 和!

2、函数的返回值是通过函数中的 return语句获得的。

3、在"int a[ ][3]={{1},{3,2},{4,5,6},{0}}"定义后,a[2][2]的值为_6__ _;

4、对于"int *pa[5];" pa是一个具有5个元素的_数组指针_,每个元素是一个指向int型变量的__指针__;

5、单向链表的尾节点next指针应赋值__ NULL___;

6、在语句for(x=1,y=3;x>y;y++)中循环体执行的次数为0 。

7、int a[5]数组a的首地址为2000,则元素a[1]的地址为 2002 ,元素a[2]的地址为2004。

三、程序填空题(共2题,共5空,每空4分,共20分)

1、以下程序完成计算1-1/2+1/3-1/4+1/5+……前n 项和,请填空。

#include <stdio.h>

int main( )

{ int i, n, flag

float sum

scanf("%d", &n)

flag= 1

sum=0

for(i=1i<=ni++ )

{ sum+=(float)flag/i

flag=-flag

}

printf("%.3fn", sum)

}

2、以下程序的功能是从键盘输入n个整数,统计其中正数、0、负数的个数,请填空。

#include <stdio.h>

void main( )

{int a, i, count1,count2,count3

count1=count2=count3=0

for(i=1i<=ni++)

{ scanf(“%d”, &a)

if(a>0) count1++

else if(a==0)count2++

else count3++

}

printf(“正数:&d个,零:%d个,负数:%d个n”, count1,count2,count3 )

}

四、运行程序结果题(共4题,每题6分,共24分)

1、写出程序运行结果。

void main( )

{ int x=1,y=2,t;

int *p1,*p2

p1=&xp2=&y

t=*p1*p1=*p2*p2=t

printf("x=%d,y=%dn",x,y)

}

运行结果为:

程序有错,不能运行!或写:

x=2,y=1

2、写出程序运行结果。

#include<stdio.h>

int max(int a,int b)

{ int c

c=a>b?a:b

return(c)

}

int min(int a,int b)

{int c

c=a<b?a:b

return(c)

}

void main()

{ int a=2,b=6

printf("max=%dn",max(a,b))

printf(“min=%dn”,min(a,b))

}

运行结果为:

程序有错,不能运行!或写:

max=6

min=2

3、写出程序运行结果。

#include <stdio.h>

void main()

{ int a[3][3]={1,2,3,4,5,6,7,8,9}

int i,j,sum=0

for (i=0i<3i++)

for(j=0j<3j++)

if(i==j) sum=sum+a[i][j]

printf(“sum=%dn”,sum)

}

运行结果为:

程序有错,不能运行!或写:

sum=15

4、写出程序运行结果。

void main( )

{ int n,f

n=1

while(n<=10)

{ f=f*n

n+=2

}

printf(“f=%dn”,&f)

}

运行结果为:

程序有错,不能运行!或写:

f=不确定

五、程序设计题(共2题,每题13分,共26分)

1、将一个数组按逆序存放,如元素1、2、3、4、5,按逆序存放后为5、4、3、2、1。

车票根据题意两两站点连线生成,金额和数量分别用随机数。

数据存储:站点,车票,用户分别为3个结构体,用于对应数据库。

购买流程:检查输入数值有效性->检查车票库存->购买成功同步修改用户购买流水及车票库存。(这里题目需求不明确,没有指明用户购买方式),我的代码允许一个用户同时购买多种票,每种票可分批购买多张。购买流水记录自动增加和更新。

退票流程:检查输入和用户购买记录,同步更新用户及车票信息。

删除流程:选择删除没有被用户购买的票(函数检查所有用户,虽然本题只要一个用户,实际传参用户数组首地址)。

PS: 这个题目涉及到增删改,用链表来写更好,但考虑你学习范围,没有使用链表而是动态数组,动态数组删除,考虑内存占用,不仅要需循环移位还要释放多余地址。

另外整体程序,异常的处理我只是单纯返回0或者1或者-1区分基本的成功与失败。你如想对个别异常进行特殊处理,自行修改返回值,接收判断。

下面是代码:

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <time.h>

#include <windows.h>

#include <conio.h>

#define MS 5//最大站点数

typedef struct station

{

  char sid[10]

  char sName[20]

}STN

typedef struct ticket

{

  int tid//票编号

  STN *ssP//起始站

  STN *tsP//终点站

  int value//票价

  int number//数量

}TKT

typedef struct userInfo//用户

{

  char uid[20]//身份证号

  int cnt//购买的票种类数量

  int *btids//购买的所有票id数组

  int *btNum//购买的所有票数量数组

}UIFO

int init(STN stns[MS],TKT **tkts)//初始化车站、票数据

int disAllTickets(TKT *tkts)

int buyTicket(UIFO *uifo,TKT *tkts)//异常返回0

int reTicket(UIFO *uifo,TKT *tkts)//异常返回0

int showMenu(UIFO *uifo,TKT *tkts)

int delIntByIndex(int *nums,int len,int index)//通过下标index删除动态整型数组nums对应元素,并释放多余地址,返回删除后的数组长度,异常返回-1

int delTkts(UIFO *uifos,int len,TKT *tkts)//删除指定票(检查用户组,只要有一个用户购买,无法删除)

int cnt//票种类数量

int main()

{

  STN stns[MS]

  TKT *tkts=NULL

  UIFO uifo={"321002199902050614",0,NULL,NULL}

  srand(time(NULL))

  cnt=init(stns,&tkts)

  printf("共生成%d组票(每组往返两种票,共%d种票)nn",cnt/2,cnt)

  printf("按任意键继续。n"),getch()

  system("cls")

  showMenu(&uifo,tkts)

  return 0

}

int showMenu(UIFO *uifo,TKT *tkts)

{

  int n=5

  printf("(1) Buy ticketn")

  printf("(2) Refund ticketn")

  printf("(3) Remove ticketn")

  printf("(4) Display all ticketsn")

  printf("(0) Exitn")

  while(n<0 || n>4)

      scanf("%d",&n)

  switch(n)

  {

      case 0: return 0

      case 1: if(!buyTicket(uifo,tkts)) return 0break

      case 2: if(!reTicket(uifo,tkts)) return 0break

      case 3: if(!delTkts(uifo,1,tkts)) return 0break

      //这里删除功能,用户多名,要传数组首地址,由于演示只有一个用户(len=对应用户数),所以只传该用户地址(len=1)

      case 4: disAllTickets(tkts)break

  }

  showMenu(uifo,tkts)

  return 1

}

int disAllTickets(TKT *tkts)

{

  int i

  for(i=0i<cnti++)

      printf("编号:%2d 路程:%s-%s 票价:%3d 剩余票数:%dn",tkts[i].tid,tkts[i].ssP->sName,tkts[i].tsP->sName,tkts[i].value,tkts[i].number)

  printf("按任意键继续。n"),getch()

  system("cls")

  return 1

}

int delIntByIndex(int *nums,int len,int index)

{

  int i,*temp=NULL

  if(index>len-1) return -1

  for(i=indexi<len-1i++)

      nums[i]=nums[i+1]

  len--

  if(len)

  {

      temp=(int *)realloc(nums,sizeof(int)*len)

      if(!temp) return -1

      nums=temp

  }

  else

      free(nums)

  return len

}

int reTicket(UIFO *uifo,TKT *tkts)

{

  int i,j,tid,n,index,len,flag=0

  printf("当前用户购买记录:n")

  for(i=0i<uifo->cnti++)

  {

      for(j=0j<cntj++)

          if(tkts[j].tid==uifo->btids[i]) index=j

      printf("--车票编号:%d,起末站:%s-%s,购买票数:%dn",uifo->btids[i],tkts[index].ssP->sName,tkts[index].tsP->sName,uifo->btNum[i])

  }

  printf("请输入要退票的车票id及票数:"),scanf("%d%d",&tid,&n)

  for(i=0i<uifo->cnti++)

      if(uifo->btids[i]==tid &&uifo->btNum[i]>=n)

      {

          for(j=0j<cntj++)

              if(tkts[j].tid==uifo->btids[i]) tkts[j].number+=n//同步修改对应车票剩余票数

          uifo->btNum[i]-=n//用户购买记录修改

          if(uifo->btNum[i]==0)//某种车票全部退完,删除该条记录

          {

              len=delIntByIndex(uifo->btNum,uifo->cnt,i)

              if(len==-1) return 0

              len=delIntByIndex(uifo->btids,uifo->cnt,i)

              if(len==-1) return 0

              uifo->cnt=len

          }

          flag=1

          break

      }

  if(flag)

      printf("退票成功!n")

  else

      printf("无此购买记录或输入数量不符合n")

  printf("按任意键继续。n"),getch()

  system("cls")

  return 1

}

int buyTicket(UIFO *uifo,TKT *tkts)

{

  char spn[20],tpn[20]

  int i,n=-1,index=-1,*temp=NULL

  for(i=0i<cnti++)

      printf("编号:%2d 路程:%s-%s 票价:%3d 剩余票数:%dn",tkts[i].tid,tkts[i].ssP->sName,tkts[i].tsP->sName,tkts[i].value,tkts[i].number)

  printf("请输入始发站站名和终点站站名:"),scanf("%s%s",spn,tpn)

  for(i=0i<cnti++)

      if(strcmp(tkts[i].ssP->sName,spn)==0 &&strcmp(tkts[i].tsP->sName,tpn)==0)

      {

          printf("车票%s-%s 票价:%3d 剩余票数:%dn",tkts[i].ssP->sName,tkts[i].tsP->sName,tkts[i].value,tkts[i].number)

          index=i

          break

      }

  if(index==-1)

      printf("购买失败!无此路程的车票n")

  else

  {

      while(n<=0)

      {

          printf("请输入要购买的数量(大于0):"),scanf("%d",&n)

          if(tkts[index].number<n)

              printf("错误:车票数量不足或者输入数值超出范围!请重新输入!n"),n=-1

      }

      for(i=0i<uifo->cnti++)//检查用户购买记录,重复票累加购买数量,不同票新增记录

      {

          if(uifo->btids[i]==tkts[index].tid)

          {

              printf("该票已购买了%d张,现再次购买%d张,累计购买了%d张n",uifo->btNum[i],n,uifo->btNum[i]+n)

              uifo->btNum[i]+=n

              tkts[index].number-=n

              break

          }

      }

      if(i==uifo->cnt)//未检查到重复记录,新增

      {

          if(!uifo->btids)

          {

              uifo->btids=(int *)malloc(sizeof(int))

              if(!uifo->btids) return 0

              uifo->btNum=(int *)malloc(sizeof(int))

              if(!uifo->btNum) return 0

          }

          else

          {

              temp=(int *)realloc(uifo->btids,sizeof(int)*(uifo->cnt+1))

              if(!temp) return 0

              uifo->btids=temp

              temp=(int *)realloc(uifo->btNum,sizeof(int)*(uifo->cnt+1))

              if(!temp) return 0

              uifo->btNum=temp

          }

          uifo->btids[uifo->cnt]=tkts[index].tid

          printf("该票购买了%d张n",(uifo->btNum[uifo->cnt]=n))

          tkts[index].number-=n

          uifo->cnt++

          printf("用户购买记录:n")

          for(i=0i<uifo->cnti++)

              printf("--车票编号:%d,购买票数:%dn",uifo->btids[i],uifo->btNum[i])

      }

      printf("本次成功购买了%s-%s的票%d张!n",tkts[index].ssP->sName,tkts[index].tsP->sName,n)

  }

  printf("按任意键继续。n"),getch()

  system("cls")

  return 1

}

int delTkts(UIFO *uifos,int len,TKT *tkts)//len:所有购买的用户数量

{

  int i,j,k,tid,flag=0,index

  for(i=0i<cnti++)

      printf("编号:%2d 路程:%s-%s 票价:%3d 剩余票数:%dn",tkts[i].tid,tkts[i].ssP->sName,tkts[i].tsP->sName,tkts[i].value,tkts[i].number)

  printf("请输入要删除的车票编号:"),scanf("%d",&tid)

  for(i=0i<cnti++)

      if(tid==tkts[i].tid)

      {

          index=i

          flag=1

          for(j=0j<lenj++)//检查所有用户购买记录

          {

              for(k=0k<uifos[j].cntk++)

                  if(uifos[j].btids[k]==tid)

                  {

                      flag=0

                      printf("该票已被用户购买,无法删除,需先完成退票!n")

                      break

                  }

              if(!flag)

                  break

          }

          break

      }

  if(!flag) printf(" 删除失败,输入数值超出范围或不可删除!n")

  else

  {

      cnt--

      if(cnt==0)

      {

          free(tkts[index].ssP)

          free(tkts[index].tsP)

          free(&tkts[index])

      }

      else

      {

          free(tkts[index].ssP)

          free(tkts[index].tsP)

          for(i=indexi<cnti++)

              tkts[i]=tkts[i+1]

          tkts[cnt].ssP=NULL

          tkts[cnt].tsP=NULL

          free(&tkts[cnt])

      }

      printf(" 删除成功!n")

  }

  printf("按任意键继续。n"),getch()

  system("cls")

  return 1

}

int init(STN stns[MS],TKT **tkts)

{

  TKT *tTemp=NULL

  int i,j,n,v,cnt=2

  static int id=1

  printf("生成站点:n")

  for(i=0i<MSi++,id++)

  {

      sprintf(stns[i].sid,"车站%03d",id)

      sprintf(stns[i].sName,"SN%03d",id)

      printf("----站点名:%s。站点ID:%sn",stns[i].sid,stns[i].sName)

  }

  printf("计算所有站点连线,生成车票(票是往返,所以一次生成往返两组票):n")

  for(i=0i<MSi++)

      for(j=i+1j<MSj++)

      {

          if(!(*tkts))

          {

              *tkts=(TKT *)malloc(sizeof(TKT)*2)

              if(!(*tkts)) return -1

          }

          else

          {

              tTemp=(TKT *)realloc((*tkts),sizeof(TKT)*cnt)

              if(!tTemp) return -1

              *tkts=tTemp

          }

          n=rand()%4+2//每种票随机2~5张(保证总数大于20)

          v=rand()%201+50//随机生成票价50~250

          (*tkts)[cnt-1].tid=cnt

          (*tkts)[cnt-1].ssP=&stns[i]

          (*tkts)[cnt-1].tsP=&stns[j]

          (*tkts)[cnt-1].value=v

          (*tkts)[cnt-1].number=n

          (*tkts)[cnt-2].tid=cnt-1

          (*tkts)[cnt-2].ssP=&stns[j]

          (*tkts)[cnt-2].tsP=&stns[i]

          (*tkts)[cnt-2].value=v

          (*tkts)[cnt-2].number=n

          printf("----%s和%s的之间往返票各生成%d张,票价为%d(随机)n",stns[i].sName,stns[j].sName,n,v)

          cnt+=2

      }

  return cnt-2

}

//答题不易,如采纳的,请不要无故删除问题。

以上就是关于谁知道哪有关于C语言的练习题?全部的内容,如果了解更多相关内容,可以关注,你们的支持是我们更新的动力!

版权声明:我们致力于保护作者版权,注重分享,被刊用文章【谁知道哪有关于C语言的练习题?】因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!;

原文链接:https://www.yxiso.com/zhishi/1057105.html

发表评论:

关于我们
院校搜的目标不仅是为用户提供数据和信息,更是成为每一位学子梦想实现的桥梁。我们相信,通过准确的信息与专业的指导,每一位学子都能找到属于自己的教育之路,迈向成功的未来。助力每一个梦想,实现更美好的未来!
联系方式
电话:
地址:广东省中山市
Email:beimuxi@protonmail.com

Copyright © 2022 院校搜 Inc. 保留所有权利。 Powered by BEIMUCMS 3.0.3

页面耗时0.0409秒, 内存占用2.05 MB, 访问数据库22次

陕ICP备14005772号-15