【无标题】

本周的编程练习集中于C语言的指针和数组操作,包括指针取地址、改变数值、地址计算以及数组的排序、进制转换、二维数组遍历和随机数最大值寻找等。通过这些练习,博主发现了对指针的运用不够熟练,数组操作中存在小错误。下周将继续加强指针训练,并解决现有问题。同时,还涉及了一些循环和逻辑思维的训练,如寻找立方和等于原数的数字、星号打印等。
摘要由CSDN通过智能技术生成

本周c语言练习(11月15日————11月21日)
本周小结:本周主要针对数组和指针进行训练,还练习了一些特殊循环
总结:指针有些虽然能敲,但是时间较长,也就是不熟练,数组练习较好,但存在一些小问题,代码报错总得找半天才能发现错误。
下周目标:加强数组训练,继续攻克指针,
一.指针训练
1.指针取地址,自己较指针开始基础练习了一下;

#include<stdio.h>
int ha(int *i);
int bu(int *i);
int main(void)
{
int i=6;
printf("%d\t",i);
printf("%p\t",&i);
printf("\n");
ha(&i);
bu(&i);	
}

int ha(int *i)
{
printf("%d\t",*i);
printf("%p\t",&i);
printf("%d\t",i);
printf("\n");
*i=100;
}

int bu(int *i){
printf("%d\t",*i);
printf("%p\t",&i);	
}

2.指针改变数值;


int fun(int *x);
int cun(int x); 
int main()
{
int x=6;
int *p;
fun(&x);
cun(x);	
}
 int fun(int *x){
 printf("%d\t",*x);
 *x=2;	
 }
 int cun(int x){
 printf("%d",x);	
 }
 

3.指针地址练习

#include<stdio.h>

int main()
{
	char ac[]={0,1,2,3,4,5,6,7,8,9,}; 
	char *p = ac ;
	char *p1 =&ac[5];
	printf("%p\n",p);
	printf("%p\n",p+1);
	printf("%d\n",p1-p);
	int ai[]={0,1,2,3,4,5,6,7,8,9,};
	int *q = ai;
	int *q1 = &ai[6];
	printf("%p\n",q);
	printf("%p\n",q1);
	printf("%d\n",q1-q);
	return 0;
	
	
	 } 

4.上周没看懂的指针和数组的结合这周搞明白了

#include<Stdio.h>

 void minmax(int a[],int len,int *max,int *min);

 int main ()
 {
 	int a[]={1,2,3,4,5,6,7,8,9,12,13,};
 	int min,max;
 	minmax(a,sizeof (a)/sizeof a[1],&min,&max);
	printf("min=%d,max=%d\n",min,max);
	return 0;	
 }
 
 void minmax(int a[],int len,int *min,int *max)
 {
    int i;
    *min=*max=a[0];
    for(i=1;i<len;i++){
 	if(a[i]<*min){
 		*min=a[i];	
	 }
	if(a[i]>*max){
	 	*max=a[i];
	 }
 }	
 		
 }

5.指针的一个作用可以改变返回值

#include<stdio.h>

int divide(int a,int b,int*result);

int main()
{
	int a=5;
	int b=2;
	int c;
	if( divide(a,b,&c)){
	printf("%d/%d=%d\n",a,b,c);	
	}
	return 0;
}

int divide(int a,int b,int*result)
{
int ret = 1;
if (b==0)ret = 0;
else{
	*result =a/b;
}
return ret;	
}

二,数组
1,这个数组题就有一个小错误,一直想不来,说明数组还是有些问题

#include<stdio.h>

int main()
{
	int a[100];
	int i,t,j,x;
	scanf("%d",&x);
	for(i=0;i<x;i++){	
	for(j=i+1;j<x-1;j++){
		t=0;
	if(a[i]<a[j])
	{
	t=a[i];
	a[i]=a[j];
	a[j]=t;
	}
	}	
	}
	for(i=0;i<x;i++){
	printf("%d",a[i]);
}
	}
	

2,数组进制转化

#include<stdio.h>

int main(void){
int n,i,a[100],t;
    while(scanf("%d",&n))
    {
        i=0;
        while(n>0)
        {
            a[i]=n%2;
            n/=2;
            i++;

        }
        for(i--;i>=0;i--)
            printf("%d",a[i]);
        printf("\n");
    }
}

3,二维数组的遍历(这个最主要想练习一下扫雷的数组遍历)

#include <stdio.h>

 int main(){
 	int a[10][10];
 	int i,j,t,w,v,d,x;
 	for(i=0;i<10;i++){
 	for(t=0;t<10;t++){
 	v++;	
 	a[i][t]=v;	
	 }	
}
    for(j=0;j<10;j++){
    for(w=0;w<10;w++){
    d++,x++;	
	printf("a[d][x]=%-4d",a[j][w]);

}printf("\n");
}
 }

4,数组随机数取最大值(这个代码很有意思)

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int main(void)
{
int a[10];
int i,max;
srand(time(0));
for(i=0;i<10;i++)
{
a[i]=rand()%100;
printf("%4d",a[i]);	
}
printf("\n");
for(i=0;i<10;i++){
if(max<a[i]){
max=a[i];
}	
}
printf("  这个数组最大值为%d",max);	
}

三,一些循环或者思维题的训练
1,

#include<stdio.h>
#include<math.h>

int main()
{
double x,y,z;	
int a,b,c,i;
for(i=100;i<1000;i++){
a=i%10;
b=i/10%10;
c=i/100;
x=pow(a,3);
y=pow(b,3);
z=pow(c,3);
if(x+y+z==i)
printf("%d\t",i);	
}	
}

2,

#include<stdio.h>

int main(void)
{
int i,x,j;
scanf("%d",&x);
for(i=x;i>0;i--)
{
j=i;
while(j){
j--;	
printf("* ");	
}
printf("\n");	 
}	
}

3,这个是慕课上的题 (井字棋)

#include<stdio.h>

int main()
{
const int size = 3;
int board[size][size];
int i,j;
int numofx;
int numofo;
int result= -1;
for (i=0;i<size;i++){
for (j=0;j<size;j++){
scanf("%d",&board[i][j]);	
}	
}
for(i=0;i<size && result == -1;i++){
numofo = numofx =0;
for( j=0;j<size;j++){
if( board[i][j] == 1){
numofx ++;	
}else{
numofo ++;	
}	
}
if( numofo == size){
result = 0;	
}else if(numofx == size)
{
result =1;	
	}	
} 	
}

4,

#include<stdio.h>

int main(void)
{
int x,i,j,k;
scanf("%d",&x);	
for(i=1;i<=x;i++){
for(k=1;k<=x-i;k++){
printf(" ");}	
for(j=1;j<=i;j++){
printf("%d ",j);	
}
printf("\n");	
}
}

5

#include<stdio.h>

int main()
{
	int i,j,k;
	scanf("%d",&k);
	for(i=1;i<=k;i++){
	j=i;
	while(j){
	j--;
	printf("*");	
	}
	printf("\n");	
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值