资源描述
黑龙江大学计算机学院、软件学院 《程序设计基础》实验讲义
C 基 础
1、输入成绩,判断是否及格
#include <stdio.h>
void main()
{
float a,b,max;
printf("please enter a:");
scanf("%f ",&a);
if (a>=60)
printf("及格\n");
else
printf("不及格\n");
}
2、输入两个学生a和b的成绩,输出其中高的成绩
#include <stdio.h>
void main()
{
float a,b,max;
printf("please enter a and b:");
scanf("%f,%f",&a,&b); // 数据输入时若无逗号一般用空格区分两输入值,本
例一定要在两数之间加逗号
if (a>=b)
max=a;
if (b>a)
max=b;
printf("max=%f\n",max);
}
3、要求按照百分制考试分数输出等级。
#include "stdio.h"
main()
{ int grade;
printf("input grade=");
scanf("%d",&grade);
switch ((int)(grade/10))
{ case 10:
case 9: printf("A\n"); break;
case 8: printf("B\n"); break;
case 7: printf("C\n"); break;
case 6: printf("D\n"); break;
default: printf("E\n");
}
}
4、求1+2+……+100的和,分别用while、do…while和for语句实现
(1)while
#include <stdio.h>
void main ( )
{ int sum=0,i=1;
while (i<=100)
{ sum=sum+i;
i++;
}
printf("sum=%d\n",sum);
}
(2)do…while
#include <stdio.h>
void main( )
{
int sum=0,i=1;
do
{sum=sum+i;
i++;
}while (i<=100);
printf("sum=%d\n",sum);
}
(3)for
#include <stdio.h>
void main( )
{
int sum=0,i;
for (i=1;i<=100;i++)
sum=sum+i;
printf("sum=%d\n",sum);
}
5、输入10个数,用冒泡法对这10个数由小到大排序。
#include <stdio.h>
void main()
{ int a[10];
int i,j,t;
printf("input 10numbers :\n");
for (i=0;i<10;i++)
//数组输入
scanf("%d",&a[i]);
printf("\n");
for(j=0;j<9;j++) /*进行9次循环,实现9趟比较*/
for(i=0;i<9-j;i++) /*在每趟中进行9-j次比较*/
if (a[i]>a[i+1]) /*相邻两个数进行比较*/
{ t=a[i];
a[i]=a[i+1];
a[i+1]=t;
} /*满足条件进行互换*/
printf("the sorted numbers :\n");
for(i=0;i<10;i++) //数组输出
printf("%d ",a[i]);
printf("\n");
}
6、选择排序
#include <stdio.h>
void main()
{
int i,j,min,temp;
int a[10]={6,90,45,56,1,15,44,78,58,101};//为数组赋初值
//或键盘输入
/*printf("enter data:\n");
for(i=0;i<10;i++)//输入10个数
{
printf("a[%d]=",i);
scanf("%d",&a[i]);
}
printf("\n");
for(i=0;i<10;i++)//输出10个数
{
printf("%5d",a[i]);
}
printf("\n");
*/
for(i=0;i<9;i++)
{
min=i;
for(j=i+1;j<=9;j++)
{
if(a[min]>a[j])
min=j;
}
temp=a[i];
a[i]=a[min];
a[min]=temp;
}
printf("\n The sorted numbers:\n");
for(i=0;i<10;i++)//输出排序后的10个数
{
printf("%5d",a[i]);
}
printf("\n");
getchar();
}
7、//编一程序,将两个字符串连接起来。不要用函数strcat
#include "stdio.h"
void main()
{
char s1[80],s2[40];
int i=0,j=0;
printf("\n input string1:");
scanf("%s",s1);
printf("input string2:");
scanf("%s",s2);
while(s1[i]!='\0')
i++;
while(s2[j]!='\0')
s1[i++]=s2[j++];
s1[i]='\0';
printf("The new string is: %s\n",s1);
}
8、函数1:(参数为值传递)
#include <stdio.h>
void main ( )
{ int max(int x,int y );
int a,b,c;
scanf("%d%d",&a,&b);
c=max(a,b);
printf(“max= %d\n”,c);
}
int max (int x,int y)
{ int z;
if (x>y) z=x;
else z=y;
return z;
}
9、函数2:(参数为地址传递)
有有一维数组score,内放10个学生成绩,定义函数average求平均成绩。
#include <stdio.h>
void main()
{ float average(float array[10]);
float score[10],aver;
int i;
printf("input 10 scores:\n");
for(i=0;i<10;i++)
scanf("%f",&score[i]);
printf("\n");
aver=average(score);
printf("average score is %5.2f \n", aver);
}
float average(float array[10])
{ int i;
float aver, sum=array[0];
for(i=1;i<10;i++)
sum=sum+array[i];
aver=sum/10;
return(aver);
}
10、对输入的两个整数按大小顺序输出,用指针变量作函数的参数。(地址传递)
#include <stdio.h>
void main()
{void swap(int *p1,int *p2);
int a,b;
int *pointer_1, *pointer_2;
scanf("%d%d",&a,&b);
pointer_1=&a;
pointer_2=&b;
if(a<b) swap(pointer_1,pointer_2); /*调用函数后,a,b的值进行了交换*/
printf("%d,%d\n",a,b);//等价于:printf("%d,%d\n", *pointer_1,*pointer_2);
}
void swap(int *p1,int *p2)
{ int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
11、有一整型数组a,有10个元素。要输出各元素的值有三种方法
(1)下标法
#include <stdio.h>
void main()
{int a[10];
int i;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for (i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
}
(2)通过数组名计算出数组元素的地址,找出数组元素的值。
#include <stdio.h>
void main()
{ int a[10];
int i;
for (i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<10;i++)
printf("%d ", *(a+i));
printf("\n");
}
⑶ 用指针变量指向数组元素
#include <stdio.h>
void main()
{ int a[10];
int *p,i;
for (i=0;i<10;i++)
scanf("%d",&a[i]);
for(p=a;p<(a+10);p++)
printf("%d ",*p);
printf("\n");
}
上述3种方法中有关数组元素的输入也可用下列方法表示:
for(p=a;p<a+10;p++)
scanf("%d",p);
12、输入两个学生学号、姓名和成绩,输出成绩较高的学生的学号、姓名和成绩。
#include<stdio.h>
void main()
{ struct student
{ int num;
char name[20];
int score;
}s1,s2;
scanf("%d%s%d",&s1.num,s1.name,&s1.score);
scanf("%d%s%d",&s2.num,s2.name,&s2.score);
printf("num name score\n");
if(s1.score>=s2.score)
printf("%d %s %d\n",s1.num,s1.name,s1.score);
else
printf("%d %s %d",s2.num,s2.name,s2.score);
}
13、有N个学生的信息(包括学号,姓名,成绩),要求按照成绩的高低顺序存储并输出各学生的信息。
#include<stdio.h>
#include<string.h>
void main()
{ struct student
{ int num;
char name[20];
int score;
}s[6]={{1,"aaa",59},{2,"bbb",78},{3,"ccc",85}, {4,"ddd",64},{5,"eee",98},{6,"fff",83}};
int i,j,max,temp;
char temp_name[20];
for(i=0;i<6;i++)
{ max=i;
for(j=i+1;j<=5;j++)
{ if(s[max].score<s[j].score)
max=j;
}
/* temp_stu=s[i];
s[i]=s[max];
s[max]=temp_stu; */
temp=s[i].num;
s[i].num=s[max].num;
s[max].num=temp;
strcpy(temp_name,s[i].name);
strcpy(s[i].name,s[max].name);
strcpy(s[max].name,temp_name);
temp=s[i].score;
s[i].score=s[max].score;
s[max].score=temp;
}
printf("num name score\n");
for(i=0;i<6;i++)
printf("%d %s %d\n",s[i].num,s[i].name,s[i].score);
}
14、从键盘输入4个学生的有关数据,然后把它们转存到磁盘文件上去。
#include <stdio.h>
#define SIZE 4
struct student_type
{ char name[10];
int num;
int age;
char addr[15];
} stud[SIZE];
void main()
{ void save();
int i;
for(i=0;i<SIZE;i++)/*从键盘输入*/
scanf("%s%d%d%s",stud[i].name,&stud[i].num, &stud[i].age, stud[i].addr);
save( );
}
void save( )
{ FILE *fp;
int i;
if((fp=fopen("stu-list","wb"))==NULL)
{ printf("cannot open file\n");
return;}
for(i=0;i<SIZE;i++)
if ( fwrite (&stud[i], sizeof(struct student_type), 1,fp)!=1)
printf(“file write error\n”);/*出错*/
fclose(fp); /*关闭文件*/
}
15、将以上数据读出并显示
#include <stdio.h>
#define SIZE 4
struct student_type
{ char name[10];
int num;
int age;
char addr[15];
} stud[SIZE];
void main( )
{ int i;
FILE *fp;
if ((fp=fopen ("stu_list","rb"))==NULL)
{ printf("cannot open file\n");
return;
}
for(i=0;i<SIZE;i++)
{ fread(&stud[i], sizeof(struct student_type),1,fp);
printf("%-10s%4d%4d%-15s \n", stud[i].name, stud[i].num, stud[i].age,stud[i].addr);
}
fclose (fp);
}
16、//有15个数按照从小到大的顺序存放在一个数组中。输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,输出“不在表中”
#include "stdio.h"
#define N 15
void main()
{ int i,number,top,bott,mid,loca,flag=1,sign;
int a[N]={1,3,4,5,6,8,12,23,34,44,45,56,57,58,68};
char c;
for(i=0;i<N;i++)
printf("%d ",a[i]);
printf("\n");
while(flag)
{ printf("input number to look for:");
scanf("%d",&number);
getchar();
sign=0;
top=0;
bott=N-1;
if((number<a[0])||(number>a[N-1]))
loca=-1;
while((!sign)&&(top<=bott))
{ mid=(bott+top)/2;
if(number==a[mid])
{ loca=mid;
printf("Has found %d, its position is %d\n",number,loca+1);
sign=1;
}
else if(number<a[mid])
bott=mid-1;
else
top=mid+1;
}
if(!sign||loca==-1)
printf("can not find %d.\n",number);
printf("continue or not (Y/N)?");
scanf("%c",&c);
getchar();
if(c=='N'||c=='n')
flag=0;
}
}
6
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
1 3 4 5 6 8 12 23 34 44 45 56 57 58 68
1 3 4 5 6 8 12 23 34 44 45 56 57 58 68
1 3 4 5 6 8 12 23 34 44 45 56 57 58 68
1 3 4 5 6 8 12 23 34 44 45 56 57 58 68
7
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
1 3 4 5 6 8 12 23 34 44 45 56 57 58 68
1 3 4 5 6 8 12 23 34 44 45 56 57 58 68
1 3 4 5 6 8 12 23 34 44 45 56 57 58 68
1 3 4 5 6 8 12 23 34 44 45 56 57 58 68
1 3 4 5 6 8 12 23 34 44 45 56 57 58 68
区分:break语句跳出循环,用continue语句结束本次循环
(1)break:判断整数m是否素数
# include <stdio.h>
# include <math.h>
void main()
{int m,i,k;
printf("输入一个整数:");
scanf("%d",&m);
k=sqrt(m);
for (i=2;i<=k;i++)
if (m%i==0) break;
if (i>=k+1)
printf("%d 是一个素数。\n",m);
else
printf("%d 不是一个素数。\n",m);
}
(2)写出以下程序运行结果
void main()
{
int j;
for(j=1;j<=5;j++)
{
if(j%2==1)
printf(“D”);
else
continue;
printf(“B”);
}
printf(“P\n”);
}
答案:DBDBDBP
12
展开阅读全文