初级:

一.请编写函数long fun(long int x),功能是:将长整型数x中每一位上为奇数的数依次取出,并逆序和顺序分别构成一个新数返回。
   例如:程序运行时输入123456789,输出:b=97531 和13579。

#include <stdio.h>
//逆序输出
long fun(long int x)
{
int a;
long b=;
while (x!=)
{
a=x%;
if (a%!=)
{
b=b*+a;
}
x=x/;
}
return (b);
}
//顺序输出
long fun2(long int x)
{
int a,m=;
long b=;
while (x!=)
{
a=x%;
if (a%!=)
{
b=a*m+b;
m*=;
}
x=x/;
}
return (b);
} int main()
{
long int x;
printf("Please input a long int num:");
scanf("%ld",&x);
long b=fun2(x);
printf("b=%ld\n",b);
}

二 编写函数void fun(int *x,int n),它的功能是:求出数组x中的最小数和次最小数,并把最小数和a[0]中的数对调、次最小数和a[1]中的数对调,其余的数保持不变。

如程序运行时若输入:2 4 6 11 3 9 7 0 5 8,则输出:0 2 6 11 3 9 7 4 5 8。

#include <stdio.h>

void fun(int *x,int n)
{
int i,j,k=;
for (i=;i<;i++)
{
int temp=x[i];
for (j=i;j<n;j++)
{
if (x[i]>x[j])
{
x[i]=x[j];
k=j;
}
}
x[i]=x[k];
x[k]=temp; } } int main()
{
int n;
int x[];
printf("input size N :");
scanf("%d",&n);
for (int i=;i<n;i++)
{
scanf("%d",&x[i]);
}
fun(x,n);
for (i=;i<n;i++)
{
printf("%d ",x[i]);
} }

三. 编写函数long fun(int high,int n),功能是:计算并返回high以内(不包含high)最大的n个素数之和。若不足n个,则到最小素数2为止。

例如:若high=100,n=10,则函数的返回值为:732;若high=11,n=10,则函数返回:17。
分析:素数就是只有1这个约数。high以内的数,肯定最大的因数是q=sqrt(high);,判断从2-q没有一个数能整除的即是素数

long fun(int high,int n)
{
int i,j,count=,sum=;
int q=sqrt(high);
for (i=high-;i>=;i--)
{
for (j=q;j>;j--)
{
if (i%j== && i>j)//注意,&&后面的条件,负责会把素因子漏掉
break;
}
if (j<=)
{
sum+=i;
count++;
} if (count==n)
break; } return sum; } int main()
{
int high,n;
scanf("%d %d",&high,&n);
printf("%d\n",fun(high,n));
}

四 函数void fun(int x,char * p)实现十进制整数x到二进制的转换。转换后的二进制数以字符串的方式放置于p所指向的数组中。
  如输入13,输出1101,输入-13,输出-1101。

分析:能被2整除二进制位为0,否则为1,中间借助额外数组保存临时数据。

void fun(int x,char *p)
{
int i,k,j=;
int m=x;
char s[];
while (x!=)
{
if (x%==)
{
s[j]='';
}
else
s[j]='';
j++;
x=x/;
}
for (i=j-, k=;i>=;i--,k++)
{
if (m<)
{
p[]='-';
p[k+]=s[i];
}
else
{
p[k]=s[i];
}
}
if (i==-)
{
if (m<)
{
p[k+]='\0';
}
else
p[k]='\0';
} }
int main()
{
int x;
char p[];
scanf("%d",&x);
fun(x,p);
printf("%s\n",p); }

五 .编写函数int fun(char (*ss)[N],int m,char *s),功能是:形参ss指向一个m行N列的二维字符数组,每行存放一个字符串。求出最大的字符串,复制到s所指的字符数组中,然后返回此最大字符串的长度。

考察数组指针,以及字符串比较和拷贝

#include <stdio.h>
#include <string.h>
#define N 50
int fun(char (*ss)[N],int m,char *s)
{
int i;
//char p[N];
strcpy(s,*ss);
for (i=;i<m;i++)
{
if (strcmp(s,*(ss+i))<)
{
strcpy(s,*(ss+i));
}
}
int len=strlen(s);
return len;
}

