c語言編寫程序
『壹』 c語言編寫一個程序
#include "stdio.h"
#define N 3
void Input(int p[][N]){
int i,j;
for(i=0;i<N;i++)
for(j=0;j<N;scanf("%d",p[i]+j++));
}
void Mrx_pro(int a[][N],int b[][N],int c[][N]){
int i,j,k;
for(k=0;k<N;k++)
for(i=0;i<N;i++)
for(c[k][i]=j=0;j<N;c[k][i]+=a[k][j++]*b[j][i]);
}
void Outmrx(int p[][N]){
int i,j;
for(i=0;i<N;i++){
for(j=0;j<N;printf("%6d",p[i][j++]));
printf(" ");
}
}
int main(int argc,char *argv[]){
int A[N][N]={1,2,3,4,5,6,7,8,9},B[N][N]={10,20,30,40,50,60,70,80,90},C[N][N];
Outmrx(A);
printf("x ");
Outmrx(B);
printf("= ");
Mrx_pro(A,B,C);
Outmrx(C);
printf(" ================== Please input matrix A... ");
Input(A);
printf("Please input matrix B... ");
Input(B);
printf(" ------------------ ");
Outmrx(A);
printf("x ");
Outmrx(B);
printf("= ");
Mrx_pro(A,B,C);
Outmrx(C);
return 0;
}
代碼格式和運行樣例圖片:
『貳』 用c語言編寫一個程序
應該多給幾個例子,n=10的時候如何處理?得到10,110,210,1210等等?
若是這樣的,試試下面程序:
/*
用c語言編寫一個程序:對於一個自然數n(n<=50),統計具有下列數字的個數,
並輸出所有符合條件的數字:自然數n,在n的左邊加上一個自然數,
但該自然數不能超過原數的一半;繼續按此規則進行處理,直到不能加自然數為止。
例如當n=6時,符合條件條件的是:6,16,26,36,126,136共6個;
當n=5時,符合條件的是:5,15,25,125.(0也是自然數,所以要加上本身)。。。
*/
#include
<stdio.h>
#include
<stdlib.h>
int
g_count=0;
void
fun(int
n,int
d,int
b)
{
int
i;
printf("%8d
",d);
g_count++;
if(g_count%8==0)
printf("\n");
for(i=1;i<=n/2;i++)
{
fun(i,i*b+d,b*10);
}
}
void
result(int
n)
{
int
t=n,d=n,b=10;
printf("result:\n");
g_count=0;
while(t>=10)
{
t/=10;
b*=10;
}
fun(n,d,b);
printf("\ntotal
%d
numbers\n\n",g_count);
}
int
main()
{
int
n;
printf("input
n(n<=50):\n");
while(scanf("%d",&n)!=EOF)
{
if(n>=0&&n<=50)
result(n);
printf("input
n(n<=50):\n");
}
return
0;
}
我這,若是放開n的限制,n=200的時候,計算花掉20多秒吧,總共205658個。
n=300的話,算了幾分鍾都沒結束。估計也得使用long
long數據類型了。使用遞歸不是最快的,重復計算多。
網路推薦也不求真相?有誤導了吧。
對於樓主新補充的提升,我的程序是這樣做的,滿足你的要求。
『叄』 用C語言編寫計算機程序
我對你提出的問題的題意的理解是編一個計算器程序。。。。。。。。。如果要是那樣子的話我給出代碼: #include int main() { char cp; int a, b; scanf("%d %c %d", &a, &cp, &b); if (cp == '-')printf("%d", a - b); else if(cp == '+')printf("%d", a + b); else if (cp == '*')printf("%d", a * b); else if (cp == '%')printf("%d", a % b); return 0; } 如果要知道這幾個符號在機器中的實現機理的話: +和-不說了*就相當於多做幾遍加法。而%是用位運算之類的方法進行運算的所以%的效率最低不知道是不是你的編譯器有問題我的程序運行起來是得15的你是否正確輸入了????
『肆』 用C語言編寫程序
程序就是讀取文件到數組,再將數組進行排序,最後寫入文件。
讀寫文件流程:fopen獲取文件流(根據讀寫需求,選擇參數,使用完必須調用fclose函數關閉),fscanf讀取文件內容,fseek控制文件流指針,fprintf寫入文件。
選擇排序:每個循環周期選出一個最值,交換一次。
下面是代碼(數組為動態數組):
#include <stdio.h>
#include <malloc.h>
int maxLen;//數組長度
int *read2Nums(char path[]);//讀取
int write2File(int *nums,char path[]);//寫入
void showNums(int *nums);
int px(int *nums,int flag);//選擇排序flag=1升序,flag=0降序
int main()
{
int *nums=NULL;
char rPath[]="c:\000.dat",wPath[]="c:\rank.dat";
if(!(nums=read2Nums(rPath))) return 1;
showNums(nums);
printf("數組升序排列: ");
if(px(nums,1)==-1) return 1;
showNums(nums);
printf("數組降序排列: ");
if(px(nums,0)==-1) return 1;
showNums(nums);
printf("寫入到文件路徑%s下(存在覆蓋,不存在新建) ",wPath);
if(write2File(nums,wPath)==-1) return 1;
printf("寫入成功! ");
return 0;
}
void showNums(int *nums)
{
int i;
if(nums) for(i=0,printf("文件內容: ");i<maxLen;printf("%d ",nums[i]),i++);
printf(" ");
}
int px(int *nums,int flag)
{
int i,j,n,temp;
if(!nums) return -1;
for(i=0;i<maxLen-1;i++)
{
n=i;
for(j=i+1;j<maxLen;j++)
{
if(flag && nums[n]>nums[j]) n=j;
if(!flag && nums[n]<nums[j]) n=j;
}
temp=nums[i],nums[i]=nums[n],nums[n]=temp;
}
return 1;
}
int write2File(int *nums,char path[])
{
int i;
FILE *fp=NULL;
if(!nums) return -1;
if(!(fp=fopen(path,"w"))) return -1;
//fseek(fp,SEEK_END);
for(i=0;i<maxLen;i++)
fprintf(fp,"%d ",nums[i]);
fclose(fp);
return 1;
}
int *read2Nums(char path[])
{
int *nums=NULL,*temp=NULL,cnt=0;
FILE *fp=NULL;
maxLen=10;
if(!(fp=fopen(path,"r"))) return NULL;
nums=(int *)malloc(sizeof(int)*maxLen);
if(!nums) return NULL;
while(fscanf(fp,"%d",&nums[cnt++])!=-1)
if(cnt==maxLen)//數組長度不夠擴展(每次擴展10長度)
{
maxLen=maxLen+10;
temp=(int *)realloc(nums,sizeof(int)*maxLen);
if(temp) return NULL;
nums=temp;
}
if(--cnt<maxLen)//函數結束前,刪除多餘地址,減少內存佔用
{
maxLen=cnt;
temp=(int *)realloc(nums,sizeof(int)*maxLen);
if(!temp) return NULL;
nums=temp;
}
fclose(fp);
return nums;
}
『伍』 C語言編寫程序
程序功能:錄入N個字元串(動態內存申請,內存范圍內不限長度個和字元個數)
輸入一個字元串,查找是否有相同,有輸出1,沒有輸出0。(先比較長度再比較內容)
字元串可以包含空格,代碼我都詳細備注了。
#include<stdio.h>
#include<malloc.h>
#include<conio.h>
#include<string.h>
typedefstructstrList
{
char*s;//一行字元串首地址
intclo;//列數
structstrList*next;//鏈表指針
}STRL;
STRL*inputStr(STRL*strlHead,STRL*strlTail,intff);
voidprSTRL(STRL*strlHead);
intfindSTRL(STRL*strlHead);
voidmeError(void*p);
intmain()
{
STRL*strlHead=(STRL*)malloc(sizeof(STRL)),*strlTail=NULL;
meError(strlHead);
strlHead->next=NULL;
strlTail=inputStr(strlHead,strlTail,0);
printf("錄入的字元串信息為:
");
prSTRL(strlHead);
while(1)
printf("查找結果:%d
",findSTRL(strlHead));
return0;
}
voidprSTRL(STRL*strlHead)//列印鏈表字元串
{
while(strlHead->next!=NULL)
{
printf("%s
",strlHead->next->s);
strlHead=strlHead->next;
}
printf("
");
}
intfindSTRL(STRL*strlHead)//查找字元串,先比較長度,再比較內容,找到返回1,未找到返回0
{
intflag=0;
STRLsFindHead,*sFindTail=NULL;
sFindHead.s=NULL;
sFindHead.next=NULL;
sFindTail=inputStr(&sFindHead,sFindTail,1);
if(!sFindTail)
return0;
while(strlHead->next!=NULL)
{
if(strlHead->next->clo==sFindTail->clo&&!strcmp(strlHead->next->s,sFindTail->s))
{
flag=1;
break;
}
strlHead=strlHead->next;
}
free(sFindTail->s);
free(sFindTail);
returnflag;
}
STRL*inputStr(STRL*strlHead,STRL*strlTail,intff)
//ff!=1錄入多行任意長度字元串,連續回車結束錄入,返回尾節點
//ff==1錄入單行任意長度字元串,返回尾節點
{
char*str=NULL,*temp=NULL,c;
intlen,add,cnt,flag=1;//len:字元串預設長度(包含結束符號);add:長度增長值,cnt:實際錄入的字元個數;flag=0結束錄入
STRL*strlNew=NULL;
if(ff!=1)
printf("輸入多行字元串(每輸入一行回車確認,不輸入直接回車結束錄入):
");
else
printf("輸入要查找的字元串:
");
while(flag)//換行
{
cnt=0;
len=10;
add=10;
str=(char*)malloc(sizeof(char)*len);
meError(str);
while(1)//輸入一行
{
temp=NULL;
c=getch();
if(c=='
'&&cnt>0)
{
strlNew=(STRL*)malloc(sizeof(STRL));
meError(strlNew);
strlNew->s=str;
strlNew->clo=cnt;
strlNew->next=NULL;
if(ff==1)//單行錄入模式
flag=0;
//保存錄入並在多行模式下開始錄入新的一行
if(!strlHead->next)
strlHead->next=strlNew;
else
strlTail->next=strlNew;
strlTail=strlNew;
printf("
");
break;
}
if(c=='
'&&cnt==0)//結束錄入
{
if(ff==1)
returnNULL;
flag=0;
free(str);
break;
}
if(c!='
'&&cnt>=len-1)//一行字元串內存已滿,擴充內存
{
len+=add;
temp=(char*)realloc(str,sizeof(char)*len);
meError(temp);
str=temp;
}
str[cnt++]=c;
str[cnt]=0;
printf("%c",c);
}
}
returnstrlTail;
}
voidmeError(void*p)//內存申請失敗
{
if(p==NULL)
{
printf("異常:內存申請失敗!回車結束程序!
");
while(getch()!='
');
exit(0);
}
}
『陸』 C語言程序編寫
C語言使用 Xcode。Xcode 是由Apple官方開發的IDE,支持C、C++、Objective-C、Swift等
『柒』 如何編寫C語言程序
准備材料
windows電腦、VC++(DEV_C++)
1.打開桌面上的DEV_C++,進入如下界面:
『捌』 C語言編程程序
#include <stdio.h>
void main()
{
int year,month,day,s=0,a,i;
int m[11] = {31,28,31,30,31,30,31,31,30,31,30,31};//建立一維數組,放入每個月的天數
printf("Please input year-month-day : ");
scanf("%d-%d-%d",&year,&month,&day);//輸入年月日
if(month > 2 && ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0)))//判斷閏年且月份大於2
a=1;//如果閏年且月份大於2,在天數上加1
else
a=0;//不是則不加
for(i = 0 ; i < month - 1 ; i ++)
s = s + m[i];//把輸入月份之前的每個月天數相加;比如輸入4月,則此時s=31+28+31
printf("That is the %d(th) day of %d.
",s+day+a,year);//所求值為s+day+a
『玖』 用C語言編寫程序
這個問題好簡單的啊。記MARK下,晚上有空了給你簡單寫寫吧。
=======================
樓下的真快啊,兩位寫得都不錯,不過最大的問題是都沒有做輸入驗證。我簡單寫了下,和各位分享一下。
=======================
代碼在g++編譯器下驗證通過,如果在VC++環境下「fflush(stdin)」這個命令不能清空輸入緩存,需用「while(getchar()!='\n')」這段代碼代替。
=======================
先展示下結果:
請輸入第1個學生的姓名:tt
請輸入第1個學生的學號:001
請輸入第1個學生的英文成績:abc
請重新輸入第1個學生的英文成績(0-100):99
請輸入第1個學生的數學成績:abc
請重新輸入第1個學生的數學成績(0-100):90
請輸入第1個學生的C語言成績:ee
請重新輸入第1個學生的C語言成績(0-100):70
請輸入第1個學生的體育成績:60
請輸入第2個學生的姓名:gg
請輸入第2個學生的學號:002
請輸入第2個學生的英文成績:99
請輸入第2個學生的數學成績:88
請輸入第2個學生的C語言成績:77
請輸入第2個學生的體育成績:66
請輸入第3個學生的姓名:hh
請輸入第3個學生的學號:003
請輸入第3個學生的英文成績:55
請輸入第3個學生的數學成績:66
請輸入第3個學生的C語言成績:77
請輸入第3個學生的體育成績:88
name sno English Math Cgrade PEgrade avg
tt 001 99 90 70 60 79.750000
gg 002 99 88 77 66 82.500000
hh 003 55 66 77 88 71.500000
=======================================
結果文件:
name sno English Math Cgrade PEgrade avg
tt 001 99 90 70 60 79.750000
gg 002 99 88 77 66 82.500000
hh 003 55 66 77 88 71.500000
========================================
源代碼:
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 3
typedef struct student
{
char name[20];
char sno[20];
int English;
int Math;
int Cgrade;
int PEgrade;
}student;
int main()
{
FILE *fp = NULL;
student stu[MAXSIZE];
float avg[MAXSIZE];
int i;
//enter the students info
for(i=0;i<MAXSIZE;i++)
{
printf("\n請輸入第%d個學生的姓名:",i+1);
scanf("%s",stu[i].name);
fflush(stdin);
printf("\n請輸入第%d個學生的學號:",i+1);
scanf("%s",stu[i].sno);
fflush(stdin);
printf("\n請輸入第%d個學生的英文成績:",i+1);
while(1)
{
scanf("%d",&stu[i].English);
if( stu[i].English <= 100 && stu[i].English >=0 )
break;
printf("\n請重新輸入第%d個學生的英文成績(0-100):",i+1);
fflush(stdin);
}
printf("\n請輸入第%d個學生的數學成績:",i+1);
while(1)
{
scanf("%d",&stu[i].Math);
if( stu[i].Math <= 100 && stu[i].Math >=0 )
break;
printf("\n請重新輸入第%d個學生的數學成績(0-100):",i+1);
fflush(stdin);
}
printf("\n請輸入第%d個學生的C語言成績:",i+1);
while(1)
{
scanf("%d",&stu[i].Cgrade);
if( stu[i].Cgrade <= 100 && stu[i].Cgrade >=0 )
break;
printf("\n請重新輸入第%d個學生的C語言成績(0-100):",i+1);
fflush(stdin);
}
printf("\n請輸入第%d個學生的體育成績:",i+1);
while(1)
{
scanf("%d",&stu[i].PEgrade);
if( stu[i].PEgrade <= 100 && stu[i].PEgrade >=0 )
break;
printf("\n請重新輸入第%d個學生的體育成績(0-100):",i+1);
fflush(stdin);
}
}
for(i=0;i<MAXSIZE;i++)
{
avg[i] = (stu[i].English + stu[i].Math + stu[i].Cgrade + stu[i].PEgrade ) / 4.0;
}
fp=fopen("a.txt","w");
fprintf(fp, "name\tsno\tEnglish\tMath\tCgrade\tPEgrade\tavg\n");
printf( "name\tsno\tEnglish\tMath\tCgrade\tPEgrade\tavg\n");
for( i = 0; i < MAXSIZE; i++ )
{
fprintf(fp, "%s\t%s\t%d\t%d\t%d\t%d\t%f\n", stu[i].name, stu[i].sno, stu[i].English, stu[i].Math, stu[i].Cgrade, stu[i].PEgrade, avg[i]);
printf("%s\t%s\t%d\t%d\t%d\t%d\t%f\n", stu[i].name, stu[i].sno, stu[i].English, stu[i].Math, stu[i].Cgrade, stu[i].PEgrade, avg[i]);
}
fclose(fp);
return 0;
}
===============================================