C语言程序设计期末考试及答案.docx
《C语言程序设计期末考试及答案.docx》由会员分享,可在线阅读,更多相关《C语言程序设计期末考试及答案.docx(8页珍藏版)》请在冰豆网上搜索。
C语言程序设计期末考试及答案
第一次试验
1.编写一个程序,求出给定半径r的圆的面积和周长,并且输出计算结果。
其中:
r的值由用户输入,用浮点型数据处理。
#include
voidmain()
{
floatPI=3.1415;
floatr,area,perim;
printf("请输入圆的半径:
\n");
printf("r=");
scanf("%f",&r);//输入半径r
perim=2*PI*r;//周长=2πr
area=PI*r*r;//面积=πr^2
printf("周长:
%f\n面积:
%f\n",perim,area);//输出周长和面积..
}
2.给一百分制成绩,要求输出成绩等级’A’、’B’、’C’、’D’、’E’。
90分以上为’A’,80~89分为’B’,70~79分为’C’,60~69分为’D’,60分以下为’E’。
#include
voidmain()
{
intiNum;
printf("请输入分数:
");
scanf("%d",&iNum);
switch(iNum/10)
{
case10:
case9:
printf("学生成绩A\n");break;
case8:
printf("学生成绩B\n");break;
case7:
printf("学生成绩C\n");break;
case6:
printf("学生成绩D\n");break;
default:
printf("学生成绩E\n");break;
}
}
3.输入两个正整数m和n,求其最大公约数和最小公倍数。
#include
intmain()
{
intp,r,n,m,temp;
printf("请输入两个正整数n,m:
");//请用空格隔开
scanf("%d%d,",&n,&m);
if(n{
temp=n;
n=m;
m=temp;
}
p=n*m;
while(m!
=0)
{
r=n%m;
n=m;
m=r;
}
printf("它们的最大公约数为:
%d\n",n);
printf("它们的最小公约数为:
%d\n",p/n);
return0;
}
4.输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。
#include
#include
#include
inti,a[4];
chart;
intmain()
{
printf("请输入字符串");
for(i=0;;i++)
{
scanf("%c",&t);
if(t=='\n')break;
elseif(t>='A'&&t<='Z')a[0]++;
elseif(t>='a'&&t<='z')a[0]++;
elseif(t=='')a[1]++;
elseif(t>='0'&&t<='9')a[2]++;
elsea[3]++;
}
for(i=0;i<4;i++)
{
if(i==0)
printf("字母的个数是");
elseif(i==1)
printf("空格的个数是");
elseif(i==2)
printf("数字的个数是");
elseif(i==3)
printf("其它字符的个数是");
printf("%d\n",a[i]);
}
system("pause");
return0;
}
5.求sn=a+aa+aaa+…+aa...a(n个a)之值,其中a是一个数字。
例如:
2+22+222+2222+22222(此时n=5),n由键盘输入。
#includeintmain(void){intsum=0;intsun=0;inta;intn;inti=0;printf("请入入a值(整数):
\n");printf("a=");scanf("%d",&a);printf("请入入n值:
\n");printf("n=");scanf("%d",&n);while(i第二次试验
1.有一分数序列:
求出这个数列的前20项之和。
#includemain(){inti,x,y,a;floatsum=0;x=2;y=1;for(i=1;i<20;i++){sum+=(float)(x)/y;//printf("%d/%d\n",x,y);a=x;x=x+y;y=a;}printf("%7.5f\n",sum);}
2.求一个3
3矩阵对角线元素之和。
#includevoidmain(){inta[3][3];inti,j;intsum=0;intsum1=0;//inputfor(i=0;i<=2;i++){for(j=0;j<=2;j++){printf("a[%d][%d]:
",i+1,j+1);scanf("%d",&a[i][j]);}printf("\n");}//sumfor(i=0;i<=2;i++){for(j=0;j<=2;j++){if(i==j)sum=sum+a[i][j];if(i+j==2)sum1=sum1+a[i][j];}}//outputprintf("DuiJIao1:
%d\n",sum);printf("DuiJIao2:
%d\n",sum1);//outputmatrixprintf("\n");for(i=0;i<=2;i++){for(j=0;j<=2;j++){printf("%d",a[i][j]);}printf("\n");}}
依次输入9个数输出两对角线和
3.将一个数组中的值按逆序重新存放,例如原来的顺序为:
8,6,5,4,1。
要求改为:
1,4,5,6,8。
#include
voidmain()
{inti,b[10];
for(i=0;i<10;i++)
scanf("%d",&b[i]);
for(i=9;i>-1;i--)
printf("%5d",b[i]);
printf("\n");
}
4.有一篇文章,共有3行文字,每行有80个字符。
要求分别统计出其中英文大写字母、小写字母、数字、空格、以及其他字符的个数。
#includeintmain(){inti,j,upp,low,dig,spa,oth;chartext[3][80];upp=low=dig=spa=oth=0;for(i=0;i<3;i++){printf("pleaseinputline%d:
\n",i+1);gets(text[i]);for(j=0;j<80&&text[i][j]!
='\0';j++){if(text[i][j]>='A'&&text[i][j]<='Z')upp++;elseif(text[i][j]>='a'&&text[i][j]<='z')low++;elseif(text[i][j]>='0'&&text[i][j]<='9')dig++;elseif(text[i][j]=='')spa++;elseoth++;}}printf("\nuppercase:
%d\n",upp);printf("lowercase:
%d\n",low);printf("digit:
%d\n",dig);printf("space:
%d\n",spa);printf("other:
%d\n",oth);return0;}
第三次实验
1.将字符串computer赋给一个字符数组,然后从第一个字母开始输出该串。
请用指针实现。
#include#include#defineMAX_LENGTH32intmain(){charstr[MAX_LENGTH]={0};char*pStr=(char*)&str;//1.将字符串computer赋给一个字符数组strcpy(str,"computer");//2.然后从第一个字母开始间隔地输出该串while(*pStr!
='\0'){printf("%c\n",*pStr);pStr++;}return1;}
2.将无符号八进制数字字符串转换为十进制整数。
例如,输入的字符串为556,则输出十进制整数366。
用指针实现。
#include
voidmain()
{char*p,s[6];
intn=0;
p=s;
gets(p);
while(*p!
='\0')
{n=n*8;
n=n+(*p-'0');
p++;
}
printf("%d\n",n);
}
3.编程输入一行文字,找出其中的大写字母,小写字母,空格,数字,及其他字符的个数,用指针实现。
#include
#include
#include
intmain()
{
charstr[100];
intnum1,num2,num3,num4;
num1=num2=num3=num4=0;
gets(str);
for(inti=0;i{
if(islower(str[i]))
num1++;
elseif(isupper(str[i]))
num2++;
elseif(isdigit(str[i]))
num3++;
elseif(str[i]=='')
num4++;
}
printf("小写字母:
%d\n",num1);
printf("大写字母:
%d\n",num2);
printf("数字:
%d\n",num3);
printf("空格:
%d\n",num4);
return0;
}
第四次实验
1.写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的信息。
#include#includeintprime(intx){inttemp,i,k;temp=(int)(sqrt(x));for(i=2;i<=temp;++i)if(x%i==0){k=0;break;}if(i>temp)k=1;returnk;}voidmain(){intx;intk;scanf("%d",&x);k=prime(x);if(k)printf("%disprime\n",x);elseprintf("%disnotprime\n",x);}
2.写一函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串。
#include#includechar*fanxu(charstr1[100])//返回类型{inti,j,t;charstr2[100];strcpy(str2,str1);t=strlen(str1);for(i=0,j=t-1;j>-1;i++,j--)str1[i]=str2[j];returnstr2;}intmain(intargc,char*argv[]){charstr0[100];gets(str0);fanxu(str0);puts(str0);return0;}
3.写一函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其他字符的个数,在主函数中输入字符串及输出上述的结果。
#include#includeintalph,digit,space,others;voidcount(charstr[]);voidmain(void){chartext[80];printf("\n输入字符串:
\n");gets(text);printf("字符串是:
");puts(text);strcat(text,"\n");alph=0;digit=0;space=0;others=0;count(text);printf("\n%d字母,%d数字,%d空格,%d其它字符\n",alph,digit,space,others);}voidcount(charstr[]){inti;for(i=0;str[i]!
='\n';i++){if((str[i]>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z'))alph++;elseif(str[i]>='0'&&str[i]<='9')digit++;elseif(str[i]=='')space++;elseothers++;}}
4.写一函数,使给定的一个二维数组(3×3)转置,即行列互换。
#include
voidx(inta[3][3])//x是行列互换的函数名
{
inti,j;
printf("行列互换后:
\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
printf("%d\t",a[j][i]);
}
printf("\n");
}
}
voidmain()
{
intsum[3][3],i,j;
printf("请输入3*3的矩阵数:
");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
scanf("%d",&sum[i][j]);
}
}
x(sum);
}