一道c语言编程题目及答案题目

100道经典C语言编程题_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
100道经典C语言编程题
阅读已结束,下载文档到电脑
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩49页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢扫二维码下载作业帮
3亿+用户的选择
下载作业帮安装包
扫二维码下载作业帮
3亿+用户的选择
一道C语言题目,哪位高手帮我看看下面一道题要选哪个,(45)若有以下定义和语句:int w[2][3],(*pw)[3]; pw=w;则对w数组元素非法引用是( )A)*(w[0]+2) =*w[0][2] B)*(pw+1)[2] C)pw[0][0] =*w[0][0] D)*(pw[1]+2) =*w[1][2]
扫二维码下载作业帮
3亿+用户的选择
A 赋值号左边的*(w[0]+2) 就是w[0][2],正确,但是赋值号左边的w[0][2]为元素,不能再次反引用,错误B *(pw+1)[2]在前面赋值pw=w;后,注意[]运算符级别高于*,因此就是w[3][0],语法正确,但是下标越界了,有逻辑错误C 赋值号左边的pw[0][0]就是w[0][0],正确,但是赋值号右边的*w[0][0]错误,原因参见AD 赋值号左边的*(pw[1]+2) 就是w[1][2],正确,但是赋值号右边的*w[1][2]错误,原因同上综上所述,没有一个答案是正确的,唯一语法没错的答案有逻辑错误不清楚你的题目是否有误
为您推荐:
扫描下载二维码下次自动登录
现在的位置:
& 综合 & 正文
几道C语言的题目
【1 使用宏】
#ifdef NDEBUG
#define TRACE(S) S
#define TRACE(S) printf("%s;/n", #S); S
问:以上TRACE()宏的作用是什么?
1.2 #error的作用?
1.3 定义一个宏,求出给定数组中的元素的个数 #define NELEMENTS(array) ??
1.4 定义一个宏,求出给定结构中给定成员的偏移量 #define OFFSET(structure, member) ??
【2 数据声明和定义】
给定以下类型的变量a的定义式:
a) An integer b) A pointer to an integer c) A pointer to a pointer to an integer d) An array of 10 integers e) An array of 10 pointers to integers f) A pointer to an array of 10 integers g) A pointer to a &I&function&/I& that takes an integer as an argument and returns an integer h) An array of ten pointers to &I&function&/I&s that take an integer argument and return an integer
【3 复杂类型(1)】
有如下表达式:
char (*(*x())[])();
请用文字描述x是什么。
【4 复杂类型(2)】
jmp_buf的定义:
typedef struct _jmp_buf
} jmp_buf[1];
setjmp函数的原型:
extern int setjmp (jmp_buf __env);
问:调用setjmp时传递__env的内容,还是传递指针?
【5 头文件】
问:为什么标准头文件都有类似以下的结构?
#ifndef __INCvxWorksh
#define __INCvxWorksh
#ifdef __cplusplus
extern "C" {
#ifdef __cplusplus
#endif /* __INCvxWorksh */
【6 static关键字】
请说出static关键字的3种用处: (1)用于全局变量; (2)用于局部变量; (3)用于函数。
/* file.c */
static int fn() { }
【7 const关键字】
7.1 const关键字的意义是什么? 7.2 解释以下的变量定义:
const int a1; int const a2; const int *a3; int * const a4; int const * const a5;
【8 volatile关键字】
8.1 volatile意义?例如 volatile int *p;
8.2 volatile能和const一起使用吗?例如 volatile const int *p;
【9 sizeof()】
有以下定义:
char *pmsg = "A";
char msg[] = "A";
问: sizeof(pmsg) = ? sizeof(msg)
= ? sizeof(“A”)
= ? sizeof(ch)
= ? sizeof(‘A’)
= ? (在C++中等于多少?)
void f(char param[100]) { // sizeof(param) = ? }
【10 字符串】
有以下代码
char *pmsg = "hello, world!";
strcpy(pmsg, "hi, there.");
试评论该代码。
【11 混合运算】
有以下代码:
void foo() {
unsigned int a = 6;
int b = -20;
(a+b & 6) ? puts("& 6") : puts(" & = 6"); }
请问调用foo()的输出?
【12 内存访问】
有以下代码:
void fn() {
int a[100];
p = (int *)((unsigned int)a + 1);
printf(“p=0x%x/n”, *p); }
试评论以上代码。
【13 C库函数】
请说明以下函数的意义:
void perror(const char *__s); fdprintf(int, const char *, ...);
isspace(), isxdigit(), strerr(), sprintf()
答案,仅供参考:
1.1 这道题主要考察#的功能,S是一个表达式。TRACE()的作用就是在DEBUG状态下,计算表达式S的值之前先打印S。
1.2 #error用于向编译器报错,并输出它后面带的错误信息。例如:
#ifndef SOMETHING
#error SOMETHING not defined!
如果在这段代码之前未定义过SOMETHING,则在编译时出错,并给出"SOMETHING not defined!"的错误信息。
1.3 #define NELEMENTS(array) (sizeof(array) / sizeof((array)[0]))
1.4 #define OFFSET(structure, member) ((int) &(((structure *)0)-&member))
2 (a) An integer:
(b) A pointer to an integer:int *a;
(c) A pointer to a pointer to an integer:int **a;
(d) An array of 10 integers:int a[10];
(e) An array of 10 pointers to integers:int *a[10];
(f) A pointer to an array of 10 integers:int (*a)[10];
(g) A pointer to a &I&function&/I& that takes an integer as an argument and returns an integer:int (*a)(int);
(h) An array of 10 pointers to &I&function&/I&s that take an integer argument and return an integer: int (*a[10])(int);
3 char (*(*x())[])();
这道题来自"The C Programming Language"中的一个例子。
首先,确定标识符:x
x是一个函数,没有参数:x()
返回值是一个指针:*x()
这个指针指向一个数组:(*x())[]
数组中的每个元素是指针:*(*x())[]
指向一个不带参数的函数:(*(*x())[])()
函数的返回值是char:char (*(*x())[])()
这里,要知道*、()和[]的优先级。
4 这个定义有点怪,它的意思是:jmp_buf这种类型是一个数组,只有一个元素,元素类型为struct{...}。数组名作为函数参数时,应该是传递地址/指针。
5 在编译源文件时,C编译器和C++编译器都会对符号(函数或变量)名作某些修正,但两者采用的修正方法不同,所以两者生成的目标文件不能互相链接。在 C++中使用extern "C"可以让C++符号获得C链接特性。由于C++编译器会自动定义__cplusplus宏,所以在C语言头文件中采用这种 结构可以保证无论使用何种编译器,生成的目标文件都具有C链接特性,能够与标准C编译器所生成的目标文件相链接。
6 (1)用于全局变量:外部静态变量,只能在本源文件中被引用,不能被其它源文件所引用。
(2)用于局部变量:局部静态变量,在函数返回后存储单元不释放;下一次调用该函数时,该变量为上次函数返回时的值。
(3)用于函数:内部函数,只能被本源文件中的函数所调用,不能被其它源文件调用。
7.1 const关键字在C语言中用于声明"常变量",其值不可修改,但具有确定的数据类型。C编译器总是为其分配相应的存储单元。
在C++中,const关键字用于声明常量,C++编译器视具体情况决定是为其分配存储单元还是仅将其作为编译期间的常量。
7.2 const int a1; a1是整型常量。
int const a2; a2是整型常量。等同于const int a2;
const int *a3; a3是指针(a3是可变的),指向一个整型常量。等同于int const *a3;
int * const a4; a4是常量指针(a4不可变),指向一个整型变量。
int const * const a5; a5是常量指针(a5不可变),指向一个整型常量。等同于const int * const a5;
8.1 volatile关键字用于声明内存映射的易失型变量,这类变量的值随时可能由于某种编译器所不知道的原因(例如,外部设备对其写入)所改变,所以编译器在进行代码优化时不能对其做任何的假设和依赖。
8.2 volatile可以和const一起使用,不过很少见。
const关键字的意思是限制编程者自己不能修改变量的值;两者并不矛盾。
例如一个内存映射的、只读的硬件寄存器,假设它的地址是p,则可以这样声明:volatile const UINT32 *p;
9 sizeof(pmsg) = 指针变量的长度
sizeof(msg) = 2 (字符数组的长度)
sizeof("A") = 2 (字符串的长度)
sizeof(ch) = 1 (字符变量的长度)
sizeof(‘A’) = 整型变量的长度 (在C语言中,字符常量的数据类型实际上是int;在C++中,它的数据类型是char,从而原式等于1)
sizeof(param) = 指针变量的长度 (数组名作参数时,传递的是数组的起始地址)
10 这种写法是和编译器&操作系统相关的,所以不应当这样写。在WIN2K+VC环境下debug程序时会出现异常。
不过这样写,编译器不会报错。按道理,"hello..."的类型是const char [N],它是不能赋值给char *的,
因为会丢失常量属性。但在const关键字成为C标准之前,大家都这样写程序,所以char *pmsg = "hello..."
这种写法被给予特别豁免,即使在C++中也是如此,在"The C++ Programming Language"的附录里对此有讨论。
"hello, world!"是字符串常量(string literal),它的类型是const char [N],N为字符串的长度(包括结尾的0)。
"The C Programming Language"指出,写字符串常量的结果是未定义的(undefined)。所以在有些平台(操作系统+编译器)
上程序不会出错,而在其它平台上程序出现异常。
GNU手册里这样说:
Writing into string constant "constants" should be constant.
不过在GNU中它提供另外的选择:使用-fwritable-strings进行编译就可以。
那么,为什么不允许修改字符串常量呢(它不也在内存中吗)?
这可能和另外一个特点有关,即重复字符串的合并。现在的编译器应该会主动帮助我们合并程序中相同的字符串常量
以节省内存。如果string literal可写,就会出现问题。例如:
void foo()
printf("%s/n", "how are you?");
void bar()
char *p = "how are you?";
strcpy(p, "WHO ARE YOU?");
调用foo()当然会打印"how are you"。但如果编译器合并字符串,那么先调用bar(),再调用foo(),foo()打印的就是
"WHO ARE YOU?"。这当然不是我们想要的结果。
另外一方面,这样写也有问题(确实有人这么写):
if (func() == "something")
func()是:
char *func()
return "something";
这就假设编译器一定会帮我们合并字符串,然而那也不一定。
11 输出"& 6"。
混合运算时的数据类型转换次序:int --& unsigned --& long --& double。
另外,char和short必定转换为int,float必定转换为double。
12 p = (int *)((unsigned int)a + 1);
代码的意图是想使p指向数组的第二个元素,但通常的写法是:p=a+1。这里存在这样的问题:a是个常量地址,
a+1指向下一个数组元素,而((unsigned int)a + 1)指向下一个内存地址。如果地址是字节计数的,则p指向的
是数组第一个元素的第二个字节。还有一个效果就是:在RISC上该printf语句会出异常,因为不允许非对齐访问
(mis-aligned access)。对齐访问就是访问2字节变量的地址要能被2整除,4字节变量的地址要能被4整除,etc。
13 这些函数到处都查得到,就不用做了吧.
&&&&推荐文章:
【上篇】【下篇】请教一道c语言编程题 求教一道C语言编程题???
请教一道c语言编程题 求教一道C语言编程题???
求教一道C语言编程题???/* (1)x = 30 y = 20 (2)a = 30 b = 20 (3)a = 20 b = 30 (4)x = 20 Y = 30 Press any key to continue */ #include &stdio.h& void swap(int*,int*); int main() { int x = 30,y = 20; printf("(1)x = %d y = %d\n",x,y); // 输出: (2)x = 30,y = 20 swap(&x,&y); printf("(4)x = %d Y = %d\n",x,y); // 输出: (2)x = 20,y = 30 return 0; } void swap (int *a,int *b) { printf("(2)a = %d b = %d\n",*a,*b); //交换前,输出: (2)a = 30,b = 20 t = *a; *a = *b; *b = t; // 这三行实施交换过程 printf("(3)a = %d b = %d\n",*a,*b); //交换后,输出: (3)a = 20,b = 30 }这段代码不就是让两个数交换值吗,关键是那个调用函数,用指针修改全局变量 你这题问的是什么,(1),(2),(3),(4)是printf输出的结果吗? 因为X=30,Y=20 首先在屏幕上输出这句话:(1)x=30y=20 然后调用交换函数输出:(2)a=30b=20 交换后输出:(3)a=20b=30 。请教一道C语言编程题给你个算法吧 分别定义下C的个位m十位n百位p千位q m=b%10 p=b/10 n=a%10 q=a/10 c=q*1000+m*100+q*10+p 前提 你所用的ab为俩位数 比如我输入一个数98 我要取它的十位数,也就是9 那么我就用98/10这条命令,其中&/&的意思是整除,也就是除了已后取整数部分,比如98除以10应该是9。8,但是取整数部分后就是9 同理要取个们数,也就是8 我们就用98%10这条命令,其中&%&的意思是取余的意思,就是说除完之后取余数,而不取整数部分,比如98除以10应该是9。8,但是取余数部分后就是8 给你举个例子 #include&stdio.h& void main() { int i=98; printf("%d %d",i/10,i%10); } 给你扩展下,如果是个三位数,比如987,要取。C语言: #include&stdio.h& int main() { int a,b,i,j,c; scanf("%d%d",&a,&b); i=a/10; j=a%10; c=i*1000+j*10; i=b/10; j=b%10; c。int fun(int a, int b) {
int ge, shi, bai,
ge = b%10;
shi = a%10;
bai = (b/10)%10;
qian = (a/10)%10;
。请教一道c语言编程题!stdio;请输入str字符串的字符" l++) %s"\n,n;
int getc(char a[]);
while(d,);; printf(" int judge(a[]; n=judge(ch[],str[];
} 大体是这样; int main() { printf(" int i;--用于标识是否全在相同字符,返回字符串长度;l& }
b++;=d;; char d,str[])。 if(n==1) printf(&quot,ch[];) { d=getchar(); return 0;} return b-1,l;=i+l;i++)
printf("请输入ch字符串的字符&quot,str[]);%s" for(i=0,l,c; l=getc(ch[]); }
m++; return 1,l,b[]; int judge(a[];i&gt.h&gt,c; i=getc(str[]); b=0,d)--判断ch的字符有与str的字符相同 { &nbsp,b[]!=getc(char a[])--字符串输入函数,没在编译器里跑过应该会有点毛病; for(l=0;); a[b]=d; else
=c;for(int m=0,i); char str[];i&。循环判断。请教一道c语言编程题,除草药水问题 #include "stdio.h"void main(){
int i,x,y,result=0; scanf("%d %d",&x,&y); for(i=1;i&=y;i++) { result+=x/i; } printf("%d\n",result);}。请教一道c语言编程题,查找问题 你还是回去好好看书吧,把字符串的函数和数组好好看看 另外还有循环,利用一个计数器来做。求教一道c语言编程题#include"stdio.h"struct student{ char name[10]; int score[3];}sru[n];print(sru)struct student sru[];{ int i,j; printf("\n学号 姓名 成绩1 成绩2 成绩3 成绩4 成绩5"); for(i=0;i&n;i++){ printf("\n%d %s",sru[i].num,sru[i].name); for(j=0;j&3;j++) printf(" %d",sru[i].score[j]);}}main(){ int i,j; for(i=0;i&n;i++) { printf("\n请输入学生 %d ",i+1); printf("学号 :"); scanf("%d",&sru[i].num); printf("名字 :"); scanf("%s",&sru[i].name); printf("成绩 :"); for(j=0;j&3;j++) scanf("%d",&sru[i].score[j]); }print(sru);}我不想做了 你参考下 把结构域改下 和输出 还有变量 就差不多这种题 都是这样的。请教一道c语言编程题,p不是指向一维数组吗,怎么可以使用。结果 选D第一个循环:p[0]=&w[0*0]=&w[0] p数组0行首地址p[1]=&w[1*1]=&w[1] p数组1行首地址p[2]=&w[2*2]=&w[4] p数组2行首地址第二个循环是这3个数相乘:p[0][0]=1; p数组0行0列的值p[1][1]=3; p数组1行1列的值p[2][2]=7; p数组2行2列的值理解本题用到一个概念:数组名代表数组的首地址int *p[3] 这种定义方法,表示p是一个一维数组,有三个元素,每个元素类型是一个 int * 也就是指向int类型的指针。那么p[i] 是这个一位。p是一维指针数组,即p[i]都是指针,对于指针如果取元素可以用下标的方式,所以有p[i][i].由第一个循环知道p[0]=&w[0], p[1]=&w[1], p[2]。因为他是*p[3].相当于p[3][n]是动态的,可以就好像*p一样,是一个一维数组*p是指针啦。求教一道c语言编程题:输入三个整数,从大到小排序,并输。void main(){ int x,y,z, scanf("%d",&x); scanf("%d",&y); scanf("%d",&z); if(x&y){temp=x;x=y;y=} if(x&z){temp=x;x=z;z=} if(y&z){temp=y;y=z;z=} printf("x,y,z=%d,%d,%d\n",x,y,z); }。求教一道C语言编程题,急!!#include &stdio.h& #define DIG_MAX 5
int digit_ int each_digit[DIGIT_MAX]; int new_
void sort(int * a, int n) {
for (i = 0; i & n - 1; i++)
for (j = 0; j & n - i - 1; j++)
if (a[j] & a[j + 1])
tmp = a[j];
a[j] = a[j + 1];
a[j + 1] =
void inf_set(int a) {
digit_num = 0;
each_digit[digit_num++] = a % 10;
void print() {
printf("1. digit number is %d\n", digit_num);
printf("2. each digit is: ");
for (i = digit_num - 1; i &= 0; i--)
printf("%d ", each_digit[i]);
sort(each_di。楼上回答乃问题/question/.html里的答案,而问题不同#include &stdio.h&#define DIGIT_MAX 5int 。#include&stdio.h& #include&stdlib.h& #define N 10 int main(int argc,const char **argv) {
char array[N]={0};
int i=0,j=。请教一道c语言编程题 你这个下面除以1不是没有任何意义吗?就等于0!+1!+2!+。n!可以加我QQ:帮你写可以理解为0+1+2+3+N。。
请教一道c语言编程题相关推荐:
请教一道c语言编程题相关}

我要回帖

更多关于 c语言一维数组题目 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信