5题c语言章节练习题题目

C语言上机考试编程题以及答案
我的图书馆
C语言上机考试编程题以及答案
1、求1+2+3+……….+100。(循环)答案#include&stdio.h&
void main() { int i,sum=0; for(i=1;i&=100;i++) sum=sum+i;
printf("%d",sum); }2、 求1*2*3*……….*10。(循环)答案void main() {
int i=0,j=1; for (i=2;i&=10;i++) { j*=i; }
printf("%d",j); return 0; }3、
输入三个数字,输出他们的最大值。(if)答案#include&stdio.h&void main() {int
a,b,c,d; scanf("%d,%d,%d",&a,&b,&c); d=max(a,b,c);
printf("max=%d",d); getch();/*暂停看运行结果*/ } int max(int x,int
y,int z){ if(x&=y&&x&=z) u=x; else
if(y&=x&&y&=z) u=y; else u=z; return(u);
4.用起泡法对十个数据排序(数组实现)答案#include&stdio.h&main ( ){&&int
i,j,t;&& static int a[10]={5,7,4,2,3,6,1,0,9,8};&&
for(j=0;j&9;j++)&& {&& for(i=0;i&9-j;i++)&&&&&& {&&if(a&a)&&&&&&&&&&{ t=a;a=a;a=t
;&&&&&&&&&&}&&&&&& }&&
}for(i=0;i&10;i++)printf("%2d",a);}
5、输入十个数字,逆序输出。(数组实现)答案#include&stdio.h&main(){int
a[10],i=0;for(i=0;i&=9;i++)scanf("%f",&a);printf("\n");for(i=9;i&=0;i--)printf("%f",a);}6输入两个数,交换他们的值并输出。(元素交换)答案#include&stdio.h&int
main (){&&&&int m,n,scanf("%d%d",&m,&n);if
(m&n){&&temp=m;&&m=n;&&n=}printf("%d",m);&&&&return
0;}7.输出9*9乘法表。(双层循环)答案#include &stdio.h&void
main(){int i=1;for(i; i&=9; i++){&&int
j=1;&&for(j;j&=i;j++)&&{&& printf("%d*%d=%d ", i, j,
i*j);&&}&&printf("\n");}}8.输入一行字符,将所有的小写字母转换成大写字母,大写字母转换成小写字母,其余字符不变。输出转变后的这行字符。答案#include
"stdio.h"void main(){&&&&char a[n];&&&&int
i;&&&&scanf("%s",a);&&&&printf("大写为:");&&&&for(i=0;i&=n;i++)&&&&{&&&&&&
if(a&='z'&&a&='a')&&&&&& a=a-32;&&&&&& printf("%c",a);&&&&}&&&&printf("\n小写为:");&&&&for(i=0;i&=3;i++)&&&&{&&&&
a=a+32;&&&&&&&&printf("%c",a);&&&&}} 9、
编写一个简单计算器程序,要求能够完成两个数的+,-,*,/四种运算。输出运算式及运算结果。(switch)6.2#include"stdio.h"main(){char
i=0,j=0,k=0,l=0;while((c=getchar())!=’\n’){if(c&=65&&c&=90||c&=97&&c&=122)
i++;else if(c&=48&&c&=57) j++;else if(c==32) k++;else
l++;}printf("i=%d,j=%d,k=%d,l=%d\n",i,j,k,l);}6.6#include"math.h"main(){int
x=100,a,b,c;while(x&=100&&x&1000)
{a=0.01*x;b=10*(0.01*x-a);c=x-100*a-10*b;if(x==(pow(a,3)+pow(b,3)+pow(c,3)))
printf("%5d",x);x++;}}6.7main(){int
m,i,j,s;for(m=6;m&10000;m++){s=1;for(i=2;i&m;i++)if(m%i==0)
s=s+i;if(m-s==0){printf("%5d its fastors are 1 ",m);for(j=2;j&m;j++)
if(m%j==0)printf("%d ",j);printf("\n");}}}或main(){int
m,i,j,s;for(m=6;m&1000;m++){s=m-1;for(i=2;i&m;i++)if(m%i==0)
s=s-i;if(s==0){printf("%5d its fastors are 1 ",m);for(j=2;j&m;j++)
if(m%j==0)printf("%d ",j);printf("\n");}}}6.8main(){int
i=1,n;double t,x=1,y=2,s,sum=0;scanf("%ld",&n);while(i&=n)
{s=y/x;sum=sum+s;t=y;y=y+x;x=t;i++;}printf("%f\n",sum);}11,P128&&例6.10(译码)#include&stdio.h&void
main(){char
c;while((c=getchar())!='\n'){c=c+4;if(c&'Z'+4||c&'z')c=c-26;}printf("%c",c);}printf("\n");}12,P111&&5.5&&5.6(switch)5.5#include
&stdio.h&main(){int
x,y;printf("输入x:");scanf("%d",&x);if(x&1)&&&&&&&&&&&&&&&&&&&&&&&&{
y=x;printf("x=%3d, y=x=%d\n",x,y);}else if
(x&10)&&&&&&&&&&&&&&&&{ y=2*x-1;printf("x=%3d,
y=2*x-1=%d\n",x,y);}else&&&&&&&&&&&&&&&&&&&&{
y=3*x-11;printf("x=%3d, y=3*x-11=%d\n",x,y);}}5.6#include
&stdio.h&main(){case
2:printf("请输入学生成绩:");scanf("%f",&score);while(score&100||(score&0){
printf("\n输入有误,请重新输入:");scanf("%f",&score);}switch((int)(score/10)){
case 10:case 9: grade=’A’;case 8: grade=’B’;case 7:
grade=’C’;case 6: grade=’D’;case 5:case 4:case
3:case 1:case 0:
grade=’E’;}printf("成绩是%5.1f,相应的等级是%c。\n",score,grade);}13,P108&&例5.5(一元二次方程求根)&&例5.6(求闰年)5.5#include&stdio.h&void
main(){int
year,scanf("%d",&year);if(year%4==0){if(year%100==0){if(year%400==0)leap=1;elseleap=0;}elseleap=1;}elseleap=0;if(leap)printf("%d
is",year);elseprintf("%d is not",year);printf("a leap
year.\n")}5.614,P31&& 例2.17&&
例2.182.17输出50个学生中成绩高于80分者的学号和成绩2.18输出2000——2500年每一年是否闰年#include&stdio.h&
&&&&void main() &&&&{ &&&&&&&& &&&&&&&&year=2000;
&&&&&&go: if(((year%4 == 0)&&(year%100 != 0)) || (year%400 == 0))
&&&&&&&&&& printf("%d is run nian",year); &&&&&&&&if(year&=2500)
&&&&&&&&&& year=year++; &&&&&&&&&&if(year&2500)&&&&&&&&&& goto
&&&&&&&&&&&&&& &&&&&&&&end:&& getch(); &&&&&& }&
TA的最新馆藏[转]&[转]&[转]&
喜欢该文的人也喜欢&>&C语言经典100题
C语言经典100题
上传大小:373KB
这是100道C语言中十分经典的例题,适合零基础同学在家自学。会做这100道题,C语言就入门了。想要自学或者想要考过计算机二级的同学,非常适合。
综合评分:0
下载个数:
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var parentWrap = $(this).parents(".respond_box"),
q = parentWrap.find(".form1").serializeArray(),
resStr = $.trim(parentWrap.find(".res_area_r").val());
console.log(q);
//var res_area_r = $.trim($(".res_area_r").val());
if (resStr == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
//var mess = $(".res_area_r").val();
var mess = resS
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, data.com_username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click", '.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
var parentWrap = $(v).parents(".respond_box");
parentWrap.find(".res_area_r").val($.trim(parentWrap.find(".res_area").val()));
评论共有0条
综合评分:
积分/C币:5
trainee_coder
综合评分:
积分/C币:3
综合评分:
积分/C币:10
综合评分:
积分/C币:3
综合评分:
积分/C币:5
sundancesy
综合评分:
积分/C币:3
狂吃狂吃的瘦子
综合评分:
积分/C币:3
综合评分:
积分/C币:3
综合评分:
积分/C币:3
综合评分:
积分/C币:3
VIP会员动态
CSDN下载频道资源及相关规则调整公告V11.10
下载频道用户反馈专区
下载频道积分规则调整V1710.18
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
资源所需积分/C币
当前拥有积分
当前拥有C币
输入下载码
为了良好体验,不建议使用迅雷下载
C语言经典100题
会员到期时间:
剩余下载个数:
剩余积分:0
为了良好体验,不建议使用迅雷下载
积分不足!
资源所需积分/C币
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
您的积分不足,将扣除 10 C币
为了良好体验,不建议使用迅雷下载
无法举报自己的资源
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可返还被扣除的积分
被举报人:
举报的资源分:
请选择类型
资源无法下载 ( 404页面、下载失败、资源本身问题)
资源无法使用 (文件损坏、内容缺失、题文不符)
侵犯版权资源 (侵犯公司或个人版权)
虚假资源 (恶意欺诈、刷分资源)
含色情、危害国家安全内容
含广告、木马病毒资源
*详细原因:
C语言经典100题您所在的位置: &
高级C语言程序员测试必过的十六道最佳题目+答案详解(1)
高级C语言程序员测试必过的十六道最佳题目+答案详解(1)
本文是网友为C程序员整理出的十六道高级测试题目并附有答案的详细解释。供网友自测之用!
【引自dishening的博客】整个测试遵循以下的约定:◆假定在所有的程序中必须的头文件都已经被正确包含。
考虑如下的数据类型:
◆char为1个字节◆int为4个字节◆long int为4个字节◆float为4个字节◆double为个8字节◆long double为8个字节◆指针为4个字节
1、Consider the following program:
#include&setjmp.h&static jmp_buf&main(){volatile&b =3;if(setjmp(buf)!=0)& {printf("%d ", b);& exit(0);}b=5;longjmp(buf , 1);}The output for this program is:(a) 3(b) 5(c) 0(d) None of the above
2、Consider the following program:
main(){struct node {&&&& };struct node& s= { 3, 5,6 };struct node *pt = &s;printf("%d" ,& *(int*)pt);}The output for this program is:(a) 3(b) 5(c) 6(d) 7
3、Consider the following code segment:
int& foo ( int x , int& n){val =1;if (n&0) {if (n%2 == 1)& val = val *x;val = val * foo(x*x , n/2);}}
What function of x and n is compute by this code segment?&& (a) x^n(b) x*n(c) n^x(d) None of the above
4、Consider the following program:
main(){int& a[5] = {1,2,3,4,5};int *ptr =& (int*)(&a+1);printf("%d %d" , *(a+1), *(ptr-1) );}The output for this program is:(a) 2 2(b) 2 1(c) 2 5(d) None of the above
5、Consider the following program:
void foo(int [][3] );&&&& main(){int a [3][3]= { { 1,2,3} , { 4,5,6},{7,8,9}};foo(a);printf("%d" , a[2][1]);}void foo( int b[][3]){++b[1][1] =9;}The output for this program is:(a) 8(b) 9(c) 7(d) None of the above
6、Consider the following program:
main(){int a, b,c,a=3;b=5;c=a,b;d=(a,b);printf("c=%d" ,c);printf("d=%d" ,d);}The output for this program is:(a) c=3 d=3(b) c=5 d=3(c) c=3 d=5(d) c=5 d=5
7、Consider the following program:
main(){int a[][3] = { 1,2,3 ,4,5,6};int (*ptr)[3] =a;printf("%d %d "& ,(*ptr)[1], (*ptr)[2] );++printf("%d %d"& ,(*ptr)[1], (*ptr)[2] );}The output for this program is:(a) 2 3 5 6(b) 2 3 4 5(c) 4 5 0 0(d) None of the above
8、Consider following function:
int *f1(void){int x =10;return(&x);}int *f2(void){int**ptr =10;}int *f3(void){int *ptr=(int*) malloc(sizeof(int));}Which of the above three functions are likely to cause problem with pointers (a) Only f3(b) Only f1 and f3(c) Only f1 and f2(d) f1 , f2 ,f3
9、Consider the following program:
main(){int i=3;j = sizeof(++i+ ++i);printf("i=%d j=%d", i ,j);}
The output for this program is:(a) i=4 j=2(b) i=3 j=2(c) i=3 j=4(d) i=3 j=6
10、Consider the following program:
void f1(int *, int); void f2(int *, int); void(*p[2]) ( int *, int);main(){p[0] = f1;p[1] = f2;a=3;b=5;p[0](&a , b);printf("%d\t %d\t" , a ,b);p[1](&a , b);printf("%d\t %d\t" , a ,b);}void f1( int* p , int q){tmp =*p;*p =q=}void f2( int* p , int q){tmp =*p;*p =q=}& The output for this program is:(a) 5 5 5 5(b) 3 5 3 5(c) 5 3 5 3(d) 3 3 3 3
11、Consider the following program:
void e(int );&& main(){a=3;e(a);}void e(int n){if(n&0){e(--n);printf("%d" , n);e(--n);}}The output for this program is:(a) 0 1 2 0(b) 0 1 2 1(c) 1 2 0 1(d) 0 2 1 1
12、Consider following declaration
typedef int (*test) ( float * , float*)type of tmp is (a) Pointer to function of having two arguments that is pointer to float(b) int(c) Pointer to function having two argument that is pointer to float and return int(d) None of the above
13、Consider the following program:
main(){char *p;char buf[10] ={ 1,2,3,4,5,6,9,8};p = (buf+1)[5];printf("%d" , p);}The output for this program is:(a) 5(b) 6(c) 9(d) None of the above
14、Consider the following program:
Void f(char**);main(){char * argv[] = { "ab" ,"cd" , "ef" ,"gh", "ij" ,"kl" };f( argv );}void f( char **p ){char*t= (p+= sizeof(int))[-1];printf( "%s" , t);}The output for this program is: (a) ab(b) cd(c) ef(d) gh
15、Consider the following program:
#include&stdarg.h&int ripple ( int , ...);main(){num = ripple ( 3, 5,7);printf( " %d" , num);}int ripple (int n, ...){int i ,& va_k= 0;j = 1;va_start( p , n);&&&& for (; j&n;& ++j) {i =& va_arg( p , int);for (;&&& i &=i-1& )++k;}}The output for this program is: (a) 7(b) 6(c) 5(d) 3
16、Consider the following program:
int counter (int i){static int count =0;count = count +i;return (count );}main(){int i ,for (i=0; i &=5; i++)j = counter(i);}The value of j at the end of the execution of the this program is:(a) 10(b) 15(c) 6(d) 7
关于&&&&&&的更多文章
【导读】2009年10月,我们见证了中国60年华诞的盛大庆典,也见证
随着云计算、物联网、大数据、移动互联网的大发展,你应该知道这些。
讲师: 15人学习过讲师: 65人学习过讲师: 177人学习过
每年的一月份大约都是在看似忙忙碌碌中度过的。最近一
自从MySQL被Oracle收购以后,PostgreSQL逐渐成为开源
1314的的日子在,在忙忙碌碌中过去了。一周五天,中间
在我的第一本书――《3D游戏开发大全》中,我们曾经对3D游戏开发完成了一次犹如探索原始丛林般的旅程:首先,我们对3D游戏产业进
51CTO旗下网站扫二维码下载作业帮
3亿+用户的选择
下载作业帮安装包
扫二维码下载作业帮
3亿+用户的选择
【C语言训练】斐波纳契数列【for】题目描述斐波纳契数列 1,1,2,3,5,8,13,21,34,55,89……这个数列则称为“斐波纳契数列”,其中每个数字都是“斐波纳契数”。输入一个整数N(N不能大于40)输出由N个“斐波纳契数”组成的“斐波纳契数列”。样例输入6样例输出1 1 2 3 5 8
作业帮用户
扫二维码下载作业帮
3亿+用户的选择
#include&&stdio.h&void&main(){ int&f1=1,f2=1, int&i,n; printf(&input&n:&&); scanf(&%d&,&&n&); if&(&n&=1&)
printf(&1&); if&(&n&=2&)
printf(&&1&); for(&i=2;i&n;i++&) {
printf(&&%d&,&fn&);
f2= } printf(&\n&);}
为您推荐:
扫描下载二维码在这个网站上&发现一套很有趣的C语言测试题,如果你招聘C语言相关开发人员,或者正在学习C语言,很值得参考。
如果没有做,下面内容暂时不要看,最好自己先完成一遍。
&&&&&&&&&&&&&&
OK,假设你做的答案没有完全正确,那你可以继续看下去了,否则,后面内容对你来说就是小菜一碟,不值得看。
&&&&&&&&&&&&&&&
#include &setjmp.h&static jmp_int main(void){volatile int b = 3;if (setjmp(buf) != 0){printf(&%d\n&, b);exit(0);}b = 5;longjmp(buf, 1);}
输出结果为A)3&&&&& B)5&&&& C)0&&&&& D)都不是
答案为B,也就是输出5。
关键点在于理解setjmp以及longjmp,(&)第一次运行到setjmp,会设置jmp_buf,然后返回0。当调用longjmp时,会把longjmp里面的非0值作为setjmp的返回值返回(如果longjmp的value参数为0,setjmp恢复后返回1,也就是当恢复到setjmp存储点的时候,setjmp一定不会返回0)。
setjmp-longjmp组合的用处类似于游戏中的存盘读盘功能,经常被用于类似C++的异常恢复操作。
struct node{&&&&&&&&&&};struct node s = { 3, 5, 6 };struct node *pt = &s;printf(&%d\n&, *(int*)pt);返回结果为3,这个算是比较简单,pt为指向结构s的指针,然后将pt转换为int指针,进行dereference,取出一个int值,那就是结构中第一个数。
我们将题目改动一下,如下代码
struct node{&&&&&};struct node s = { 3, 5, 6, 99 };struct node *pt = &s;
printf(&%X\n&, *(int*)pt);需要注意的是一般32位C编译器都认为char是8bit,short是16bit,int为32bit,所以node在内存中应该正好是对齐的,也就是abc这几个成员之间没有空隙。最终结果应该为60503,如果不是,欢迎你告诉我你具体的编译环境以及硬件配置。
int foo(int x, int n){int val = 1;if (n & 0){if (n % 2 == 1) val *=val *= foo(x * x, n / 2);}}
这道题其实最简单的办法就是在纸上做一个推演计算,一步一步跑一下,就能得到答案了,这里面没有任何复杂的C语言概念。
int a[5] = { 1, 2, 3, 4, 5 };int *ptr = (int*)(&a + 1);printf(&%d %d\n&, *(a + 1), *(ptr & 1));这道题考的其实是指向数组的指针,&a是一个隐式的指向int [5]数组的指针,它和int* ptr是不一样的,如果真要定义这个指针,应该是int (*ptoa)[5]。所以ptoa每一次加一操作都相当于跨越int a[5]的内存步长(也就是5个int长度),也就是说&a + 1其实就是指向了a[5]这个位置,实际上内存里面这个位置是非法的,但是对ptr的强制转换导致了后面ptr-1的内存步长改为了1个int长度,所以ptr-1实际指向了a[4]。至于*(a+1)没什么好说的,值就是2。
void foo(int[][3]);int main(void){int a[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };foo(a);printf(&%d\n&, a[2][1]);return 0;}
void foo(int b[][3]){++b;b[1][1] = 9;}
其实和前一题有异曲同工之妙,++b的步长实际上是3个int,也就是++b运算以后,b指向{4,5,6}这个数组的开始,而b[1]就是{7,8,9}, b[1][1]实际上就是8这个值也就是main函数中的a[2][1].
int a, b, c,a = 3;b = 5;c = a,d = (a, b);
printf(&c=%d& &, c);printf(&d=%d\n&, d);
这个其实有两个C语言知识点,一个是等号操作符优先级高于逗号操作符,另一个是逗号操作符相当于运算逗号前半部后半部的表达式,然后返回后半部表达式的值。所以c等于a(先计算等号),而d等于b(逗号表达式返回b)。
int a[][3] = {1, 2, 3, 4, 5, 6};int (*ptr)[3] =
printf(&%d %d &, (*ptr)[1], (*ptr)[2]);
++printf(&%d %d\n&, (*ptr)[1], (*ptr)[2]);
依然是2维数组相关题目,ptr为指向int [3]数组的指针,首先指向a[0],所以(*ptr)[1], (*ptr)[2]就是a[0][1], a[0][2].然后++ptr,相当于ptr指向了a[1],这时得到的是a[1][1],a[1][2],所以结果就是2,3, 5, 6。
int *f1(void){int x = 10;&& return &x;}int *f2(void){int *&& *ptr = 10;&&}int *f3(void){int *&& ptr = malloc(sizeof *ptr);&&}
这里考的是返回一个指针的问题,一般来说返回指针的函数,里面一定有malloc之类的内存申请操作,传入指针类型,则是对指针指向的内容做修改。如果想修改指针本身,那就要传入指针的指针。
int i = 3;&&j = sizeof(++i + ++i);printf(&i=%d j=%d\n&, i, j);这道题考的内容其实就是sizeof,我在这篇文章里提到过&sizeof如果计算表达式,那么表达式是不会做计算的,也就是不管加加减减,sizeof就是针对i计算大小。在32位机器上,这个j应该为4。
我将代码扩展了一下,看看大家能不能想到结果:
&&&&&&&int j = sizeof ( m + n);int k = sizeof ( n + n);int l = sizeof ( m);int l2 = sizeof (m * m);int l3 = sizeof (m + dn);int l4 = sizeof (m + m);
void f1(int*, int);void (*p[2])(int*, int);int main(void){int a = 3;int b = 5;p[0] = f1;p[1] = f1;p[0](&a, b);printf(&%d %d &, a, b);p[1](&a, b);printf(&%d %d\n&, a, b);return 0;}
void f1(int *p, int q){int tmp = *p;&& *p =&& q =}
函数指针的数组p勉强算是一个知识点,另外一个知识点就是第八题提到的,对于int q这样的参数,是不会修改其内容的。而*p则可修改p指向的内容。
第十一题:
void e(int);int main(void){int a = 3;e(a);
putchar(&\n&);return 0;}
void e(int n){if (n & 0){e(&n);printf(&%d &, n);e(&n);}}
这道题自己debug一下就完全明白了,主要知识点就是递归调用,另外前置后置自减操作的返回值问题。
第十二题:
typedef int (*test)(float*, float*);
也是经常出现的一类题,对复杂的指针定义做解析,实际上K&R里面(5.12)也有介绍该如何解读。不熟悉的朋友可以试着练习练习标准库中的bsearch,qsort以及signal函数。
第十三题:
char buf[10] = {1, 2, 3, 4, 5, 6, 9, 8};p = (buf + 1)[5];printf(&%d\n&, p);
这道题我在&也提到过相关知识点,也就是p实际指向*(buf + 1 + 5),写的更诡异一些就是p=5[buf +1];也是同样结果。
第十四题:
类似十三题,也是把数组弄得有些诡异,(p += sizeof(int))[-1];相当于*(p + sizeof(int) + (-1))。
第十五题:
int ripple(int n, &){int i, j,va_k = 0;j = 1;va_start(p, n);for (; j & ++j){i = va_arg(p, int);for (; i &= i & 1)++k;}}
int main(void){printf(&%d\n&, ripple(3, 5, 7));return 0;}
这道题也是两个知识点,一个是可变参数函数定义以及如何实现,va_arg会把5,7依次取出来。另一个知识点是i &= i-1,实际上是计算了i二进制形式中1的个数,每次计算都会消减掉最低有效位上的1。比如7二进制表示为111。i &= i &1的计算结果依次为110,100, 000 (也就是0)。在hacker&s Delights这本书里介绍了很多类似技巧。
第十六题:
int counter(int i){static int count = 0;count = count +}
int main(void){int i,for (i = 0; i &= 5; i++)& j = counter(i);printf(&%d\n&, j);return 0;}
只要了解静态局部变量的真正内涵,这道题就是小菜一碟碟碟碟碟碟。。。。。。
阅读(...) 评论()

我要回帖

更多关于 5宫格数独题目大全 的文章

 

随机推荐