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 30typedef 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;elseq=p;p=p->next;}
}