资源描述
实验二参考答案
1.输入两个整型数字,输出他们的和。
#include<stdio.h>
main()
{
int a, b, sum;
scanf(“%d%d”, &a, &b);
sum=a+b;
printf(“a+b=%d”, sum);
}
2.输入两个实型数,输出他们的和与乘积。
#include<stdio.h>
main()
{
float a, b, sum, product;
scanf(“%f%f”, &a, &b);
sum=a+b;
product=a*b;
printf(“a+b=%5.2f, a*b =%5.2f”, sum, product);
}
3.求方程的根(设)(其中a,b,c的值由键盘输入)。
#include<stdio.h>
#include<math.h>
main()
{
float a, b, c, dt, x1, x2;
scanf(“%f%f%f”, &a, &b, &c);
dt=sqrt(b*b-4*a*c);
x1=(-b+dt)/(2*a);
x2=(-b-dt)/(2*a);
printf(“x1=%5.2f, x2 =%5.2f”, x1, x2);
}
4.鸡兔同笼,已知鸡兔总头数为h,总脚数为f,求鸡兔各多少只?(h和f的值由键盘输入,输出鸡和兔的头数)
#include<stdio.h>
main()
{
int h, f, x,y;
scanf(“%d%d”, &h, &f);
x=2*h-f/2;
y=f/2-h;
printf(“x=%d, y =%d”, x, y);
}
实验三参考答案
1.输入三个数a、b、c,要求按由小到大的顺序输出。
#include<stdio.h>
main()
{
float a,b,c,t;
scanf(“%f,%f,%f”,&a,&b,&c);
if(a>b)
{
t=a; a=b; b=t;
}
if(a>c)
{
t=a; a=c; c=t;
}
if(b>c)
{
t=b; b=c; c=t;
}
printf(“%f,%f,%f”,a,b,c);
}
2.编写程序,输入三角形三边 a、b、c,判断a、b、c能否构成三角形,若不
能则输出相应的信息,若能则判断组成的是等腰、等边、直角还是一般三角形。
(1)
#include<stdio.h>
main()
{
float a,b,c,t;
scanf(“%f,%f,%f”,&a,&b,&c);
if(a>b)
{t=a; a=b; b=t;}
if(a>c)
{t=a; a=c; c=t;}
if(b>c)
{t=b; b=c; c=t;}
if(a+b>c)
{
if(a==b||b==c)
{
if(a==c) printf(“等边三角型”);
else if(c*c==a*a+b*b) printf(“等腰直角三角形”);
else printf(“一般等腰三角形”);
}
else if(c*c==a*a+b*b) printf(“一般直角三角形”);
else printf(“一般三角形”);
}
else printf(“不构成三角形”);
}
(2)
#include<stdio.h>
main()
{
float a,b,c,t;
scanf(“%f,%f,%f”,&a,&b,&c);
if(a>b)
{t=a; a=b; b=t;}
if(a>c)
{t=a; a=c; c=t;}
if(b>c)
{t=b; b=c; c=t;}
if(a+b<=c) printf(“不构成三角形”);
else if(a==b && b==c && a==c) printf(“等边三角型”);
else if(a==b && c*c==a*a+b*b) printf(“等腰直角三角形”);
else if (a==b) printf(“一般等腰三角形”);
else if(c*c==a*a+b*b) printf(“一般直角三角形”);
else printf(“一般三角形”);
}
3.编程实现下列函数
x (x<1)
y= 2x-1 ()
|3x-11| ()
#include<stdio.h>
#include<math.h>
main()
{
int x,y;
printf("input x=:");
scanf("%d",&x);
if(x<1) y=x;
else if(x<10) y=2*x-1;
else y=abs(3*x-11);
printf("x=%d y=%d\n",x,y);
}
4.编写程序,输入一百分制成绩,对应输出等级A、B、C、D、E,90分以上为A,80分—89分为B,70分—79分为C,60分—69分为D,60分以下为E。
方法一:用if语句
#include<stdio.h>
main()
{
float score;
char grade;
scanf("%f", &score);
if(score>100||score<0) printf("\ninput error!");
else
{
if(score>=90) grade='A';
else if(score>=80) grade='B';
else if(score>=70) grade='C';
else if(score>=60) grade='D';
else grade='E';
}
printf("the student grade=%c \n", grade);
}
方法二:用switch语句。
注意,case后的表达式必须是一个常量表达式,所以在以用switch语句之前,必须把0~100之间的成绩分别化成相关的常量。所有A(除100以外),B,C,D类的成绩的共同特点是十位数相同,此外都是E类。则由此可得把score除十取整,化为相应的常数。
#include<stdio.h>
main()
{
float score,
int s;
char grade;
scanf("%f", &score);
s=score/10;
if(s<0||s>10) printf("\ninput error!");
else
{
switch (s)
{
case 10:
case 9: grade ='A'; break;
case 8: grade ='B'; break;
case 7: grade ='C'; break;
case 6: grade ='D'; break;
default: grade ='E';
}
printf("the student grade =%c \n ", ch);
}
}
实验四参考答案
1.编写程序,计算以下级数前n项之和。
#include<stdio.h>
void main()
{
int i, n;
float s=1.0, sum=1.0, x;
scanf(“%d, %f”, &n, &x);
for(i=1; i<=n; i++)
{
s=s*x/i;
sum=sum+s;
}
printf(“sum=%5.2f”, sum);
}
2.编程打印如下图案(书后习题第3题):
**
****
******
********
**********
************
**************
#include <stdio.h>
main( )
{
int i, j, n;
for(i=1; i<=7; i++)
{
for(j=0; j<14-2*i; j++) printf(" ");
for(j=0; j<2*i; j++) printf("*");
printf("\n");
}
}
3.编写程序实现输入整数n,输出如下所示由数字组成的菱形。(图中n=5)
1
1 2 1
1 2 3 2 1
1 2 3 4 3 2 1
1 2 3 4 5 4 3 2 1
1 2 3 4 3 2 1
1 2 3 2 1
1 2 1
1
#include <stdio.h>
main( )
{
int i, j,n;
scanf("%d", &n);
for(i=1; i<n; i++)
{
for(j=1; j<i; j++) printf(" %d", j);
for(j=i; j>0; j--) printf(" %d", j);
printf("\n");
}
for(i=n; i>0; i--)
{
for(j=1; j<i; j++) printf(" %d", j);
for(j=i; j>0; j--) printf(" %d", j);
printf("\n");
}
}
4.输出Fibonacci数列第n项。其数列通项公式为Fn=Fn-1+Fn-2,F1=1,F2=1。
方法一:
#include<stdio.h>
main()
{
float f, f1=1, f2=1;
int i, n;
scanf("%d", &n);
for(i=3; i<=n; i++)
{
f=f1+f2;
f1=f2;
f2=f;
}
printf("%10.0f \n", f );
}
方法二:
#include <stdio.h>
#define NUM 20
void main()
{
int i;
float f[NUM]={1,1};
for(i = 2; i < NUM; i++)
f[i] = f[i-2]+f[i-1];
for(i = 0; i < NUM; i++)
printf("%10.0f \n", f[i]);
}
实验五参考答案
1.编写程序,将1,2,3这三个数赋给数组a,将5,6,7赋给数组b,将两数组对应元素相加的和赋给数组c,输出数组c
#include <stdio.h>
void main()
{
int a[3]={1,2,3}, b[3]={4,5,6}, c[3];
int i;
for(i=0;i<3;i++)
{
c[i]=a[i]+b[i];
printf("%d",c[i]);
}
}
2.输入任意10个数,按从大到小或从小到大的顺序输出(“冒泡”排序)
#include <stdio.h>
#define NUM 10
void main ()
{
int a[NUM], i, j, temp, flag;
printf ("input %d numbers: \n", NUM);
for (i=0; i<NUM; i++)
scanf ("%d", &a[i]);
for (i=1; i<NUM; i++)
for (j=0; j<NUM-i; j++)
{
flag = 0;
if (a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
flag = 1;
}
if (flag == 0) break;
}
printf ("the sorted numbers:\n");
for (i=0; i<NUM; i++)
printf ("%d ", a[i]);
}
3.输入10个整数并存放在一维数组中,找出其中最大值和此元素的下标
#include <stdio.h>
#define NUM 10
void main()
{ int a[NUM];
int i,max, index;
for(i=0; i<NUM;i++)
scanf("%d",&a[i]);
max=a[0];
for(i=0; i<NUM;i++)
{
if(max<a[i])
{
max=a[i];
index=i;
}
}
printf("max=%d, index=%d", max, index);
}
4.将从键盘输入的字符串进行逆序输出,逆序后的字符串仍然保留在原来字符数组中。(不得调用任何字符串处理函数包括strlen)
#include <stdio.h>
#define NUM 80
void main()
{ char a[NUM], temp;
int i, j, index;
for(i=0; i<NUM;i++)
{
scanf("%c",&a[i]);
if(a[i]=='\n') break;
}
a[i]='\0';
index=i;
for(i=0, j=index-1; i<=index/2; i++, j--)
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
for(i=0; i<NUM; i++)
{
if(a[i]=='\0') break;
printf("%c", a[i]);
}
printf("\n");
}
实验五参考答案
1.编写函数,求表达式的值,x有由主函数输入。(请同学们用有返回值和无返回值两种方式去做,练习简单的函定义、声明、及调用方法)
有返回值
#include <stdio.h>
float fun(float x)
{
float m ;
m=x*x-5*x+4;
return m ;
}
void main()
{
float a, f;
scanf("%f", &a);
f=fun(a);
printf("%f \n", f);
}
无返回值
#include <stdio.h>
void fun(float x)
{
float m ;
m=x*x-5*x+4;
printf("%f \n", m);
}
void main()
{
float a;
scanf("%f", &a);
fun(a);
}
2.编写函数,按如下递归公式求函数值。
1 (n=0)
fun(n)=
(n>0)
#include <stdio.h>
int fun(int n)
{
int m;
if(n==0) m=1;
else
m=2*fun(n-1)+1;
return m;
}
void main()
{
int a, f;
scanf("%d", &a);
f=fun(a);
printf("%d \n", m);
}
3. 编写函数求数n所有质因子(所有为素数的因子)并输出,n由主函数输入。
#include <stdio.h>
#include <math.h>
int prime(int m)
{
int j;
if (m == 1) return 0;
else if (m == 2) return 1;
else if (m%2==0) return 0;
else
for(j=3; j<=sqrt(m); j+=2)
if(m%j==0) return 0;
return 1;
}
void main()
{
int i,n,flag;
scanf("%d",&n);
for (i=1;i<=n; i++)
{
if(n%i==0) flag=prime(i);
else flag=0;
if(flag==1) printf("%d \n",i);
}
}
4.哥德巴赫猜想之一是,任何一个大于5的偶数都可以表示为两个素数之和。编写程序验证这一论断。
#include <stdio.h>
int prime(int m)
{
int j;
if (m == 1) return 0;
else if (m == 2) return 1;
else if (m%2==0) return 0;
else
for(j=3; j<=sqrt(m); j+=2)
if(m%j==0) return 0;
return 1;
}
main( )
{
int a,b,c,n;
scanf("%d", &n);
for (a=6; a<=n; a+=2)
for (b=3; b<=a/2; b+=2)
if (prime(b)==1)
{
c=a-b;
if (prime(c)==1)
{
printf("%d=%d+%d\n",a,b,c);
break;
}
}
}
5. 二维数组score中存放5个学生的3门课成绩,由主函数输入一个数,将所有总成绩大于该数的学生输出。
#include <stdio.h>
void max(float a[5][3], float score)
{
int i,j;
float s;
for(i=0;i<5;i++)
{
s=0;
for(j=0; j<3; j++)
s=s+a[i][j];
if(s>score)
printf("stu%d: %.2f\n", i+1, s);
}
}
void main()
{
int i,j;
float a[5][3];
float score;
printf("please input number:\n");
for(i=0; i<5; i++)
{
printf("stu%d:", i+1);
for(j=0; j<3; j++)
scanf("%f",&a[i][j]);
printf("\n");
}
printf("please input score:");
scanf("%f", &score);
max(a,score);
}
实验七参考答案
1.用指针变量输出任意4*4矩阵各元素的值
(1)
#include "stdio.h"
void main()
{
int i,a[4][4]={{1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1}};
int *p=a;
for(i=0;i<4*4;i++)
{
printf("%3d",*(p+i));
if((i+1)%4==0)
printf("\n");
}
}
(2)
#include "stdio.h"
void main()
{
int a[4][4]={{1,1,1,1},{2,2,2,2},{3,3,3,3},{4,4,4,4}};
int (*p)[4]=a;
int i,j;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
printf("%3d",*(*(p+i)+j));
printf("\n");
}
printf("\n");
}
2.有一个整型二维数组a[m][n],找出最大值所在的行和列,以及该最大值
#include "stdio.h"
void main()
{
int a[4][4]={{1,34,35,26},{7,12,92,24},{55,33,53,6},{7,41,34,64}};
int (*p)[4]=a;
int i,j,x,y,max;
max=a[0][0];
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
printf("%3d",*(*(p+i)+j));
if(max<*(*(p+i)+j))
{
max=*(*(p+i)+j);
x=i;
y=j;
}
}
printf("\n");
}
printf("\nmax=%d\nx=%d\ny=%d\n",max,x,y);
}
3.从键盘输入一字符串,求此字符串的长度并输出
#include<stdio.h>
int str_len(char *p)
{
int n=0;
while(*p!='\0')
{
n++;
p++;
}
return n;
}
int main()
{
char a[100];
int n;
printf("Input a string:\n");
gets(a);
n=str_len(a);
printf("The lenth:%d\n",n);
}
4.将字符串str中的小写字母全部改为大写字母,并输出该字符串
#include "stdio.h"
void fun(char *p)
{
int i;
for(i=0;*(p+i)!='\0';i++)
if(*(p+i)>='a'&&*(p+i)<='z')
*(p+i)=*(p+i)-32;
}
void main()
{
char str[50];
char *p=NULL;
printf("Please input string:\n");
gets(str);
p=str;
fun(p);
puts(str);
}
实验八参考答案
1. 编写程序:定义一个职工结构体类型,定义职工结构体变量,从键盘输入一名职工信息,然后输出。(假设职工信息包括:姓名、身份证号、工龄、工资)
#include<stdio.h>
struct employee
{
char name[20];
char id[20];
int gl;
int salary;
};
int main()
{
struct employee em;
printf("Name:\n");
scanf("%s",em.name);
printf("HM:\n");
scanf("%s",em.id);
printf("GL:\n");
scanf("%d",&em.gl);
printf("GZ:\n");
scanf("%d",&em.salary);
printf("Name:%s HM:%s GL:%d GZ:%d\n",em.name,em.id,em.gl,em.salary);
return 0;
}
2. 设计一个保存学生情况的结构体,学生情况包括姓名、学号、年龄。输入5个学生的情况,输出学生的平均年龄和年龄最小的学生的情况
#include <stdio.h>
struct Student {
char name[100]; // 姓名
char stdNo[10]; // 学号
int age; // 年龄
};
// 输入学生信息
void input (Student *stu, int n) {
printf("输入%d个学生信息:", n);
for (int i = 0; i < n; i++) {
printf("\n第%d个学生:\n", i + 1);
printf("姓名:");
gets(stu[i].name);
printf("学号:");
gets(stu[i].stdNo);
printf("年龄:");
scanf("%d", &stu[i].age);
fflush(stdin);
}
}
3. 使用结构体数组输入10本书的名称和单价,调用函数按照书名的字母顺序序进行排序,在主函数输出排序结果
#include <stdio.h>
#include <string.h>
struct Book {
char name[100]; // 书名
float price; // 价格
};
// 按书名排序
void sort (Book **pBook, int n) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n - 1 - i; j ++) {
if (strcmp((*pBook[j]).name, (*pBook[j + 1]).name) == 1) {
Book *temp = pBook[j];
pBook[j] = pBook[j + 1];
pBook[j + 1] = temp;
}
}
}
}
main () {
Book book[10];
Book *prtBook[10];
printf("输入10本书的信息:\n");
for (int i = 0; i < 10; i++) {
printf("\n第%d本书:\n", i + 1);
printf("书名:");
gets(book[i].name);
printf("价格:");
scanf("%f", &book[i].price);
prtBook[i] = &book[i];
fflush(stdin);
}
sort(prtBook, 10);
for (int n = 0; n < 10; n++) {
printf("%s\t\t%0.2f\n", (*prtBook[n]).name, (*prtBook[n]).price);
}
}
展开阅读全文