(1)以下程序片段运行后,输出的结果是:-1
int x = 3, y = 4, z = 5;
printf("%d",~((x ^ y) && !z));
(2)以下程序片段运行后,输出的结果是:6,5
char str[] = "abcde";
printf("%d,%d",sizeof(str),strlen(str));
(3)以下程序片段运行后,输出的结果是:3
char str2[] = "912\0912";
printf("%d",strlen(str2));
(4)以下程序片段运行后,输出的结果是:7442
int a[100][200];
printf("%d",&a[37][45]-&a[0][3]);
(5)以下程序片段运行后,输出的结果是:2
enum Months{JAN=1,FEB,MAR,APR,MAY=3,JUN,JUL,AUG,SEP,OCT,NOV,DEC};
printf("%d",(MAR & AUG) ^ !JUN);
(6)完成下列语句:十进制方式打印 int 型变量 n 的值,且根据值的正负,在前面显示+
或—。如 n=1 时,打印结果是+1;n=-1 时,打印结果是-1.
printf("%+d\n",n);
(7)以下程序片段运行后,输出的结果是:2 6 42 1806
#include <stdio.h>
int x = 4;
void func()
{
static int x = 1;
x *= x + 1;
printf("%d",x);
}
int i;
for(i=0; i<x;i++)
{
func();
}
return 0;
(8)使用 typedef 定义一个包含 10 个 int 型指针的数组类型 a
typedef int* a[10];
(9)宏定义:计算数组 table 的元素个数
#define ARRAY_SIZE(table) sizeof(table)/sizeof(table[0])
(10)以下程序片段运行后,输出的结果是:128
int (*ptr)[5] = (int (*)[5])100;
printf("%d",(int)( &(*(ptr + 1))[2]));
(11)宏定义:将整型变量 a 第 n 位清零,其它位不变。
#define clear_bits(a,n) ((a) & ~(1<<n))
注意试卷上面特别说明:涉及位的运算时,最右边的位是第 0 位。
(12)以下程序片段运行后,输出的结果是:1568
int p[3][4][5];
int *q = (int*)p;
int (*s)[5] = &p[1][0];
int i;
for(i=0; i<60; i++)
{
q[i]=i;
}
printf("%d\n,p[1][7][1]*(*(s+1))[3]");
(13)将字符转换成大写字母(非字母字符不做处理)的库函数名是:toupper
(14 ~ 15)
补齐以下代码:
/*
* Insert a new entry between two know consecutive entries.
*
* This is only for internal list manipulation where we know
* the prev/next entries already!
*/
static __inline__ void __list__add(struct list_head * new, struct
list_head * prev, struct list_head * next)
{
next->prev = new;
new->next = next;
prev->next = new;
new->prev = prev;
}
(16 ~ 20)根据函数说明完成以下函数:
The strcmp() functions return 1、0、-1.
int strcmp(const char *cs,const char *ct)
{
unsigned char c1,c2;
while(1)
{
c1 = *cs++;
c2 = *ct++;
if(c1 != c2)
{
return (c1-c2)<0 ? -1 : 1;
}
if(!c1)
break;
}
return 0;
}
/**
* strstrip - Removes leading and trailing whitespace from @s.
* @s:The string to be stripped.
*
*Note that the first trailing whitespace is replaced with a
null-terminator strings cs and
*in the given string @s.Returns a pointer to the first non-whitespace
*character in @s.
*/
要求:使用库函数 isspace 判断是否是 whitespace。
char *strstrip(char *s)
{
size_t size;
char *end;
size = strlen(s);
if(!size)
{
return s;
}
end = s + size -1;
while(end >= s && isspace(*end))
{
end--;
}
*(end + 1) = '\0';
while(*s && isspace(*s))
{
s++;
}
return s;
}
4. 综合测试
(21)推理:填入空缺的数字 -1 9 8 17 25 42
(22)推理:填入空缺的数字 2/13 4/11 2/3 8/7 2 4
(23)容斥问题:某学校有 23 人参加篮球协会, 45 人参加足球协会, 100 人参加登山协会,
既踢足球又打篮球的有 10 人,既踢足球又登山的有 18 人,既登山又打篮球的有 13 人,有
132 人至少参加这 3 个项目中的 1 项,请问,有多少人 3 个协会都参加?
参考答案:设篮球集合为 A,足球集合为 B,登山集合为 C
即 3 个协会都参加的人数为 5
(24)从 4 个苹果和 6 个橘子中选出三个,要求至少有 1 个苹果,共有几种选取方式?
参考答案:有组合理论可得结果为:即有 100 种选取方式。
(25)有八只铜球,其中有一只是重量不合格的次品,已知次品比正品轻。如果只给你一台
无码天平,那么,至少称几次就能保证把这只次品找出来?
参考答案:先分成三组, 两组 3 个, 一组 2 个,先称两组三个的,如果等重就称剩下的 2 个,此情况称 2 次即可。如果不等重,再将两组 3 个中轻的那组分成 3 组,每组一个,称其中任意两个,等重则没称的为次品,不等重轻的为次品。综上所述,至少称 2 次就能保证把这只次品找出来。