C语言与练习题

写在开始

因为需要,先不写学习笔记,最近几次写一写准备面试时基础但是细节的题目(练习题)。

这是牛客网上面做的华为机试.在线训练题目,代码肯定是我自己写的,即使是很简单的!

题目

第一题

题目描述
计算字符串最后一个单词的长度,单词以空格隔开。
输入描述:一行字符串,非空,长度小于5000。
输出描述:整数N,最后一个单词的长度。

示例1:
输入:hello world
输出:5

代码

#include<stdio.h>

int main()
{
    char str[5000];
    int length=0;
    gets(str);
    for(int i=strlen(str)-1;i>=0;i--){
        if((int)str[i]!=32){
            length++;
        }
        else{
            break;
        }
    }
    printf("%d",length);
    return 0;
}

第二题

题目描述
写出一个程序,接受一个由字母和数字组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写

输入描述:
第一行输入一个有字母和数字以及空格组成的字符串,第二行输入一个字符。
输出描述:
输出输入字符串中含有该字符的个数。
示例1:
输入:
ABCDEF
A
输出:
1

代码

#include<stdio.h>

int main()
{
    char str[1000];
    char flag;
    int num=0;
    gets(str);
    scanf("%c",&flag);
    int number=(int)flag;
    if(65<=number&&number<=90){
        for(int i=0;i<strlen(str);i++){
            if(flag==str[i]||flag+32==str[i]){
                num++;
            }
        }
    }
    else if(97<=number&&number<=122){
        for(int i=0;i<strlen(str);i++){
            if(flag==str[i]||flag-32==str[i]){
                num++;
            }
        }
    }
    else{
        for(int i=0;i<strlen(str);i++){
            if(flag==str[i]){
                num++;
            }
        }
    }
    printf("%d",num);
    return 0;
}

第三题

题目描述
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。

样例输入解释:
11个数字,分别是:10,20,40,32,67,40,20,89,300,400,15。
输入描述:
输入多行,先输入随机整数的个数,再输入相应个数的整数
输出描述:
返回多行,处理后的结果

示例1:
输入:
11
10
20
40
32
67
40
20
89
300
400
15
输出:
10
15
20
32
40
67
89
300
400


1.原题是多组输入但是我实在没读懂题目,就暂且按照一组处理
2.代码写得很糟糕:算法全“穷举式”,命名不好。。。。。。请见谅
代码

#include<stdio.h>
//#include<string.h>

int N;
int arr[1000]={0};

void sigle();//查重 
void line();//排序并输出 

int main()
{
    //memset(arr,0,sizeof(arr));//原题本来是多组数据,题意不清楚,这里定为一组 
    scanf("%d",&N);
    for(int i=0;i<N;i++){
        scanf("%d",&arr[i]);
    }
    sigle();
    line();
}

//查重
void  sigle()
{
    for(int i=0;i<N-1;i++){
        if(arr[i]!=0){
            for(int j=i+1;j<N;j++){
                if(arr[i]==arr[j]){
                    arr[j]=0;
                }
            } 
        }
    }
}

//排序并输出 
void line()
{
    //将0的位置填满
    int flag=0;
    for(int i=0;i<N;i++){
        if(arr[i]!=0){
            if(flag==i){
                flag++;
            }
            else{
                arr[flag]=arr[i];
                flag++;
                arr[i]=0;
            }
        }
    }
    if(arr[flag]==0){
    	flag--;
	}
    //排序 
    int min,min_number;
    for(int i=0;i<flag;i++){
    	min=i;
    	for(int j=i+1;j<=flag;j++){
    		if(arr[min]>arr[j]){
    			min=j;
			}
		}
		min_number=arr[min];
		arr[min]=arr[i];
		arr[i]=min_number;
	} 
	for(int i=0;i<=flag;i++){
        printf("%d\n",arr[i]);
	}
}

第四题

题目描述
•连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组;
•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。

输入描述:
连续输入字符串(输入2次,每个字符串长度小于100)
输出描述:
输出到长度为8的新字符串数组

示例1:
输入:
abc
123456789
输出:
abc00000
12345678
90000000

代码

#include<stdio.h>
#include<string.h>

//函数声明 
void out(char str[100]);

int main()
{
    char str1[100];
    char str2[100];
    fflush(stdin);
    gets(str1);
    fflush(stdin);
    gets(str2);
    out(str1);
    out(str2);
    return 0;
}

//输入:一个字符串数组
//目的:将字符串数组按照题目要求输出
void out(char str[100])
{
    int length=strlen(str);
    int sign=0;
    loop:
    if((length-sign)<=8){
    	for(int i=0;i<length-sign;i++){
    		printf("%c",str[sign+i]);
		}
		for(int i=length-sign;i<8;i++){
			printf("0");
		}
		printf("\n");	
	}
	else{
		for(int i=0;i<8;i++){
    		printf("%c",str[sign+i]);
		}
		printf("\n");
		sign=sign+8;
		goto loop;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值