目录
实验8-2-1 找最小的字符串
实验8-2-2 找最长的字符串
实验8-2-8 字符串排序
实验8-2-10 IP地址转换
结构体
实验9-1 计算职工工资
实验9-2 时间换算
实验9-3 计算平均成绩
实验9-5 查找书籍
实验9-8 通讯录排序
实验9-9 有理数比较
实验11-1-1 英文单词排序
实验11-1-7 藏头诗
实验11-1-9 藏尾诗
实验8-2-1 找最小的字符串
1.gets();输入字符串的时候必须是,int a[10],而不能是指针int *a;
2.无敌字符串三个必会函数:
- strlen(str),求长度
- strcpy(str1,str2),将str2赋值给str1,不能用str1=str2,这不就是直接修改的指针,以后两个指向的同一个地方。
- strcmp(str1,str2),比较字符串的大小,str1>str2返回正数
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int main(){
int N;
scanf("%d\n",&N);
char str[81]="";
char minstr[90]="zzzzzzzzzzzzzzzzzzzzzzzzzz";
for(int i=0;i<N;i++){
gets(str);
if(strcmp(minstr,str)>0){
strcpy(minstr,str);
}
}
printf("Min is: %s",minstr);
return 0;
}
实验8-2-2 找最长的字符串
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int main(){
int N;
scanf("%d\n",&N);//输入数字后换行,输入字符,必须加上换行符,否则换行符会被当成字符读入
char str[81]="";//定义空字符,81是最大长度
int maxlen=0;
char maxstr[81];
for(int i=0;i<N;i++){
scanf("%s",str);//字符串本身就是数组指针(地址),不需要加上&
int len=strlen(str);
if(len>maxlen){
maxlen=len;
strcpy(maxstr,str);//字符串赋值函数,不能直接使用“=”
}
}
printf("The longest is: %s",maxstr);
return 0;
}
实验8-2-8 字符串排序
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int main(){
char str[5][81];
for(int i=0;i<5;i++){
scanf("%s ",str[i]);
}//得到了二维字符串数组str
//接下来比较大小
printf("After sorted:\n");
for(int i=0;i<5;i++){//简单选择排序
char min[81];
strcpy(min,str[i]);
for(int j=i+1;j<5;j++){//找出最小的放到i处
if(strcmp(min,str[j])>0){
char temp[81];
strcpy(temp,min);
strcpy(min,str[j]);
strcpy(str[j],temp);
}
}
strcpy(str[i],min);
}
for(int i=0;i<5;i++){
printf("%s\n",str[i]);
}
return 0;
}
实验8-2-10 IP地址转换
//输入32个字符串,每八位输出一个十进制数字=
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int main(){
char str[33]="";//使用gets函数的时候字符串数组要比预期的大一个,用来存放换行符
gets(str);
int flag=7;
int sum=0;
for(int i=0;i<32;i++){
int num;
if(str[i]=='1'){
num=1;
}else{
num=0;
}
if(flag>=0){
sum=sum+num*pow(2,flag);
flag--;
}
if(flag==-1){
printf("%d",sum);
flag=7;
sum=0;
if(i!=31){
printf(".");
}
}
}
return 0;
}
结构体
实验9-1 计算职工工资
//
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
typedef struct{
char str[10];
float jiben;
float fudong;
float zhichu;
}worker;
int main(){
int N;
scanf("%d\n",&N);
for(int i=0;i<N;i++){
worker a;
scanf("%s %f %f %f",a.str,&a.jiben,&a.fudong,&a.zhichu);
printf("%s %.2f\n",a.str,a.jiben+a.fudong-a.zhichu);
}
return 0;
}
实验9-2 时间换算
//使用结构体:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
typedef struct{
int hh;
int mm;
int ss;
}time;
int main(){
time start;
scanf("%d:%d:%d",&start.hh,&start.mm,&start.ss);
int n;
scanf("%d",&n);
start.ss=start.ss+n;
if(start.ss>=60){
start.ss=start.ss-60;
start.mm=start.mm+1;
if(start.mm>=60){
start.mm=start.mm-60;
start.hh=start.hh+1;
}
if(start.hh==24){
start.hh=0;
}
}
printf("%d%d:%d%d:%d%d",start.hh/10,start.hh%10,start.mm/10,start.mm%10,start.ss/10,start.ss%10);
输出要补零, 2代表占两个位置, 0代表若两个位置有空缺, 用0填补
//printf("%02d:%02d:%02d", start.hh, start.mm, start.ss);
return 0;
}
实验9-3 计算平均成绩
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
typedef struct{
char num[50];
char name[10];
int grade;
}student;
int main(){
int N;
scanf("%d",&N);
student a[N];//结构体数组
int sum=0;
for(int i=0;i<N;i++){
scanf("%s %s %d",a[i].num,a[i].name,&a[i].grade);
sum=sum+a[i].grade;
}
double average=sum*1.0/N;
printf("%.2lf\n",average);
for(int i=0;i<N;i++){
if(a[i].grade<average){
printf("%s %s\n",a[i].name,a[i].num);
}
}
return 0;
}
实验9-5 查找书籍
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
typedef struct{
char name[300];
float money;
}Books;
int main(){
int N;
scanf("%d\n",&N);
Books a[20];//结构体数组
for(int i=0;i<N;i++){
scanf("%[^\n]",a[i].name);
//gets(a[i].name);//都表示遇见换行符时停止
scanf("%f\n",&a[i].money);
}
char maxbook[100]="";
float max=0;
char minbook[100]="";
float min=1000;
for(int i=0;i<N;i++){
if(a[i].money>max){
max=a[i].money;
strcpy(maxbook,a[i].name);
}
if(a[i].money<min){
min=a[i].money;
strcpy(minbook,a[i].name);
}
}
printf("%.2f, %s\n",max,maxbook);
printf("%.2f, %s\n",min,minbook);
return 0;
}
实验9-8 通讯录排序
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
typedef struct{
char name[300];
int date;
char num[300];
}Friends;
int main(){
int N;
scanf("%d\n",&N);
Friends a[20];//结构体数组
for(int i=0;i<N;i++){
scanf("%s %d %s\n",a[i].name,&a[i].date,a[i].num);
}
for(int i=0;i<N;i++){
for(int j=i+1;j<N;j++){
if(a[j].date<a[i].date){
a[N]=a[j];
a[j]=a[i];
a[i]=a[N];
}
}
}
for(int i=0;i<N;i++){
printf("%s %d %s\n",a[i].name,a[i].date,a[i].num);
}
return 0;
}
实验9-9 有理数比较
//什么玩意,结构体好麻烦
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
typedef struct{
int zi;
int mu;
double much;
}fenshu;
int main(){
fenshu a,b;
scanf("%d/%d %d/%d",&a.zi,&a.mu,&b.zi,&b.mu);
a.much=1.0*a.zi/a.mu;
b.much=1.0*b.zi/b.mu;
char c;
if(a.much>b.much){
c='>';
}else if(a.much<b.much){
c='<';
}else{
c='=';
}
printf("%d/%d %c %d/%d",a.zi,a.mu,c,b.zi,b.mu);
return 0;
}
实验11-1-1 英文单词排序
//把这些单词存放在一个二维数组里面
//输入不是1,2,3为程序截止
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int main(){
char str[100][100];
int i=0;
gets(str[i]);
while(strcmp(str[i],"#")!=0){//字符串的比较一定不能用=
i++;
gets(str[i]);
}
for(int j=0;j<i;j++){
for(int k=j+1;k<i;k++){
if(strlen(str[j])>strlen(str[k])){
char temp[100];
strcpy(temp,str[j]);
strcpy(str[j],str[k]);
strcpy(str[k],temp);
}
}
}
for(int j=0;j<i;j++){
printf("%s ",str[j]);
}
return 0;
}
实验11-1-7 藏头诗
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int main(){
//一个字符char是一个字节,汉字是三个字节
char str[4][1000000];
for(int i=0;i<4;i++){
gets(str[i]);
printf("%c%c%c",str[i][0],str[i][1],str[i][2]);
}
return 0;
}
实验11-1-9 藏尾诗
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int main(){
//一个字符char是一个字节,汉字是三个字节
char str[4][1000000];
for(int i=0;i<4;i++){
gets(str[i]);
int n=strlen(str[i]);
printf("%c%c%c",str[i][n-3],str[i][n-2],str[i][n-1]);
}
return 0;
}