C语言
今天是第14周了,大家的课程也少了不少,这也意味着考试即将来临,各位西农儿做好了考试的准备吗?我们也精心准备了几道历年的考题来帮助大家复习!
LV1 简单
题目1
描述:编写程序计算(1+1/2+1/3+1/4+…+1/n)的结果,其中变量n从键盘输入,要求n是大于0的整数。
要求:
输入:n
输出:公式(1+1/2+1/3+1/4+…+1/n)的计算结果。
输入样例:10
输出样例:sum=2.928968
这题是一道简单题,我们可以很轻易的看出需要一个循环来反复累加,并且需要一个判断语句来验证是否输入的小于零。
下面是一个示例:
#include
int main( )
{
int i=1, n;
do
{
scanf("%d",&n);
}
while(n<0);
double sum=0;
while (i<=n)
{
sum+=1.0/i;
i++;
}
printf("sum=%lf",sum);
return 0;
}
可以看到,声明玩完变量后用do while循环确认输入为大于零的数,接下来用1.0将i转变成浮点型再加到sum中,就完成了题一。
LV2 普通
题目22、打印800到1000之内尾数为7的所有质数
描述:
打印800到1000之内尾数为7的所有质数。质数又称素数。一个大于1的自然数,除了1和它本身外,不能被其他自然数整除,换句话说就是一个质数除了1和它本身以外不再有其他的因数。
要求:
输出的数据左对齐,每两个数据之间间隔2个空格,且每输出5个数据换一行。
可以看出,我们需要遍历从800到1000的数,先确定他是不是尾数为7,再确定他是不是质数,我们可以用一个循环方便的实现这一点。
代码如下:
#include
#include
int main()
{
int i, j, flag, count = 0 ;
for(i=800; i<=1000; i++)
{
if(i%10==7)
{
flag=0;
for(j=2; j<=i-1; j++)
{
if(i%j==0)
{
flag=1;
break;
}
}
if(flag == 0)
{
printf("%-5d", i);
count++;
if(count%5==0)
{
printf("\n");
}
}
}
}
return 0;
}
可以看出我们的代码中设立了一个flag来确认这个数字是否是尾数为7的质数,并通过i的不断自增来实现800到1000的遍历。count来实现每5个数换行的操作,就完成了题二。
LV3 困难
题目3
描述:
从键盘上输入5条学生信息记录,利用函数指针实现这5个学生成绩的升序和降序排列,并输出排序后的结果,要求使用函数调用、函数指针以及结构体数组编程实现。
要求:
1、学生信息包括学号、姓名和成绩三部分,共有5个学生信息记录,要求使用结构体数组存储。
2、实现“大于”函数,该函数比较两个学生成绩的大小,若第一个学生成绩大于第二学生,则返回1,否则返回0,要求函数原型为:int greater(const void *p, const void *q)。
3、实现“小于”函数,该函数比较两个学生成绩的大小,若第一个学生成绩小于第二学生,则返回1,否则返回0,要求函数原型为:int lessthan(const void *p, const void *q)。
4、实现学生信息输入函数,该函数用于从键盘输入学生信息,函数原型为:void input_student(struct student a[], int n)。
5、实现学生信息输出函数,该函数用于向屏幕输出学生信息,函数原型为:void output_student(struct student a[], int n)。
可以看出,这道题目明显比之前的题目复杂,但是也是C语言运用的结合,我们应该先定义结构体student再进行解题,大于函数与小于函数都是排序的灵活运用,所有代码最关键的是测试我们对结构体的理解。
代码如下:
#include
#include
#define N 5
struct student
{
long num;
char name[20];
float score;
};
int greater(const void *p, const void *q);
int lessthan(const void *p, const void *q);
void input_student(struct student a[], int n);
void output_student(struct student a[], int n);
int main(void)
{
struct student CIE_CS[N];
int (*fun)(const void *p, const void *q);
input_student(CIE_CS, N);
printf("Sort results with descending order:\n");
fun=greater;
qsort(CIE_CS, N, sizeof(struct student), fun);
output_student(CIE_CS, N);
printf("Sort results with ascending order:\n");
fun=lessthan;
qsort(CIE_CS, N, sizeof(struct student), fun);
output_student(CIE_CS, N);
return 0;
}
int greater(const void *p, const void *q)
{
const struct student *x=p;
const struct student *y=q;
return (x->score>y->score);
}
int lessthan(const void *p, const void *q)
{
const struct student *x=p;
const struct student *y=q;
return (x->scorescore);
}
void input_student(struct student a[], int n)
{
int i;
for(i=0; i {
scanf("%ld", &a[i].num);
scanf("%s", a[i].name);
scanf("%f", &a[i].score);
}
}
void output_student(struct student a[], int n)
{
int i;
for(i=0; i {
printf("%ld ", a[i].num);
printf("%s ", a[i].name);
printf("%f ", a[i].score);
printf("\n");
}
}
正如我们刚刚所思考的一样,先声明结构体数组,这之中还声明了一个函数指针,再将greater和lessthan先后赋给该指针,先后进行排序并输出。
![2fdaf4f001128419691d828ab109ed8d.gif](https://i-blog.csdnimg.cn/blog_migrate/a53886259da50b48ebd8de3db9120e7f.gif)
虽然这三题的难度有高有低,但是这些题目的宗旨都是考c语言的理解与运用,我们只要认真看书,了解书上的例题与讲解,就一定没有问题!最后祝各位C语言期末考试考出优异的成绩!
作者:唐津晨
审核:叶卓涵
指导:沈钊
![4e4c3a1a85c06d32af2ae5e4d9b51c36.png](https://i-blog.csdnimg.cn/blog_migrate/2057ee354fcb6b2e340c70dd8ec3e117.jpeg)