编程题目

  1. 用来演示指向函数的指针。
    
    // 自增函数:将数值a加1并返回结果int inc(int a){  return(++a);}// 乘法函数:用来将a,b两指针指向的数值相乘,并将结果存于c指针指向的空间int multi(int*a,int*b,int*c){  return(*c=*a**b);}
    
    typedef int(FUNC1)(int in); //定义一个指定参数类型的函数指针类型FUNC1typedef int(FUNC2) (int*,int*,int*); // 定义三个指定参数类型的函数指针类型FUNC2void show(FUNC2 fun,int arg1, int*arg2){ FINC1 p=&inc; // 定义指向1个参数的函数指针p,并指向自增函数inc  int temp =p(arg1); // 调用处增函数p将arg1数值自增,并把结果存于temp,为10+1=11  fun(&temp,&arg1, arg2); // 调用传入的函数指针(实为multi),将temp,arg1数值相乘,结果存于arg2指向的空间,为10*11=110  printf("%d\n",*arg2); // 打印乘法结果110}
    
    main(){  int a; // 定义变量a用于存储结果  show(multi,10,&a); // 调用函数show并传入三个参数:函数指针multi, 数值10,结果变量a的地址  return 0;}
  2. 请找出下面代码中的所有错误 (题目不错,值得一看) 
    说明:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba” #include"string.h" main() { 
    char*src="hello,world"; char* dest=NULL; int len=strlen(src); 
    dest=(char*)malloc(len); char* d=dest; char* s=src[len]; while(len--!=0) d++=s--; 
    printf("%s",dest); return 0; } 答: 
    方法1:一共有4个错误; int main() { 
    char* src = "hello,world"; int len = strlen(src); 
    char* dest = (char*)malloc(len+1);//要为分配一个空间    char* d = dest; char* s = &src[len-1];          //指向最后一个字符 while( len-- != 0 ) *d++=*s--; 
    *d = 0;           //尾部要加’\0’ printf("%sn",dest); 
    free(dest);        // 使用完,应当释放空间,以免造成内存汇泄露 dest = NULL;   //防止产生野指针 return 0; } 
    方法2: (方法一需要额外的存储空间,效率不高.) 不错的想法 #include <stdio.h> #include <string.h> main()


    char str[]="hello,world"; int len=strlen(str); char t; 
    for(int i=0; i<len/2; i++) { t=str; 
    str=str[len-i-1]; //小心一点 str[len-i-1]=t; } 
    printf("%s",str); return 0; }

  3. 另一个基本的c语言问题
    unsigned char *p1;
      unsigned long *p2;
      p1=(unsigned char *)0x801000;
      p2=(unsigned long *)0x810000;

      请问p1+5= ;
        p2+5= ;就是一个指针加法中1代表什么的问题
    1代表的是一个单位量
    p1+5=p1+5*1=p1+5*sizeof(unsigned char)=p1+5*1=0x801000+ox5=0x801005
    p2+5=p2+5*1=p2+5*sizeof(unsigned long)=p1+5*4=0x810000+20=0x810000+0x14=0x810014
  4. 三维数组 嵌套for循环 i,j,k次序问题
    int a[60][250][1000],i,j,k;
    for(k=0;k<=1000;k++)
    for(j=0;j<250;j++)
    for(i=0;i<60;i++)
    a[i][j][k]=0;

    这样是错误的,需要把循环语句i,j,k内外换一下

  5. (a++)*(a++) 禁止这样写

时间: 2024-10-22 12:59:33

编程题目的相关文章

【编程题目】n 个骰子的点数

67.俩个闲玩娱乐(运算).2.n 个骰子的点数.把 n 个骰子扔在地上,所有骰子朝上一面的点数之和为 S.输入 n,打印出 S 的所有可能的值出现的概率. 思路:用递归把每个骰子的可能情况变量,记录各种和S出现的次数 比上 总情况数就是概率 /* 67.俩个闲玩娱乐(运算). 2.n 个骰子的点数. 把 n 个骰子扔在地上,所有骰子朝上一面的点数之和为 S.输入 n, 打印出 S 的所有可能的值出现的概率. */ #include <stdio.h> #include <stdlib.

【编程题目】有两个序列 a,b,大小都为 n,序列元素的值任意整数,无序;(需要回头仔细研究)

32.(数组.规划)有两个序列 a,b,大小都为 n,序列元素的值任意整数,无序:要求:通过交换 a,b 中的元素,使[序列 a 元素的和]与[序列 b 元素的和]之间的差最小.例如: var a=[100,99,98,1,2,3];var b=[1,2,3,4,5,40]; 首先,目标一定是先找到n个数字,使得数字和比总和的一半小,但是最接近. 思路一:开始看这道题跟之前学的动态规划很像,就想用动态规划来解.但是....做不出来........... 必须要选一半的数字让我头都大了. 思路二:

【编程题目】判断整数序列是不是二元查找树的后序遍历结果,如果是,构建该二元查找树

判断整数序列是不是二元查找树的后序遍历结果题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果.如果是返回 true,否则返回 false.例如输入 5.7.6.9.11.10.8,由于这一整数序列是如下树的后序遍历结果:8/ \6 10/ \ / \5 7 9 11因此返回 true.如果输入 7.4.6.5,没有哪棵树的后序遍历的结果是这个序列,因此返回 false. 做这个题目的时候最开始傻了,想着从前到后根据数字的大小关系判断.后来幡然醒悟,根据后序遍历的特点.序列最后一

【编程题目】扑克牌的顺子

67.俩个闲玩娱乐(运算).1.扑克牌的顺子从扑克牌中随机抽 5 张牌,判断是不是一个顺子,即这 5 张牌是不是连续的.2-10 为数字本身,A 为 1,J 为 11,Q 为 12,K 为 13,而大小王可以看成任意数字. 思路: 用min.max记录输入的牌对应的数字大小,不考虑王,用wnum记录王的个数, record[13]记录每种牌是否出现过.设要判断n个牌是否连续 只要  出现不重复 且(max - min + 1) 在 [ n - wnum , n ]之间即可 /* 67.俩个闲玩娱

火车调度-c#求解-英雄会在线编程题目

题目: 火车调度 返回首页 发布公司: 有 效 期: 赛 区: CSDN 2014-04-30至2015-04-30 北京 难 度 等 级: 答 题 时 长: 编程语言要求: 120分钟 C C++ Java C# 题目详情 火车从A地和B地之间运行,你知道火车从某地出发的时间和到达某地的时间(这个时间出发,一定这个时候到达).火车到达目的地后,不能立刻返回,需要经过t分钟检修才可以返回.列车只在A.B两地运行.你知道每天内的时刻表,求A,B两地各需要存放多少辆列车,才能满足这个时刻表?即只要该

另类编辑距离-c#求解-英雄会在线编程题目

Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象.但是,它又不是一种真正的面向对象编程(OOP)语言,因为它的语法中没有class(类). 那么,如果我们要把"属性"(property)和"方法"(method),封装成一个对象,甚至要从原型对象生成一个实例对象,我们应该怎么做呢? 一. 生成对象的原始模式 假定我们把猫看成一个对象,它有"名字"和"颜色"两个属性. var C

【编程题目】颠倒栈☆

66.颠倒栈(栈).题目:用递归颠倒一个栈.例如输入栈{1, 2, 3, 4, 5},1 在栈顶.颠倒之后的栈为{5, 4, 3, 2, 1},5 处在栈顶. 思路:我自己没做出来,因为总觉得用不上递归.看了网上答案http://blog.csdn.net/cxllyg/article/details/7655935 根据里面的思路 自己照着写了一遍 /* 66.颠倒栈(栈). 题目:用递归颠倒一个栈.例如输入栈{1, 2, 3, 4, 5},1 在栈顶. 颠倒之后的栈为{5, 4, 3, 2,

【编程题目】对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相邻(上下左右)某一个元素也加一

45.雅虎(运算.矩阵):1.对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相邻(上下左右)某一个元素也加一,现给出一正数矩阵,判断其是否能够由一个全零矩阵经过上述运算得到. 这道题,是我目前为止做过的最最最最最麻烦.最繁琐的题目了. 思路: 把输入的矩阵一步步还原成 0 矩阵 一个数字,只可能伴随着它上下左右四个方向的数字变化. ①如果数字比它周围四个数的和要大,那么一定不满足条件. ②如果数字小于等于四周的数字和,且其四周仅有一个数字不为0: 不为0的那个周围数字的大小 -=

【编程题目】输入一颗二元查找树,将该树转换为它的镜像

第 15 题(树):题目:输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点.用递归和循环两种方法完成树的镜像转换. 例如输入:8/ \6 10/ \ / \5 7 9 11输出:8/ \10 6/ \ / \11 9 7 5定义二元查找树的结点为:struct BSTreeNode // a node in the binary search tree (BST){int m_nValue; // value of nodeBSTreeNode

【编程题目】把数组排成最小的数

68.把数组排成最小的数(数组.算法).题目:输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个.例如输入数组{32, 321},则输出这两个能排成的最小数字 32132.请给出解决问题的算法,并证明该算法. 思路:首先,肯定要考虑溢出问题.开始想用字符串,后来改为了用list.思路是先把第一个数字放入list,然后依次把后面的数字插入到合适的位置. 关键问题就是如何判断两个数字哪一个在前面. ①对于 353 .412这样的情况,肯定是第一个数字小的在前面 ②遇到数字