六 给定程序中,函数void fun(char *s)的功能是:把形参s所指字符串中下标为偶数的字符右移到下一个偶数位置,最右边被移出字符串的字符绕回放到第一个偶数位置,下标为奇数的字符不动(注:字符串的长度大于等于2)。
  例:若输入:abcd123,输出:3badc21
  很巧妙的方法  ,每次都和第一位交换

循环次数 一 a b c d 1 2 3
            二 c b a d 1 2 3

三 1 b a d c 2 3

四 3 b a d c 2 1

void fun(char *s)
{
int i;
char c;
for (i=;s[i]!='\0';i++)
{
if (i%==)
{
c=s[];
s[]=s[i];
s[i]=c;
}
} }

七 .函数void fun(char s[])的功能是:将s所指字符串中ASCII值为奇数的字符删除。
例如,若s所指字符串中的内容为:“ABCDEFG12345”,其中字符A的ASCII码值为奇数、?、字符1的ASCII码值也为奇数、?都应当删除,其它依此类推。最后s中内容是:“BDF24”。
方法一:借助临时数组

void fun1(char *s)
{
int i,j;
char p[];
for (j=,i=;s[i]!='\0';i++)
{
if ((int)s[i]%==)
{
p[j]=s[i];
j++;
}
}
p[j]='\0';
strcpy(s,p); }

方法二:只用一个数组,每次把要删除的数后面的数往前移一位

void fun2(char *s)
{
int i,j;
for (i=;s[i]!='\0';i++)
{
if (s[i]%!=)
{
for (j=i;s[j]!='\0';j++)
{
s[j]=s[j+];
}
i--;
}
}
}

八 请编写一个函数int fun(long int x),它的功能是:判断整数x是否是同构数。若是同构数,函数返回1;否则返回0。所谓“同构数”是指这样的数,它出现在它的平方数的右边。
例如:输入整数5,5的平方数是25,5是25中右侧的数,所以5是同构数,输出"Yes"。要求x的值不大于10000。

bool fun(long int x)
{
int i;
int m=x*x;
for (i=;m%i!=;i*=)
{
if (m%i==x)
return true;
}
return false;
}

八 编写函数void fun(char *str),将参数字符串中各单词首字母变大写,其余字母变小写。输入输出在main中实现。

如输入"you HAVE 10 books,don't you? " 输出"You Have 10 Books,Don't You?"。单词以空格、逗号、句号分隔。

void fun(char *str)
{
int i,j;
//先把首个单词首字母小写变大写
if (str[]>='a'&&str[]<='z')
str[]-=; //这段比较难理解
for (i=;str[i]!='\0';i++)
{
if (str[i]==' '||str[i]==','||str[i]=='.')
{
if (str[i+]>='a'&&str[i+]<='z')
{
str[i+]-=;
} }
else if (str[i+]>='A'&&str[i+]<='Z')
{
str[i+]+=;
}
}
}

九 n个整数,前面各数循环顺序后移m个位置,最后m个数变成最前面m个数。写函数void fun(int *p,int n,int m),实现上述功能。在main()中输入与输出。
  如下面程序输出 7 8 9 10 1 2 3 4 5 6 。注意,m可能大于n。

//m是循环个数,n是数组长度
void fun(int *p,int n,int m)
{
int i,j;
m=m%n;
for (j=;j<m;j++)
{
int a=p[n-];
for (i=n-;i>;i--)
{
p[i]=p[i-];
}
p[]=a;
}
}

十 编写函数void fun(char *s1,char *s2),实现字符串s1与s2的交叉连接,连接后得到的新字符串放在s1中。
如输入abc12345,输出a1b2c345,若输入abcde123,则输出a1b2c3de。
方法一:借助临时数组

void fun(char *s1,char *s2)
{
int i,j;
int m=strlen(s1);
int n=strlen(s2);
char p [];
if (m>n)
{
for (j=,i=;i<n;i++,j++)
{
p[j]=s1[i];
p[j+]=s2[i];
j++;
}
for (int k=m-n+;k<m;k++,j++)
{
p[j]=s1[k];
}
p[j]='\0'; }
else if (m<n)
{
for (j=,i=;i<m;i++,j++)
{
p[j]=s1[i];
p[j+]=s2[i];
j++;
}
for (int k=n-m+;k<n;k++,j++)
{
p[j]=s2[k];
}
p[j]='\0'; }
else
{
for (j=,i=;i<m;i++,j++)
{
p[j]=s1[i];
p[j+]=s2[i];
j++;
}
p[j]='\0';
}
strcpy(s1,p);
}

