㈠ c語言矩陣怎麼寫
方法1:直接定義10*10的數組,讀取全部數據,再根據選擇的行列數列印輸出部分數據。
方法2:通過文件流指針的移動,跨過不需要的內容。(這里控制文件流指針可利用ftell和fseek函數來移動指定位元組數)我是利用fscanf讀取需要的內容,遇到需要跳行就用fgets來跳過。(注意常量參數根據自己需求修改)。
說明:邊讀取邊列印輸出,就不需要變數存儲。我的代碼是把讀取出來的內容存放在三維數組中(文件內容你沒指定,如是單純數字,二維數組即可,我是作為字元串處理,故用三維數組。),數組是根據實際大小,動態申請,寫成兩個獨立函數。
下面是代碼:
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#define MAXR 10//文件中矩陣最大行
#define MAXC 10//文件中矩陣最大列
#define MS 3//矩陣中元素字元串最大字元數(包含結束符號,不可小於實際內容)
#define MBUF 100//文件中一行最大字元數,可設置大一點
char ***getMem(int r,int c,int len);//動態申請一個三維數組
void freeMem(char ***datas,int r,int c);//釋放數組空間
void showDatas(char ***datas,int r,int c);//列印輸出結果
int main()
{
int r=MAXR+1,c=MAXC+1,i=0,j=0;
char ***datas=NULL,str[3],buf[MBUF];
FILE *fp=NULL;
printf("請輸入要獲取的行數和列數: ");
while(r<0 || r>MAXR || c<0 || c>MAXC)scanf("%d%d",&r,&c);
datas=getMem(r,c,MS);
fp=fopen("C:\test.data","r");
if(!fp) return 1;
while(fscanf(fp,"%s",str)!=-1)
{
if(i<c) strcpy(datas[j][i],str),i++;
if(i==c)
{
if(!fgets(buf,sizeof(buf),fp)) break;
i=0,j++;
}
if(j==r) break;
}
showDatas(datas,r,c);
freeMem(datas,r,c);
return 0;
}
void showDatas(char ***datas,int r,int c)
{
int i,j;
for(i=0;i<r;i++,printf(" "))
for(j=0;j<c;j++)
printf("%s ",datas[i][j]);
printf(" ");
}
void freeMem(char ***datas,int r,int c)
{
int i,j;
if(!datas)
{
for(i=0;i<r;i++,free(datas[i]))
for(j=0;j<c;j++)
free(datas[i][j]);
free(datas);
}
}
char ***getMem(int r,int c,int len)
{
int i,j;
char ***datas=NULL,**dr=NULL;
datas=(char ***)malloc(sizeof(char **)*r);
if(!datas) return NULL;
for(i=0;i<r;i++)
{
dr=(char **)malloc(sizeof(char *)*c);
if(!dr) return NULL;
else
{
for(j=0;j<c;j++)
{
dr[j]=(char *)malloc(sizeof(char)*len);
if(!dr[j]) return NULL;
}
datas[i]=dr;
}
}
return datas;
}
㈡ C語言 列印矩陣
你好
具體實現如下 代碼有注釋 幫助理解
#include <stdio.h>
void main()
{
int i,j,n;
int a[100][100];//行標和列標的最大值100可以自行修改 不過這里100足夠了
printf("enter n(n<=100):");//因為預定義的數組最大就是100 因此不要超過數組行標和列標的最大值
scanf("%d",&n);
for(i=0;i<n;i++)
{
if(i%2==0)//判斷行數是偶數 那麼就是降序
{
for(j=0;j<n;j++)
a[i][j]=i*n+(j+1);
}
else//行數是奇數 就升序
{
for(j=n-1;j>-1;j--)
a[i][j]=i*n+(n-j);
}
}
for(i=0;i<n;i++)//輸出數組a
{
for(j=0;j<n;j++)
{
printf("%d\t",a[i][j]);
}
printf("\n\n\n");
}
}
希望能幫助你哈
㈢ c語言 改成鋸齒形式 求幫忙。
鋸齒形式其實就是縮進對其
#include <stdio.h>
#define PRICE 12.5
mian ()
{
int num = 3;
float total;
total = num *PRICE ;
printf("total = %f\n",total);
}
在比如
main()
{
int x=1,a=0,b=0;
switch(x)
{
case 0: b++;
case 1: a++;
case 2: a++;b++;
}
printf (「a=%d,b=%d\n」,a,b);
}
㈣ 用C語言怎樣輸出一個N階蛇形矩陣
先說思想:N=4時候和N=5的時候前面4條斜線上三角是相同的!所以這個可以用遞歸做。還有個規律很重要就是當2個數的橫縱坐標和都是N+1的時候這2個值的和都是N*N+1!問題就很容易解決了!
寫個大概:
int **array=NULL;
void main()
{
int n;
scanf("%d",&n);
array=(int**)malloc(n*sizeof(int*));
for(int i=0;i<n;i++)
{
array[i]=(int *)malloc(n*sizeof(int));
}
Testingval(n,n);
for(int i=0;i<n;i++)
{for(int j=0;j<n;j++)
printf("%d ",array[i][j]);
printf("\n");
}
free(array);
}
int Testingval(int a,int n)//a 表示n行中的第幾個。。n表示是N界矩陣!
{ if(n==1)
{ array[0][0]==1;
array[n][n]=n*n;
}
else
Testingval(a-1,n);
if(a%2)
{ int i=1;
array[0][a-1]=array[0][a-2]+1;
array[n-1][n-a]=n*n+1-array[0][a];
while(i<a)
{
array[i][a-1-i]=array[i-1][a-i+1]+1;
array[n-1-i][n-a+i]=n*n+1-array[i][a-i];
i++;
}
}
else
{int i=1;
array[a-1][0]=array[a-2][0]+1;
array[n-a][n-1]=n*n+1-array[a-1][0];
while(i<a)
{
array[a-1-i][i]=array[a-i+1][i-1]+1;
array[n-a+i][n-1-i]=n*n+1-array[a-1-i][i];
i++;
}
}
}
}
㈤ 怎樣用C語言輸出矩陣
定義二維數組作為矩陣,然後用兩個for循環列印出每個元素即可。
例如一個10x10的矩陣;
#define m 10
#define m 10
int a[m][n];
for(i = 0; i <m; i++){
for(j = 0; j < n; j++)
printf("%d",a[i][j]);
printf("\n");
}
㈥ C語言列印圖案的原理,麻煩詳細解釋,最好有配圖和文字解說,本人大一,正在困惑中
列印圖案有多種。
一、有規律的圖形,比如正方形,菱形,圓 ......等等。這些都可以找圖形規律(比如菱形上半部分依次下層比上層多2個字元),再通過簡單的參數循環,用單一字元列印出來(printf就可以了)。這種比較簡單,網上也有很多現成的代碼可以參考,比如:【引用】c語言列印規則圖形
二、復雜的圖像,比如一張照片,可以寫代碼把圖片轉換成2值圖(2值圖就是把圖片中每個像素用0或1數字矩陣來表示)然後再列印轉換後的01矩陣,這個比較復雜,網上也有很多現成的轉2值圖代碼。【引用】圖片二值化程序
當然你也可以直接用網上工具把圖片轉換成字元圖(就是貼吧里經常用的那種字元組成的圖案),然後保存到文件中,c語言寫讀取文件列印。(或者直接把字元全部賦值到printf中列印,但這樣就沒啥意思了)。【引用】在線圖片轉字元畫
㈦ C語言循環編程列印一個斜對角為1的矩陣求代碼
#include<stdio.h>
intmain()
{
unsignedn=0;
scanf("%ud",&n);
for(inti=0,b=1;i<n;++i){
for(intx=b++;x<n;++x)
printf("0");
printf("1");
for(ints=b-2;s;--s)
printf("0");
printf(" ");
}
return0;
}
㈧ c語言編程 輸入一個3*3的矩陣,列印該矩陣,並輸出該矩陣的對角元素
#include<stdio.h>
#defineM3
#defineN3
voidCreate_matrix(intmatrix[M][N],intm,intn){
inti,j;
printf("開始輸入矩陣內容(%d行%d列) ",m,n);
for(i=0;i<m;i++){
printf("輸入第%d行的%d個元素:",i+1,n);
for(j=0;j<n;j++)
scanf("%d",&matrix[i][j]);
}
}
voidPrint_matrix(intmatrix[M][N],intm,intn){
inti,j;
for(i=0;i<m;i++){
for(j=0;j<n;j++)
printf("%d ",matrix[i][j]);
printf(" ");
}
}
voidPrint_matrix_diagonal(intmatrix[M][N],intm,intn){
inti,j;
for(i=0;i<m;i++){
for(j=0;j<n;j++)
if(i==j||i+j==M-1)
printf("%d ",matrix[i][j]);
else
printf(" ");
printf(" ");
}
}
intmain(void){
intmatrix[M][N];
Create_matrix(matrix,M,N);
printf("====================================================== ");
printf("您輸入的矩陣為: ");
Print_matrix(matrix,M,N);
printf("對角線元素為: ");
Print_matrix_diagonal(matrix,M,N);
return0;
}
執行結果
㈨ C語言如何列印輸出一個NxN的矩陣,請注意矩陣的排列要求
#include<iostream.h>
voidmain()
{
intn,N,i,j,**a;
cout<<"N=";
cin>>N;
a=newint*[N];
for(n=0;n<N;)
a[n]=newint[N];
intmk1=0,mk2=0;
for(n=1,i=0,j=0;n<=N*N;){
a[i][j]=n;
if(i==0&&j<N-1&&mk1==0){
j++;
mk1++;
mk2=0;
n++;
continue;
}
if(j==0&&i<N-1&&mk2==0){
i++;
mk2++;
mk1=0;
n++;
continue;
}
if(i==N-1&&mk1==1){
j++;
mk2++;
mk1=0;
n++;
continue;
}
if(j==N-1&&mk2==1){
i++;
mk1++;
mk2=0;
n++;
continue;
}
if(mk1==1){
i++;
j--;
n++;
continue;
}
if(mk2==1){
i--;
j++;
n++;
continue;
}
}
for(intm=0;m<N;m++){
for(intn=0;n<N;n++){
cout<<a[m][n]<<"";
if(n==N-1)
cout<<endl;
}
}
for(n=0;n<N;n++)
delete[]a[n];
delete[]a;
}
大概就是這么個樣吧,你試試
㈩ 試用c語言編寫一個能輸出鋸齒波信號的單片機c51程序
程序加一個的LCD1602,你選擇使用
的#include <reg52.h>的/ /包含頭文件
?#包括<intrins.h>的
#定義UCHAR無符號的字元/ /宏定義
?#定義UINT無符號整數
?UCHAR I,J,N,Z,/ /定義全局變數
SBIT RS = P2 ^ 0; / /定義埠
?和SBIT RW = P2 ^ 1;
SBIT E = P2 ^ 2;
SBIT K = P2 ^ 7;
SBIT K1 = P2 ^ 6;
UCHAR代碼STR0 [] = {「正弦波」}; / /定義LCD1602顯示的字元數組
UCHAR代碼STR1 [] = {「三角波」};
UCHAR代碼字元串str2 [] = {「方波」};
?的UCHAR代碼表[3] [40] = / /定義的兩維陣列的波形
?{
??80H時,0x94的,0xa7,0xb9,0xca,0xd9,0xe7,0xf1,0XF8,是0xFD,
??是0xFD,0xff,則0XF8,0xf1,0xe7,0xd9,0xca,0xb9 0xa7,0x94的,
??80H時,0x6c,將0x55,0x46,0x35,$ 25,為0x18,0X0E,0X06,0X02,
??為0x00,0X02,0X06,0X0E,為0x18,$ 25,0x35,0x46,0x55??的,0x6c,
??80H時,0x8c,0x99,0xa6,0xb3,0XC0,含有0xCC,0xd9,0xe6,0xf2,
??為0xff,0xf2,0xe6,0xd9,含有0xCC,0XC0,0xb3,0xa6,0x99,0x8c,
??80H時,為0x73,0x66,0X5A,0x4d,0X40,地址0x33,0X26,0X1A,0X0D,
?為0x00,0X0D,0X1A,0X26,地址0x33,0X40,0x4d,為0x5A,0x66,為0x73,
??為0xff,0xff,則是0xFF,0xFF時,為0xff,0xff,則是0xFF,0xFF時,為0xff,0xff,則
??為0xff,0xff,則是0xFF,0xFF時,為0xff,0xff,則是0xFF,0xFF時,為0xff,0xff,則
??0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
??0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00
?};
?無效延遲(UINT Z)/ /延時程序
?{
????(Z,Z> 0,Z - )
???
??
??}
?}
?無效Write_command「(UCHAR CMD)/ / LCD1602寫命令程序
?{
??RS = 0; / /選擇指令寄存器
?RW = 0; / /寫操作
?E = 1 / /使能端
?P1 = CMD;
?延遲時間(1);
?E = 0;
LCD1602是不是很忙?延遲(10); / /延時
?}
?無效WRITE_DATA(UCHAR CMD)/ / LCD1602寫入數據的命令
?{
??RS = 1; / /選擇數據寄存器
?RW = 0; / /寫操作
?E = 1; / /結束
?P1 = CMD;
?延遲時間(1);
?E = 0;
LCD1602是不是很忙?延遲(10); / /延時
?}
?的無效Lcd_init()/ / LCD1602初始化程序
?{
????Write_command(0x38); / /設置16 * 5 * 7點陣8位數據介面
?Write_command(0X0C)/ / LCD1602打開顯示,不顯示游標
?Write_command(0X06)/ /讀或寫一個字元指針加1不動
?Write_command(0X80 +0 X00); / /設置數據地址指針
?}
?無效顯示器()/ / LCD1602顯示英語課程
?{
????Lcd_init();
?(我== 0)
???
?組(n = 0,N <13,N +)
???
???WRITE_DATA(STR0 [N]);
??}
????}
?否則,如果(我== 1)
?{
?組(n = 0,N <13,N +)
??
??WRITE_DATA(STR1 [N]);
?}
?}
?其他
?{
?組(n = 0,N <13,N +)
??
??WRITE_DATA(字元串str2 [N]);
?}
?}
?}
無效的主要()/ /主函數
?{
???顯示();
?而(1)
?{
??中for(j = 0; J <40; + +)
???
???P0 =表[I] [J];
???
??}
(k == 0)/ /切換程序??
???
????延遲時間(1);
???(k == 0);
????
????(K == 0)
?????
????+ +;
????如果(i == 3)= 0;
???顯示();
????}
????
???}
??????而(k == 0);
??}
?}
?}