第八章编程上机题(详细解析)

编程题:

希望大家copy之前还是自己先想一想哈

随机构造50个句子
使用4个名为article(冠词),noun(名词),verb(动词),preposition(介词)的指向字符串的指针数组。
数组article包含“the”,“a”,“one”,“some”和“any”;数组noun包含“boy”,“girl”,“dog”,“town”和“car”;数组verb包含“drove”,“jumped”,“ran”,“walked”和“skipped”;数组preposition包含“to”,“from”,“over”,“under”和“on“。
程序按如下顺序、随机地从每个数组中挑选一个单词来构造句子:article,noun,verb,preposition,article和noun。每个句子的第一个字母大写,句子以句号结束。

在开始之前,我们对于字母转为大写做一个解析
**方法一:(原来的方法) **
但是不推荐,毕竟咋都学用于字符串和字符处理的标准库函数

final_sentence[0] -= 32//因为我们知道大小写字符之间ASCII码值插值为32

方法二:(调用ctype头文件里面的toupper函数)

final_sentence[0] = toupper(final_sentence[0]); //实现将首字母转换为大写
  • OK,既然都说到这里了我们顺便提一下ctype里面的一些好用的东西

图片来源菜鸟教程

来源菜鸟教程
来源菜鸟教程
曾经有一周我们老师曾给我们说过这样一道题目

==敲黑板重点 ==

输入一行字符,分别统计出其中英文字母、数字、空格和其他字符的个数。

  • 曾经我们是这样做滴

或者也可以把里面的字符改为其ASCII码

#include<stdio.h>
int main()
{
    int is_letter = 0,is_number = 0,is_blank = 0,others = 0,c;        //分别为字母、数字、空格、其他
    while((c = getchar()) != '\n'){
        if(c >= 'A' && c<='Z' || c >= 'a' && c <= 'z')    //判断是否为字母
            is_letter++;
        else if(c >= '0' && c <= '9')                     //判断是都为数字
            is_number++;
        else if(c == ' ')                                 //判断是否为空格
            is_blank++;
        else                                              //其他
            others++;
    }
    printf("%d %d %d %d\n",is_letter,is_number,is_blank,others);
    return 0;
}

现在使用ctype中的库函数实现这个程序

#include <stdio.h>
#include <ctype.h>
int main()
{
    int is_letter = 0,is_number = 0,is_blank = 0,others = 0,c;        //分别为字母、数字、空格、其他
    while((c = getchar()) != '\n'){
        if(isalpha(c))              //判断是否为字母
            is_letter++;
        else if(isdigit(c))         //判断是都为数字
            is_number++;
        else if(c == ' ')           //判断是否为空格
            is_blank++;
        else                        //其他
            others++;
    }
    printf("%d %d %d %d\n",letter,number,blank,others);
    return 0;
}

是不是一下子就简单了许多

okk,现在附上本节课课后作业实现代码!!!

  • 当然在这之前我还想给大家分享一下C 语言中的字符串指针
曾经我们是使用字符数组去实现这样一个过程
char str[] = "豪哥哥最帅啦"; 

  • 然后一步一步加深
***我们也可以用指针的方式来输出字符串***
 char str[] = "豪哥哥最帅啦"; 
 char *pstr = str; 

最后就是我们的主题啦

***(用一个指针指向字符串)***
char *str = "豪哥哥最帅啦"; 
或者像下面这样
char *str; 
str = "豪哥哥最帅啦"; 
okk是不是想起来一些什么了呢!!!
(看我一眼)字符串中的所有字符在内存中是连续排列的,str 指向的是字符串的第 0 个字符;

OKK,实现代码来啦!!!!!!

#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<time.h>
int suiji(int *,int *,int *,int *);				//这个函数实现随机数的生成
int main()
{
	const char* artical[5] ={"the","a","one","some","any"};
	const char* noun[5]={"boy","girl","dog","town","car"};
	const char* verb[5]={"drove","jumped","ran","walked","skipped"};
	const char* preposition[5]={"to","from","over","under","on"};
	char final_sentence[50];
	int w,z,s,q;
	int i;
	srand(time(NULL));
	for(i=0;i<50;i++)
	{
		suiji(&w,&z,&s,&q);

		strcpy(final_sentence,artical[w]);
		strcat(final_sentence," ");
		strcat(final_sentence,noun[z]);
		strcat(final_sentence," ");
		strcat(final_sentence,verb[s]);
		strcat(final_sentence," ");
		strcat(final_sentence,preposition[q]);
		strcat(final_sentence," ");

		a = rand() % 5;
		n = rand() % 5;
		strcat(final_sentence,artical[w]);
		strcat(final_sentence," ");
		strcat(final_sentence,noun[z]);
		strcat(final_sentence,".");
		final_sentence[0] = toupper(final_sentence[0]);
		puts(final_sentence);

	
	}

}

int suiji(int *w,int *z,int *s,int *q)
{
		*w = rand() % 5;
		*z = rand() % 5;
		*s = rand() % 5;
		*q = rand() % 5;
}



发布了21 篇原创文章 · 获赞 31 · 访问量 2508

猜你喜欢

转载自blog.csdn.net/solitudi/article/details/103132618