2017:
#include
#define N 10
void sort(int *a,int n)
{
int i,j,t;
for(i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
if(a[j]<a[j+1])
{
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<N;i++)
scanf("%d",&a[i]);
printf("input k:");
scanf("%d",&k);
sort(a,N);
for(i=0;i<k;i++)
printf("%3d",a[i]);
}
#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));
}
#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);
}
#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;
}
#include
#include
#define N 100
void main()
{
char s[N];
int len,i,sum=0;
gets(s);
len=strlen(s);
for(i=0;i<len;i++)
sum=sum+s[i];
printf("%d\n",sum);
}
#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:
(选择题八道:)
综合题(画图为主):
问答环节:自我介绍3分钟,中英文均可,了解基本情况,有问过跨考的数组指针与指针数组的区别,有可能会针对自我介绍来提问。
2019:
1.简答题:
1.1 什么是递归函数?什么是嵌套函数?请举例说明。
递归函数指的是:在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用。
#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.编程题:
#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;
}
#include
#define M 3
void main()
{
int i,j,a[M][M],sum=0;
for(i=0;i<M;i++)
for(j=0;j<M;j++)
scanf("%d",&a[i][j]);
for(i=0;i<M;i++)
for(j=0;j<M;j++)
{
if(i==j||i+j==2)
sum=sum+a[i][j];
}
printf("sum=%d\n",sum);
}
#include
#define M 3
void main()
{
int i,j,a[M][M],sum=1;
for(i=0;i<M;i++)
for(j=0;j<M;j++)
scanf("%d",&a[i][j]);
for(i=0;i<M;i++)
for(j=0;j<M;j++)
{
if((i==j||i+j==2)&&(i+j)%2==0)
sum=sum*a[i][j];
}
printf("sum=%d\n",sum);
}
#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;
}