c语言依次调用字符串中的元素,C语言经典题目(某校复试真题)

2017:

1. 顺序存储的n个整数,编程输出最大的前k个

#include

#define N 10

void sort(int *a,int n)

{

int i,j,t;

for(i=0;i

for(j=0;j

if(a[j]

{

t=a[j];

a[j]=a[j+1];

a[j+1]=t;

}

}

void main()

{

int i,a[N],k;

printf("input 10 numbers:");

for(i=0;i

scanf("%d",&a[i]);

printf("input k:");

scanf("%d",&k);

sort(a,N);

for(i=0;i

printf("%3d",a[i]);

}

2. 用递归函数求1到n的和:

#include

int sum(int n)

{

int result;

if(n==1)

result=1;

else

result=sum(n-1)+n;

return result;

}

void main()

{

int n;

printf("input n:");

scanf("%d",&n);

printf("%d\n",sum(n));

}

3. 利用swap(int a,int b)函数实现参数交换:

#include

void swap(int *a,int *b)

{

int t;

t=*a;

*a=*b;

*b=t;

}

void main()

{

int a,b;

printf("input a,b:");

scanf("%d%d",&a,&b);

swap(&a,&b);

printf("a=%d,b=%d\n",a,b);

}

4. 编函数求字符串中数字个数:

#include

int main()

{

int sum=0;

char c;

printf("Please input some characters!\n");

while((c=getchar())!='\n')

{

if(c>='0'&&c<='9')

sum++;

}

printf("Including %d numbers\n",sum);

return 0;

}

5.求字符串中字符ASCII的总和:

#include

#include

#define N 100

void main()

{

char s[N];

int len,i,sum=0;

gets(s);

len=strlen(s);

for(i=0;i

sum=sum+s[i];

printf("%d\n",sum);

}

6.学生信息、姓名、学号、英语、数学、政治成绩, a:写出学生结构体信息 b:finput输入每个学生信息 c:求单科和总分最高的学生信息

#include

#define N 3

struct student

{

char name[50];

char ID[20];

double English;

double Math;

double political;

};

student finput(struct student std)

{

printf("请输入学生的姓名,学号,成绩(英语,数学,政治):\n");

printf("姓名:");

scanf("%s", std.name);

printf("学号:");

scanf("%s", std.ID);

printf("英语:");

scanf("%lf", &std.English);

printf("数学:");

scanf("%lf", &std.Math);

printf("政治:");

scanf("%lf", &std.political);

return std;

}

int maxScore(double a[])

{

int i,j;

double max = 0;

for (i = 0; i < N; i++)

{

if (a[i]>max)

{

max = a[i];

j = i;

}

}

return j;

}

void main()

{

struct student std[N];

int i;

for (i = 0; i < N; i++)

{

std[i] = finput(std[i]);

printf("\n");

}

double sum[N],math[N],english[N],political[N]; //定义数组

for (i = 0; i < N; i++)

{

sum[i] = std[i].English + std[i].Math + std[i].political;

printf("%lf \t %lf \t %lf \n",std[i].English, std[i].Math, std[i].political);

printf("%lf\n", sum[i]);

math[i] = std[i].Math; //将对应成绩存入数组

english[i] = std[i].English;

political[i] = std[i].political;

}

int s = maxScore(sum); //求最大元素的下标

int m = maxScore(math);

int e = maxScore(english);

int p = maxScore(political);

printf("总分成绩最高的学生成绩%lf,学生名为%s\n", sum[s], std[s].name);

printf("英语成绩最高的学生成绩%lf,学生名为%s\n", english[e], std[e].name);

printf("数学成绩最高的学生成绩%lf,学生名为%s\n", math[m], std[m].name);

printf("政治成绩最高的学生成绩%lf,学生名为%s\n", political[p], std[p].name);

}

2018:

(选择题八道:)

已知后序和中序求先序:

知道一向量组,构造有序单链表时间复杂度:

快速排序一趟结果:

单插入节点过程:

希尔排序,取步长特点,递减:

循环队列长度:

综合题(画图为主):

给出图的邻接矩阵,最小生成树:

冒泡排序过程:

8皇后,写算法:

周游遍历代价最小:

堆调整算法:

拓扑排序:

问答环节:自我介绍3分钟,中英文均可,了解基本情况,有问过跨考的数组指针与指针数组的区别,有可能会针对自我介绍来提问。

2019:

1.简答题:

1.1 什么是递归函数?什么是嵌套函数?请举例说明。

递归函数指的是:在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用。

如:求n的阶乘。

#include

int fac(int n)

{

if(n<0)

printf("n<0,data error!");

else if(n==0||n==1)

return 1;

else

return fac(n-1)*n;

}

int main()

{

int n,t;

printf("input an interger number:");

scanf("%d",&n);

t=fac(n);

printf("%d!=%d\n",n,t);

return 0;

}

嵌套函数:在定义函数时,一个函数内不能再定义另一个函数,即不能嵌套定义,但可以嵌套调用函数,即在调用一个函数的过程中,又调用另一个函数。

如:

fun1()

{

fun2();

}

fun2()

{

fun3();

}

fun3()

{

printf(“Hello”);

}

1.2谈谈你对全局变量的理解,说说全局变量的优缺点。

• 在函数外部定义的变量叫做全局变量

• 全局变量能够在所有的函数中进行访问

• 如果全局变量的名字和局部变量的名字相同,那么使用的是局部变量的。

优点:

1)全局可见,任何 一个函数或线程都可以读写全局变量-同步操作简单。2)内存地址固定,读写效率比较高。

缺点:

1)全局变量存放在静态存储区,系统需要为其分配内存,一直到程序结束, 才会释放内存,这一点就局部变量的动态分配,随用随从栈中申请,用完(函数调用完毕)就释放。

2)影响函数的封装性能:我们肯定是希望我们写的函数具有重入性,就如一个黑盒子一般,只 通过函数参数就能得到返回,内部 实现要独立,但是如果函数中使用了全局变量,这势必就破坏了函数的封装性,会造成对全局变量的依赖。

3)降低函数的移值性,原因同上。

4)降低代码的可读性,这也意味着系统维护会不方便,因为一个全局变量可能会出现程序中的各个环节,函数的 执行也会根据环境变化而变化,所以调试会不太方便。