方法二:不需要多余数组,方法不错

void fun2(char *s1,char *s2)
{
int i,j,k;
//int len=strlen(s1);
for (j=,i=;s2[j]!='\0';)
{
for (k=strlen(s1);k>=i;k--)
{
s1[k+]=s1[k];//每次把'\0'也往后移动
} s1[i]=s2[j];
i++;
j++;
if (s1[i]) i++;
}
}

十一  传说可以根据两个人的生日来计算其缘分.方法:将两个人的生日各位相加,将得到的数再一次各位相加,直到其值为一个一位数,此数即代表两个人的缘分.
例如,两个生日为:19820523,19841111,则各位相加:1+9+8+2+5+2+3+1+9+8+4+1+1+1+1得:56;再5+6得11;再 1+1得2,即为两人的缘分.编写计算缘分程序,两个生日由键盘输入

分析:注意19820523,19841111各位数相加与x+y后各位相加的效果一样

int fun(long x,long y)
{
int m,sum=;
for (m=x+y;m>||sum>=;)
{
sum+=m%;
m/=;
if (m==&&sum>=)
{
m=sum;
sum=;
}
}
return sum;
}

十二 编写函数float fun(int m),功能是:根据正整型形参m,计算如下公式的值: y=1-1/2+1/3-1/4+1/5...+(-)1/m ,该值作为函数返回值.

float fun(int m)
{
int i;
float sum=0.0;
for (i=;i<=m;i++)
{
if (i%!=)
{
sum+=1.0/i;
}
else
sum-=1.0/i;
}
return sum;
}

进阶题:

一 m个人围成一圈,1,2,3循环报数,报到3的人退出,并将退出的序号依次存到数组p中,包括最后一个人的序号。到最后只余1人,输出最后留下的是第几号(最初的序号,以1起始)及。
若m=6,则输出n=1 3 6 4 2 5 1;若m=10,则输出n=4 3 6 9 2 7 8 5 10 4;若m=100,则输出n=91??。函数int fun(int n ,int *p)实现上述功能,返回n个人中最后余的1人的起始序号,并将退出的序号顺序写入p指向的数组中。

#include <stdlib.h>
//20 n,人个数,p数组保存退出序号
int fun(int n,int *p)
{
int i,j=,k=,m=;
int *a=(int *)malloc(n*sizeof(int));
//把原始数据存入数组a
for (i=;i<n;i++)
{
a[i]=i+;
}
i=;
//退出一个人,a数组中相应位置变为0
while(m<n)
{
if (a[j]!=)
k++;
if (k==)//也不能是k%3==0,否则k=0也满足
{
p[i]=a[j];
a[j]=;
i++;
m++;
k=; //k从0计数到3,再清0.不能累加,否则当a[j]=0时,k虽然不自加,但仍然是3倍数时,会输出a[j]=0
}
j++;
if (j==n)//a数组循环一遍从0再开始
j=;
}
free(a);
return p[n-]; } int main()
{
int n=;
int p[];
int num=fun(n,p);
printf("%d\n",num);
for (int i=;i<n;i++)
{
printf("%d,",p[i]);
}
}

