非正式纳新题目(C语言)

本文提供了一系列C语言编程题目,包括函数运行结果分析、代码逻辑理解、数组遍历、排序算法、字符串处理等,旨在考察面试者的C语言基础知识及逻辑思维能力。题目涵盖范围广泛,从基本语法到数据结构和算法,适合不同层次的学习者进行自我提升。
摘要由CSDN通过智能技术生成

非正式纳新题目(C语言)

非正式纳新题目(C语言)

注意本文不是正式的面试题
正式的面试题:ACAT2021纳新题目(C语言)

说明

本试题一共分为12道题,考核点全部以C语言为主,难度有层次划分,希望你尽最大努力完成,我
们不需要你每道题都能得到正确答案,但希望你能有良好的学习态度。我们期待在面试那天与你相
遇!
(编程题只用写出核心代码或者想出解题思路,你也可以在面试时电脑写出完整代码运行,直接展示
你的结果!)

题目

一、写出下面函数的运行结果。

#include <stdio.h>
#define PI 3 
#define S(r) PI*r*r 
int main(){
	float x,y,area;
	x=2;
	y=1;
	area=S(x+y);
	printf("r=%f\narea=%f\n",x+y,area);
}

二、选做题

1分析以下代码

#include<stdio.h>
int main(){
	int i=0,s=0;
	for( ;; ){
		i++;
		if(i == 3 || i== 5)continue;
		if(i==6)break;
		s+=i;
	}
	printf("%d",s);
	return 0;
}

执行上述程序后的输出结果是( )
A.5
B. 6
C. 7
D. 死循环

2分析以下代码

#include <stdio.h>
main()
int a=5,b=4,c=3,d=2;
if(a>b>c)
printf("%d\n",d);
else if((c-1>=d)==1)
printf("%d\n",d+1);
else
printf("%d\n",d+2);

执行上述程序后的输出结果是( )
A.2
B.3
C.4
D.编译时有错,无结果

三、下列表达式中,不满足“当x的值为偶数时值为真,为奇数时值为假”要求的是( )

A: x%20
B: !x%2!=0
C: (x/2*2-x)0
D: !(x%2)

四、若有以下定义和赋值语句,

int b[2][3]={0}, (*p)[3];
p=b;

则对b数组的第i行第j列(假设i,j已正确说明并赋值)元素的非法引用为()。
A: *(*(p+i)+j)
B:*(p[i]+j)
C: *(p+i)+j
D:(*(p+i))[j]

五、给出部分语句填写一行语句实现找出三个整数中的最大值

#include <stdio.h>
int main(){
	int x=1;
	int y=2;
	int z=3;
	int max;
	//一行语句
	printf("%d",max);
}

六、二-十进制代码(BCD代码)

相关概念:有权BCD代码是指在表示0-9十个十进制数码的4位二进制代码中,每位二进制数码都有确定的位权值。例如,表1-3-2中的8421码、2421码等。对于有权BCD代码,可以根据位权展开求得所代表的十进制数。例如:
(0111)8421 BCD=0x8+1x4+1x2+1x1=(7)10
(1101)2421 BCD=1x2+1x4+0x2+1x1=(7)10
最常用的有权码是8421 BCD码,由于其位权值是按基数2的幂增加的,这和二
进制数的位权值一致,所以有时也称8421 BCD码为自然数权码。

十进制数码 8421码 2421码
0 0000 0000
1 0001 0001
2 0010 0010
3 0011 0011
4 0100 0100
5 0101 1011
6 0110 1100
7 0111 1101
8 1000 1110
9 1001 1111

用BCD码表示十进制数
在BCD代码中,4位二进制代码仅表示1位十进制数,对一个多位的十进制数进行编码,需要有与十进制位数相同的几组BCD代码来表示,每组代码之间按十进制进位。
例如,用8421BCD码来表示十进制数863,则
(863)10=(1000 0110 0011)8421 BCD
如果用2421 BCD码来表示十进制数863,则
(863)10=(1110 1100 0011)2421 BCD
程序设计:输入任意一个十进制数,将其用2421 BCD码表示
(提示:类似于念数字)

七、写出输出内容

#include<stdio.h>
#include<stdlib.h>
#include<string.h> 
void OutPut(int data){
	printf("%d",data);
} 

void change1(int data){
	data=1;
	printf("11---");
	OutPut(data);//1
	printf("\n");
}
void change2(int *data){
	*data=1;
	
}
int change3(){	
	int data=1;
	return data;
}


int main(){
	int data;
	
	data=0;
	printf("0---");
	OutPut(data);//结果
	printf("\n");
	
	change1(data);
	printf("1---");
	OutPut(data);//结果
	printf("\n");
	
	change2(&data);
	printf("2---");
	OutPut(data);//结果
	printf("\n");
	
	
	int data1;
	data1=change3();
	printf("3---");	
	OutPut(data1);//结果
	printf("\n");
}
	

八、遍历数组:用不同的方法遍历数组(至少三种)

#define N 10
#include <stdio.h>
int main(){
//相关定义
	int a[N];
	int *p;
	p=a;
int i;

//初始化数组
	for(i=0;i<N;i++){
		a[i]=i;
	}
	printf("\n");

//遍历方法一

printf("\n");
//遍历方法二

printf("\n");
//遍历方法三

printf("\n");

}

九、输出选做题

1.回形数

回形数格式方阵的实现
从键盘输入一个整数(1~20) 
则以该数字为矩阵的大小,把1,2,3…n*n 的数字按照顺时针螺旋的形式填入其中。例如: 输入数字2,则程序输出: 
1 2 
4 3 
输入数字3,则程序输出:
1 2 3 
8 9 4 
7 6 5 
输入数字4, 则程序输出: 
1   2   3   4 
12  13  14  5 
11  16  15  6 
10   9  8   7

