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;
}
===============================================