C常见机试题的更多相关文章

  1. 常见机试题分析Java版

    1. 操作系统任务分为系统任务和用户任务两种.其中,系统任务的优先级<50,用户任务的优先级>=50且<=255.优先级大于255的为非法任务,应予以剔除.现有一任务队列task[] ...

  2. 九度oj题目&amp;吉大考研11年机试题全解

    九度oj题目(吉大考研11年机试题全解) 吉大考研机试2011年题目: 题目一(jobdu1105:字符串的反码).    http://ac.jobdu.com/problem.php?pid=11 ...

  3. Java基础机试题

    package day8;import java.util.Scanner;/** * Java基础机试题 * @author:lyrand * */public class convert {   ...

  4. 牛客网华为机试题之Python解法

    牛客网华为机试题之Python解法 第1题 字符串最后一个单词的长度 a = input().split(" ") print(len(a[-1])) 第2题 计算字符个数 a = ...

  5. [转] C语言常见笔试题大全1

    点击阅读原文 1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365UL) [ ...

  6. 【搞定Jvm面试】 Java 内存区域揭秘附常见面试题解析

    本文已经收录自笔者开源的 JavaGuide: https://github.com/Snailclimb ([Java学习+面试指南] 一份涵盖大部分Java程序员所需要掌握的核心知识)如果觉得不错 ...

  7. 【搞定Jvm面试】 JVM 垃圾回收揭秘附常见面试题解析

    JVM 垃圾回收 写在前面 本节常见面试题 问题答案在文中都有提到 如何判断对象是否死亡(两种方法). 简单的介绍一下强引用.软引用.弱引用.虚引用(虚引用与软引用和弱引用的区别.使用软引用能带来的好 ...

  8. js作用域之常见笔试题,运行结果题

    笔试题中经常有运行结果题,而大多体型都是围绕作用域展开,下面总结了几种相关的题: 外层的变量函数内部可以找到,函数内部的变量(局部变量)外层找不到. function aaa() { var a = ...

  9. linux常见笔试题

    一.填空题: 1. 在Linux系统中,以 文件 方式访问设备 . 2. Linux内核引导时,从文件 /etc/fstab 中读取要加载的文件系统. 3. Linux文件系统中每个文件用 i节点 来 ...

随机推荐

  1. SSH实现双向认证

    SSH实现双向认证 由于经常需要使用scp在两台机器间拷贝文件,每次都输入密码太麻烦,于是按下面的步骤配置了一下,再使用ssh或scp登录远程机器时就不需输入密码了: A主机:192.168.100. ...

  2. iOS 模拟器的“调试-位置”总是变成无的问题

    选择项目的“Edit Scheme...” 并且选择“Options”选项卡,更改你喜欢的默认地理位置 你也可以编辑一个gpx文件永久保存坐标,或者在线生成(传送门). 转自:iOS Simulato ...

  3. VC设置cookies实现文件刷下载量

    VC设置cookies实现文件刷下载量 VC设置cookies实现文件刷下载量 分类: c/c++2013-10-11 17:22 250人阅读 评论(0) 收藏 举报   目录(?)[+]   同学 ...

  4. service citrix xcenserver health check service (xenserver healthcheck) failed to start verfy that you have sufficient privileges to srart system services

    citrix XcenServer版本:7.2 citrix Xcencenter版本:7.2 安装citrix Xcencenter的时候报错: service citrix xcenserver ...

  5. Linux安装rpc监控系统资源

    1.rpc服务需rsh的支持,一般情况下rsh已安装.rpm -qa rsh查看. 2.右键另存为http://heanet.dl.sourceforge.net/sourceforge/rstatd ...

  6. PDF文件可以转换成txt文档吗

    PDF是一种便携式的文件格式,传送和阅读都非常方便,是Adobe公司开发的跨平台文件格式,它无论在哪种打印机上都可以保证精确的颜色和准确的打印效果.可是有点遗憾的是PDF格式一般不能在手机上打开,或者 ...

  7. MathType调整矩阵分隔线粗细的方法

    矩阵是线性代数的重要的组成部分,对于矩阵的计算,一般会先找一些规律再进行计算这样会更加方便.对于比较复杂的矩阵,在寻找规律时经常会将矩阵进行分割,我们将这种矩阵称为分块矩阵.有时为了表示矩阵的这种分块 ...

  8. 视觉单词模型、词袋模型BoW

    多用于图像检索.分类 3.2.1.4 视觉单词模型 视觉词袋(BoVW,Bag of Visual Words)模型,是“词袋”(BoW,Bag of Words)模型从自然语言处理与分析领域向图像处 ...

  9. 安装MySQL后经常弹出taskeng.exe~

    taskeng.exe,是Microsoft任务计划程序引擎调用的安全进程.文件路径为C:\Windows\system32\taskeng.exe.大小165KB. 解决办法:  这个问题是Wind ...

  10. 为VS code中的项目添加特定的智能提示功能

    当我们的在用vscode开发项目的时候, 如果项目中引用了jquery包, 我们可以下面的方式获得jquery的类型提示 npm install @types/jquery --save-dev 或我 ...