对于字符数组可以一次性输出整个数组中的字符,但是对于数值类型的数组,只能利用循环进行逐个输出了。
下面举例说明如下:
char a[] = "abcd"; // 定义一个字符类型的数组,并进行初始化int b[]={2, 3, 4, 1, 9} // 定义一个int型的数组,并进行初始化;
int i;
printf("%s", a); // 一次性输出整个字符数组中的所有字符
for(i=0; i<5; i++) // 利用for循环对int数组中的数字进行逐个输出
printf("%d ", b[i]);#include<stdioh>
#include<malloch>
void foo()
{
int p=NULL;
int n,i,j,k=1,line,row;
printf("请输入矩阵的行数:");
scanf("%d",&n);
if((p=(int)malloc(sizeof(int)n))==NULL)//根据行数分配内存,分配双指针
{
printf("不能分配内存!!!\n");
return;
}
for(i=0;i<n;i++)
{
if((p[i]=(int)malloc(sizeof(int)n))==NULL)//为每一行分配指针,每一行有n个数
{
printf("不能分配内存!!!\n");
return;
}
}
//螺旋矩阵思想是:随着k的增大,矩阵最外围先被幅值,最外面一圈赋值完成后,再向里面一层赋值,如此循环
//所以可以按照这个思想,每转一圈为一个大循环,一直循环下去,直至k<=nn;
for(i=0,j=0;k<=nn;i++,j++)
{
for(row=j;row<n-j;row++)
{
p[i][row]=k++;
}
for(line=i+1;line<n-i;line++)
{
p[line][n-j-1]=k++;
}
for(row=n-j-2;row>=j;row--)
{
p[n-i-1][row]=k++;
}
for(line=n-i-2;line>i;line--)
{
p[line][j]=k++;
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%-6d",p[i][j]);
}
printf("\n");
}
for(i=0;i<n;i++)//分别释放每一行的指针
{
free(p[i]);
p[i]=NULL;
}
free(p);//释放双指针
p=NULL;
}
int main()
{
foo();
return 0;
}void print_array(int arr[], int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
该函数接受一个整数数组 arr 和数组大小 size 作为参数,使用 for 循环遍历数组中的所有元素,并使用 printf 函数打印每个元素的值。最后使用 printf 函数打印一个换行符,以便在输出中开始一个新行。
你可以在你的代码中调用该函数,将需要打印的数组和数组大小传递给它。
c语言,用printf输出一维数组的语句是printf ("%s", a),具体输出一维数组的 *** 作步骤如下:
1、首先我们打开Visual Studio 2010软件,新建一个项目。
2、然后我们按照图示代码输入包含程序需要用到的头文件。
3、然后我们按照图示代码输入主函数main。
4、然后我们按照图示代码定义一个一维数组。
5、然后我们按照图示代码定义一个数组指针。
6、然后我们按照图示代码输入数组指针指向一维数组。
7、然后我们按照图示代码输入for循环。
8、最后打印出结果即可。
限制在C语言中,利用printf直接输出数组是不可以的。但是你的做法是可以的。只是问题出在你数组使用越界了。
解释一下:
printf不能直接用来输出数组。
例如:
#include<stdioh>
int main(){
int a[3]={1,2,3};
int i;
for(i=0;i<3;i++)
printf("%d",a);
}是错误的
所以要是输出数组的话,必须要借助其他的语句输出,要一个一个地输出,例如for语句的循环输出。
例如:
#include<stdioh>
int main(){
int a[3]={1,2,3};
int i;
for(i=0;i<3;i++)
printf("%d",a[i]);
}但是你这样的做法是可以:
因为你写的a[3][3]实际上已经指定了这个数字在这个二维数组中的横坐标和纵坐标,相当于一个int型的数据。但是不过你数组越界了。
额外引申一下:直接用scanf输入一个数组的量可以么?
#include<stdioh>
int
main(){
char
a[3];
scanf("%c",&a);
int
i;
for(i=0;i<3;i++)
printf("%c",a[i]);
}
这样输入3个字符,只能把输入的第一个字符放进a数组里面。因为a就是这个数组的地址,同时也表示这个数组的第一个。&a可以给数组的第一个放进一个字符,但是后面的就无能为力的。
代码均在Devc++测试。#include <stdioh>
#include <timeh>
#define DATA_LENGTH 100
void Print(int data, int pos)
{
if((DATA_LENGTH-1) != pos)
{
Print(data, pos+1);
}
printf("%d ", data[pos]);
}
int main()
{
int i;
int data[DATA_LENGTH] = {0};
srand(time(0));
for(i=0; i<DATA_LENGTH; i++)
{
data[i] = rand() % DATA_LENGTH;
}
Print(data, 0);
printf("\n");
return 0;
}如果 int a[M][N] 是一个已赋值的数组,则可以用以下的语句段以矩阵形式打印这个数组:
int i,j;
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
printf("%6d",a[i][j]);
printf("\n");
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)