一、任意进制数转化为任意进制数
//仅仅局限于正数
#include<stdio.h>
#include<math.h>
#include<string.h>
#define N 32
int toTenNumber(char *num,int len,int src){
int i,ten=0;
for (i =0; i<len;i++)
{ if(*(num +len-1- i)>='A'&&*(num+len-1 + i)<='Z')
ten += ((*(num+len-1 - i) % 65)+10) * pow(src,i);
else
ten += (*(num+len-1 - i)-48) * pow(src,i);
}
return ten;
}
int exchange(char *num,char *object,int size,int from,int to){
int i=0;
int tennumber = toTenNumber(num,size,from);
while(tennumber!=0){
if(tennumber%to>=10)
object[i] = tennumber % to + 55;
else
object[i] = tennumber % to + 48;
tennumber /= to;
i++;
}
return i - 1;
}
int main(){
char src[N],object[N];
int from,to;
scanf("%s %d %d",src,&from,&to);
int len=exchange(src,object,(int)strlen(src),from,to);
for (int i=0; i <= len;i++)
{
printf("%c",object[len-i]);
}
return 0;
}
//输入格式:1010 2 10
//1010【目标数】 2【1010为2进制】 10【转化为10进制】
//将数字转化为二进制
#include <limits.h>
#include <stdio.h>
char *itobs(int, char *);
void show_bstr(const char *);
int main()
{
char bin_str[CHAR_BIT * sizeof(int) + 1];
int number;
scanf("%d", &number);
itobs(number, bin_str);
show_bstr(bin_str);
putchar('\n');
return 0;
}
char *itobs(int n, char *ps)
{
int i;
const static int size = CHAR_BIT * sizeof(int);
for (i = size - 1; i >= 0; i--, n >>= 1)
{
ps[i] = (01 & n) + '0';
}
ps[size] = '\0';
return ps;
}
void show_bstr(const char *str)
{
int i = 0;
while (str[i])
{
putchar(str[i]);
if (++i % 4 == 0 && str[i])
putchar(' ');
}
}
二、最大公因数与最小共倍数
函数实现
#include <stdio.h>
int gcd(int a, int b){
return a == b ? a:gcd(a>b ? a-b:a, b>a ? b-a:b);
}
int lcm(int a, int b)
{
return a * b / gcd(a, b);
}
int main()
{
int a, b, g, l;
scanf("%d,%d", &a, &b);
if (a > b)
{
g = gcd(a, b);
l = lcm(a, b);
}
else
{
g = gcd(b, a);
l = lcm(b, a);
}
printf("%d and %d gcb is %d,lcm is %d", a, b, g, l);
return 0;
}
最大公倍数的四种实现方法:
//最大公因数:
//辗转相除法---循环实现
int gcd(int a,int b){
int t;
while (b)
{
t = a % b;
a = b;
b = t;
}
return a;
}
//辗转相除法---递归实现
int gcd(int a, int b){
return b == 0 ? a:gcd(b, a%b);
}
//辗转相减法---循环实现
int gcd(int a,int b){
int t;
while(b){
t = a - b;
if (b>t)
{
a = b;
b = t;
}
else{
a = t;
}
}
return a;
}
//辗转相减法---递归实现
int gcd(int a, int b){
return a == b ? a:gcd(a>b ? a-b:a, b>a ? b-a:b);
}
三、打印n以内所有素数
#include<stdio.h>
int main(){
int n,i,j;
scanf("%d",&n);
for (i = 1; i <= n;i++)
{
for (j = 2; j < i;j++)
{
if(i%j==0)
break;
}
if(i==j)
printf("%d ",i);
}
return 0;
}
四、将结构体数据写入到文件中
#include<stdio.h>
#include<stdlib.h>
struct student
{
int id;
char name[10];
int age;
}stu;
int main(){
scanf("%d %s %d",&stu.id,stu.name,&stu.age);
FILE *fp;
if((fp = fopen("student.txt","w"))==NULL)
exit(-1);
fprintf(fp,"%d %s %d",stu.id,stu.name,stu.age);
fclose(fp);
return 0;
}
五、从文件中读取数据到结构体中
#include<stdio.h>
#include<stdlib.h>
struct student
{
int id;
char name[10];
int age;
}stu;
int main(){
FILE *fp;
if((fp = fopen("student.txt","r"))==NULL)
exit(-1);
fscanf(fp,"%d %s %d",&stu.id,stu.name,&stu.age);
fclose(fp);
printf("%d %s %d\n",stu.id,stu.name,stu.age);
return 0;
}
六、利用指针实现数组元素循环移动
#include<stdio.h>
int *solve(int *s,int n,int m){
int *a=(s+n+1);
int star = (n - m)%n;
int j = star;
for(int i=0;i<=n;){
*(a+i)=*(s+j);
j=(star+i+1)%n;
i++;
}
return a;
}
int main(void)
{
int n,m,s[110];
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
scanf("%d",&s[i]);
int *ans;
/*********Begin*********/
ans=solve(s,n,m);
/*********End**********/
for(int i=0;i<n;i++){
if(i==0) printf(" %d",*ans++ );
else printf(" %d",*ans++ );
}
return 0;
}
七、将两个有序数列合并为一个有序数列
#include<stdio.h>
#define N 20
int main()
{
int a[N]={ 0 }, b[N]={ 0 };
int i,j,k,anum,bnum,c[N+N];
scanf("%d",&anum);
for(i=0;i<anum;i++)
{
scanf("%d",&a[i]);
}
scanf("%d",&bnum);
for(i=0;i<bnum;i++)
{
scanf("%d",&b[i]);
}
for(i=0,j=0,k=0;i<anum+bnum;i++){
if((a[j]<=b[k]&&j<anum)||k==bnum){
c[i]=a[j];
j++;
printf("%d ",c[i]);
continue;
}
if(a[j]>b[k]||j==anum){
c[i]=b[k];
k++;
printf("%d ",c[i]);
}
}
return 0;
}
八、折半查找
#include<stdio.h>
#define N 15
int main()
{
int high,i,x,low,mid,a[N]={4,9,14,16,17,19,28,33,42,51,64,75,84,91,100};
scanf("%d",&x);
high=N-1;low=0;
i=0;
while(high>=low){
mid=(high+low)/2;
printf("查找区间下界,上界,中间点[%d,%d,%d]\n",low,high,mid);
if(x==a[mid]){
i=1;
break;
}else if(x>a[mid]){
low=mid+1;
}else{
high=mid-1;
}
}
if(i==1){
printf("查找成功,%d的下标:%d",x,mid);
}else
printf("查找失败");
return 0;
}
九、冒泡排序
#include <stdio.h>
#define N 100
int main ()
{
int a[N],n,i,j,t;
scanf("%d",&n);
for (i = 0; i < n;i++)
scanf("%d",&a[i]);
for (i = 0; i < n;i++)
{
for (j = 0; j < n - 1 - i;j++)
{
if(a[j]<a[j+1]){
t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
}
}
}
for (i = 0; i < n;i++)
{
printf("%d ",a[i]);
}
return 0;
}
十、简单选择排序
#include <stdio.h>
#define N 100
int main ()
{
int n,arr[N],i,j,temp,index;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&arr[i]);
for(i=0;i<n-1;i++){
index=i;
for(j=i+1;j<n;j++){
if(arr[j]<arr[index]){
index=j;
}
}
if(index!=i){
temp=arr[index];
arr[index]=arr[i];
arr[i]=temp;
}
for(j=0;j<n;j++)
printf("%d ",arr[j]);
printf("\n");
}
return 0;
}
十一、插入排序
#include <stdio.h>
#include<stdlib.h>
#define N 100
int main ()
{
int n,arr[N],i,j,index,temp;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&arr[i]);
for(i=1;i<n;i++){
index=i;
for(j=0;j<i;j++){
if(arr[j]>arr[index]){
index=j;
temp=arr[i];
break;
}
}
if(index!=i){
for(j=i-1;j>=index;j--){
arr[j+1]=arr[j];
}
arr[index]=temp;
}
for(j=0;j<n;j++){
printf("%d ",arr[j]);
}
printf("\n");
}
return 0;
}
十二、一个素数,依次从个位开始去掉一位,两位……若得到的都是素数,且各数字不为0,则称为超级素:373->37->3。求100-900之间的超级素数
#include <stdio.h>
int isprime(int n);
int main()
{
int i;
for (i = 100; i < 900; i++) {
if (isprime(i))
printf("%d\n",i);
}
return 0;
}
int isprime(int n) {
int flag=1, t,i;
t = n;
while (t&&flag) {
if (t % 10 == 1) {
flag = 0;
break;
}
for (i = 2; i < t; i++) {
if (t % i == 0) {
flag = 0;
break;
}
}
t /= 10;
}
return flag;
}
十三、定义一个结构体管理士兵的信息(编号,姓名,兵种,年龄)。输入若干士兵的信息,当输入的士兵编号为О时输入结束。建立一个单向链表存放士兵信息并输出。
#include <stdio.h>
#include<stdlib.h>
struct s{
int id;
char name[20];
char type[10];
int age;
struct s *next;
};
int main()
{
int i=0,j;
struct s *a = (struct s*)malloc(sizeof(struct s));
struct s *t = a;
while(1){
scanf("%d",&a->id);
if(!a->id){
break;
}
scanf("%s %s %d", a->name, a->type, &a->age);
a->next = (struct s *)malloc(sizeof(struct s));
a = a->next;
i++;
}
for (j = 0; j <i;j++)
{
printf("%d,%s,%s,%d\n",t->id,t->name,t->type,t->age);
t = t->next;
}
return 0;
}