加强指针和函数的理解使用

加强指针和函数的理解使用

Q1

用户给定一个整数,将该整数逆置之后输出。

%可以取余数;不停取余就可以实现整数倒置。用两个变量一个装余数 一个装除完10以后的数;就OK了吧,至于循环,因为要一直循环,所以选用了while,嵌套一个If-else的分支语句,来判断到0了没。

#include<stdio.h>
      int main()
      {	
         int n,i;	
         i=1;	
         scanf("%d",&n);	
         while(i!=0)	
           {		
                i=n%10;		
                n=n/10;		
                if(i!=0)		
                printf("%d",i);	
           }	
         return 0;
       } 

Q2

给定一串任意字符串(如:1023fase415#145#)要求,将其中的所有整数提取出来并存入整数数组

关于第二个问题我本来是想先判断是否是整数(ASCII码大于’0’小于’9’均为整数),然后再保存下来,如果下一个是整数,继续保存,如果下一个不是整数,让它从循环中跳出来,用空格代替,并继续读取,最后输出保存的结果。用IF语句判断是否为整数,然后我发现判断完了后我不会把这个字符一个一个存进另外一个数组,然后就卡住了。以下是我借鉴的,关于下面的代码我有一些不懂的,比如while(1)是什么,为什么第二个while没有循环体,以及下面if 语句中为什么要10*a[count],

#include <stdio.h>
   int main(void)
{
   char str[1000];
   int i, count, a[100];
   int p, q, r;
   int tmp;
    
   gets(str);
    
   r = 0;
   count = 0;
    
   while(1)
   {
       while(str[r] && (str[r]<'0' || str[r]>'9'))
           r++;        //跳过非数字 
        
       if(str[r])
       {
           p = r;        //p指向数字子串开头
           q = r + 1;  //q寻找数字串结尾 
           a[count] = str[r]-'0';
            
           while(str[q]>='0' && str[q]<='9')
           {
               a[count] = 10*a[count]+(str[q]-'0');
               q++;
           }
            
           r = q;    //新起点
           count++; 
       }
       else
           break;     
   }

   for(i=0; i<count; i++)
   printf("%d ", a[i]);
   printf("\n");
   return 0;
}

Q3

给定一串任意字符串(如:10.23fase4.15#14.5#)要求,将其中的所有数字提取出来并存入double数组

思路一看这题怎么和上面有点像呢?那我去改一下数据类型,并且把判断条件里面的一些改成=="."应该就可以吧。。。。然鹅,我试了一下,不是数据类型无用就是错误,要不就是不管输入什么出来的都是0.000000;显然错了呀,可我并不知道该怎么解决 (我想了下,是不是用字符串转换函数就可以实现啊…在b站上再好好看看这些东西)

Q4

提高任务1.观察下列代码,思考并解释程序运行结果?(最好先自己想,再程序验证)
#include <stdio.h>
int main()
{
	char *c[] = { "ENTER", "NEW", "POINT", "FIRST" };
	char** cp[] = { c + 3, c + 2, c + 1, c };
	char*** cpp = cp;
	printf("%s\n", **++cpp);
	printf("%s\n", *--*++cpp + 3);
	printf("%s\n", *cpp[-2] + 3);
	printf("%s\n", cpp[-1][-1] + 1);
	system("pause");
	return 0;
}

Q5

提高任务2.观察下列代码,思考并解释程序运行结果?
#include <stdio.h>
struct Test
{
	int Num;
	char *pcName;
	short sDate;
	char cha[2];
	short sBa[4];
}*p;
int main()
{
	p = 0x100000;
	printf("%p\n", p + 0x1);
	printf("%p\n", (unsigned long)p + 0x1);
	printf("%p\n", (unsigned int*)p + 0x1);
	return 0;
}

Q6

提高任务2.观察下列代码,思考并解释程序运行结果?
#include <stdio.h>
int main()
{
	int a[4] = { 1, 2, 3, 4 };
	int *ptr1 = (int *)(&a + 1);
	int *ptr2 = (int *)((int)a + 1);
	printf("%x\n%x\n", ptr1[-1], *ptr2);
	return 0;
}

Q7

编程实现:写一个struct_sort()函数,可以将一个main函数中的结构体数组按某一元素来排序。如下。
typedef struct Struct{
    int id;
    double grades;
} Student;

//学生结构体,id为学号,grades为分数,要求struct_sort()函数可以把所有学生按分数从大到小排序。

void struct_sort(Student* students);//可根据自己的需求随意更改原型,怎么方便怎么写。
整体感觉上我对循环和数组有了进一步的了解对gets(str)输入字符串函数有了了解,但是指针啊啊啊啊,函数啊啊啊,整体的C的知识把握不好,我一定会赶快去深入学习前面的知识。希望下一次task我能做得好那么一点点。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值