1、统计各年龄段人数。N个年龄通过调用随机函数获取,编写函数把0~9岁年龄段的人数放入数组下标[0]中,把10~19岁年龄段的人数放入数组下标[1]中,以此类推,把100~120岁年龄段的人数放入数组下标[10]中。
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int a[100000];
int b[11];
int main()
{
int N;
scanf("%d",&N);
srand(time(0));
int i;
for(i=0;i<N;i++)
{
a[i]=rand()%121;
}
for(i=0;i<N;i++)
{
if(a[i]<=120&&a[i]>=100)b[10]++;
else b[a[i]/10]++;
}
for(i=0;i<11;i++)printf("%d ",b[i]);
return 0;
}
2、求素数。编写一个函数,将大于整数m且紧靠m的k个素数存入数组中,在命令行输入m和k。如输入17和5,输出19,23,29,31,37。
#include <stdio.h>
int fun(int n) //定义函数
{
int i, l;
for (i = n + 1; ; i++) //第一层循环,从给的数一个个往上推
{
for (l = 2; l < i; l++) //对每一个从第一层循环输入的数,开始从2除到i-1
{
if (i % l == 0) //如果有可以整除的
break; //就退出这个循环,返回第一个循环
} //然后i自增1,循环再次开始
if (l >= i) //当i是一个素数,第二层循环不会熔断,就进行到这里
return i; //返回这一个i的值
} //结束循环
}
int main()
{
int m;
int k;
int a[100];//新建一个数组来存放这一系列的数据
printf("请输入整数m:");
scanf("%d",&m); //输入一个数,这个数的值同时给到i和k
printf("请输入k:");
scanf("%d", &k);
a[0] = fun(m);
for (int i = 1; i <= k; i++)
{
a[i] = fun(a[i - 1]);//在k这一范围内反复迭代算出后面一个素数
}
for (int i = 0; i < k; i++)
{
printf("%3d", a[i]); //输出fun(m)的返回值
}
return 0;
}
10、编写合并整数数组的函数。数组a[M]中有m个元素(m<M),数组b[N]中有n个元素(n<N),且m+n≤M,将a、b两个数组按存放的整数升序排序并合并放入数组a中。
#include<stdio.h>
const int N=1e5,M=1e5;
int a[N],b[M];
void add(int a[],int b[],int n,int m)
{
for(int i=n,j=0;j<m;j++,i++)a[i]=b[j];
for(int i=0;i<n+m-1;i++)
{
for(int j=0;j<n+m-i-1;j++)
{
if(a[j]>a[j+1])
{
int t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)scanf("%d",&a[i]);
for(int i=0;i<m;i++)scanf("%d",&b[i]);
add(a,b,n,m);
for(int i=0;i<n+m;i++)printf("%d ",a[i]);
return 0;
}
12、 数组插入问题。生成一个10元素构成的一维数组,数组元素由用户随机输入。要求:先按照升序排列并输出。再输入一个数,按照升序的规律将其插入并输出。
#include<stdio.h>
int a[11];
void quick_sort(int a[],int l,int r)
{
if(l>=r)return ;
int i=l-1,j=r+1;
int x=a[l+r>>1];
while(i<j)
{
do i++;while(a[i]<x);
do j--;while(a[j]>x);
if(i<j)
{
int t=a[j];
a[j]=a[i];
a[i]=t;
}
}
quick_sort(a,l,j);
quick_sort(a,j+1,r);
}
int main()
{
printf("请输入十个元素:");
for(int i=0;i<10;i++)scanf("%d",&a[i]);
quick_sort(a,0,9);
for(int i=0;i<10;i++)printf("%d ",a[i]);
printf("请再输入一个元素:");
scanf("%d",&a[10]);
quick_sort(a,0,10);
for(int i=0;i<11;i++)printf("%d ",a[i]);
return 0;
}
14、链表操作。建立单向int链表,连续输入5个结点创建链表,并实现在原链表中插入数字、删除数字、查找数字的功能。
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int data;//数据部分
struct node* next;//指针部分
}Node;
typedef Node List;
//初始化链表
List* initList();
//销毁链表
void destoryList(List* list);
//插入数据
void insertData(List* list, int Data);
//删除数据
void removeData(List* list, int Data);
//查找数据
Node* findData(List* list, int Data);
//打印链表内容
void printList(List* list);
int main()
{
//初始化链表
List* list = initList();
//插入数据
for (int i = 0; i < 5; i++)
{
printf("请输入链表第%d个元素:", i+1);
int ins; scanf("%d", &ins);
insertData(list, ins);
}
loop:
printf("链表内容为:");
printList(list);
printf("请选择你想要进行的功能\n1.插入\n2.查找\n3.删除\n4.退出\n请输入你的选择(1-4):");
int ipt=0; scanf("%d", &ipt); //输入字符会出错
switch (ipt) //建立一个switch选择结构来选择功能
{
case 1:goto Ins;
break;
case 2:goto Find;
break;
case 3:goto Del;
break;
case 4:goto End;
break;
default:printf("输入错误!");
system("pause"); //显示错误信息
system("cls"); //清屏
goto loop;
break;
}
Ins://插入数据
int k; printf("请输入要在结尾插入的数:");
scanf("%d", &k);
insertData(list, k);
printf("插入后的链表内容为:");
printList(list);
system("pause");
system("cls");
goto loop;
Find://查找数据
int n; printf("请输入要查找的位置");
scanf("%d", &n);
printf("%d的地址:%p\n", n,findData(list, n));
system("pause");
system("cls");
goto loop;
Del://删除数据
int m; printf("请输入要删除的位置:");
scanf("%d", &m);
removeData(list, m);
printf("删除后的链表内容为:");
printList(list);
system("pause");
system("cls");
goto loop;
End:
//销毁链表
destoryList(list);
return 0;
}
//初始链表
List* initList()
{
List* list = (List*)malloc(sizeof(Node));
list->data = 0;
list->next = NULL;
return list;
}
//销毁链表
void destoryList(List* list)
{
Node* pHead = list;//用来记录初始化的链表头结点
while (list != NULL)
{
//先移到下一个结点
list = list->next;
//释放头结点
free(pHead);
//记录新的头结点
pHead = list;
}
}
//插入数据(一般都在表尾插入数据)
void insertData(List* list, int Data)
{
//先分配一个新的结点
Node* pNode = (Node*)malloc(sizeof(Node));
pNode->data = Data;
pNode->next = NULL;
//将新结点链接到到尾部
while (list->next != NULL)
{
list = list->next;//先找到链表的尾结点
}
list->next = pNode;//将新结点链接到尾结点
}
//删除数据(头结点不可删除,不然后面的结点就无法再进行遍历了)
void removeData(List* list, int Data)
{
//1.查找结点,并记录上一个结点
//Node *pPre = NULL;
Node* pPre = list;
list = list->next;//跳过头结点
while (list != NULL)
{
if (list->data == Data)
{
break;
}
pPre = list;
list = list->next;
}
if (list != NULL)
{
//2.找到后,将上一个结点和当前结点的下一个结点链接
pPre->next = list->next;
//3.删除当前结点
free(list);
}
}
//查找数据
Node* findData(List* list, int Data)
{
while (list != NULL)
{
if (list->data == Data)
{
break;
}
list = list->next;
}
return list;
}
//打印链表内容
void printList(List* list)
{
list = list->next;//跳过头结点
while (list != NULL)
{
printf("%5d", list->data);
list = list->next;
}
printf("\n");
}
16、统计频率。读入一个文件,文件中包含字母,数字,空格,标点符号等。请统计文件中的字母,数字,空格和其他符号的数目,在屏幕上显示。
#include<stdio.h>
int a[4];
int main()
{
FILE *fp;
fp=fopen("D:\\a.txt","r");
char s[100];
while( fgets (s, 100 , fp)!= NULL )
fclose(fp);
for(int j=0;s[j];j++)
{
int i=s[j]-'\0';
if(i==32)a[2]++;
else if((i>=65&&i<=90)||(i>=97&&i<=122))a[0]++;
else if(i>=48&&i<=57)a[1]++;
else a[3]++;
}
printf("字母个数:%d\n",a[0]);
printf("数字个数:%d\n",a[1]);
printf("空格个数:%d\n",a[2]);
printf("其他符号个数:%d\n",a[3]);
return 0;
}
17、 字符串次数问题。编写函数统计给定字符串在文中出现的次数,如文件中内容为asd asasdfg asd as zx67 asd mklo,给定字符串为as,则函数返回6。文件名和给定字符串由命令行输入得到。
#include <stdio.h>
#include <string.h>
int check(char* a, char* b) {
int count = 0;
for (int i = 0; i < strlen(a); i++) //第一层循环遍历a数组
{
for (int j = 0; j < strlen(b); j++) //第二层循环遍历b数组
{
if (a[i] == b[j]) //在a中找到和b第一个字符一样的位置
{
do
{
count++; //计数器+1
i++, j++;
} while (a[i] != b[j]);//验证a[i+1]和b[i+1]是否相等,若相等继续循环,不相等退出循环
}
}
}
return count;
}
int main() {
char sourceName[100] = { '\0' };//从命令行输入源文件名
printf("输入源文件文件名:");
scanf("%s", sourceName);
char a[100] = { '\0' };//安全地初始化字符数组
char b[] = { '\0' };
printf("请输入要查找的字符串:");
scanf("%s", &b);
FILE* fp1; //建立一个file类型的指针
fp1 = fopen(sourceName, "r"); //以只读方式打开源文件
fscanf(fp1, "%[^\n]%*c", a); //将文件中的字符串读取到数组中, "%[^\n]%*c" 可以让scanf读取空格
fclose(fp1); //关闭外部文件
printf("%d", check(a,b)); //输出计数器中的值
return 0;
}
18、统计字母个数。读取文件中的字符串,统计从“a”到“z”26个字母各自出现的次数,并将结果放入数组中。如文件中有字符串abcdefgabcdeabc,输出33322110000000000000000000。
#include<stdio.h>
int a[26];
int i;
int main()
{
FILE *file;
file=fopen("D:\\a.txt","r");
char ch[100000],c;
fscanf(file,"%s",ch);
for(int i=0;ch[i];i++)a[ch[i]-'a']++;
for(int i=0;i<26;i++)printf("%d",a[i]);
fclose(file);
return 0;
}
22、 删除字符。从源文件中读取字符,编写函数将指定字符从文件中删除,结果写入目标文件中,文件中的字母不区分大小写。源文件文件名、目标文件文件名、指定字符均从命令行得到。如源文件中内容为source.txt,指定字符为n,目标文件中内容为output.txt。注意需要用命令行输入参数。
#include <stdio.h>
#include <string.h>
void delchar(char* str, char ch) //删去指定字符
{
char* p = str;
while (*str) //遍历字符串
{
if (*str != ch) //跳过 指定字符
*p++ = *str;
str++;
}
*p = '\0';
}
char trans(char ch) //大小写转换
{
if (ch >= 'a' && ch <= 'z')//如果是小写换成大写
ch = ch - 32;
else if (ch >= 'A' && ch <= 'Z')//如果是大写换成小写
ch = ch + 32;
return ch;
}
int main() {
char sourceName[100] = { '\0' };//从命令行输入源文件名 ,初始化为换行符
printf("输入源文件文件名:");
scanf("%s", sourceName);
char outputName[100] = { '\0' }; //从命令行 输入目标文件名 ,初始化为换行符
printf("输入目标文件文件名:");
scanf("%s", outputName);
char a[100] = { '\0' };//初始化为换行符 以免strlen()计算长度错误
char b;
printf("请输入指定字符:");//从命令行输入指定字符
scanf("%s", &b);
FILE* fp1; //建立两个file类型的指针
FILE* fp2;
fp1 = fopen(sourceName, "r"); //以只读方式打开源文件
fscanf(fp1, "%[^\n]%*c", a); //将文件中的字符串读取到数组中, "%[^\n]%*c" 可以让scanf读取空格
fclose(fp1); //关闭外部文件
delchar(a, b); //删去对应输入字符
delchar(a, trans(b));//删去对应字符的大/小写转置
fp2 = fopen(outputName, "wt+");//新建并以读写方式打开目标文件
for (int i = 0; i < strlen(a); i++)//将字符数组写入文件中
{
fprintf(fp2, "%c", *(a + i));
}
fclose(fp2);//关闭外部文件
return 0;
24、哥德巴赫猜想验证。验证1000以内的正偶数都能够分解为两个素数之和
#include<stdio.h>
int a[1000];
int idx;
int main()
{
for (int i = 2; i <= 1000; i++)
{
int t = 1;
for (int j = 2; j <= i / 2; j++)
{
if (i % j == 0)
{
t = 0; break;
}
}
if (t)a[++idx] = i;
}
a[0]=1;
int b = 1,l,r;
for (int i = 2; i <= 1000; i += 2)
{
for(l=0,r=idx;l<=idx&&r>=0;l++)
{
while(a[l]+a[r]>i)r--;
if(a[l]+a[r]==i)break;
}
if(l>r)
{
b=0;
break;
}
}
if (b)printf("1000以内的正偶数都能够分解为两个素数之和");
else printf("错误");
return 0;
}
25、分数比较问题。比较两个分数的大小。
#include<stdio.h>
int main()
{
int a,b,c,d;
printf("请按照a/b的格式输入两个分式\n");
scanf("%d/%d",&a,&b);
scanf("%d/%d",&c,&d);
int m=a*d;
int n=b*c;
if(m>n)printf("%d/%d>%d/%d",a,b,c,d);
else if (m<n)printf("%d/%d<%d/%d",a,b,c,d);
else printf("%d/%d=%d/%d",a,b,c,d);
return 0;
}
笔者写下这篇文章以帮助同学们完成程序设计实习题目,由于时间关系来不及写注释。
另在此感谢于学长提供的部分题目的题解。
希望各位同学能够完美地完成此次实习。
如文章中的题解有错误或者有不懂得地方,可以联系qq:3357607649。
感谢各位同学的支持。
我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0
我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack
我想用ruby编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序
我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此
我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r
刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr
我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数
我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R