高级语言期末2012级B卷(软件学院)

1.编写函数,输出任意正整数n的位数(n默认为存储十进制的整形变量)
例如:正整数13,则输出2,;正整数3088,则输出4

#include <stdio.h>

int func(int n) {
	int count=0;
	while(n>0) {
		n/=10;
		count++;
	}
	return count;
}

int main() {
	printf("%d",func(21222));
}

2.编写函数,对给定的有序整数数组进行整理,使得所有整数重复2次出现。
例如:原数组为-2、-1、-1、0、0、1、4、4、4则处理后的结果为-2、-2、-1、-1、-1、-1、0、0、0、0、1、1、4、4、4、4、4、4。

#include <stdio.h>
#include <stdlib.h>

void sort(int *a,int n) {
	for(int i=0; i<n-1; i++)
		for(int j=0; j<n-i-1; j++)
			if(a[j]>a[j+1]) {
				int temp=a[j];
				a[j]=a[j+1];
				a[j+1]=temp;
			}
}

void func(int *a, int n) {
	for (int i = 0; i < n; i++)
		a[i + n] = a[i];
	sort(a, 2*n);
	for (int i = 0; i < 2 * 8; i++)
		printf("%d ", a[i]);
}

int main() {
	int a[]= {-2,-1,-1,0,0,1,3,3};
	func(a,8);
}

3.编写递归函数,求任意正整数n从右边开始的第j位数字(默认,最右侧位第一位)。
公式递归定义如下

digit(n,j)=\left\{\begin{matrix} n\%10,j=1 & \\ digit(n/10,j-1),j>1 & \end{matrix}\right.

#include <stdio.h>

int digit(int n,int j) {
	if(j==1)
		return n%10;
	return digit(n/10,j-1);
}

4.构造存储学生信息的结构体数组(每个结构体包含3个字段:姓名、性别、成绩),编写函数,将结构体数组中前M个成绩为优秀的学生信息存储到指定文件out.txt中。

张三李四......赵九
男(true)女(false)男(true)
837697
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#define M 30

typedef struct student {
	char name[20];
	bool sex;
	int score;
} student;

void save(struct student stu[]) {
	FILE *file;
	if((file=fopen("out.txt","w"))==NULL) {
		printf("open error");
		exit(0);
	}
	int i=0,k=0;
	while(k<M) {
		if(stu[i].score>=90) {
			fprintf(file,"%s",stu[i].name);
			fprintf(file,"%d",stu[i].sex);
			fprintf(file,"%d",stu[i].score);
			fprintf(file,"\n");
			k++;
		}
		i++;
	}
	fclose(file);
}

5.构造单链表(每个结点包含2个字段:整数信息、后续指针),编写函数,从单链表的头结点依次处理每个结点,仅保留整数信息大于当前前驱结点的整数信息的结点,使得处理后的单链表中整数信息满足递增顺序。

例如:若单链表中存储的整数信息依次为1、5、6、3、7、7、0、5、8、1,则处理后得到的单链表中存储的整数信息依次为1、5、6、7、8(处理过程:在保留了1、5、6之后,3由于小于之前保留的6而舍弃,之后保留第一个7,第二个7由于等于之前保留的7而舍弃,0和第二个5由于小于之前保留的7而舍弃,之后保留8,第二个1由于小于之前保留的8而舍弃)

#include <stdio.h>
#include <stdlib.h>

typedef struct node {
	int key;
	struct node *next;
} node;

void del(struct node *head) {
	if(head==NULL)
		return;
	struct node* q=head,*p=head->next;
	while(p!=NULL) {
		if(q->key>=p->key)
			q->next=p->next;
		else
			q=p;
		p=p->next;
	}
}
  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值