C语言编程试题.docx
- 文档编号:10305061
- 上传时间:2023-02-10
- 格式:DOCX
- 页数:23
- 大小:166.20KB
C语言编程试题.docx
《C语言编程试题.docx》由会员分享,可在线阅读,更多相关《C语言编程试题.docx(23页珍藏版)》请在冰豆网上搜索。
C语言编程试题
(1)有一存储很多商品数据(每件商品的属性先后包括:
品名、规格、数量、单价,编程时相应的数据类型分别定义为字符串char(20)、字符串char(12)、long、float)的二进制文件sp.dat(即未作任何格式转换而直接使用fwrite将商品属性写入文件),从键盘输入某种商品的品名,要求在文件中查找有无相应品名商品(可能有多条记录或没有),若有则在屏幕上显示出相应的商品的品名、规格、数量、单价(显示时,品名、规格、数量、单价之间使用逗号(,)作分隔),若无则显示没有相应品名的商品。
并保存到程序P3-312.C所在的文件夹且文件名保持不变。
编程可用素材:
printf("Please input shang pin pin ming:
")...、printf("\ncha zhao qing kuang :
")...、printf("\nmei you shang pin :
...。
程序的运行效果应类似地如图1和图2所示,图1中的Please input shang pin pin ming:
xuebi中的xuebi和图2中的Please input shang pin pin ming:
kele中的kele是从键盘输入的内容。
#include
#include
#include
structsp
{
charpinming[20];
charguige[12];
longshuliang;
floatdanjia;
};
intmain(void)
{
intflag=0;
charpinming[21];
structspshangpin;
FILE*fp;
printf("Pleaseinputshangpinpinming:
");
scanf("%s",pinming);
printf("\n");
printf("chazhaoqingkuang:
\n");
fp=fopen("sp.dat","rb");
if(fp==NULL)
{
printf("cannotopenfile!
\n");
exit
(1);
}
while(fread(&shangpin,sizeof(structsp),1,fp)==1)
{
if(strcmp(shangpin.pinming,pinming)==0)
{
printf("%s,%s,%ld,%.2f\n",shangpin.pinming,shangpin.guige,shangpin.shuliang,shangpin.danjia);
flag=1;
}
}
if(flag==0)
{
printf("meiyoushangpin:
%s\n",pinming);
}
fclose(fp);
return0;
}
(2)程序运行时,先从键盘输入一个文本文件的文件名(约定:
字符数≤127字节,可含路径)和一个字符串(约定:
字符数≤20字节,其中不含空格、TAB等,后面称之为Str),再在屏幕上显示该文件的内容。
要求显示完内容后,在屏幕上输出文件的行数(行之间以’\n’为分隔、每行的长度不定但均≤200个字节)、字符串Str在文件中第1次出现的行号和最后一次出现的行号(查找时不区分大小写、不跨行查找,若未找到,则行号显示为-1)。
注意,程序中不能使用库函数fgets或使用同名的变量、函数、单词,行的编号从1开始计。
编程可用素材:
printf("input the file's name and the string:
")...、printf("\nfile open error!
")...、printf("------------------------File content:
----------------------\n")...、printf("\n------------------------File summary:
----------------------\n")...、printf("... lines, first line:
..., last line:
...\n"...。
程序的运行效果应类似地如图1所示,图1中的“input the file's name and the string:
C:
\Temp\315.txt Value”中的“C:
\Temp\315.txt Value”是从键盘输入的内容(“C:
\Temp\315.txt”是文件名,“Value”是需查找的字符串)。
图1中的“11 lines, first line:
6, last line:
11”表示文件一共有11行,字符串“Value”在文件中第一次出现的行号为6、最后一次出现的行号为11。
#include
#include
intmain(void)
{
charch,filename[128],str[21],line[201];
inti=0,j,k,m,lineNum=0,isfirst=0,firstLine=-1,lastLine=-1;
FILE*fp;
printf("inputthefile'snameandthestring:
");
scanf("%s%s",filename,str);
printf("--------------------------Filecontent:
--------------------\n");
fp=fopen(filename,"r");
if(fp==NULL)
{
printf("cannotopenfile!
\n");
exit
(1);
}
while(!
feof(fp))
{
ch=fgetc(fp);
line[i]=ch;
i++;
if(ch=='\n')
{
lineNum++;
putchar(ch);
line[i]='\0';
i=0;
}
elseif(ch==EOF)
{
lineNum++;
line[i]='\0';
}
else
{
putchar(ch);
}
if(ch=='\n'||ch==EOF)
{
for(j=0,k=0;line[j]!
='\0';j++)
{
if((line[j]==str[k])||(line[j]==(str[k]-32))||(line[j]==(str[k]+32)))
{
for(m=j;((line[m]==str[k])||(line[m]==(str[k]-32))||(line[m]==(str[k]+32)))
&&str[k]!
='\0';k++,m++)
{
;
}
if(str[k]=='\0')
{
if(isfirst==0)
{
firstLine=lineNum;
isfirst=1;
}
lastLine=lineNum;
}
elseif(line[m]!
=str[k])
{
k=0;
}
}
}
}
}
putchar('\n');
printf("--------------------------Filesummary:
--------------------\n");
printf("%dlines,firstline:
%d,lastline:
%d\n",lineNum,firstLine,lastLine);
return0;
}
(3)程序的运行效果应类似地如图1所示,图1中每行“:
”后的内容
#
af2346asfkl7123vdsg#sdf
e3gerg67823;632235235562vrweg
gsd124kl63g512jk57463sdgkdlgh45657478358756235135fwesdvg#safsa
均为从键盘输入的内容,注意,
在“input string-2:
”处输入时直接按了回车键,这是题目所允许的。
#include
#include
/*GetString的功能是从键盘读入最多n个字符(遇到由endFlag指定的字符或回车则结束读并且该字符和回车
均视为有效字符)存放在buf所指向的内存中并加上字符串结束符’\0’
函数返回值为读入的字符个数*/
intGetString(char*buf,charendFlag,intn);
/*CompDigit的功能是分别统计指针s1、s2、s3、s4所指向的字符串中数字字符的个数,
将包含最多数字字符(不考虑存在包含相同个数数字字符的情况)的字符串的长度放在指针mLen所指向的
内存单元中,并通过函数返回值返回该字符串中第1个数字字符的地址*/
char*CompDigit(char*s1,char*s2,char*s3,char*s4,int*mLen);
/*clearRestInput的功能是将前一次读字符后到回车(含回车)之间的字符废弃*/
voidclearRestInput(charlastInput);
/*本部分代码功能建议:
考生新增函数原型声明(非必须新增)*/
/*UserCodeBegin(Limit:
lines<=2,lineLen<=80,考生可在本行后添加代码、最多2行、每行长<=80字符)*/
/*UserCodeEnd(考生添加代码结束。
注意:
空行和单独为一行的{与}均不计行数、行长不计行首tab缩进)*/
intmain(void)
{
charstr[4][30],strM[30],endChar,lastChar;
inttotalLen=0,maxLen=-1,i;
constintN=29;
printf("\ninputendFlagchar:
");
scanf("%c",&endChar);
for(i=0,lastChar=endChar;i<4;i++)
{
clearRestInput(lastChar);
printf("inputstring-%d:
",i+1);
totalLen+=GetString(str[i],endChar,N);
lastChar=str[i][strlen(str[i])-1];
}
strcpy(strM,CompDigit(str[0],str[1],str[2],str[3],&maxLen));
printf("\n--------------------------------------------------\n");
printf("%s,4Len=%d,mLen=%d\n",strM,totalLen,maxLen);
return0;
}
voidclearRestInput(charlastInput)
{
while(lastInput!
='\n')
{
lastInput=getchar();
}
}
/*UserCodeBegin(考生在此后完成函数GetString和CompDigit的设计,在其中不要使用printf函数,行数不限)*/
intGetString(char*buf,charendFlag,intn)
{
intnum=0;
charch;
scanf("%c",&ch);
while(ch!
=endFlag&&ch!
='\n')
{
*buf=ch;
buf++;
num++;
if(num>=n)
{
break;
}
scanf("%c",&ch);
}
if(ch==endFlag||ch=='\n')
{
*buf=ch;
buf++;
num++;
}
*buf='\0';
returnnum;
}
char*CompDigit(char*s1,char*s2,char*s3,char*s4,int*mLen)
{
inti,num[4]={0},digitnum;
char*str[4],*maxStr;
for(i=0;s1[i]!
='\0';i++)
{
if((s1[i]>='0')&&(s1[i]<='9'))
{
num[0]++;
}
}
for(i=0;s2[i]!
='\0';i++)
{
if((s2[i]>='0')&&(s2[i]<='9'))
{
num[1]++;
}
}
for(i=0;s3[i]!
='\0';i++)
{
if((s3[i]>='0')&&(s3[i]<='9'))
{
num[2]++;
}
}
for(i=0;s4[i]!
='\0';i++)
{
if((s4[i]>='0')&&(s4[i]<='9'))
{
num[3]++;
}
}
str[0]=s1;
str[1]=s2;
str[2]=s3;
str[3]=s4;
digitnum=num[0];
maxStr=str[0];
for(i=1;i<4;i++)
{
if(num[i]>digitnum)
{
digitnum=num[i];
maxStr=str[i];
*mLen=strlen(str[i]);
}
}
while
(1)
{
if((*maxStr>='0')&&(*maxStr<='9'))
{
returnmaxStr;
}
maxStr++;
}
}
(4)程序的功能是:
①程序运行时先显示Please input numbers:
,再从键盘上读入一组整数(只考虑int型),数与数之间只使用空格或回车作分隔。
数可正可负,最多10000个,但若读入的数为-222时,则表示输入结束且-222不算在该组数内。
②对这一组数按从小到大的顺序进行排序。
③将排序后的这一组数输出到屏幕上,输出格式为每行6个数,数与数之间使用逗号(,)分隔,两个逗号之间的宽度(不算逗号)为6且使用左对齐格式。
注意,行尾没有逗号。
程序的运行效果应类似地如图1所示,其中的100 120 89 72 -19 200 500 210 235 6 24 1234 78 234 -234 -2342 346 23524 7823 -3411 23423 -222是从键盘输入的内容。
#include
#definemaxNums10000
#defineendFlag-222
intinput(intdata[]);
voidsort(intdata[],intn);
voidoutput(intdata[],intn);
intmain(void)
{
intinputData[maxNums]={0},dataCount;
dataCount=input(inputData);
sort(inputData,dataCount);
output(inputData,dataCount);
return0;
}
intinput(intdata[])
{
inti,x,n=0;
printf("\nPleaseinputnumbers:
");
for(i=0;i { scanf("%d",&x); if(endFlag==x) { break; } data[i]=x; n++; } returnn; } voidsort(intdata[],intn) { inti,j,mini,tmp; for(i=0;i { mini=i; for(j=i;j { if(data[j] { mini=j; } } tmp=data[mini]; data[mini]=data[i]; data[i]=tmp; } } voidoutput(intdata[],intn) { inti; printf("\nOutput: \n"); for(i=0;i { printf("%-6d",data[i]); if(((i+1)%6)! =0&&i! =n-1) { printf(","); } else { printf("\n"); } } } (5)程序的功能是: 有五个学生,每个学生的数据包括学号、姓名(最长19字节)、三门课的成绩,从键盘输入五个学生的数据,并计算每个学生的平均成绩,最后显示最高平均分的学生的信息(包括学号,姓名,三门课的成绩,平均分数)。 程序的运行效果应类似地如图1所示,图1中的: 2001 wanghai 78 83.5 90 2003 zhangzhong 82 80 98.5 2005 liumei 95.2 81 90 2006 sunqian 70 77.2 90 2009 jiansansa 63 87 90.3 是从键盘输入的内容。 #include structstudent { intnum; charname[20]; floatscore1,score2,score3; floataver; }; voidInput(structstudent*pStu,intn); intHighest(structstudent*pStu,intn); intmain(void) { inthigh;/*high记录平均分最高的学生的序号,具体使用参考后面的代码*/ structstudentmyClass[5]; Input(myClass,5); high=Highest(myClass,5); printf("\nTheHighestis%s(%d)\nscore1=%.2fscore2=%.2fscore3=%.2faver=%.2f\n", myClass[high].name,myClass[high].num, myClass[high].score1,myClass[high].score2,myClass[high].score3,myClass[high].aver); return0; } voidInput(structstudent*pStu,intn) { inti; structstudenttmpStu; printf("Pleaseinputstudentsinfo: NumNamescore1score2score3\n"); for(i=0;i { printf("%d: ",i+1); scanf("%d%s%f%f%f",&tmpStu.num,tmpStu.name, &tmpStu.score1,&tmpStu.score2,&tmpStu.score3); pStu[i]=tmpStu; pStu[i].aver=(pStu[i].score1+pStu[i].score2+pStu[i].score3)/3.0f; } } intHighest(structstudent*pStu,intn) { inti,pos=0; floatmax; max=pStu[0].aver; for(i=0;i { if(max { max=pStu[i].aver; pos=i; } } returnpos; } (7)程序的功能是: 先从键盘读入的8个学生的6门课成绩存放在二维数组student中(每一行存储一个学生的数据,第0列为学号,第1~6列依次为6门课的成绩),再从键盘读入一个学号,在student查找该学生是否存在,若存在,则输出其平均成绩,若不存在,则显示“not Find! ”。 程序的运行效果应类似地如图1所示,图1中的: 20011 100 80 90 78 85 92 20012 90 83 88 76 80 93 20015 85 50 73 75 83 90 20013 89 80 78 83 75 52 20021 60 82 85 98 75 76 20031 70 70 63 68 93 66 20035 78 60 72 82 88 57 20
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 编程 试题