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位数字(默认,最右侧位第一位)。
公式递归定义如下
#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) | |
83 | 76 | 97 |
#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;
}
}