2.完成输出下列字符

输入n,输出以下字符

*
*.*.
*..*..*..
*...*...*...*...
*....*....*....*....*....
*.....*.....*.....*.....*.....*.....
*......*......*......*......*......*......*......
*第n行*

十、C语言编写一个程序,去掉给定字符串中重复的字符。例如将google转化为gole。


十一、结构体,共用体的字节对齐

//64位系统
#include<stdio.h>
union UNode{ 
	char ch;   
	int in;        
	char *p; 		
 };
 struct SNode{
	char ch;    
	short sh;    
	int in;       
	float f;      
	double db;
	char *p;   
	char arr[5];
    union UNode UN;
 };

 int main(){
 	printf("%d",sizeof(struct SNode));
 	printf("%d",sizeof(union UNode));
 }

十二、逻辑选做题(可以不做)

逻辑选做题目

注意本文不是正式的面试题
正式的面试题:ACAT2021纳新题目(C语言)

参考

非正式纳新题解(C语言)

ACAT2021纳新题(旧)

ACAT2021纳新题(旧)

ACAT2021纳新题(旧)

注意本文不是正式的面试题
正式的面试题:ACAT2021纳新题目(C语言)

说明:

本试题一共分为12道题,考核点全部以C语言为主,难度有层次划分,希望你尽最大努力完成,我们不需要你每道题都能得到正确答案,但希望你能有良好的学习态度。我们期待在面试那天与你相遇!
(本测试题目省略#include…,编程题只用写出核心代码,你也可以在面试时带上U盘或者电脑直接展示你的结果!)

题目:

1. 请分析下列代码的运行结果,并解释其原因。

int main() {
	int n=1,a=0,b=0;
	switch(n)
	{
		case 0:
			b++;
		case 1:
			a++;
		case 2:
			++a;
			b++;
	}
	printf("a=%d,b=%d\n",a,b);
}

2.请分析下面函数的运行结果,并解释其原因。

#define PI 3 
#define S(r) PI*r*r 
int main(){
	float x,y,area;
	x=2;
	y=1;
	area=S(x+y);
	printf("r=%f\narea=%f\n",x+y,area);
}

3.请分析下列代码的运行结果,并解释其原因。

int main(int argc, char const* argv[])
{
    int a = 0, b = 5;
    ++a || ++b, a - b;
    b = b--;
    printf("%d %d\n", a, b);
    return 0;
}

4.请分析下列代码的运行结果,并解释其原因。

int main() {
	int a = 0;
	int b = 0 == a;
	int c = -1;

	if (a = 1) {
		c = a && b;
	}

	printf("%d%d%d", a, b, c);
	return 0;

}

5. 分析下列代码,请计算 x,y,z的大小

int main(){
    struct x{
        int a;
        char b;
        double c;
    };
    struct y{
        float b;
        int a;
        double c;
    };
    struct z{
        int a;
        double c;
        char b;
    };
}

6.下面是一个交换两个变量的函数,看看这种方法可以实现吗?如果可以,还有其他方法吗?如果不可以,说说原因。

void swap(int a, int b)
{
    int temp = a;
    a = b;
    b = temp;
}

7.请分析以下代码的运行结果,并解释其原因。

int main() {
	int n;
	printf("%d", scanf("%d", &n));
	return 0;
}

8.你知道哪些排序算法?你知道它们是怎样实现的吗?(大致思路)

9.字符串翻转

设计一个程序实现字符串翻转,即将abcdefg反转成gfedcba,已经为你写好了部分代码,请在规定的区域添加代码来实现程序。
不允许在规定地方之外写代码,不允许删除写过的代码。
代码本来就定义了一个字符串和一个字符变量和一个整型数,不允许声明新的任何类型的变量。
int main() {
	
	char s[32];
	scanf("%s", s);
	int n = strlen(s);
	int i;
	char ch;

	/* 规定区域开始 */



	/* 规定区域结束 */

	printf("%s", s);
	return 0;

}

10.水仙花数

“水仙花数”是指一个三位数其各位数字的立方和等于该数本身,
例如153是“水仙花数”,因为:153 = 13 + 53 + 33,
所以判断一个数是否为“水仙花数”,最重要的是要把给出的三位数的个位、十位、百位分别拆分,并求其立方和(设为s),
若s与给出的三位数相等, 三位数为“水仙花数”,反之,则不是。
请你编写一段代码,判断一个三位数数是否是水仙花数。

11.打印杨辉三角形

输入一个任意正整数n,请你编写一段代码,打印n行的杨辉三角形。
例:n = 4
输入结果:
1
1 1
1 2 1
1 3 3 1

12.逻辑图

哲学家就餐问题是在计算机科学中的一个经典问题
哲学家就餐问题可以这样表述,假设有五位哲学家围坐在一张圆形餐桌旁,做以下两件事情之一:吃饭,或者思考。
吃东西的时候,他们就停止思考,思考的时候也停止吃东西。
餐桌中间有一大碗米饭,每两个哲学家之间有一只筷子。
哲学家想要吃饭必须拿到两个筷子。
哲学家从来不交谈,这就很危险。
有可能导致什么情况呢?
每个哲学家都拿起来自己左手边的筷子,然后眼巴巴地等着自己右边的哲学家放下筷子好让自己集齐一双筷子来吃饭。
请问如何避免这种现象发生呢?(想法越多越好)

注意本文不是正式的面试题
正式的面试题:ACAT2021纳新题目(C语言)

参考

非正式纳新题解(C语言)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

日星月云

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值