【题目名称】
下面代码的结果是:a
#include <stdio.h>
int i;
int main()
{
i--; sizeof'的返回值是无符号整型
if (i > sizeof(i)) i四个字节所以是4。算出的结果类型是unsigned int
无符号和有符号比较大小 会先把有符号整型转化为无符号。 -1放到内存里补码32个1
{
printf(">\n");
}
else
{
printf("<\n");
}
return 0;
}
【题目内容】
A. >
B. <
C. 不输出
D. 程序有问题
全局变量会初始化为0
【题目名称】
关于表达式求值说法不正确的是:( d)
【题目内容】
A. 表达式求值先看是否存在整形提升或算术转换,再进行计算
B. 表达式真正计算的时候先看相邻操作符的优先级决定先算谁
C. 相邻操作符的优先级相同的情况下,看操作符的结合性决定计算顺序
D. 只要有了优先级和结合性,表达式就能求出唯一值
【题目名称】
计算求和
【题目内容】
求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字,
例如:2+22+222+2222+22222
//思路 前一项×10+2
int main()
{
//有a组成的前n项之和
int a = 0;
int n = 0;
scanf("%d %d", &a, &n);
int i = 0;
int sum = 0;
int ret = 0;//一项
for (i = 0; i < n; i++)
{
//算出一项
ret = ret * 10 + a;
sum = sum + ret;
}
printf("%d\n", sum);
return 0;
}
【题目名称】
使用指针打印数组内容
【题目内容】
写一个函数打印arr数组的内容,不使用数组下标,使用指针。
arr是一个整形一维数组。
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int* p = arr;
int i = 0;
int sz = 0;
sz = sizeof(arr) / sizeof(arr[0]);
for (i = 0; i < sz; i++)
{
printf("%d", *(p+i));
}//p+i 拿到下表为i的地址 *()拿到元素
return 0;
}
【题目名称】
打印水仙花数
【题目内容】
求出0~100000之间的所有“水仙花数”并输出。
“水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身,如:153=13+53+3^3,则153是一个“水仙花数”。
#include <math.h>
int main()
{
int i = 0;
for (i = 0; i <= 10000; i++)
{//1计算i的位数 n
int n = 1;
int tmp = i;
while (tmp / 10)
{
n++;
tmp = tmp / 10;
}
//2计算i每一位的n次方之和
tmp = i;
int sum = 0;
while (tmp)
{
sum += pow(tmp % 10, n);
tmp =tmp/ 10;
}
//判断
if (sum == i)
{
printf("%d ", i);
}
}
return 0;
}
指针
【题目名称】
下列程序段的输出结果为( c )
unsigned long pulArray[] = {6,7,8,9,10};
unsigned long *pulPtr;
pulPtr = pulArray;
*(pulPtr + 3) += 3; **元素+= 3**
printf(“%d,%d\n”,*pulPtr, *(pulPtr + 3));
【题目内容】
A. 9,12
B. 6,9
C. 6,12
D. 6,10
**unsigned long这个类型 +1直接跳过一个元素 **
【题目名称】
如有以下代码:
struct student
{
int num;
char name[32];
float score;
}stu;
**stu是结构体变量名 拿struct student定义的 **
则下面的叙述不正确的是:( d)
【题目内容】
A. struct 是结构体类型的关键字
B. struct student 是用户定义的结构体类型
C. num, score 都是结构体成员名
D. stu 是用户定义的结构体类型名 变量名
【题目名称】
下面程序的输出结果是:( c )
struct stu
{
int num;
char name[10];
int age;
};
void fun(struct stu *p)
{
printf(“%s\n”,(*p).name);
return;
}
int main()
{
struct stu students[3] = {{9801,”zhang”,20},
{9802,”wang”,19},
{9803,”zhao”,18}
};
fun(students + 1);
return 0;
}
【题目内容】
A. zhang
B. zhao
C. wang
D. 18
【题目名称】
结构体访问成员的操作符不包含:( d )
【题目内容】
A. . 操作符
B. -> 操作符
C. * 解引用操作符
D. sizeof
【题目名称】
关于二级指针描述描述正确的是:( b)
【题目内容】
A. 二级指针也是指针,只不过比一级指针更大
B. 二级指针也是指针,是用来保存一级指针的地址
C. 二级指针是用来存放数组的地址
D. 二级指针的大小是4个字节
【题目名称】
下面关于指针运算说法正确的是:(c )
【题目内容】
A. 整形指针+1,向后偏移一个字节
B. 指针-指针得到是指针和指针之间的字节个数 元素个数
C. 整形指针解引用操作访问4个字节
D. 指针不能比较大小
【题目名称】
下面哪个是指针数组:(a )
【题目内容】
A. int* arr[10];
B. int * arr[];
C. int **arr;
D. int (*arr)[10]; //数组指针
【题目名称】
下面程序要求输出结构体中成员a的数据,以下不能填入横线处的内容是( )
#include < stdio.h >
struct S
{
int a;
int b;
};
int main( )
{
struct S a, *p=&a;
a.a = 99;
printf( "%d\n", __________);
return 0;
}
【题目内容】
A. a.a
B. p.a **。的优先级高于的优先级**
C. p->a
D. (*p).a
【题目名称】
字符串逆序
【题目内容】
写一个函数,可以逆序一个字符串的内容。
#include <assert.h>
void nixu1(char* str)
{
assert(str != NULL);
int len = strlen(str);
char* left = str;
char* right = str+len-1;
while (left < right)
{
char tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
int main()
{
char arr[] = "abcde";
nixu1(arr);
printf("%s",arr );
return 0;
}
【题目名称】
打印菱形
【题目内容】
用C语言在屏幕上输出以下图案:
分为上下两部分 中间的定义7 用line
int main()
{
//上面
int line = 0;
scanf("%d", &line);
int i = 0;
for (i = 0; i < line; i++)
{
//第一行
//空格
int j = 0;
for (j = 0; j < line - 1 - i; j++)
{
printf(" ");
}
//*
for (j = 0; j < 2 * i + 1; j++)
{
printf("*");
}
printf("\n");
}
//下面
for (i = 0; i < line; i++)
{
//空格
int j = 0;
for (j = 0; j <= i; j++)
{
printf(" ");
}
//* 2×几减去1
for (j = 0; j < 2 * (line - 1 - i); j++)
{
printf("*");
}
printf("\n");
}
【题目名称】
喝汽水问题
【题目内容】
喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以多少汽水(编程实现)。
int main()
{
int money = 0;
int total = 0;
scanf("%d", &money);//有多少钱 每次和汽水的数量是2×钱数减去1
if(money>0)
total = 2 * money - 1;
printf("%d\n", total);
return 0;
}
第一种更好
//int main()
//{
// int money = 0;
// scanf("%d", &money);//有多少钱
// int total = money;//能喝多少瓶
// int empty = money;
// //开始置换
// while (empty >= 2)
// {
// total += empty / 2;
// empty = empty / 2 + empty%2;// 除2是喝了的 模2是剩余的
//
// }
// printf("%d\n", total);
//
//
// return 0;
//}
调试习题
【题目名称】
C程序常见的错误分类不包含:( c)
【题目内容】
A. 编译错误
B. 链接错误
C. 栈溢出 运行时错误
D. 运行时错误
【题目名称】
关于VS调试快捷键说法错误的是:( a)
【题目内容】
A. F5-是开始执行,不调试 开始调试
B. F10-是逐过程调试,遇到函数不进入函数
C. F11-是逐语句调试,可以观察调试的每个细节
D. F9是设置断点和取消断点
【题目名称】
关于Debug和Release的区别说法错误的是:(d )
【题目内容】
A. Debug被称为调试版本,程序调试找bug的版本
B. Release被称为发布版本,测试人员测试的就是Release版本
C. Debug版本包含调试信息,不做优化。
D. Release版本也可以调试,只是往往会优化,程序大小和运行速度上效果最优
【题目名称】
语言中哪一种形式声明了一个指向char类型变量的指针p,p的值不可修改,但p指向的变量值可修改?( c)
【题目内容】
A. const char *p
B. char const *p
C. char*const p
D. const char *const p
【题目名称】
以下关于指针的说法,正确的是( c)
【题目内容】
A. int *const p与int const *p等价
B. const int *p与int *const p等价
C. const int *p与int const *p等价
D. int *p[10]与int (*p)[10]等价 指针数组和数组指针
【题目名称】
调整奇数偶数顺序
【题目内容】
调整数组使奇数全部都位于偶数前面。
题目:
输入一个整数数组,实现一个函数,
来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,
所有偶数位于数组的后半部分。
void move (int arr[], int sz)
{
int left = 0;
int right = sz - 1;
while (left < right)//因为有这个条件能再往下找
{
//从前往后找一个偶数
while ((left < right)&&(arr[left] % 2 == 1))
{
left++;
}
//从后往前找一个奇数
while ((left < right)&&(arr[right] % 2 == 0))
{
right--;
}
if (left < right) //有这个条件才交换
{
int tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
}
}
}
void print(int arr[], int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d",arr[i]);
}
}
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int sz = sizeof(arr) / sizeof(arr[0]);
move(arr,sz);
print(arr, sz);
return 0;
}
数据存储
【题目名称】
原码、反码、补码说法错误的是( d )
【题目内容】
A. 一个数的原码是这个数直接转换成二进制
B. 反码是原码的二进制符号位不变,其他位按位取反
C. 补码是反码的二进制加1
D. 原码、反码、补码的最高位是0表示负数,最高位是1表示正数
【题目名称】
程序的执行结果为( )
int main()
{
unsigned char a = 200; //0-255
00000000000000000000000011001000 200的二进制序列 char类型8个比特位
11001000
unsigned char b = 100;
00000000000000000000000001100100
01100100
unsigned char c = 0;
c = a + b;//这两个相加 两个的大小都没达到整形的大小 所以需要整型提升 无符号为整型提升高位补0
0000000000000000000000011001000
0000000000000000000000001100100
0000000000000000000000100101100 a+b的结果 存到c存不下只存了8位0010110
打印c 0010110 整型提升 无符号高位补0
000000000000000000000000010110
%d打印是以有符号存的 原码正数原反补相同 10110 等于44
100101100 a+b 是300
printf(“%d %d”, a+b,c);
return 0;
}
【题目内容】
A. 300 300
B. 44 44
C. 300 44
D. 44 300
【题目名称】
unsigned int a= 0x1234; 整形这样放0x 00 00 12 34
unsigned char b=*(unsigned char *)&a;
在32位大端模式处理器上变量b等于(a )
【题目内容】
A. 0x00
B. 0x12
C. 0x34
D. 0x1234
【题目名称】
关于大小端字节序的描述正确的是( b)
【题目内容】
A. 大小端字节序指的是数据在电脑上存储的二进制位顺序 字节
B. 大小端字节序指的是数据在电脑上存储的字节顺序
C. 大端字节序是把数据的高字节内容存放到高地址,低字节内容存放在低地址处
D. 小端字节序是把数据的高字节内容存放到低地址,低字节内容存放在高地址处
【题目名称】
杨辉三角
【题目内容】
在屏幕上打印杨辉三角。
1
1 1
1 2 1
1 3 3 1
……
思路
int main()
{
int arr[10][10] = { 0 };
int i = 0;
int j = 0;
for (i = 0; i < 10; i++)
{
for (j = 0; j <= i; j++)
{
if (j == 0)
{
arr[i][j] = 1;
}
if (i == j)
{
arr[i][j] = 1;
}
if (i >= 2 && j >= 1)
{
arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
}
}
}
for (i = 0; i < 10; i++)
{
for (j = 0; j <= i; j++)
{
printf("%d", arr[i][j]);
}
printf("\n");
return 0;
}
}
【题目名称】
猜凶手
【题目内容】
日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。
以下为4个嫌疑犯的供词:
A说:不是我。
B说:是C。
C说:是D。
D说:C在胡说
已知3个人说了真话,1个人说的是假话。
现在请根据这些信息,写一个程序来确定到底谁是凶手。
第3题(编程题)
我的解答
int main()
{
char killer = 0;
for (killer = 'A'; killer <= 'D'; killer++)
{
if ((killer != 'A') + (killer == 'C') + (killer == 'D') + (killer != 'D') == 3)
{
printf("%c", killer);
}
}
return 0;
}