C语言程序设计题目.docx
《C语言程序设计题目.docx》由会员分享,可在线阅读,更多相关《C语言程序设计题目.docx(42页珍藏版)》请在冰豆网上搜索。
C语言程序设计题目
AC语言程序设计教程(第三版)课后习题
定义一个结构体变量(包括年、月、日)。
计算该日在本年中是第几天,注意闰年问题。
struct
{
intyear;
intmonth;
intday;
}tian;
intmain()
{
intdays(intyear,intmonth,intday);
ints;
scanf("%d%d%d",&,&,&;
s=days,,;
printf("%d\n",s);
}
intdays(intyear,intmonth,intday)
{
inti=month,s,a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31},sum=0,leap,j;
if(year%4==0)
{
if(year%100==0)
{
if(year%400==0)
leap=1;
else
leap=0;
}
else
leap=1;
}
else
leap=0;
if(leap&&i>2)
{
for(j=1;j
s=sum+day+1;
}
else
{
for(j=1;j
sum=sum+a[j];
s=sum+day;
}
return(s);
}
BC语言程序设计教程(第三版)课后习题
现有有N个学生的数据记录,每个记录包括学号、姓名、三科成绩。
编写一个函数input,用来输入一个学生的数据记录。
编写一个函数print,打印一个学生的数据记录。
在主函数调用这两个函数,读取N条记录输入,再按要求输出。
N<100【考虑用什么做函数的参数结构体变量,还是指向结构体的指针变量,还是用结构体数组名】
非结构体做法
#include<>
intmain()
{
inti,n;
inta[100],b[100],c[100];
chare[100][81],f[100][81];
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%s%s%d%d%d",e[i],f[i],&a[i],&b[i],&c[i]);
for(i=1;i<=n;i++)
printf("%s,%s,%d,%d,%d\n",e[i],f[i],a[i],b[i],c[i]);
return0;
}
C结构体训练
有N个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入N个学生的数据,要求打印出3门课的总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课成绩)
注意:
刻画学生的数据类型必须用结构体类型。
不能用多个数组解决
#include<>
intmain()
{
structstu{
intnum;
charname[20];
intscore1;
intscore2;
intscore3;
}boy[1024];
intN,i,s,s1=0,s2=0,s3=0,max=0,c;
floatave1,ave2,ave3;
scanf("%d",&N);
for(i=0;i{
scanf("%d%s%d%d%d",&boy[i].num,&boy[i].name,&boy[i].score1,&boy[i].score2,&boy[i].score3);
s1+=boy[i].score1;
s2+=boy[i].score2;
s3+=boy[i].score3;
s=boy[i].score1+boy[i].score2+boy[i].score3;
if(s>max)
{
max=s;
c=i;
}
}
ave1=(s1*/(N*;
ave2=(s2*/(N*;
ave3=(s3*/(N*;
printf("%.0f%.0f%.0f\n",ave1,ave2,ave3);
printf("%d%s%d%d%d\n",boy[c].num,boy[c].name,boy[c].score1,boy[c].score2,boy[c].score3);
}
D矩阵转置
输入N*N(N<100)的矩阵,输出它的转置矩阵。
#include<>
intmain()
{
intN,a[100][100],i,j,b[100][100];
scanf("%d\n",&N);
for(i=0;ifor(j=0;jscanf("%d",&a[i][j]);
for(i=0;ifor(j=0;jb[j][i]=a[i][j];
for(i=0;i{
for(j=0;jprintf("%d",b[i][j]);
printf("%d\n",b[i][N-1]);
}
}
E求矩阵的外围元素之和
求矩阵的外围元素之和
#include<>
intmain()
{
inta[10][10],i,j,N,s=0;
scanf("%d\n",&N);
for(i=0;ifor(j=0;j{
scanf("%d",&a[i][j]);
if(i==0||j==0||i==N-1||j==N-1)
s=s+a[i][j];
}
printf("%d",s);
}
F求n到m之间的素数并输出
求n到m以内的素数(包含n,m,且m>=n>=10,n<=m<=100)n和m由键盘输入,并将这些素数存储到数组a中并输出(每个素数后面带一个空格)
要求:
(1)编写如下接口的功能函数:
intfun(intn),该函数的功能是判断n是不是素数。
若是,返回1,若不是返回0。
(2)main函数去调用该功能函数
#include<>
intfun(intn)
{
intt;
for(t=2;tif(n%t==0)break;
if(telsereturn1;
}
intmain()
{
intn,m,i,a[90],j=0,b;
scanf("%d,%d",&n,&m);
for(i=n;i<=m;i++)
{
if(fun(i)==1)
a[j++]=i;
}
for(b=0;bprintf("%d",a[b]);
}
G<编程题>删除字符串中的特殊符号
指定字符串中仅包含字母(含大小写),空格和星号*,编写自定义函数fun,删除其中的*。
程序的主体框架已经提供在下面,可以直接复制粘贴到答题框。
注意仅能改动注释之内的内容,注释外内容不得修改,否则将被判违规。
voidfun(char*p)
{
/*****注释1:
答题请在本行与注释2之间编写程序。
本行注释不得删除****/
char*p1,*p2;
for(p1=p2=p;*p1;p1++)
if(*p1!
='*')
*p2++=*p1;
*p2=0;
returnp;
/*****注释2:
答题请在本行与注释1之间编写程序。
本行注释不得删除****/
}
intmain()
{
charb[1024];
while(gets(b)!
='\0')
{
fun(b);
printf("%s\n",b);
}
return1;
}
H<改错题>冒泡排序
下列给定程序中函数fun的功能是:
用冒泡法对6个字符串按由小到大的顺序进行排序。
请改正程序中的错误,使它能得出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构.改错位置已经标注为found,所有改错只能在found附近修改。
#include<>
#include<>
#defineMAXLINE20
fun(char*pstr[6])
{
inti,j;
char*p;
for(i=0;i<5;i++)
{
/**********found***************/
for(j=i+1;j<6;j++)
{
if(strcmp(*(pstr+i),*(pstr+j))>0)
{
p=*(pstr+i);
/**********found***************/
*(pstr+i)=*(pstr+j);
*(pstr+j)=p;
}
}
}
}
intmain()
{
inti;
char*pstr[6],str[6][MAXLINE];
for(i=0;i<6;i++)
pstr[i]=str[i];
for(i=0;i<6;i++)
scanf("%s",pstr[i]);
fun(pstr);
printf("TheStringaftersorting:
\n");
for(i=0;i<6;i++)
printf("%s\n",pstr[i]);
return0;
}
I<填空题>2015C二级考试无纸化操作题
(2)
下列给定程序中,函数fun的功能是:
把形参a所指数组中的最小值放在元素a[O]中,接着把a所指数组中的最大值放在a[1]元素中;再把a所指数组元素中的次小值放在a[2]中,把a所指数组元素中的次大值放在a[3],依此类推。
例如,若a所指数组中的数据最初排列为:
9,1,4,2,3,6,5,8,7;则按规则移动后,数据排列为:
1,9,2,8,3,7,4,6,5。
形参n中存放a所指数组中数据的个数。
规定fun函数中的max存放当前所找的最大值,px存放当前所找最大值的下标。
请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。
注意:
部分源程序给出如下。
不得增行或删行,也不得更改程序的结构!
voidfun(char*p)
{
/*****注释1:
答题请在本行与注释2之间编写程序。
本行注释不得删除****/
char*p1,*p2;
for(p1=p2=p;*p1;p1++)
if(*p1!
='*')
*p2++=*p1;
*p2=0;
returnp;
/*****注释2:
答题请在本行与注释1之间编写程序。
本行注释不得删除****/
}
intmain()
{
charb[1024];
while(gets(b)!
='\0')
{
fun(b);
printf("%s\n",b);
}
return1;
}
J编辑部的故事
(1)
文艺青年杂志社对作者按字符数付稿酬。
编辑部的编辑遇到一个烦心事,最近作者群中流行“咆哮体”文书,一句话里带有很多个感叹号,而且咆哮体中经常混杂着“有木有”和“尼玛”这样无用的词语,使得杂志的额外支出大大增加。
你需要帮助解决这一个问题,将文本中多个连续的感叹号,无用的“有木有”和“尼玛”等无用的词。
K<改错题>39
下面程序中函数fun的功能是:
统计p2子字符串在p1所指的主字符串中出现的次数。
请改正程序中的错误,使得它能得出正确结果
#include<>
intfun(char*p1,char*p2)
{
inti,j,k,num=0;
/*****found****/
for(i=0;p1[i];i++)
for(j=i,k=0;p2[k]==p1[j];k++,j++)
if(p2[k+1]=='\0')
{
num++;
Break;
}
returnnum;
}
intmain()
{
charstr[80],substr[80];
gets(str);
gets(substr);
printf("%d",fun(str,substr));
return0;
}
L<编程题>33
编写函数fun,其功能是找出M×N的二维浮点数组中最大元素的值,将这个数输出。
(M,N均小于100)
voidfun(float*p,intM,intN)
{
floatmx=*(p+0);
/******begin******/
inti;
for(i=0;i<1024;i++)
if(*(++p)>mx)
mx=*p;
/*******end******/
printf("%.4f",mx);
}
intmain()
{
inta[100][100],M,N,i,j;
scanf("%d%d",&M,&N);
for(i=0;ifor(j=0;jscanf("%f",&a[i][j]);
fun(&a[0][0],M,N);
return0;
}
M第七章之找到第一名
(1)
某市进行了一次英语竞赛,一共有N个人报名参加(N<1000000),按照报名顺序分别是1号~N号。
英语竞赛的得分范围是0~100分,可能会有分存在。
现在给你N的值和按照号码排列的得分,要求输出第一名的号码。
若是有并列第一名则需要同属输出多个第一名的号码。
#include<>
intmain()
{
inta[100],N,i,max=0,n;
scanf("N=%d",&N);
for(i=0;i{
scanf("%d",&a[i]);
if(a[i]>max)
max=a[i];
}
for(i=0;i{
if(max==a[i])
{
n=i+1;
printf("%d\n",n);
}
}
}
N第七章之删除数组元素
(1)
输入N个大小范围在0~100(含0和100)的整数(N<100),并未排序且不重复。
从中寻找一个指定的数的下标号(从1开始),从数组中删除,并将剩余的数组内容输出。
#include<>
intmain()
{
intn,a[99],i,b;
scanf("N=%d",&n);
for(i=0;i<=n-2;i++)
{
scanf("%d,",&a[i]);
}scanf("%d",&a[n-1]);
scanf("%d",&b);
if(b!
=n)
{
for(i=0;i<=b-2;i++)
{
Printf("%d,",a[i]);
}
for(i=b;i<=n-2;i++)
{
printf("%d,",a[i]);
}printf("%d",a[n-1]);
}
else
{
for(i=0;i<=n-3;i++)
{
printf("%d,",a[i]);
}printf("%d",a[n-2]);
}
}
O第七章之冒泡排序法
(1)
使用冒泡排序法对数组元素进行排序,要求输出每一趟排序后的数组内容。
数组大小N<10,数组元素定为正整型。
#include<>
intmain()
{
inta[10],i=0,j,n,t,m;
while(scanf("%d",&a[i])!
=EOF)
i++;
n=i;
for(i=0;i{
for(j=0;jif(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
printf("%d",a[0]);
for(m=1;mprintf(",%d",a[m]);
printf("\n");
}
}
P所有串长超过k的字符串中后面的字符删除
函数fun的功能是:
在形参ss所指字符串数组中,将所有串长超过k(K<=N)。
的字符串中后面的字符删除,只保留前面的k个字符。
ss所指字符串数组中共有M(M<=5)个字符串,且串长小于N(N<=10)。
#include<>
voidfun(charss[][11],intM,intk)
{
/*******yourcodestart******/
inti=0;
while(i{
ss[i][k]='\0';
i++;
}
/******yourcodeend******/
}
intmain()
{
intM,k,i;
charss[5][11];
scanf("%d",&M);
scanf("%d",&k);
gets(ss[0]);
for(i=0;igets(ss[i]);
fun(ss,M,k);
for(i=0;iputs(ss[i]);
return0;
}
Q字符串按长度由短到长进行排序
函数fun的功能是:
在形参ss所指字符串数组中,将所有串长超过k(K<=N)。
的字符串中后面的字符删除,只保留前面的k个字符。
ss所指字符串数组中共有M(M<=5)个字符串,且串长小于N(N<=10)。
#include<>
#include<>
voidfun(charss[][11],intM)
{
char*ps[5],*tp;
inti,j,k;
for(i=0;ifor(i=0;i{
k=i;
for(j=i+1;jif(strlen(ps[k])>strlen(ps[j]))
k=j;
tp=ps[i];
ps[i]=ps[k];
ps[k]=tp;
}
for(i=0;iputs(ps[i]);
}
intmain()
{intM,i;
charss[5][11];
scanf("%d",&M);
gets(ss[0]);
for(i=0;ifun(ss,M);
}
R补齐字符串
函数fun的功能是:
求出形参ss所指字符串数组中最长字符串的长度,其余字符串左边用字符*补齐,使其与最长的字符串等长。
字符串数组中共有M(M<=5)个字符串,且串长小于N。
(N<=10)
#include<>
#include<>
voidfun(charss[][11],intM)
{inti,j,k=0,n,m,len;
for(i=0;i{len=strlen(ss[i]);
if(i==0)n=len;
if(len>n)
{
n=len;
k=i;
}
}
for(i=0;iif(i!
=k)
{m=n;(最大长)
len=strlen(ss[i]);
for(j=len;j>=0;j--)
ss[i][m--]=ss[i][j];
for(j=0;jss[i][j]='*';
}
}
intmain()
{intM,i;
charss[5][11];
scanf("%d",&M);
gets(ss[0]);
for(i=0;ifun(ss,M);
for(i=0;i}
S每个单词的第一个字母改成大写
读入一个英文文本行,将其中每个单词的第一个字母改成大写,然后输出此文本行(这里"单词"是指由空格隔开的字符串)。
#include<>
#include""
#include""
voidupfst(char*p)
{
if(*p!
='\0')
{
*p=toupper(*p);
p++;
}
for(;*p;p++)
if(*(p-1)==''&&*p!
='')
*p=toupper(*p);
}
intmain()
{
charchrstr[81];
gets(chrstr);
upfst(chrstr);
printf("%s\n",chrstr);
return0;
}
T文本分析2
函数fun的作用是:
统计整型变量m中各数字出现的次数,并存放到数组a中,其中:
a[0]存放0出现的次数,a[1]存放1出现的次数,……a[9]存放9出现的次数
#include<>
voidfun(intm,inta[10])
{inti;
for(i=0;i<10;i++)
a[i]=0;
while(m>0){
i=m%10;
a[i]++;
m=m/10;
}
}
intmain()
{
intm,a[10],i;
scanf("%d",&m);
fun(m,a);
for(i=0;i<10;i++)
printf("%d,",a[i]);
printf("\n");
}
U删除所有串长超过k的字符串
函数fun的功能是:
从形参ss所指字符串数组中,删除所有串长超过k的字符串,函数返回剩余字符串的个数,并输出剩下的字符串。
ss所指字符串数组中共有M(M<=5)个字符串,且串长小于N(N<=10)),
#include<>
#include<>
intfun(charss[][11],intM,intk)
{
inti,j=0,l;
for(i=0;i{
l=strlen(ss[i]);
if(l<=k)
strcpy(ss[j++],ss[i]);
}
returnj;
}
intmain()
{
intM,k,i,f;
charss[5][11];
scanf("%d",&M);
scanf("%d",&k);
gets(ss[0]);
for(i=0;igets(ss[i]);
f=fun(ss,M,k);
printf("%d\n",f);
for(i=0;iputs(ss[i]);
}
V字符串比较