1、C语言--统计数字个数
1、编写程序,输入正整数n(1~10000),再输入n个正整数,找出这n个数中出现次数最多的数字,统计并输出其出现的次数
例如 1234 ,2345, 3456 中出现次数最多的数字是 3和 4 ,出现次数均为3次 。、
c
/*
解题思路:用一个长度为10的数组arr[10] = {0}存放每个数字出现的次数,初始全部为0,
然后输入一个数字 temp ,将数字 temp对10取余数,将temp中的每个数字记录下来 arr[temp%10]++ , temp =temp/10
然后再遍历数组,从中找到最大的值,其对应的下标就是出现次数最多的数字
*/
# include<stdio.h>
int main(){
int n; // 可输入元素的个数
int i;
int temp; // 输入要统计的数字的整数
int arr[10]={0}; //用于存放0-9每个数字出现的次数 ,初始都为0个
int max = 0; // 出现最多的次数
printf("输入统计整数的个数:");
scanf("%d",&n);
printf("请输入%d个整数:",n);
// 输入的整数不能超过n
for(i=0;i<n;i++){
scanf("%d",&temp);
// 统计每个数字出现的次数
while(temp!=0){
arr[temp%10]++;
temp = temp/10;
}
}
// 遍历数组 找出数组中存放的最大值,就表示出现次数最多
for(i=0;i<10;i++){
if(max < arr[i]){
max = arr[i];
}
}
// 遍历数组,找出出现次数最多的数字
// 数组对应的索引就表示出现的数字
for(i = 0;i<10;i++){
if(arr[i] == max){
printf("出现最多的数字是:%d\n",i);
}
}
printf("出现次数:%d次",max);
return 0;
}
2、C语言--删除指定字符
2、编写程序,输入字符s和字符串 ch ,在字符s中找到所有的ch字符后删除,得到新的字符并输出。要求通过编写用函数
viod delchar(char *s,char ch),实现字符串s中的 ch 字符找到后删除的操作。
c
/*
解题熟路:定义一个s[]数组,用来存放一个字符串
然后用gets(s)函数,往s数组中输入一串字符,
然后在输入一个要删除的字符ch = getchar(),定义一个delete()函数,将s和ch传入delete(s,ch)函数中,
遍历s中存放的字符,删除所有等于ch的字符
*/
# include <stdio.h>
void delchar(char *s,char ch){
int i=0,j=0;
while(s[i]!='\0'){ // 字符没有到末尾
if(s[i]!=ch){ // 数组中的字符和待删除字符不相同
s[j] = s[i]; // 字符保存在s[j]中
j++;
}
i++;
}
s[j] = '\0'; // 添加结束标志
}
int main()
{
char ch;
char s[80];
printf("输入一串字符:");
gets(s); // 输入一串字符 可以包含空格
printf("数入待删除字符:");
ch = getchar(); // 数入一个字符
delchar(s,ch);
printf("结果输出:");
puts(s); // 输出一串字符
return 0;
}
3、C语言--年龄排序
3、建立一个联系人记录簿,包含姓名,出生日期,电话三项,其中出生日期包含年月日三项,要求内嵌套结构体实现。编写程序
输入n(小于8)个联系人的信息存入记录簿,并按年龄大小从大到小顺序输出。
c
/*
解题思路:在命令行输入联系人的相关信息,用冒泡排序将联系人按年龄从大到小排序
先比较year,year越小年龄就越大
如果year相同,则比较month,month越小年龄越大
如果year和month都相同则比较day,day越小年龄越大
直到将所有的联系人从大到小排好序
*/
# include<stdio.h>
# define N 7
// 联系人结构体
struct Person{
char name[20];
char tel[11];
struct Time{
int year;
int month;
int day;
}Time;
}Person;
// 输入联系人的基本信息
void Input(struct Person person[]){
int i,j;
struct Person t;
int year,month,day;
printf("请输入%d个联系人的信息:",N);
// 数入信息
for(i = 0;i<N;i++){
scanf("%s %s %d %d %d",&person[i].name,&person[i].tel,&person[i].Time.year,
&person[i].Time.month,&person[i].Time.day);
}
// 冒泡排序 按年龄从从大到小排
for(i = 0;i<N-1;i++){
for(j = N-1;j>i;j--){
if(person[j-1].Time.year > person[j].Time.year){
t = person[j];
person[j] = person[j-1];
person[j-1] = t;
}
if(person[j-1].Time.year == person[j].Time.year){
if(person[j-1].Time.month > person[j].Time.month){
t = person[j];
person[j] = person[j-1];
person[j-1] = t;
}
}
if(person[j-1].Time.year == person[j].Time.year){
if(person[j-1].Time.month == person[j].Time.month){
if(person[j-1].Time.day > person[j].Time.day){
t = person[j];
person[j] = person[j-1];
person[j-1] = t;
}
}
}
}
}
// 输出
printf("\n");
printf("\n");
printf("年龄从大到小排序序列是:\n");
for(i = 0;i<N;i++) {
printf("%s %s %d %d %d\n",person[i].name,person[i].tel,
person[i].Time.year,person[i].Time.month,person[i].Time.day);
}
}
int main(){
int n,i,temp;
struct Person person[N],*p = person;
Input(p);
return 0;
}
4、C语言--文件删除注解
4、给一个hello.c 文件,去掉hello.c 文件中的注释,并写入new_hello.c文件中。
c
/*
解题思路:
一个只读的方式打开一个文件fp,一个只写的方式打开文件 fp2, 然后用fgets(str,n,fp)函数,将fp中长度为n-1的字符存放在str中,
然后开始遍历str,直到str为空。在遍历期间,如果扫面到两个 //说明这个是注解,需要删除,直接添加换行符 \n 和 \0 结束标值。
如果扫描到 / * 则先 用\0 标记表示结束,不需要后面的部分,然后再找到 * / 将之间的字符删除
直到将整个文件的注解全部删除
*/
# include <stdio.h>
# include <string.h>
int main(){
FILE *fp,*fp1;
char str[9999]="",str1[9999]="";
int i,j,no=0;
fp=fopen("201819测试.cpp","r"); //要打开的源文件
fp1=fopen("new.cpp","w"); //另存为一个文件中
while(fgets(str,9999,fp)!=NULL){
for(i=0;i<9999;i++){
if(str[i]=='/'&&str[i-1]=='/'){
str[i-1]='\n';
str[i]='\0';
}
if(str[i]=='*'&&str[i-1]=='/'){
str[i-1]='\0';
no=1;
fputs(str,fp1);
}
if(str[i]=='/'&&str[i-1]=='*'){
for(j=0;j<9998-i;j++){
str[j]=str[i+j+1];
}
str[j]='\0';
no=0;
}
}
if(no==0){
fputs(str,fp1);
}
}
fclose(fp1); // 关闭文件
fclose(fp);
return 0;
}