内容正文:
《C语言程序设计》
期末复习卷(八)
时间:90分钟 总分:100分
班级 姓名 学号 成绩
一.程序设计题(本大题共10小题,每小题10分,共100分)
1.编写程序统计区间[m, n]内所有各位数字之积大于各位数字之和的数的个数(m和n均大于0,且n大于m)
#include<stdio.h>
int main(){
int m,n,i,count=0;
scanf("%d%d",&m,&n);
/*******space*******/
for(i=m;i<=n;i++){
int num=i,sum=0,product=1,digit;
while(num>0){
digit=num%10;
sum+=digit;
product*=digit;
num/=10;
}
if(product>sum){
count++;
}
}
/*******space*******/
printf("%d
",count);
return 0;
}
2.输入由若干个单词组成的字符串,使用指针统计该字符串中单词的个数(单词之间以空格分隔)
#include<stdio.h>
int count_words(char *s){
/*******space*******/
int count = 0;
int in_word = 0;
while(*s!='\0'){
if(*s!=' '&&in_word==0){
in_word=1;
count++;
}
else if(*s==' '){
in_word = 0;
}
s++;
}
return count;
/*******space*******/
}
int main(){
char str[100];
gets(str);
printf("%d
", count_words(str));
return 0;
}
3.编写程序输入一个整数n,将其各位数字重组成最大的整数输出(n大于0)
#include<stdio.h>
int main(){
int n;
/*******space*******/
scanf("%d
",&n);
int digits[10]={0};
int temp=n;
if(n<0) n=-n;
while(temp!=0){
digits[temp % 10]++;
temp /= 10;
}
int result=0;
for(int i=9;i>=0;i--){
while(digits[i]>0) {
result=result*10+i;
digits[i]--;
}
}
n = result;
/*******space*******/
printf("%d
", n);
return 0;
}
4.编写程序,输入一个整数列表,将所有奇数放在前面,偶数放在后面,各自保持原顺序,并输出结果
#include<stdio.h>
int main(){
int nums[100],result[100],n,i,odd_index=0,even_index;
scanf("%d", &n);
for(i = 0; i < n; i++)
scanf("%d",&nums[i]);
/*******space*******/
even_index=n-1;
for(i=n-1;i>=0;i--){
if(nums[i]%2==0){
result[even_index--]=nums[i];
}
}
for(i=0;i<n;i++){
if(nums[i]%2==1){
result[odd_index++] = nums[i];
}
}
/*******space*******/
for(i = 0; i < n; i++)
printf("%d ", result[i]);
return 0;
}
5.输入一个句子(单词间用空格隔开),找出出现次数最多的单词(忽略大小写,假设唯一)。
#include<stdio.h>
#include<string.h>
#include<ctype.h>
void main(){
char a[100],count=0;
int i,flag=1;
/*******space*******/
char words[50][50]={0};
int counts[50]={0};
int word_count=0;
int j=0,k=0;
gets(a);
for(i=0;a[i]!='\0';i++){
if(a[i] != ' '){
words[j][k++] = tolower(a[i]);
}
else if(k>0){
words[j][k]='\0';
j++;
k=0;
}
}
if(k>0){
words[j][k]='\0';
j++;
}
word_count=j;
for(i=0;i<word_count;i++){
counts[i]=1;
for(j=i+1;j<word_count;j++){
if(strcmp(words[i], words[j]) == 0){
counts[i]++;
strcpy(words[j], "");
}
}
}
int max_idx=0;
for(i=0; i<word_count;i++){
if(counts[i]>counts[max_idx]){
max_idx=i;
}
}
printf("%s %d",words[max_idx],counts[max_idx]);
/*******space*******/
}
6.小球从100米落下,每次弹起高度为上次的2/3,求第n次落地时经过的总路程。
#include<stdio.h>
int main(){
int n, i;
double height=100,
total=100;
scanf("%d", &n);
/*******space*******/
if(n==1){
total=100;
}
else{
for(i=2;i<=n;i++){
height=height * 2.0 / 3.0;
total+=height * 2;
}
}
/*******space*******/
printf("%.2f
", total);
return 0;
}
7.输入一个整数数组(可能有负数),求连续子数组的最大和。例如输入数组长度为8,输入的8个整数为-2 1 -3 4 -1 2 1 -5。输出结果为6
#include<stdio.h>
int main(){
int a[100],n,i,cur_sum=0,max_sum;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
/*******space*******/
max_sum=a[0];
cur_sum=0;
for(i=0;i<n;i++){
cur_sum+=a[i];
if(cur_sum>max_sum){
max_sum=cur_sum;
}
if(cur_sum<0){
cur_sum=0;
}
}
/*******space*******/
printf("%d
", max_sum);
return 0;
}
8.输入一个字符串,找出第一个不重复的字符(只出现一次),输出该字符;如果没有,输出-1
#include<stdio.h>
#include<string.h>
int main(){
char s[200];
int freq[256] = {0},i;
gets(s);
/*******space*******/
for(i=0;s[i]!='\0';i++){
freq[(int)s[i]]++;
}
for(i=0;s[i]!= '\0';i++){
if(freq[(int)s[i]]==1){
printf("%c
", s[i]);
return 0;
}
}
printf("-1
");
/*******space*******/
return 0;
}
9.输入一个字符串(只含大小写字母,不区分大小写),统计每个字母出现次数,按次数从高到低输出字母和次数(次数相同按字母顺序)
例如输入:banana, 输出结果: a:3, n:2, b:1
#include<stdio.h>
#include<ctype.h>
#include<string.h>
struct Freq{
char ch;
int count;
};
int main(){
char s[200];
int count[26]={0},i,j;
struct Freq freq[26],temp;
gets(s);
/*******space*******/
for(i=0;s[i]!='\0';i++){
if(isalpha(s[i])){
count[tolower(s[i]) - 'a']++;
}
}
int idx =0;
for(i =0;i<26;i++){
if(count[i]>0){
freq[idx].ch='a'+i;
freq[idx].count=count[i];
idx++;
}
}
for(i=0;i<idx-1;i++){
for(j=0;j<idx-i-1;j++){
if(freq[j].count<freq[j+1].count||(freq[j].count==freq[j+1].count&&freq[j].ch>freq[j+1].ch)){
temp = freq[j];
freq[j] = freq[j + 1];
freq[j + 1] = temp;
}
}
}
for(i = 0; i < idx; i++) {
printf("%c:%d", freq[i].ch, freq[i].count);
if(i < idx - 1) printf(", ");
}
/*******space*******/
return 0;
}
10.输入一个整数(可能为负数),输出各位反转后的数,末尾的0反转后去掉。例如输入-12300,输出-321
#include<stdio.h>
int main(){
int n,reversed=0,sign=1;
scanf("%d", &n);
/*******space*******/
if(n<0){
sign=-1;
n=-n;
}
while(n>0){
reversed=reversed*10+n%10;
n/=10;
}
reversed=sign*reversed;
/*******space*******/
printf("%d
", reversed);
return 0;
}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
《C语言程序设计》
期末复习卷(八)
时间:90分钟 总分:100分
班级 姓名 学号 成绩
一.程序设计题(本大题共10小题,每小题10分,共100分)
1.编写程序统计区间[m, n]内所有各位数字之积大于各位数字之和的数的个数(m和n均大于0,且n大于m)
#include<stdio.h>
int main(){
int m,n,i,count=0;
scanf("%d%d",&m,&n);
/*******space*******/
/*******space*******/
printf("%d
",count);
return 0;
}
2.输入由若干个单词组成的字符串,使用指针统计该字符串中单词的个数(单词之间以空格分隔)
#include<stdio.h>
int count_words(char *s){
/*******space*******/
/*******space*******/
}
int main(){
char str[100];
gets(str);
printf("%d
", count_words(str));
return 0;
}
3.编写程序输入一个整数n,将其各位数字重组成最大的整数输出(n大于0)
#include<stdio.h>
int main(){
int n;
/*******space*******/
/*******space*******/
printf("%d
", n);
return 0;
}
4.编写程序,输入一个整数列表,将所有奇数放在前面,偶数放在后面,各自保持原顺序,并输出结果
#include<stdio.h>
int main(){
int nums[100],result[100],n,i,odd_index=0,even_index;
scanf("%d", &n);
for(i = 0; i < n; i++)
scanf("%d",&nums[i]);
/*******space*******/
/*******space*******/
for(i = 0; i < n; i++)
printf("%d ", result[i]);
return 0;
}
5.输入一个句子(单词间用空格隔开),找出出现次数最多的单词(忽略大小写,假设唯一)。
#include<stdio.h>
#include<string.h>
#include<ctype.h>
void main(){
char a[100],count=0;
int i,flag=1;
/*******space*******/
/*******space*******/
}
6.小球从100米落下,每次弹起高度为上次的2/3,求第n次落地时经过的总路程。
#include<stdio.h>
int main(){
int n, i;
double height=100,
total=100;
scanf("%d", &n);
/*******space*******/
/*******space*******/
printf("%.2f
", total);
return 0;
}
7.输入一个整数数组(可能有负数),求连续子数组的最大和。例如输入数组长度为8,输入的8个整数为-2 1 -3 4 -1 2 1 -5。输出结果为6
#include<stdio.h>
int main(){
int a[100],n,i,cur_sum=0,max_sum;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
/*******space*******/
/*******space*******/
printf("%d
", max_sum);
return 0;
}
8.输入一个字符串,找出第一个不重复的字符(只出现一次),输出该字符;如果没有,输出-1
#include<stdio.h>
#include<string.h>
int main(){
char s[200];
int freq[256] = {0},i;
gets(s);
/*******space*******/
/*******space*******/
return 0;
}
9.输入一个字符串(只含大小写字母,不区分大小写),统计每个字母出现次数,按次数从高到低输出字母和次数(次数相同按字母顺序)
例如输入:banana, 输出结果: a:3, n:2, b:1
#include<stdio.h>
#include<ctype.h>
#include<string.h>
struct Freq{
char ch;
int count;
};
int main(){
char s[200];
int count[26]={0},i,j;
struct Freq freq[26],temp;
gets(s);
/*******space*******/
/*******space*******/
return 0;
}
10.输入一个整数(可能为负数),输出各位反转后的数,末尾的0反转后去掉。例如输入-12300,输出-321
#include<stdio.h>
int main(){
int n,reversed=0,sign=1;
scanf("%d", &n);
/*******space*******/
/*******space*******/
printf("%d
", reversed);
return 0;
}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$