5)全局变量的读写,可能会延迟,这主要是体现在“写”操作上,由于写操作,一般需要2个周期操作,所以有可能会出现,这边没写完时,那边已经读了,结果 读到的不是最终值,这个是一个概率事件,概率 很小,但是并不代表没有。

2.代码填空:

2.1 基础语句的理解(for,switch)

给一段C语言基础的代码。代码结构由(for,switch语句组成)。写出程序运行结果。

2.2 排序算法

给出一段选择排序算法,从中扣除两段代码(留空)。代码补充(填空)。

3.编程题:

3.1 一个盒子中放有12个球,其中3个红的,3个白的,6个黑的,从中任取8个球,编程求出共有多少种不同的颜色搭配。

#include

int main()

{

int m, n, number=0;

printf(" 红球 白球 黑球\n");

printf("......................\n");

for( m=0; m<=3; m++ ) //红球

for( n=0; n<=3; n++ ) //白球

if(8-m-n<=6) //黑球的个数小于等于6,即 8 - m - n ≤ 6。

printf(" %2d: %d %d %d\n", ++number, m, n, 8-m-n);

return 0;

}

3.2 给出一个预定义维数矩阵M,编程求出: 3.2.1 求出该矩阵M的主、副对角线上所有元素之和;

#include

#define M 3

void main()

{

int i,j,a[M][M],sum=0;

for(i=0;i

for(j=0;j

scanf("%d",&a[i][j]);

for(i=0;i

for(j=0;j

{

if(i==j||i+j==2)

sum=sum+a[i][j];

}

printf("sum=%d\n",sum);

}

3.2.2 求出该矩阵M的主、副对角线上元素下标之和为偶数的所有元素之积:

#include

#define M 3

void main()

{

int i,j,a[M][M],sum=1;

for(i=0;i

for(j=0;j

scanf("%d",&a[i][j]);

for(i=0;i

for(j=0;j

{

if((i==j||i+j==2)&&(i+j)%2==0)

sum=sum*a[i][j];

}

printf("sum=%d\n",sum);

}

3.3 编写一个函数StringTransfer(char *s,int n)。 该函数实现的功能为:输入一个字符串S,要求将元素左移n位,往左移位溢出的元素需要向字符串尾部填充。

#include #define N 100

void StringTransfer(char *s, int n)

{

int i = 0;

char temp = s[i++];

if(sizeof(temp) == 0)

{

return;

}

while(s[i] != ‘\0’)

{

s[i-1] = s[i];

i++;

}

s[i-1] = temp;

if(n > 1)

{

StringTransfer(s, n-1);

}

}

int main()

{

char a[N];

int n;

printf(“input a string:”);

gets(a);

printf(“input move numbers n:”);

scanf("%d",&n);

StringTransfer(a, n);

printf("%s\n", a);

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值