C语言集中上机实验报告
学 生:
学 号:
班 级:
专 业:
重庆邮电大学移通学院
20##年6月
(1)掌握一维数组和二维数组的定义、赋值和输入输出的方法
(2)掌握字符数组和字符串函数的使用;
(3)掌握与数组有关的算法。
1.1打印出以下图案
*
* * *
* * * * *
* * * * * * *
* * * * *
* * *
*
题目分析:运用数组初始化打印出图形。
程序:
#include"stdio.h"
void main()
{
char a[7][7]={{' ',' ',' ','*'},{' ',' ','*','*','*'},{' ','*','*','*','*','*'},{'*','*','*','*','*','*','*'},{' ','*','*','*','*','*'},{' ',' ','*','*','*'},{' ',' ',' ','*'}};
int i,j;
for(i=0;i<7;i++)
{
for(j=0;j<7;j++)
printf("%c",a[i][j]);
printf("\n");
}
}
运行结果:
1.2编写程序实现输入整数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
题目分析:先用for循环依次打印出上半部分的各行元素,再用for循环打印下半部分的各行元素。
程序:
#include"stdio.h"
void main()
{
int i,j,n;
printf("input n:");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=1;j<=i;j++)
printf("%-3d",j);
for(j=i-1;j>=1;j--)
printf("%-3d",j);
printf("\n");
}
for(i=n-1;i>0;i--)
{
for(j=1;j<=i;j++)
printf("%-3d",j);
for(j=i-1;j>=1;j--)
printf("%-3d",j);
printf("\n");
}
}
运行结果:
思考题:
1题A
2题D
3题C
4题2.0
5题8
6题36
实验总结:通过试验熟悉了for循环语句的使用。
第二章 数 组
(1) 掌握一维数组和二维数组的定义、赋值和输入输出的方法
(2) 掌握字符数组和字符串函数的使用;
(3) 掌握与数组有关的算法。
1.1 打印以下图案:
* * * * *
* * * * *
* * * * *
* * * * *
* * * * *
题目分析:定义一个五行九列的数组,分别用双重for循环打印出*和空格。
程序:
#include "stdio.h"
void main()
{
char a[5][9];
int i,j;
for(i=0;i<5;i++)
{
for(j=i;j<=i+5;j++)
a[i][j]='*';
}
for(i=1;i<5;i++)
{
for(j=0;j<i;j++)
a[i][j]=' ';
}
for(i=0;i<4;i++)
{
for(j=5+i;j<9;j++)
a[i][j]=' ';
}
for(i=0;i<5;i++)
{
for(j=0;j<9;j++)
printf("%c",a[i][j]);
printf("\n");
}
}
运行结果:
1.2 输入4×4的数组,编写程序实现:
(1)求出对角线上各元素的和;
(2)求出对角线上行、列下标均为偶数的各元素的积;
(3)找出对角线上其值最大的元素和它在数组中的位置。
题目分析:主对角线上元素的行下标和列下标相等,负对角线上行下标和列下标的和等于3,然后运用for循环求出对角线上元素的和,找出对角线上元素的最大值。
程序:
#include "stdio.h"
void main()
{
int a[4][4],i,j,sum=0,s=1,max=0,m,n;
printf("输入4×4的数组:\n");
for(i=0;i<4;i++)
for(j=0;j<4;j++)
scanf("%d",&a[i][j]);
for(i=0;i<4;i++)
for(j=0;j<4;j++)
if(i==j||i+j==3)
sum+=a[i][j];
for(i=1;i<4;i++)
for(j=1;j<4;j++)
if(i%2==0&&j%2==0)
s*=a[i][j];
for(i=0;i<4;i++)
for(j=0;j<4;j++)
if(i==j||i+j==3)
if(a[i][j]>max)
{
max=a[i][j];m=i;n=j;
}
printf("对角线上各元素的和%d\n对角线上行、列下标均为偶数的各元素的积%d\n对角线上其值最大的元素%d\n它在数组中的位置%d行%d列\n",sum,s,max,++m,++n);
}
思考题:
1题:A
2题:B
3题:C
4题:10010
5题:D
6题:5 7 4 8 9 1
1 5 7 4 8 9
9 1 5 7 4 8
8 9 1 5 7 4
4 8 9 1 5 7
7 4 8 9 1 5
实验总结:通过实验进一步掌握数组的概念,会定义和使用数组和数组的输入和输出。
第三章 函 数
(1) 掌握定义函数的方法;
(2) 掌握函数实参与形参的对应关系以及“值传递”的方式;
(3) 掌握函数的嵌套调用和递归调用的方法;
(4) 掌握全局变量和局部变量动态变量、静态变量的概念和使用方法。
(5) 学习对多文件程序的编译和运行。
1 编程
1.1 写一函数,输入一个4位数字,要求输出这4个数字字符,但每两个数字间空一个空格。如输入1990,应输出“1└┘9└┘9└┘0”。
题目分析:用求余数依次求出各位数字再打印。
程序:
#include "stdio.h"
fun(int a)
{int i,j,m,n;
i=a/1000;
j=a/100%10;
m=a/10%100%10;
n=a%1000%100%10;
printf("%d %d %d %d\n",i,j,m,n);
}
void main()
{
int a;
printf("输入一个四位数:");
scanf("%d",&a);
fun(a);
}
运行结果:
1.2 用递归法将一个整数n转换成字符串。例如,输入483,应输出字符串“483”。n的位数不确定,可以是任意位数的整数。
题目分析:用递归法依次对10求余,然后加上字符0,再打印出字符串。
程序:
#include "stdio.h"
void fun(int m)
{
if(m>=0&&m<=9)
printf("%c ",m+'0');
if(m>=10)
{
fun(m/10);
printf("%c ",m%10+'0');
}
}
void main()
{
int n;
printf("输入一个整数:");
scanf("%d",&n);
printf("输出字符串:");
fun(n);
printf("\n");
}
运行结果:
思考题:
1题:D
2题:B
3题:0 2 4 6 8 10 12 14 16 18
0 2 4 6 8 10 12 14 16 18
4题:-125=-5*5*5
5题:i=5 i=2 i=2 i=4 i=2
6题:求出所有三位数中,其各位数字的立方和等于其本身的数。
实验总结:通过试验熟悉了对函数的使用,掌握了函数的定义形式。
第四章 指 针
(1) 掌握指针的概念,掌握定义和使用指针变量的方法。
(2) 掌握使用数组的指针和指向数组的指针变量。
(3) 掌握使用字符串的指针和指向字符串的指针变量。
(4) 学习对多文件程序的编译和运行。
1 编程
1.1 编一程序,输入月份号,输出该月的英文月名。例如,输入“3”,则输出“March”,要求用指针数组处理。
题目分析:先对指针数组初始化,再对输入数减一再用数组输出对应对应的英语月数。
程序:
#include "stdio.h"
void main()
{
char *p[12]={"January","February","March","April","May","June","July","August","September","October","November","December"};
int n;
printf("输入月份号:");
scanf("%d",&n);
printf("输出该月的英文月名:%s\n",p[n-1]);
}
运行结果:
1.2 有一字符串,包含n个字符。写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串。
题目分析:
程序:
#include "stdio.h"
#include "string.h"
void fun(char s1[80],int m)
{
int i,j;
char s2[80];
for(j=0,i=m;j<=(strlen(s1)-m)&&i<=strlen(s1);j++,i++)
s2[j]=s1[i];
puts(s2);
}
void main()
{
char s1[80];
int m,n;
printf("输入一个字符串:\n");
gets(s1);
printf("从第几个字符开始复制:\n");
scanf("%d",&m);
n=m-1;
printf("输出的字符串:\n");
fun(s1,n);
printf("\n");
}
运行结果:
思考题:
1题:C
2题:A
3题:C
4题:B
5题:D
6题:5
实验总结:通过试验熟悉使用和定义指针。
第五章 综合练习
(1) 掌握指针的概念,掌握定义和使用指针变量的方法。
(2) 掌握使用数组的指针和指向数组的指针变量。
(3) 掌握使用字符串的指针和指向字符串的指针变量。
(4) 学习对多文件程序的编译和运行。
1.1 编写一个程序计算下式之和。
1+(1+2)+(1+2+3)+(1+2+3+4)+…...+(1+2+3+4+5+6+7+8+9+10)
题目分析:用for循环编写一个函数求1+2+…...+n的和,然后再编写一个函数求1+(1+2)+(1+2+3)+(1+2+3+4)+…...+(1+2+3+4+5+6+7+8+9+10) 的和。
程序:
#include "stdio.h"
int fun(int j)
{
int i,s=0;
for(i=1;i<=j;i++)
s+=i;
return s;
}
int fun1(int n)
{
int j,sum=0;
for(j=1;j<=n;j++)
sum+=fun(j);
return sum;
}
void main()
{
int s,n;
printf("please input n:\n");
scanf("%d",&n);
s=fun1(n);
printf("输出结果:%d\n",s);
}
运行结果:
1.2 在主函数中输入一个字符串,然后删除该字符串里面所有的空格,并打印删除空格后的字符串。(用指针)
题目分析:定义两个数组,用for循环判断是否为空格,若不为空格则将字符输入另一个数组,最后打印出该数组。
程序:
#include "stdio.h"
#include "string.h"
void main()
{
char a[40],b[40];
int i,j=0;
printf("input a:");
gets(a);
for(i=0;a[i]!='\0';i++)
if(a[i]!=' ')
{
b[j]=a[i];j++;
}
b[j]='\0';
printf("output b:");
puts(b);
}
运行结果:
思考题:
1题:D
2题:B
3题:A
4题:6
5题:976531
实验总结:通过实验对c语言的函数定义,数组的使用有了进一步的认识,对各种语句更能熟悉的运用。
通过集中上机试验,熟悉各种数据的定义,一维和二维数组的定义、赋值和输入输出, 字符数组和字符串数组的使用。了解了自己在c语言中各方面的不足之处。进一步掌握函数、指针、数组、for、while、do、、、while等循环语句的使用,熟练掌握各种语句格式及使用方法,掌握if语句中的嵌套关系和匹配原则。掌握双重for循环控制数组的输入输出,掌握循环结构的嵌套使用,利用循环语句实现循环结构。掌握简单、常用的算法,并在编程过程中体验各种算法的编程技巧。进一步学习调试程序,掌握语法错误和逻辑错误的检查方法。
在科技高度发展的今天,计算机在人们之中的作用越来越突出。而C语言作为一种计算机的语言,学习它将有助于我们更好的了解计算机,与计算机…
重庆邮电大学移通学院C语言集中上机实验报告学生学号班级专业重庆邮电大学移通学院20xx年5月重庆邮电大学移通学院目录第一章循环31…
实验一上机操作初步2学时一实验方式一人一机二实验目的1熟悉VC语言的上机环境及上机操作过程2了解如何编辑编译连接和运行一个C程序3…
四川师范大学计算机学院实验报告册院系名称计算机科学学院课程名称C语言程序设计实验学期20xx年至20xx年第二学期专业班级20xx…
实验一实验的名称一、实验目的:1、熟悉VC++语言的上机环境及上机操作过程。2、了解如何编辑、编译、连接和运行一个C程序。3、初步…
C语言上机考试改错题分析总结以下对改错题的改错方式做一些总结,当然这些总结只能对大部分改错行有效。1、若错误行是函数首部,可分为以…
二级C语言上机考试改错题总结改错题的错误主要分为以下几类:1、if或while语句若错误行是if或者while语句,则要注意以下点…
C语言集中上机报告通讯录管理院系班型级姓名合作者姓名指导教师字符串年5月29日20xx地址字符串邮政编码字符串电话号码字符串目录一…
上机填空题技巧总结一填空题之方法1填空题做题之前必须弄清题目含义抓住关键字例如要求对数组进行从小到大排序则将会出现大于符号如果是从…
重庆邮电大学移通学院C语言集中上机实验报告学生学号班级专业重庆邮电大学移通学院20xx年5月重庆邮电大学移通学院目录第一章循环31…
在科技高度发展的今天,计算机在人们之中的作用越来越突出。而C语言作为一种计算机的语言,学习它将有助于我们更好的了解计算机,与计算机…