《C语言程序设计》期末复习题答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《C语言程序设计》期末复习题答案一、选择题
二、读程序,写出程序的运行结果
三、程序填空
四、编程题,请写出完整的C语言程序
1.输入一百分制成绩,要求输出成绩等级‘A’,‘B’,‘C’,‘D’,‘E’。
90分及以上为‘A’ ,80-89分为‘B’,70-79分为‘C’,60-69分为‘D’,60分以下为‘E’。
#include <stdio.h>
void main( )
{
int score,temp;
char grade;
scanf("%d",&score);
if ((score>100)||(score<0))
printf("\ndata error\n");
else
{
if(score= =100) temp=9;
else temp=score/10;
switch (temp)
{
case 9 : grade='A';break;
case 8 : grade='B';break;
case 7: grade='C';break;
case 6: grade='D' ; break;
case 5:
case 4:
case 3:
case 2:
case 1:
case 0: grade='E' ;
}
printf("%d,%c\n", score,grade);
}
}
2.编程求方程3X+4Y=50的所有非负整数解。
#include<stdio.h>
int main()
{ int x,y;
for(x=1;x<17;x++)
for(y=1;y<13;y++)
if(3*x+4*y==50)
printf("x=%2d,y=%2d\n",x,y);
return 0;
}
3.求1!+2!+3!+…+100!。
#include <stdio.h>
void main()
{
int i;
double t,s;
i=1;t=i; s=t;
for(i=2;i<=100;i++)
{ t=t*i s+=t; } printf("%ld ",s); }
4.有一分数序列2
1
3
2
5
3
8
5
13
8
21
13 ,,,,,,......,求出这个数列的前30项之和。
#include<stdio.h>
int main()
{ int i,a=1,b=2,k; //a: 分母,b:分子
double t,sum=2/1.0;
for(i=2;i<=30;i++)//循环的初始值,确定循环条件
{
k=a;
a=b;
b=b+k;
t=(double)b/a; //强制类型转换
// t=1.0*b/a;
sum=sum+t;
}
printf("%.2f\n",sum);
return 0;
}
5.输出100以内能被3整除且个位数为6的所有正整数。
#include "stdio.h"
void main()
{int i,j;
for(i=0;i<10; i++)
{ j=i*10+6;
if(i%3!=0)
continue;
printf("%d ",j);
}
}
6.编写一个程序,统计出10个学生的平均成绩,最高分。
例如:输入10名学生的成绩分别为92,87,68,56,92,84,67,75,92,66,则输出:平均成绩为7
7.9,最高分为92。
#include <stdio.h>
void main( )
{ float a[10],ave,max,sum=0;
int i=0;
for(i=0;i<10;i++)
scanf("%f",&a[i]);
max=a[0];
for(i=0;i<10;i++)
{if(max<a[i]) max=a[i];
sum=sum+a[i];
}
ave=sum/10;
printf("ave=%f\n",ave);
printf("max=%f\n",max);
}
7.定义一个二维数组,任意输入200个学生的数学、语文、英语、物理、化学5门课程的成绩,计算并输出每一门课程的平均成绩和每一位学生的平均成绩。
#include <stdio.h>
#define N 200 //代表学生数
#define M 5 //代表课程数
void main()
{ int scores[N][M];
int i,j,sum;
//输入学生成绩
for(i=0;i<N;i++)
{ printf("输入第%d个学生的数学、语文、英语、物理、化学5门课程的成绩:",i+1);
for(j=0;j<M;j++)
scanf("%d",&scores[i][j]);
}
//输出学生成绩
printf("序号\t数学\t语文\t英语\t物理\t化学\t平均成绩\n");
for(i=0;i<N;i++)
{ sum=0;
printf("%d\t",i+1); //输出学生序号
for(j=0;j<M;j++)
{ sum+=scores[i][j]; //计算每一位学生的总成绩
printf("%d\t",scores[i][j]);
}
printf("%d\n",sum/M); //输出每一位学生的平均成绩
}
//计算并输出每一门课程的平均成绩
printf("\n平均\t");
for(j=0;j<M;j++)
{ sum=0;
for(i=0;i<N;i++)
sum+=scores[i][j];
printf("%d\t",sum/N);
}
printf("\n");
}
8.已知一个3*3的整型二维数组,输出数组元素中的最小值及其位置(不用考虑有多个相
等的最小值的情况)。
要求:数组元素的初值初始化如下:,最小值是0,其位置是第1行第0列。
#include<stdio.h>
int main()
{
int a[3][3]={1,3,9,0,2,3,5,7,1};
int i,j,row,col,min;
min=a[0][0];
row=0;col=0;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(min>a[i][j])
{
min=a[i][j];
row=i;
col=j;
}
printf("min=%d,row=%d,col=%d\n",min,row,col);
return 0;
}
9.若一个字符串正读和反读都一样,如level、madam,则称之为回文字符串。
请编写程序,输入任意一个字符串,验证其是否为回文。
(多种方法均可)
法1:
#include<stdio.h>
#include<string.h>
int main()
{ char s[100];int i,n,m=1;
scanf("%s",s);
n=strlen(s);
for(i=0;i<n/2;i++)
if(s[i]!=s[n-1-i]){m=0;break;} if(m) printf("%s是回文\n",s);
else printf("%s不是回文\n",s);
return 0;
}
法2:
#include<stdio.h>
#include <string.h>
#define N 100
void fc(char a[ ])
{ int i, tmp, n;
n=strlen( a );
for(i=0;i<n;i++)
{
tmp=a[i];
a[i]=a[n-i-1];
a[n-i-1]=tmp;
}
}
int main()
{
char a[N],b[N];
gets(a);
strcpy(b,a);
fc(a);
if(strcmp(a,b)== 0)printf("%s是回文串\n",a);;
else printf("%s不是回文串\n",a);
return 0;
}
10.编写函数实现两个字符串的连接。
要求不能使用 strlen, strcat, strcpy等字符串处理函数。
函数原型void cat(char s1[], char s2[], char s3[]);主函数中完成两个串的输入,cat函数的调用,连接后的结果输出。
#include<stdio.h>
void cat(char s1[], char s2[], char s3[])
{ int i,j;
for(i=0;s1[i]!='\0';i++)
s3[i]=s1[i];
for(j=0;s2[j]!='\0';j++,i++)
s3[i]=s2[j];
s3[i]='\0';
}
void main()
{ char s1[40],s2[40],s3[80];
printf("请输入第一个字符串:");
gets(s1);
printf("请输入第二个字符串:");
gets(s2);
cat(s1,s2,s3);
printf("连接后的结果是:%s\n",s3);
}
11.编写输入数据函数、排序函数、输出函数,完成10个整数的输入、排序和输出,在主函数中进行测试。
输入函数的功能是程序运行时,通过键盘输入10个整数。
输入函数原型:
void inputData(int a[],int n);
排序函数的功能是把若干个整数从大到小排序。
请分别用冒泡排序、选择排序两种方法实现排序函数,排序函数原型:
void selectedSort(int a[],int n); //选择排序
void bubbleSort(int a[],int n); //冒泡排序
输出函数的功能是把排好序的10个整数在屏幕上输出。
输出函数原型
void outputData(int a[],int n);
#include <stdio.h>
#include <stdlib.h>
#define SIZE 10
void inputData(int a[],int n); //数组数据赋值
void selectedSort(int a[],int n); //选择排序
void bubbleSort(int a[],int n); //冒泡排序
void outputData(int a[],int n); //输出数据
void main()
{
int a[SIZE];
inputData(a,SIZE);
selectedSort(a,SIZE);
bubbleSort(a,SIZE);
outputData(a,SIZE);
}
void inputData(int a[],int n)
{
int i;
printf("请输入%d个整数:\n",n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
}
void selectedSort(int a[],int n) //选择排序
{ int i,j,t,max;
for(i=0;i<n-1;i++)
{
max=i;
for(j=i+1;j<n;j++)
if(a[j]>a[max]) max=j;
t=a[i];
a[i]=a[max];
a[max]=t;
}
}
void bubbleSort(int a[],int n) //冒泡排序
{ int i,j,t;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-i-1;j++)
{
if(a[j]<a[j+1])
{
t=a[j];a[j]=a[j+1];a[j+1]=t;
}
}
}
}
void outputData(int a[],int n)
{ int i;
printf("数组为:\n");
for(i=0;i<n;i++)
{
printf("%d ",a[i]);
}
printf("\n");
}
12.从键盘输入若干个整数,判断其是否为素数,直到输入50个素数为止,统计这50个素数的和。
要求:
①定义函数isprime,判断任意一个正整数是否是素数
②定义函数main,输入若干正整数,通过调用函数isprime,判断是否是素数,求50个素数之和,并输出结果。
#include<stdio.h>
#include<math.h>
int isprime(int x)
{ int i,is=1;
double k;
if(x==1) return 0;
k=sqrt(x);
for(i=2;i<=k;i++)
{ if(x%i==0) {is=0;break;} }
if(is==1) return 1;
else return 0;
}
int main()
{ int x,sum=0,n=0;
while(n<50)
{ scanf("%d",&x);
if(isprime(x)==1) //调用函数
{
sum=sum+x;
n++;
}
}
printf("和=%d\n",sum);
return 0;
}。