c语言答案

更新时间:2024-04-21 10:48:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

//1.1编写一程序,在屏幕上输出如下内容: // X | X | X //---+---+--- // | | //---+---+--- // 0 | 0 | 0

#include void main() { printf(\X | X | X\\n\ //注意转义字符\\n的用法 printf(\ printf(\ | |\\n\ printf(\ printf(\}

//1.2输出\语句 #include void main() { printf(\ }

//2.1编写一程序,接受用户输入的两个整数,并计算它们的和、差、积、商,程序运行结果应如下所示。

//注意,尖括号部分表示用户输入数据或要被替换的输出内容,尖括号本身并不需要输入或输出。

//多使用几组整数尝试一下,你发现了什么?

//The program gets two integers,and computes their sum,difference,product and quotient. //The first number:<第一个整数在此输入> //The second number:<第二个整数在此输入> //Results as follows:

//<第一个整数>+<第二个整数>=<和> //<第一个整数>-<第二个整数>=<差> //<第一个整数>*<第二个整数>=<积> //<第一个整数>/<第二个整数>=<商> #include void main() { int a,b; printf(\

computes their sum,difference,product and

quotient.\\n\ printf(\ scanf(\ printf(\ scanf(\ printf(\ printf(\ printf(\ printf(\ printf(\ //做除法时要注意,除得的结果是实数 }

//2.2输入半径r的值,求出圆周长,圆面积 #include #define PI 3.14 void main() { int r; float zhouchang,mianji; printf(\ scanf(\ zhouchang=2*PI*r; mianji=2*PI*r*r; printf(\ printf(\}

//3.1如何实现下述输出要求?

//A.输出整数1234,输出共占8位,数据左对齐。

//B.输出整数1234,输出共占10位,数据右对齐。

//C.输出十六进制整数0xFFDE3C02,输出共占8位,数据左对齐。

//D.输出十六进制整数0xFFDE3C,输出共占8位,数据右对齐,前补0。

//E.输出浮点数10.36,输出共占6位,数据右对齐。

//F.输出浮点数123.4567890,输出共占12位,精度6位,数据右对齐。

//G.输出浮点数123.4567890,精度3位,数据左对齐。 #include #define PI 3.14

void main() { printf(\ printf(\ printf(\ printf(\ printf(\ printf(\ printf(\}

//3.2编制程序,接受用户输入的数值,输出以该值为半径的圆面积,

//以该值为半径的球体表面积与体积,pi取值3.1415926536,结果保留10位有效数字。 #include

#define PI 3.1415926536 void main() { float r,yuan,qiu,tiji; //分别为半径,圆面积,球面积,球体积 printf(\ scanf(\ yuan=PI*r*r; qiu=4*PI*r*r; tiji=4.0/3*PI*r*r*r; printf(\n,qiu,tiji); }

//4.1给出一个百分制成绩,要求输出成绩等级'A','B','C','D','E'。

//90分以上为'A',80~89分为'B',70~79分为'C',60~69分为'D',60分以下为'E'。 //分别用if和switch语句实现。 #include void main() { int score; printf(\ scanf(\ switch(score/10) { case 10: case 9:printf(\ case 8:printf(\

case 7:printf(\

case 6:printf(\ default:printf(\ } }

/*以下为if结构 #include void main() { int score; printf(\ scanf(\ if(score>=90) printf(\ else if(score>=80) printf(\ else if(score>=70) printf(\ else if(score>=60) printf(\ else printf(\}*/

//5.1使用循环结构打印下述图形,打印行数n由用户输入。图中每行事实上包括两部分,中间间隔空格字符数m也由用户输入。 // * ********* // *** ******* // ***** ***** // ******* *** // ********* *

#include void main() { int n; //行数 int i,j; //i为行的循环变量,j是普通的循环变量 printf(\ scanf(\ for(i=1;i<=n;i++) //外层循环i

for(i=1;i<9;i++) 控制行数

{ printf(\ for(j=1;j<=n-i;j++) printf(\ printf(\---------\\n\ for(j=1;j<=2*i-1;j++) //输出星号 for(i=1;i<=9;i++) //此双循 printf(\环结构为本题核心

{ printf(\ for(j=1;j<=10;j++) //输出中间 for(j=1;j<=i;j++) 的空格

printf(\ printf(\

printf(\ for(j=2*(n-i+1)-1;j>=1;j--) //输出 } 星号

printf(\ printf(\ printf(\------\\n\ } } } //5.3存在自然数,其所有小于自身的因子之//5.2编制程序,按照下述格式打印九九乘法和等于该数,这样的数称为完数。 表。 //设计算法,判断某个给定的自然数n是否//Nine - by - nine Multiplication Table 为完数,要求具有容错处理功能。 //-------------------------------------------------------#include

--------------- void main() // 1 2 3 4 5 6 7 { 8 9 int n; //------------------------------------------------------- int sum=0; //sum保存自然数n的因子

--------------- 之和 //1 1 int i; //2 2 4 printf(\//3 3 6 9 scanf(\//4 4 8 12 16 for(i=1;i

--------------- printf(\#include } void main() //6.1按照下述格式打印2009年5月日历: { //Calander 2009-5 int i,j; //------------------------------------------------------ printf(\- by - nine Multiplication //Su Mo Tu We Th Fr Sa Table\\n\//------------------------------------------------------ printf(\// 1 2 ------\\n\// 3 4 5 6 7 8 9 printf(\ \\n \//10 11 12 13 14 15 16

//17 18 19 20 21 22 23 //24 25 26 27 28 29 30 //31

//------------------------------------------------------

#include void main() { int i; printf(\ printf(\n\ printf(\Su Mo Tu We Th Fr Sa\\n\ printf(\n\

for(i=0;i<5;i++) printf(\ \ for(i=1;i<=31;i++) { printf(\ if(i%7==2) printf(\ } printf(\--\\n\}

//6.2打印所有100至999之间的水仙花数。所谓水仙花数是指满足其各位数字立方和为该数字本身的整数。 #include void main() { int i,j,k,m; //i,j,k分别表示百位、十位、个位数字 for(m=100;m<1000;m++) { i=m/100; j=(m-i*100)/10; k=(m-i*100-j*10); if(m==i*i*i+j*j*j+k*k*k) printf(\ } }

//6.3接受用户输入的正整数n,计算f(n)=1+1/2!+1/3!+...+1/n!的值。 #include void main() { int n,p=1,i; float sum=0; printf(\ scanf(\ for(i=1;i<=n;i++) { p=p*i; sum+=1.0/p; } printf(\ }

//6.4接受用户从键盘输入的年份值与月份值,打印2009年以后(含)任意月份的日历,2009年前的拒绝打印。 #include void main() { int i; //循环变量 int j,day; //j表示周一的位置,day表示月的天数 int year,month,run; //输入的年,月份,run为闰年的标识 long x=0,x1=0,x2=0; //输入的年月之前共有多少天,x为总天数,x1是之前年天数,x2是当年前面月天数 printf(\input year:\ //输入年份 printf(\input

month:\输入月份 /////////////////////////////////////// ///////////求得输入的年月之前有多少天——x=x1+x2,x1是之前年天数,x2是当年前面月天数 /////////////////////////////////////// for(i=2009;i

if((i%4==0&&i0!=0)||(i@0==0)) //如果i年是闰年 x1=x1+366; else x1=x1+365; } if((year%4==0&&year0!=0)||(year@0==0)) run=1; else run=0; for(i=1;i

case 1:j=5;break;

case 2:j=6;break; case 3:j=7;break; case 4:j=1;break; case 5:j=2;break; case 6:j=3;break; } ////////////////////////////////////////定输入的月份有多少天 if(month==4||month==6||month==9||month==11) day=30; else { if(month!=2) day=31; else {if(month==2&&run==1) //2月份并且是闰年 day=29; else day=28; } } //////////////////////////////////////////////////确定j和day后,开始输出 for(i=1;i

//7.1编程实现用数组打印Fibonacci数列的前20项。

#include void main() { long a[30] , i ; a[0] = a[1] = 0 ; a[2] = 1 ;

for( i = 3 ; i < 21 ; i ++ ) a[i] = a[i-1] + a[i-2] + a[i-3] ; for( i = 0 ; i < 20 ; i ++ ) { if( i != 0 && i%5 == 0 ) printf(\ printf( \ } }

//7.2编程实现从键盘输入的一组数中找出其中最大值和最小值。 #include void main() { int a[10],max,min,i; for(i=0;i<10;i++) { scanf(\ } max=min=a[0]; //max min赋初值 for(i=0;i<=9;i++) { if(maxa[i]) min=a[i]; } printf(\}

//7.3编程实现用一、二维数组分别输出杨辉三角

#include //用二维数组输出杨辉三角形 void main() { int a[10][10],i,j; for(i=0;i<10;i++) //将杨辉三角形中值为1的数输入 { a[i][i]=1; a[i][0]=1; } for(i=2;i<10;i++) //从第3行第2列开始,计算2维数组中的值,外循环控制行数 for(j=1;j<=i-1;j++) //内循环控制列,结束条件根据规律正好是行数减1 a[i][j]=a[i-1][j]+a[i-1][j-1]; for(i=0;i<10;i++) //输出2维数组 for(j=0;j<10;j++) { printf(\ if(i

#include //用一维数组输出杨辉三角形 void main() { int a[10]={1},b[10]={1}; int i,j; for(i=0;i<10;i++) //外层循环,控制输出行数,确定每行数是什么(也相当于列了),然后输出。 { for(j=1;j<=i;j++) //确定每行的数组元素 a[j]=b[j]+b[j-1]; for(j=1;j<=i;j++) //保存到数组b中做备份 b[j]=a[j]; for(j=0;j<=i;j++) //输出这些数组元素 printf(\ printf(\ //回车 } } */

//8.1编程实现将二维数组行列元素互换。

#include void main() { int a[3][4],b[4][3]; int i,j; for(i=0;i<3;i++) //对数组a赋值 for(j=0;j<4;j++) scanf(\ for(i=0;i<3;i++) //得到数组b for(j=0;j<4;j++) b[j][i]=a[i][j]; for(i=0;i<4;i++) //输出数组b { for(j=0;j<3;j++) printf(\ printf(\ } }

//8.2编程实现求二维数组中最大元素值及其行号、列号。

#include void main() { int a[3][4],max,hang,lie; int i,j; for(i=0;i<3;i++) //对数组a赋值 for(j=0;j<4;j++) scanf(\ max=a[0][0]; hang=0; lie=0; //赋初值 for(i=0;i<3;i++) for(j=0;j<4;j++) if(max

//8.3假设有一对兔子,一个月后成长为大兔子,从第二个月开始,每对大兔子生一对小兔子。不考虑兔子的死亡,设计算法求第n个月的兔子总数。 //此题是杨辉三角形的变型题

#include //用一维数组输出杨辉三角形 void main() { int a[10]={1},b[10]={1}; int i,j,sum=0,n; scanf(\ for(i=0;i

//9.1编写一个函数max,用于比较两个整数的大小。

#include int max(int x,int y) { return x>y?x:y; }

void main() { int a,b; scanf(\ printf(\}

//9.2编写一函数IsPrime,判断某个大于2的正整数是否为素数 #include #include int IsPrime(int x)

{int i;

for(i=2;i<=sqrt(x);i++) if(x%i==0) return 0; return 1; }

void main() { int x;

scanf(\ if(IsPrime(x)) printf(\ else printf(\}

//10.1编写一函数gcd,求两个正整数的最大公约数

//分析:用这两个数的乘积再除以它们的最大公约数就会得到他们的最小公倍数。所以问题的关键就变成了求两个数的最大公约数。代码如下: #include \main() { int p,r,m,n,temp; printf(\ scanf(\ if(m>n) /*将m和n比较大的数字放在n中*/ { temp=n; n=m; m=temp; } p=m*n; /*计算两个数的乘积,为了在后面求最小公倍数*/ while(m!=0) /*用循环和求余数的方法计算m和n的最小大公约数,放在n中*/ { r=n%m; n=m; m=r; }

printf(\

printf(\ /*输出最小公倍数*/ }

//10.2使用递归的方法实现求n!的函数f(n) #include long fun(long n) { long s; if(n==1) return 1; /*递归结束条件为n=1*/ else { s=n*fun(n-1); return s; } }

void main() { int n; printf(\ scanf(\ printf(\ }

//11.1编写通用的排序的函数,实现冒泡、选择排序方法 #include

void maopao(int a[],int n) //冒泡排序函数 { int i,j,t; for(i=0;i<=n-1;i++) for (j=0;ja[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } }

void xuanze(int a[],int n) //选择排序函数 { int i,j,t;

for(i=0;ia[j]) { t=a[i]; a[i]=a[j]; a[j]=t; } }

void main() { int a[10],i; for(i=0;i<10;i++) scanf(\ maopao(a,10); //xuanze(a,10); for(i=0;i<10;i++) printf(\}

//11.2给定一个自然数n,求其各位数字之和,重复上一过程,一直得到1~9之间的数。 //例如数1234的各位数字之和为10,继续计算,得到10的各位数字之和为1。

//没有用子函数,而是通过goto语句来反复运算

//其实反复调用同样一种算法就是递归,即自己调用自己,通过goto的方式了解了这个原理以后,再写成递归函数的形式就容易些了

#include void main() { long n; //输入的数 int s; //各位数之和 printf(\input x(1——4294967295):\ scanf(\L1: s=0; while(n) { s+=n; n/=10; } if(s>=10)

{

n=s; printf(\ //输出每次求得得和,可做验证用 goto L1; }

printf(\ }

/*递归方法

#include

int fun(long n) { int s=0; s=0; while(n) { s+=n; n/=10; } if(s<10) return s; else return fun(s); }

void main() { long n; //输入的数 printf(\input x(1——4294967295):\ scanf(\ printf(\} */

//11.3题目:编写一掷骰子游戏,首先由计算机生成一个随机数,

//然后接受用户输入的字符串\命令后生成用户的随机数(模拟用户掷了一次骰子), //比较它们的大小,如果用户得到的随机数小于计算机得到的,则输出用户输了,否则输出用户赢了。 #include #include

#include void main() { int jsj; //计算机将生成的随机数

int ren; //人产生的随机数 srand((unsigned)time(NULL)); jsj=rand()+2; //既然是骰子,假设2颗,点数就是2到12,那么y=12,x=2,即rand()%(Y-X+1)+X; printf(\point:%d(go or not?)\ if(getchar()=='g') //如果输入的是字母g { ren=rand()+2; printf(\ point:%d\\n\ if(ren>jsj) printf(\ else printf(\ } }

//11.4编写一函数,返回1-52之间的随机数,模拟发不含大小王牌的扑克牌,将生成的随机数映射为每张扑克牌。

//按照花色(梅花、方块、红桃、黑桃)和大小(2~10、J、Q、K、A)顺序进行映射。 #include #include #include int fun() { srand((unsigned)time(NULL)); return rand()R+1; //生成随即机数1——52 }

void main() { int n,p,i,j; n=fun(); i=n%4; //余得得数就是 1 2 3 0中得一个 switch(i) //将余得的数对应成正确得花色对应ASCII码 { case 1:i=5;break; //草花 case 2:i=4;break; //方片 case 3:i=3;break; //红桃 case 0:i=6; //黑桃 } j=(n-1)/4+2; //将1-52映射成扑克牌 2、3、4、5...14 p=j; switch(p) //将11、12、13、14映射成J Q K J { case 11: p='J';break; case 12: p='Q';break; case 13: p='K';break; case 14: p='A'; } printf(\ if(j<=10) printf(\ else printf(\}

//11.5面向小学1~2年级学生,随机选择两个整数和加减法形成算式要求学生解答。 //要求(1)只出10道题,每题10分,程序结束时显示学生得分;

//(2)确保算式没有超出1~2年级的水平,只允许进行50以内的加减法,不允许两数之和或之差超出0~50的范围,负数更是不允许的;

//(3)每道题学生有三次机会输入答案,当学生输入错误答案时,提醒学生重新输入,如果三次机会结束则输出正确答案;

//(4)对于每道题,学生第一次输入正确答案得10分,第二次输入正确答案得7分,第三次输入正确答案得5分,否则不得分; //(5)当学生输入了正确得数后,随机显示评价结果,例如\、\,\the answer\等,

//若答案错误,则按照\answer is ?\输出答案。

#include #include #include

//////////////////////////////fun2:计算学生每题得分///////////////////////////////////////////////// int fun2(int a3) { int x; //x为学生输入的结果 scanf(\ if(x==a3) return 10; else { printf(\ scanf(\ if(x==a3) return 7; else { printf(\ scanf(\ if(x==a3) return 5; else return 0; } } }

//////////////////////////////fun1:确定运算是加法还是减法以及相应标准答案/////////////////////////// int fun1(int a1,int a2) { int a3; //标准答案; char bln; //加法或减法的标识 if(rand()%2==1) //只产生0或1,不妨设置1为加法,0为减法 { a3=a1+a2; bln='+'; } else {

a3=a1-a2;

bln='-'; } printf(\ return fun2(a3); }

//////////////////////////////////////////////////////////////////////////////////////////////////// void main() { int a1,a2,i,sum=0; //a1 a2为计算机随机生成的数,sum为最终学生得分。 srand((unsigned)time(NULL));//做种 for(i=1;i<=10;i++) { a1=rand()&; //产生第一个随机数,根据题目要求,这个数要>=0,<=25 a2=rand()&; while(a1

//12.1编写函数,求包含n个元素的整数数组中元素的平均值。要求在函数内部使用指针操纵数组元素。 #include float fun(int *p) { float sum=0; int *q=p; for(;p

void main()

{ int a[10]; int i; float ave; for(i=0;i<10;i++) scanf(\ ave=fun(a); //调用fun函数计算平均值,参数传递方式为:数组名做实参,传递的是地址 printf(\}

//12.2题目:独立实现标准字符串库的strcmp函数。

//题意是编写一个自定义函数,实现strcmp函数的功能,而不是让我们去调用strcmp函数。

//那么做题之前就要弄清楚strcmp的原型及含义,查书后附录的函数表可找到。 #include

int fun(char *p,char *q) { int i; for(i=0;(*(p+i)!='\\0')||(*(q+i)!='\\0');i++) { if(*(p+i)>*(q+i)) return 1; if(*(p+i)<*(q+i)) return -1; } return 0; }

void main() { char a[100]; char b[100]; int x; printf(\ gets(a); printf(\ gets(b); x=fun(a,b); //数组名做实参,传递的是地址 printf(\}

//13.2接受用户输入的整数n,随机生成n个0~100间的整数

//使用动态数组存储所有元素,分别统计0~59,60~84,85~100之间的元素个数。 #include #include #include #include

int fun(int *p,int n,int x,int y) //参数分别是:数组、元素个数、下限、上限 { int i,num=0; for(i=0;i=x&&*(p+i)<=y) num++; return num; }

void main() { int n,i,num1,num2,num3; int *p=NULL; printf(\ scanf(\ p=(int *)malloc(sizeof(int)*n); //生成动态数组(生成一段连续空间,p指向其首地址) srand((unsigned)time(NULL)); for(i=0;i

//14.1给定字符串s,其内容为英语长句,其中包含英语单词、标点符号、空格等内容 //每个英语单词使用标点符号、一个或多个

空格分隔。将英语长句分隔成英语单词序列输出,并输出其单词数目。 #include #include

int fun(char *s) { char *p=NULL,*q=NULL; //p表示每个单词的初始位置,q表示每个单词的结束位置 int num=0; p=q=s; while(*p!='\\0') //p从字符串s的初始位开始,直到s最后。 { for(;p='a'&&*p<='z')||(*p>='A'&&*p<='Z')) { num++; break; } for(q=p;(*q>='a'&&*q<='z')||(*q>='A'&&*q<='Z');q++) //确定q的位置,q是每个单词结束位置 ; for(;p

void main() { char s[100]; puts(\ gets(s); printf(\}

//14.2有3个学生,每个学生的数据包括学

号、三门课的成绩,

//要求用input函数实现从键盘输入学生数据,用average函数求每个人的平均分 //用output函数打印学生数据及平均成绩。 #include

struct student //定义全局结构体类型student { int number; float score[3]; };

float average(struct student p) //计算平均值函数,形参是结构体变量 { int i; float sum=0; for(i=0;i<3;i++) sum=sum+p.score[i]; return sum/3; }

void output(struct student *stu) //输出结构体函数,形参是结构体指针 { int i,j; printf(\ for(i=0;i<3;i++) { printf(\ for(j=0;j<3;j++) printf(\ printf(\

ave=%.2f\\n\题目中说用output函数输出平均值,而平均值又让编写成一个函数,那么这里采用out中调用average函数。 } printf(\}

void input(struct student *stu) //对结构体数组赋值函数,形参是结构体指针 {int i,j;

for(i=0;i<3;i++)

{printf(\

scanf(\//建立链表 printf(\{ for(j=0;j<3;j++) struct stu *p,*q; scanf(\ q=(struct stu*)malloc(sizeof(struct stu)); } //分配空间 } printf(\void main() scanf(\{ printf(\ struct student stu[3]; scanf(\

printf(\//定义结构体数组

input(stu); scanf(\

head=q; //数组名做参数,传递的是地址

output(stu); while(q->grade!=0) } //当分数为0时结束

{ //14.3静态链表的建立,有三个学生,包括

p=(struct stu*)malloc(sizeof(struct 学号(sno char(8)),姓名(sname char(20)),

stu)); 分数(grade float[]),

printf(\//定义结构体类型数组存学生信息,使用链 scanf(\表所有学生,实现链表的输入输出。

printf(\//静态的书上有原题目,我写成动态的了, scanf(\用子函数的方式实现

#include printf(\#include scanf(\#include q->next=p; struct stu q=p;

} //定义全局结构体

{ q->next=NULL; char sno[8]; return head; char sname[20]; //返回链表的头指针 float grade; } struct stu *next; ////////////////////////////////////////////////////////// } ; void print(struct stu *head) //////////////////////////////////////////////////////// //输出链表 void main( ) { { struct stu *p; struct stu *creat(struct stu *); //设游标指针 void print(struct stu*); p=head; struct stu *head; //取得链表的头指针 head=NULL; printf(\ head=creat(head); while(p->next!=NULL) print(head); { } printf(\///////////////////////////////////////////////////////// printf(\struct stu *creat(struct stu*head) printf(\

printf(\ p=p->next; } }

//14.5递归方法实现快速排序算法。快速排序的基本原理是:

//(1)选择一个充当划分较小和较大元素的界限的元素,称其为基准值。

//(2)将数组中的元素重新排列使得较大元素向数组尾端移动,较小元素向数组首端移动。

//如此在形式上将数组分成两部分,界限左边元素都小于基准值,而界限右边元素都大于基准值,此过程称为分解。

//在分解完成后,充当界限的数组首元素可能需要和中间某元素对调。

//(3)排序两个子数组中元素。因为基准值左边元素都小于基准值右边元素,所以将两个子数组分别排序后即使得整个数组有序。 #include #define N 10 void main() { void fun(int *,int,int); int i,a[N]; printf(\ for(i=0;i

void fun(int *p,int left,int right) { int i=left,j=right,middle,temp; middle=p[(left+right)/2]; //求中间值 while(i<=j) //如果两边扫描的下标交错,就停止 { while((p[i]

i++; while((p[j]>middle) && (j>left))//从右扫描小于中值的数 j--; if(i<=j) //找到了一对值,交换 { temp=p[j]; p[j]=p[i]; p[i]=temp; i++; j--; } } if(lefti) //当右边部分有值(right>i),递归右半边 fun(p,i,right); }

本文来源:https://www.bwwdw.com/article/imxp.html

Top