思维导图
一、百鸡百钱是我国古代数学家张丘建在《算经》一书中提出的数学问题:“鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?”
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
int i,j,k;
for(i=0;i<=20;++i)
for(j=0;j<=33;++j)
for(k=0;k<=100;++k)
{
if(i+j+3*k==100 && 5*i+3*j+k==100)
printf("公鸡%d只,母鸡%d只,小鸡%d只。\n",i,j,3*k);
}
return 0;
}
运行结果:
二、输入年月日,判断这是这一年的第几天?
//输入年月日,判断这是这一年的第几天?
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
int y,m,d;
int day=0;
int arr[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
printf("请输入年、月、日:");
scanf("%d %d %d",&y,&m,&d);
for(int i=0;i<m;++i)
{
day+=arr[i];
}
if(((y%4==0 && y%100!=0) || (y%400==0)) && m>=3)
{
day+=d;
day+=1;
}
else
day+=d;
printf("%d\n",day);
return 0;
}
运行结果:
三、输入一个数,判断是否是回文数?
12321 正序和逆序结果一致
//输入一个数,判断是否是回文数?
//12321 正序和逆序结果一致
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
int n;
printf("请输入一个数:");
scanf("%d",&n);
int n2=n;
int n1;
int m=0;
while(n!=0)
{
n1=n%10;
m=m*10+n1;
n=n/10;
}
if(n2==m)
printf("%d是回文数。\n",n2);
else
printf("%d不是回文数。\n",n2);
return 0;
}
运行结果:
四、
1.
选择 C
2.
选择 C
3.
sizeof(array)/sizeof(array[0])
4.
大端:高地址存数据低字节,低地址存数据高字节。
小端:高地址存数据高字节,低地址存数据低字节。
5. 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那两个整数,并返回它们的数组下标。数组中同一个元素在答案里不能重复出现。
示例:输入 nums = [2,7,11,15], target = 9 输出: [0,1]
//给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中
//找出和为目标值 target 的那两个整数,并返回它们的数组下标。
//数组中同一个元素在答案里不能重复出现。
//示例:输入 nums = [2,7,11,15], target = 9 输出: [0,1]
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
int nums[]={2,7,11,15};
int target=9;
int len=sizeof(nums)/sizeof(nums[0]);
int i,j;
for(i=0;i<len;++i)
{
for(j=i+1;j<len;++j)
{
if(nums[i]+nums[j]==target)
{
printf("[%d,%d]\n",i,j);
}
}
}
return 0;
}
运行结果:
6. 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。示例:输入 x = 123,输出 321;输入 x = -123,输出 -321。
//给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
//示例:输入 x = 123,输出 321;输入 x = -123,输出 -321。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
int x;
int m,t;
scanf("%d",&x);
int x1;
if(x<0)
x1=-x;
else
x1=x;
while(x1!=0)
{
t=x1%10;
m=m*10+t;
x1/=10;
}
if(x<0)
printf("-%d\n",m);
else
printf("%d\n",m);
return 0;
}
运行结果:
7. 存储一个 32 位的数 0x12345678 到 2000H - 2003H 四个字节单元中,若以大端模式存储,
则 2000H 存储单元的内容为: 0x12
8.写一个 “标准” 宏 MIN,这个宏输入两个参数并返回较小的一个:#define MIN(x,y) ((x)>(y)?(y):(x))
9.
选择 A
C语言笔试题目
1.以下哪个是预处理的功能? D
A. 宏扩展
B. 文件包含
C. 条件编译
D. 都对
2.强制类型转换的运算符是以下哪一个? A
A. ()
B. cast ()
C. //
D. ""
3.
void main (void) {
int i ;
i = 0x10 + 010 + 10;
printf ("x = % x", i);
}
程序的输出是什么? A
A. x = 34
B. x = 22
C. x = 28
D. 都不是
00010000
00001000
00001010
00100010=34
4.
#define SQUARE(X) X*X
void main (void)
{
printf("Square=%d", SQUARE(10+2) )
}
程序的输出是什么? B
A. 144
B. 32
C. 122
D. 12
10+2*10+2=10+20+2=32
5. sizeof (int) 的结果是多少? A
A. 4
B. 8
C. 16
D. 取决于平台
6. 32 位平台上 struct {unsigned char a; int b; short c;} s, 请问 s 的长度是多少? A
A. 7 字节
B. 9 字节
C. 10 字节
D. 12 字节
7. 定义
int value [] = {11,33,51,70,99};
int *p = value;
结果为 70 的表达式是哪一个? A
A. *(p+3)
B. *(p+4)
C. *p + 3
D. *p + 4
8. 以下程序运行后的打印结果是: D
#include <stdio.h>
int main(void)
{
int x=10, y=20, t=0;
if (x==y) t=x; x=y; y=t;
printf ("%d,%d\n",x,y);
return 0;
}
A. 10,20
B. 20,10
C. 10,10
D. 20,0
9.
int b_val;
while (!b_val) {
// 此处代码省略
}
等价于 C
A. while ( b_val ==1)
B. while ( b_val != 1)
C. while ( b_val == 0)
D. while ( b_val != 0)
10. unsigned short 类型的范围是 D
A. -128~127
B. -32768~32767
C. 0~65535
D. 0~255
11. 下列表达式值与其它不同的是 D
A. 1<<3
B. 0x0F & 0x08
C. 2^3
D. 3^2
A. 1<<3 ---> 00001000
B. 00001111
&00001000
--->00001000
C. 00001000
D. 00001001
12. int a []={1,2,3,4,5}, int *p = a, 下列表达式与 ++*p 相同的是
A. *++p
B. a [0]
C. ++a [0]
D. *p++
13. 以下输出正确的是:
void fun (int x, int y, int *a, int *b) {
a = x + y;
b = x - y;
}
int main (void) {
int x = 20, y = 10, a = 0, b = 0;
fun (x, y, &a, &b);
printf ("% d, % d", a, b)
}
A. 0, 0
B. 30,10
C. 10,30
D. 不确定
14. 以下选项中不属于 C 语言的类型的是 D
A. signed short int
B. unsigned long int
C. unsigned int
D. long short
15. 有以下结构体说明和变量的定义,且指针 p 指向变量 a,指针 q 指向变量 b,则不能把结点 b 连接到结点 a 之后的语句是:
struct node
{
char data;
struct node *next;
} a,b,*p=&a,*q=&b;
A. a.next=q;
B. p.next=&b;
C. p->next=&b;
D. (*p).next=q;
16. 若执行程序段
int x=3,y=6,z; z=x^y<<2;
则 z 的二进制值是: A
A. 00011011
B. 00010100
C. 00011000
D. 00000110
y=6=00000110<<2=00011000
^ 00000011
00011011
17. 向一个有 127 个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动的元素数是
A. 8
B. 63.5
C. 64
D. 7
18. 假设某地每天有流星雨的概率是相等的,一个人每天晚上都去观察,发现一年能够看到流星的概率是 91%. 请问六个月中能够看到流星的概率是多少? B
A. 87%
B. 70%
C. 66.7%
D. 97%
设每天看见流星雨的概率为x
(x)^365=0.91
看不见的概率为(1-x)^365=1-0.91=0.09
0.09^0.5=0.3
1-0.3=0.7
19. 序列 {2,1,4,9,8,10,6,20} 是某排序算法第二轮排序的结果,则该算法只能是 A
A. 快速排序
B. 冒泡排序
C. 选择排序
D. 插入排序
20. 编程题(二选一):
A. 编写一个斐波那契 Fibonacci 函数,在该函数中使用循环代替递归,完成斐波纳契数列的计算。
提示:
a. 斐波那契数列(Fibonacci Numbers)的递推公式:Fn = Fn-1 + Fn-2
b. 使用递归的斐波那契函数如下
int Fib (int n)
{
if (n==1 || n==2)
return 1;
else
return Fib (n-1)+Fib (n-2);
}
#include <stdio.h>
int Fib(int n)
{
if (n==1 || n==2)
return 1;
else
return Fib (n-1)+Fib (n-2);
}
void main()
{
for(int i=8;i>=1;--i)
printf("%d ",Fib(i));
}
运行结果:
B. 写一个程序,接受一个字符串,然后输出该字符串反转后的字符串。
例如:输入 abcd 输出 dcba